From 35837fd8d6df7d3fe4797fbc478fb2ccd0581bcb Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 17 Jul 2019 10:43:12 +0200 Subject: shack/powerraw: init --- krebs/2configs/shack/powerraw.nix | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 krebs/2configs/shack/powerraw.nix (limited to 'krebs/2configs/shack/powerraw.nix') diff --git a/krebs/2configs/shack/powerraw.nix b/krebs/2configs/shack/powerraw.nix new file mode 100644 index 00000000..9b957b78 --- /dev/null +++ b/krebs/2configs/shack/powerraw.nix @@ -0,0 +1,41 @@ +{ config, lib, pkgs, ... }: +# Replacement for powerraw.shack pollin box +# Requires usb-serial device on host +# Requires mqtt available at mqtt.shack +# Requires hostname powerraw.shack +let + pkg = pkgs.python3.pkgs.callPackage ( + pkgs.fetchgit { + url = "https://git.shackspace.de/rz/powermeter.git"; + rev = "96609f0d632e0732afa768ddd7b3f8841ca37c1b"; + sha256 = "sha256:0wfpm3ik5r081qv2crmpjwylgg2v8ximq347qh0fzq1rwv0dqbnn"; + }) {}; +in { + # receive response from light.shack / standby.shack + networking.firewall.allowedUDPPorts = [ 11111 ]; + users.users.powermeter = { + extraGroups = [ "dialout" ]; + }; + + systemd.services.powermeter-serial2mqtt = { + description = "powerraw Serial -> mqtt"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + User = "powermeter"; + ExecStart = "${pkg}/bin/powermeter-serial2mqtt"; + Restart = "always"; + PrivateTmp = true; + }; + }; + + systemd.services.powermeter-mqtt2socket = { + description = "powerraw mqtt -> raw socket 11111"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + User = "powermeter"; + ExecStart = "${pkg}/bin/powermeter-mqtt2socket"; + Restart = "always"; + PrivateTmp = true; + }; + }; +} -- cgit v1.2.3 From a45066902735f72a945f7b2d8c76c6d35e4a69bd Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 17 Jul 2019 13:55:33 +0200 Subject: shack/powerraw: send stats to influx as well --- krebs/2configs/shack/powerraw.nix | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'krebs/2configs/shack/powerraw.nix') diff --git a/krebs/2configs/shack/powerraw.nix b/krebs/2configs/shack/powerraw.nix index 9b957b78..af3f129c 100644 --- a/krebs/2configs/shack/powerraw.nix +++ b/krebs/2configs/shack/powerraw.nix @@ -4,6 +4,7 @@ # Requires mqtt available at mqtt.shack # Requires hostname powerraw.shack let + influx-url = "http://influx.shack:8086"; pkg = pkgs.python3.pkgs.callPackage ( pkgs.fetchgit { url = "https://git.shackspace.de/rz/powermeter.git"; @@ -13,9 +14,7 @@ let in { # receive response from light.shack / standby.shack networking.firewall.allowedUDPPorts = [ 11111 ]; - users.users.powermeter = { - extraGroups = [ "dialout" ]; - }; + users.users.powermeter.extraGroups = [ "dialout" ]; systemd.services.powermeter-serial2mqtt = { description = "powerraw Serial -> mqtt"; @@ -38,4 +37,36 @@ in { PrivateTmp = true; }; }; + + services.telegraf = { + enable = true; + extraConfig = { + agent.debug = false; + outputs = { + influxdb = [{ + urls = [ influx-url ]; + database = "telegraf"; + }]; + }; + }; + }; + + services.telegraf.extraConfig.inputs.mqtt_consumer = let + genTopic = name: topic: tags: { + servers = [ "tcp://mqtt.shack:1883" ]; + qos = 0; + connection_timeout = "30s"; + topics = [ topic ]; + inherit tags; + persistent_session = false; + name_override = name; + data_format = "value"; + data_type = "float"; + }; + sensor = "total"; + types = [ "Voltage" "Current" "Power" ]; + phases = [ 1 2 3 ]; + in + [ (genTopic "Power consumed" "/power/${sensor}/consumed" { inherit sensor; }) ] ++ + (lib.flatten (map (type: (map (phase: (genTopic "Power" "/power/${sensor}/L${toString phase}/${type}" { inherit sensor phase type; }) ) phases)) types)); } -- cgit v1.2.3