diff options
-rw-r--r-- | krebs/2configs/shack/glados/default.nix | 7 | ||||
-rw-r--r-- | krebs/2configs/shack/glados/lib/default.nix | 73 | ||||
-rw-r--r-- | krebs/2configs/shack/glados/multi/schlechte_luft.nix | 87 | ||||
-rw-r--r-- | krebs/2configs/shack/glados/multi/wasser.nix | 2 | ||||
-rw-r--r-- | krebs/2configs/shack/glados/sensors/hass.nix | 4 |
5 files changed, 150 insertions, 23 deletions
diff --git a/krebs/2configs/shack/glados/default.nix b/krebs/2configs/shack/glados/default.nix index 2c9a01af3..59b636697 100644 --- a/krebs/2configs/shack/glados/default.nix +++ b/krebs/2configs/shack/glados/default.nix @@ -90,7 +90,7 @@ in { }; }; switch = wasser.switch; - light = []; + light = badair.light; media_player = [ { platform = "mpd"; host = "lounge.mpd.shack"; @@ -100,7 +100,8 @@ in { sensor = (import ./sensors/hass.nix) ++ (import ./sensors/power.nix) - ++ shackopen.sensor; + ++ shackopen.sensor + ++ badair.sensor; binary_sensor = shackopen.binary_sensor; @@ -127,7 +128,7 @@ in { #recorder = {}; sun = {}; - automation = wasser.automation; + automation = wasser.automation ++ badair.automation; device_tracker = []; }; }; diff --git a/krebs/2configs/shack/glados/lib/default.nix b/krebs/2configs/shack/glados/lib/default.nix index debe8e5c2..19c657e64 100644 --- a/krebs/2configs/shack/glados/lib/default.nix +++ b/krebs/2configs/shack/glados/lib/default.nix @@ -1,34 +1,95 @@ let - lib = import <nixpkgs/lib>; prefix = "glados"; in { esphome = { - temp = name: + temp = {name, topic ? "temperature" }: { platform = "mqtt"; name = "${name} Temperature"; device_class = "temperature"; - state_topic = "${prefix}/${name}/sensor/temperature/state"; + unit_of_measurement = "°C"; + icon = "mdi:thermometer"; + state_topic = "${prefix}/${name}/sensor/${topic}/state"; availability_topic = "${prefix}/${name}/status"; payload_available = "online"; payload_not_available = "offline"; }; - hum = name: + hum = {name, topic ? "humidity" }: { platform = "mqtt"; + unit_of_measurement = "%"; + icon = "mdi:water-percent"; device_class = "humidity"; name = "${name} Humidity"; - state_topic = "${prefix}/${name}/sensor/humidity/state"; + state_topic = "${prefix}/${name}/sensor/${topic}/state"; availability_topic = "${prefix}/${name}/status"; payload_available = "online"; payload_not_available = "offline"; }; + # copied from "homeassistant/light/fablab_led/led_ring/config" + led = {name, topic ? "led", host ? name }: + { # name: fablab_led + # topic: led_ring + platform = "mqtt"; + inherit name; + schema = "json"; + brightness = true; + rgb = true; + effect = true; + effect_list = [ # TODO: may be different + "Random" + "Strobe" + "Rainbow" + "Color Wipe" + "Scan" + "Twinkle" + "Fireworks" + "Addressable Flicker" + "None" + ]; + state_topic = "${prefix}/${host}/light/${topic}/state"; + command_topic = "${prefix}/${host}/light/${topic}/command"; + availability_topic = "${prefix}/${host}/status"; + payload_available = "online"; + payload_not_available = "offline"; + qos = 1; + }; + # Feinstaub + dust_25m = { host, name ? "${host} < 2.5µm", topic ? "particulate_matter_25m_concentration" }: + { + platform = "mqtt"; + unit_of_measurement = "µg/m³"; + icon = "mdi:chemical-weapon"; + inherit name; + state_topic = "${prefix}/${host}/sensor/${topic}/state"; + availability_topic = "${prefix}/${name}/status"; + }; + dust_100m = {host, name ? "${host} < 10µm", topic ? "particulate_matter_100m_concentration" }: + { + platform = "mqtt"; + unit_of_measurement = "µg/m³"; + icon = "mdi:chemical-weapon"; + inherit name; + state_topic = "${prefix}/${name}/sensor/${topic}/state"; + availability_topic = "${prefix}/${name}/status"; + }; + switch = {host, name ? "${host} Button", topic ? "btn" }: + # host: ampel + # name: Button 1 + # topic: btn1 + { + inherit name; + platform = "mqtt"; + state_topic = "${prefix}/${host}/sensor/${topic}/state"; + command_topic = "${prefix}/${host}/switch/${topic}/state"; + availability_topic = "${prefix}/${host}/status"; + }; }; tasmota = { - plug = name: topic: + plug = {name, topic ? name }: { platform = "mqtt"; inherit name; diff --git a/krebs/2configs/shack/glados/multi/schlechte_luft.nix b/krebs/2configs/shack/glados/multi/schlechte_luft.nix index 94cb768b9..95ea60c04 100644 --- a/krebs/2configs/shack/glados/multi/schlechte_luft.nix +++ b/krebs/2configs/shack/glados/multi/schlechte_luft.nix @@ -1,19 +1,84 @@ let - airlevel = name: threshold: color: - { alias = "${name} Air trigger ${color}"; - trigger = [ - ]; - action = - [ - # create spark effect with color - ]; - }; + glados = import ../lib; in { # LED - switch = [ + light = [ + (glados.esphome.led { name = "Fablab LED"; host = "fablab_led"; topic = "led_ring"; }) + + (glados.esphome.led { name = "Fablab LED Part A"; host = "fablab_led"; topic = "A";}) + (glados.esphome.led { name = "Fablab LED Part B"; host = "fablab_led"; topic = "B";}) + (glados.esphome.led { name = "Fablab LED Part C"; host = "fablab_led"; topic = "C";}) + (glados.esphome.led { name = "Fablab LED Part D"; host = "fablab_led"; topic = "D";}) + ]; + sensor = [ + (glados.esphome.dust_25m { host = "fablab_feinstaub";}) + (glados.esphome.dust_100m { host = "fablab_feinstaub";}) ]; automation = - [ + [ + { alias = "Gute Luft Fablab"; + trigger = [ + { + platform = "numeric_state"; + below = 25; + entity_id = "sensor.fablab_feinstaub_25m"; + } + ]; + action = + [ + { service = "light.turn_on"; + data = { + entity = "fablab_led"; + effect = "Twinkle"; + color_name = "green"; + }; + } + ]; + } + { alias = "mäßige Luft Fablab"; + trigger = [ + #{ + # platform = "numeric_state"; + # above = 25; + # entity_id = "sensor.fablab_feinstaub_25m"; + #} + { + platform = "numeric_state"; + above = 25; + below = 50; + entity_id = "sensor.fablab_feinstaub_25m"; + } + ]; + action = + [ + { service = "light.turn_on"; + data = { + entity = "fablab_led"; + effect = "Twinkle"; + color_name = "yellow"; + }; + } + ]; + } + { alias = "schlechte Luft Fablab"; + trigger = [ + { + platform = "numeric_state"; + above = 50; + entity_id = "sensor.fablab_feinstaub_25m"; + } + ]; + action = + [ + { service = "light.turn_on"; + data = { + entity = "fablab_led"; + effect = "Twinkle"; + color_name = "red"; + }; + } + ]; + } ]; } diff --git a/krebs/2configs/shack/glados/multi/wasser.nix b/krebs/2configs/shack/glados/multi/wasser.nix index e3e7eb2a0..e909cce74 100644 --- a/krebs/2configs/shack/glados/multi/wasser.nix +++ b/krebs/2configs/shack/glados/multi/wasser.nix @@ -4,7 +4,7 @@ let in { switch = [ - (glados.tasmota.plug "Wasser" "plug") + (glados.tasmota.plug { name = "Wasser"; topic = "plug";} ) ]; automation = diff --git a/krebs/2configs/shack/glados/sensors/hass.nix b/krebs/2configs/shack/glados/sensors/hass.nix index ced6d9752..997344366 100644 --- a/krebs/2configs/shack/glados/sensors/hass.nix +++ b/krebs/2configs/shack/glados/sensors/hass.nix @@ -1,5 +1,5 @@ let glados = import ../lib; in - (map glados.esphome.temp [ "lounge" "werkstatt" "herrenklo" "dusche" "fablab" "whc" ]) - ++ (map glados.esphome.hum [ "lounge" "werkstatt" "herrenklo" "dusche" "fablab" "whc" ]) + (map (name: glados.esphome.temp {inherit name;}) [ "lounge" "werkstatt" "herrenklo" "dusche" "fablab" "whc" ]) + ++ (map (name: glados.esphome.hum {inherit name;}) [ "lounge" "werkstatt" "herrenklo" "dusche" "fablab" "whc" ]) |