From fce2c4275caf7df064fb13a4280291a9aefaef1f Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 6 Sep 2019 01:07:20 +0200 Subject: shack/glados: init shackopen and auto watering --- krebs/2configs/shack/glados/default.nix | 12 +++-- krebs/2configs/shack/glados/multi/shackopen.nix | 23 +++++++++ krebs/2configs/shack/glados/multi/wasser.nix | 65 +++++++++++++++++++++++++ krebs/2configs/shack/glados/sensors/power.nix | 2 + 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 krebs/2configs/shack/glados/multi/shackopen.nix create mode 100644 krebs/2configs/shack/glados/multi/wasser.nix diff --git a/krebs/2configs/shack/glados/default.nix b/krebs/2configs/shack/glados/default.nix index a984536b..54e7aef5 100644 --- a/krebs/2configs/shack/glados/default.nix +++ b/krebs/2configs/shack/glados/default.nix @@ -1,5 +1,7 @@ { config, pkgs, lib, ... }: let + shackopen = import ./multi/shackopen.nix; + wasser = import ./multi/wasser.nix; in { services.nginx.virtualHosts."hass.shack".locations."/" = { proxyPass = "http://localhost:8123"; @@ -81,17 +83,21 @@ in { retain = true; }; }; - switch = []; + switch = wasser.switch; light = []; media_player = [ { platform = "mpd"; host = "lounge.mpd.shack"; } ]; + sensor = [{ platform = "version"; }] ++ (import ./sensors/hass.nix) - ++ (import ./sensors/power.nix); + ++ (import ./sensors/power.nix) + ++ shackopen.sensor; + + binary_sensor = shackopen.binary_sensor; camera = []; @@ -123,7 +129,7 @@ in { recorder = {}; sun = {}; - automation = []; + automation = wasser.automation; device_tracker = []; }; }; diff --git a/krebs/2configs/shack/glados/multi/shackopen.nix b/krebs/2configs/shack/glados/multi/shackopen.nix new file mode 100644 index 00000000..354405d0 --- /dev/null +++ b/krebs/2configs/shack/glados/multi/shackopen.nix @@ -0,0 +1,23 @@ +{ + binary_sensor = [ + { platform = "mqtt"; + name = "Portal Lock"; + device_class = "door"; + state_topic = "portal/gateway/status"; + availability_topic = "portal/gateway/lwt"; + payload_on = "open"; + payload_off = "closed"; + payload_available = "online"; + payload_not_available = "offline"; + } + ]; + sensor = [ + { platform = "mqtt"; + name = "Keyholder"; + state_topic = "portal/gateway/keyholder"; + availability_topic = "portal/gateway/lwt"; + payload_available = "online"; + payload_not_available = "offline"; + } + ]; +} diff --git a/krebs/2configs/shack/glados/multi/wasser.nix b/krebs/2configs/shack/glados/multi/wasser.nix new file mode 100644 index 00000000..a2c80851 --- /dev/null +++ b/krebs/2configs/shack/glados/multi/wasser.nix @@ -0,0 +1,65 @@ +let + tasmota_plug = name: topic: + { platform = "mqtt"; + inherit name; + state_topic = "sonoff/stat/${topic}/POWER1"; + command_topic = "sonoff/cmnd/${topic}/POWER1"; + availability_topic = "sonoff/tele/${topic}/LWT"; + payload_on= "ON"; + payload_off= "OFF"; + payload_available= "Online"; + payload_not_available= "Offline"; + retain = false; + qos = 1; + }; +in +{ + switch = [ + (tasmota_plug "Wasser" "plug") + ]; + automation = + [ + { alias = "Water the plant for 10 seconds"; + trigger = [ + { # trigger at 20:00 no matter what + # TODO: retry or run only if switch.wasser is available + platform = "time"; + at = "20:00:00"; + } + ]; + action = + [ + { + service = "homeassistant.turn_on"; + entity_id = [ + "switch.wasser" + ]; + } + { delay.seconds = 10; } + { + service = "homeassistant.turn_off"; + entity_id = [ + "switch.wasser" + ]; + } + ]; + } + { alias = "Always turn off water after 15 seconds"; + trigger = [ + { + platform = "state"; + entity_id = "switch.wasser"; + to = "on"; + for.seconds = 15; + } + ]; + action = + [ + { + service = "homeassistant.turn_off"; + entity_id = [ "switch.wasser" ]; + } + ]; + } + ]; +} diff --git a/krebs/2configs/shack/glados/sensors/power.nix b/krebs/2configs/shack/glados/sensors/power.nix index 940888c7..1aa250a1 100644 --- a/krebs/2configs/shack/glados/sensors/power.nix +++ b/krebs/2configs/shack/glados/sensors/power.nix @@ -2,6 +2,7 @@ let power_x = name: phase: { platform = "mqtt"; name = "${phase} ${name}"; + # device_class = "power"; state_topic = "/power/total/${phase}/${name}"; availability_topic = "/power/lwt"; payload_available = "Online"; @@ -10,6 +11,7 @@ let power_consumed = { platform = "mqtt"; name = "Power Consumed"; + #device_class = "power"; state_topic = "/power/total/consumed"; availability_topic = "/power/lwt"; payload_available = "Online"; -- cgit v1.2.3