diff --git a/machines/fuuko/configuration.nix b/machines/fuuko/configuration.nix index 3402be5..0b0d78f 100644 --- a/machines/fuuko/configuration.nix +++ b/machines/fuuko/configuration.nix @@ -8,6 +8,7 @@ ./services/media-backup.nix ./services/media.nix ./services/torrent.nix + ./services/co2_exporter.nix ]; sbruder = { diff --git a/machines/fuuko/services/co2_exporter.nix b/machines/fuuko/services/co2_exporter.nix new file mode 100644 index 0000000..e0a4e51 --- /dev/null +++ b/machines/fuuko/services/co2_exporter.nix @@ -0,0 +1,8 @@ +{ config, ... }: + +{ + services.co2_exporter = { + enable = true; + listenAddress = "${config.sbruder.wireguard.home.address}:9672"; # uses port numer of unrelated co2 exporter to avoid 8080 + }; +} diff --git a/machines/renge/services/prometheus.nix b/machines/renge/services/prometheus.nix index d3479c4..9a36bde 100644 --- a/machines/renge/services/prometheus.nix +++ b/machines/renge/services/prometheus.nix @@ -98,6 +98,10 @@ in job_name = "hcloud"; static_configs = mkStaticTarget config.services.hcloud_exporter.listenAddress; } + { + job_name = "co2"; + static_configs = mkStaticTarget "fuuko.vpn.sbruder.de:9672"; + } ]; rules = diff --git a/modules/udev.nix b/modules/udev.nix index c57ac10..36e8a14 100644 --- a/modules/udev.nix +++ b/modules/udev.nix @@ -15,6 +15,9 @@ # TI-84+ SE SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="e008", MODE="0660", GROUP="users" + + # TFA AIRCO2NTROL COACH (Holtek Semiconductor, Inc. USB-zyTemp) + SUBSYSTEMS=="usb", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", MODE="0644" ''; boot.kernelModules = [ "uinput" ]; diff --git a/pkgs/co2_exporter/default.nix b/pkgs/co2_exporter/default.nix new file mode 100644 index 0000000..8ae215b --- /dev/null +++ b/pkgs/co2_exporter/default.nix @@ -0,0 +1,24 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "co2_exporter"; + version = "unstable-2022-11-03"; + + src = fetchFromGitHub { + owner = "sbruder"; # fork of am3o’s original version + repo = pname; + rev = "49ee376d257c0d92dcb819de6d67bb16d64b0339"; + sha256 = "sha256-GJyIS6G0egSfk6LI38VqXg+E+WWQqJRmcvUU9Nk5MSo="; + }; + + subPackages = [ "." ]; + + vendorSha256 = "sha256-CMo6FBzw0/OMKEX12oNqhbF/0dRRFR6W3VRp+EU6Q68="; + + oCheck = false; # no tests + + meta = with lib; { + license = licenses.mit; + maintainer = with mainatiners; [ sbruder ]; + }; +} diff --git a/pkgs/co2_exporter/module.nix b/pkgs/co2_exporter/module.nix new file mode 100644 index 0000000..a01312b --- /dev/null +++ b/pkgs/co2_exporter/module.nix @@ -0,0 +1,45 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.co2_exporter; +in +{ + options.services.co2_exporter = { + enable = lib.mkEnableOption "co2 exporter"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.co2_exporter; + description = "The package to use for the exporter."; + }; + device = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = "The path to the co2 monitor device."; + }; + listenAddress = lib.mkOption { + type = lib.types.str; + default = ":8080"; + description = "The address to listen on"; + example = "127.0.0.1:8080"; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.services.co2_exporter = { + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + environment = { + CO2MONITOR_ADDRESS = cfg.listenAddress; + } // (lib.optionalAttrs (!isNull cfg.device) { + CO2MONITOR_DEVICE = cfg.device; + }); + serviceConfig = { + ExecStart = "${cfg.package}/bin/co2_exporter"; + Restart = "always"; + + # systemd-analyze --no-pager security co2_exporter.service + DynamicUser = true; + # FIXME + }; + }; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 5073cda..d6f2bab 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -5,6 +5,8 @@ in { bwrap-helper = callPackage ./bwrap-helper { }; + co2_exporter = callPackage ./co2_exporter { }; + osu-lazer = callPackage ./osu-lazer { inherit (prev) osu-lazer; }; osu-lazer-sandbox = callPackage ./osu-lazer-sandbox { }; diff --git a/pkgs/modules.nix b/pkgs/modules.nix index eb93ec3..f1c0eca 100644 --- a/pkgs/modules.nix +++ b/pkgs/modules.nix @@ -3,5 +3,6 @@ { imports = [ ./wordclock-dimmer/module.nix + ./co2_exporter/module.nix ]; }