From 2e7c5d0849a4a4da32e31ceff3fdba6ec11d40e6 Mon Sep 17 00:00:00 2001
From: makefu <github@syntax-fehler.de>
Date: Fri, 10 Aug 2018 00:09:28 +0200
Subject: [PATCH] ma hass: rewrite

---
 1systems/wbob/config.nix                      |   1 +
 2configs/deployment/bureautomation/hass.nix   | 162 ++++++++++++------
 2configs/deployment/bureautomation/home.nix   |  67 ++++++++
 .../deployment/events-publisher/default.nix   |   4 +-
 4 files changed, 176 insertions(+), 58 deletions(-)
 create mode 100644 2configs/deployment/bureautomation/home.nix

diff --git a/1systems/wbob/config.nix b/1systems/wbob/config.nix
index c7301e5..9d8a91e 100644
--- a/1systems/wbob/config.nix
+++ b/1systems/wbob/config.nix
@@ -50,6 +50,7 @@ in {
 
 
       <stockholm/makefu/2configs/deployment/bureautomation>
+      <stockholm/makefu/2configs/deployment/bureautomation/hass.nix>
       (let
           collectd-port = 25826;
           influx-port = 8086;
diff --git a/2configs/deployment/bureautomation/hass.nix b/2configs/deployment/bureautomation/hass.nix
index b62f37b..d5793f8 100644
--- a/2configs/deployment/bureautomation/hass.nix
+++ b/2configs/deployment/bureautomation/hass.nix
@@ -1,75 +1,125 @@
 { pkgs, lib, ... }:
 let
-  firetv = "192.168.1.238";
-in {
-  imports = [
-    <nixpkgs-unstable/nixos/modules/services/misc/home-assistant.nix>
+  tasmota_plug = name: topic: {
+          platform = "mqtt";
+          inherit name;
+          state_topic = "/bam/${topic}/stat/POWER";
+          command_topic = "/bam/${topic}/cmnd/POWER";
+          availability_topic = "/bam/${topic}/tele/LWT";
+          qos = 1;
+          payload_on= "ON";
+          payload_off= "OFF";
+          payload_available= "Online";
+          payload_not_available= "Offline";
+          retain= false;
+        };
+  espeasy_dht22 = name: [
+    {
+          platform = "mqtt";
+          device_class = "temperature";
+          state_topic = "/bam/${name}/dht22/Temperature";
+          availability_topic = "/bam/${name}/status/LWT";
+          payload_available = "Connected";
+          payload_not_available = "Connection Lost";
+    }
+    {
+          platform = "mqtt";
+          device_class = "humidity";
+          state_topic = "/bam/${name}/dht22/Temperature";
+          unit_of_measurement =  "C";
+          availability_topic = "/bam/${name}/status/LWT";
+          payload_available = "Connected";
+          payload_not_available = "Connection Lost";
+    }];
+  espeasy_ds18 = name: [
+    {
+          platform = "mqtt";
+          device_class = "temperature";
+          state_topic = "/bam/${name}/ds18/Temperature";
+          availability_topic = "/bam/${name}/status/LWT";
+          payload_available = "Connected";
+          payload_not_available = "Connection Lost";
+    }
   ];
-  systemd.services.firetv = {
-    wantedBy = [ "multi-user.target" ];
-    serviceConfig = {
-      User = "nobody";
-      ExecStart = "${pkgs.python-firetv}/bin/firetv-server -d ${firetv}:5555";
-    };
-  };
-  nixpkgs.config.packageOverrides = oldpkgs: {
-    home-assistant = (import <nixpkgs-unstable> {}).home-assistant;
-  };
-  ids.uids.hass = 286;
-  ids.gids.hass = 286;
+in {
+
+  nixpkgs.config.permittedInsecurePackages = [
+    "homeassistant-0.65.5"
+  ];
+
   services.home-assistant = {
-  #panel_iframe:
-  #configurator:
-  #  title: Configurator
-  #  icon: mdi:wrench
-  #  url: http://hassio.local:3218
-  # sensor:
-  # - platform: random
     enable = true;
     config = {
       homeassistant = {
         name = "Bureautomation";
         time_zone = "Europe/Berlin";
       };
-      panel_iframe = {
-        euer_blog = {
-          title = "Euer Blog";
-          icon =  "mdi:wrench";
-          url = "https://euer.krebsco.de";
+
+      mqtt = {
+        broker = "localhost";
+        port = 1883;
+        client_id = "home-assistant";
+        keepalive = 60;
+        protocol = 3.1;
+        birth_message = {
+          topic = "/bam/hass/tele/LWT";
+          payload = "Online";
+          qos = 1;
+          retain = true;
+        };
+        will_message = {
+          topic = "/bam/hass/tele/LWT";
+          payload = "Offline";
+          qos = 1;
+          retain = true;
         };
       };
-      media_player = [
-        { platform = "kodi";
-          host = firetv;
-        }
-        { platform = "firetv";
-          # assumes python-firetv running
+      switch = [
+        (tasmota_plug "Bauarbeiterlampe" "plug")
+        (tasmota_plug "Blitzdings" "plug2")
+        (tasmota_plug "Fernseher" "plug3")
+        (tasmota_plug "Pluggy" "plug4")
+      ];
+      binary_sensor = [
+        { # esp_easy 
+          platform = "mqtt";
+          device_class = "motion";
+          state_topic = "/bam/easy2/movement/Switch";
+          payload_on = "1";
+          payload_off = "0";
+          availability_topic = "/bam/easy2/status/LWT";
+          payload_available = "Connected";
+          payload_not_available = "Connection Lost";
         }
       ];
-      sensor = [
-        {
-          platform = "luftdaten";
-          name = "Shack 1";
-          sensorid = "50";
-          monitored_conditions = [ "P1" "P2" ];
-        }
-        {
-          platform = "luftdaten";
-          name = "Shack 2";
-          sensorid = "658";
-          monitored_conditions = [ "P1" "P2" ];
-        }
-        {
-          platform = "luftdaten";
-          name = "Ditzingen";
-          sensorid = "5341";
-          monitored_conditions = [ "P1" "P2" ];
-        }
-        { platform = "random"; }
-      ];
+      sensor =
+          (espeasy_dht22 "easy2") ++
+        [ (espeasy_ds18 "easy3" )
+          { platform = "luftdaten";
+            name = "Ditzingen";
+            sensorid = "5341";
+            monitored_conditions = [ "P1" "P2" ];
+          }
+          { platform = "influxdb";
+            queries = [
+              { name = "mean value of feinstaub P1";
+                where = '' "node" = 'esp8266-1355142' '';
+                measurement = "feinstaub";
+                database = "telegraf";
+                field = "P1";
+              }
+              { name = "mean value of feinstaub P2";
+                where = '' "node" = 'esp8266-1355142' '';
+                measurement = "feinstaub";
+                database = "telegraf";
+                field = "P2";
+              }
+            ];
+          }
+        ];
       frontend = { };
       http = { };
-      feedreader.urls = [ "https://nixos.org/blogs.xml" ];
+      feedreader.urls = [ "http://www.heise.de/security/rss/news-atom.xml" ];
     };
   };
 }
diff --git a/2configs/deployment/bureautomation/home.nix b/2configs/deployment/bureautomation/home.nix
new file mode 100644
index 0000000..28edb6a
--- /dev/null
+++ b/2configs/deployment/bureautomation/home.nix
@@ -0,0 +1,67 @@
+{ pkgs, lib, ... }:
+let
+  firetv = "192.168.1.238";
+in {
+  systemd.services.firetv = {
+    wantedBy = [ "multi-user.target" ];
+    serviceConfig = {
+      User = "nobody";
+      ExecStart = "${pkgs.python-firetv}/bin/firetv-server -d ${firetv}:5555";
+    };
+  };
+  services.home-assistant = {
+  #panel_iframe:
+  #configurator:
+  #  title: Configurator
+  #  icon: mdi:wrench
+  #  url: http://hassio.local:3218
+  # sensor:
+  # - platform: random
+    enable = true;
+    config = {
+      homeassistant = {
+        name = "Bureautomation";
+        time_zone = "Europe/Berlin";
+      };
+      panel_iframe = {
+        euer_blog = {
+          title = "Euer Blog";
+          icon =  "mdi:wrench";
+          url = "https://euer.krebsco.de";
+        };
+      };
+      media_player = [
+        { platform = "kodi";
+          host = firetv;
+        }
+        { platform = "firetv";
+          # assumes python-firetv running
+        }
+      ];
+      sensor = [
+        {
+          platform = "luftdaten";
+          name = "Shack 1";
+          sensorid = "50";
+          monitored_conditions = [ "P1" "P2" ];
+        }
+        {
+          platform = "luftdaten";
+          name = "Shack 2";
+          sensorid = "658";
+          monitored_conditions = [ "P1" "P2" ];
+        }
+        {
+          platform = "luftdaten";
+          name = "Ditzingen";
+          sensorid = "5341";
+          monitored_conditions = [ "P1" "P2" ];
+        }
+        { platform = "random"; }
+      ];
+      frontend = { };
+      http = { };
+      feedreader.urls = [ "https://nixos.org/blogs.xml" ];
+    };
+  };
+}
diff --git a/2configs/deployment/events-publisher/default.nix b/2configs/deployment/events-publisher/default.nix
index db8502c..c671b1a 100644
--- a/2configs/deployment/events-publisher/default.nix
+++ b/2configs/deployment/events-publisher/default.nix
@@ -2,8 +2,8 @@
 with import <stockholm/lib>;
 let
   shack-announce = pkgs.callPackage (builtins.fetchTarball {
-    url = "https://github.com/makefu/events-publisher/archive/15fbe5cc6ac9617a08a042870795f9e879d9952a.tar.gz";
-    sha256 = "1bqp1qdnwx5q1w468zbm57hmpjz3x8if3j29qrqcia0vzks1s37a";
+    url = "https://github.com/makefu/events-publisher/archive/5e7b083c63f25182a02c1fddb3d32cb9534fbc50.tar.gz";
+    sha256 = "1zzlhyj8fr6y3a3b6qlyrm474xxxs1ydqjpkd2jva3g1lnzlmvkp";
   }) {} ;
   home = "/var/lib/shackannounce";
   user = "shackannounce";