diff --git a/makefu/1systems/wbob/config.nix b/makefu/1systems/wbob/config.nix
index 3930406b1..ab77f16dd 100644
--- a/makefu/1systems/wbob/config.nix
+++ b/makefu/1systems/wbob/config.nix
@@ -9,6 +9,7 @@ in {
   imports =
     [ # Include the results of the hardware scan.
       <stockholm/makefu>
+      <stockholm/makefu/2configs/support-nixos.nix>
       <stockholm/makefu/2configs/zsh-user.nix>
       <stockholm/makefu/2configs/tools/core.nix>
       # <stockholm/makefu/2configs/disable_v6.nix>
@@ -39,7 +40,6 @@ in {
       <stockholm/makefu/2configs/stats/telegraf/europastats.nix>
       <stockholm/makefu/2configs/stats/external/aralast.nix>
       <stockholm/makefu/2configs/stats/arafetch.nix>
-      <stockholm/makefu/2configs/deployment/led-fader.nix>
       <stockholm/makefu/2configs/hw/mceusb.nix>
       # <stockholm/makefu/2configs/stats/telegraf/bamstats.nix>
       { environment.systemPackages = [ pkgs.vlc ]; }
@@ -51,6 +51,7 @@ in {
         ];
       }
       <stockholm/makefu/2configs/bureautomation>
+      <stockholm/makefu/2configs/bureautomation/led-fader.nix>
       <stockholm/makefu/2configs/bureautomation/mpd.nix>
       <stockholm/makefu/2configs/bureautomation/hass.nix>
       (let
diff --git a/makefu/2configs/bureautomation/automation/10h_timer.nix b/makefu/2configs/bureautomation/automation/10h_timer.nix
new file mode 100644
index 000000000..a311d468c
--- /dev/null
+++ b/makefu/2configs/bureautomation/automation/10h_timer.nix
@@ -0,0 +1,147 @@
+[
+  { alias = "start Felix 10h";
+    trigger = {
+      platform = "state";
+      entity_id = "binary_sensor.redbutton";
+      to = "on";
+    };
+    condition = {
+      condition = "and";
+      conditions = [
+        {
+          condition = "state";
+          entity_id = "timer.felix_10h";
+          state =  "idle";
+        }
+        {
+          condition = "time";
+          after   = "06:00:00";
+          before  = "12:00:00";
+        }
+      ];
+    };
+    action = [
+      { service = "timer.start";
+        entity_id =  [ "timer.felix_10h" "timer.felix_8_30h" "timer.felix_7h" ] ;
+      }
+      { service = "homeassistant.turn_on";
+        entity_id =  [
+          "script.buzz_red_led_fast"
+          "script.blitz_10s"
+        ];
+      }
+      { service = "light.turn_on";
+      data = {
+          effect = "2";
+          entity_id =  [ "light.status_felix" ];
+        };
+      }
+    ];
+  }
+
+  { alias = "Disable Felix timer at button press";
+    trigger = {
+      platform = "state";
+      entity_id = "binary_sensor.redbutton";
+      to = "on";
+    };
+    condition = {
+      condition = "and";
+      conditions = [
+        {
+          condition = "state";
+          entity_id = "timer.felix_10h";
+          state =  "active";
+        }
+        {
+          condition = "time";
+          after = "12:00:00";
+          before  = "22:00:00";
+        }
+      ];
+    };
+    action =
+    [
+      {
+        service = "timer.cancel";
+        entity_id =  [ "timer.felix_10h" "timer.felix_8_30h" "timer.felix_7h" ];
+      }
+      {
+        service = "homeassistant.turn_on";
+        entity_id =  [ "script.buzz_red_led_fast"  ];
+      }
+      {
+        service = "homeassistant.turn_off";
+        entity_id =  [ "light.status_felix"  ];
+      }
+    ];
+  }
+
+  {
+    alias = "Genug gearbeitet Felix";
+    trigger =
+    {
+      platform = "event";
+      event_type = "timer.finished";
+      event_data.entity_id = "timer.felix_7h";
+    };
+    action =
+    [
+      { service = "light.turn_on";
+        data = {
+          rgb_color= [0 255 0];
+          # effect = "0";
+          entity_id =  [ "light.status_felix" ];
+        };
+      }
+    ];
+  }
+
+  {
+    alias = "nun aber nach hause";
+    trigger =
+    {
+      platform = "event";
+      event_type = "timer.finished";
+      event_data.entity_id = "timer.felix_8_30h";
+    };
+    action =
+    [
+      { service = "light.turn_on";
+        data = {
+          rgb_color= [255 255 0];
+          # effect = "0";
+          entity_id =  [ "light.status_felix" ];
+        };
+      }
+    ];
+  }
+
+  {
+    alias = "Zu lange Felix!";
+    trigger =
+    {
+      platform = "event";
+      event_type = "timer.finished";
+      event_data.entity_id = "timer.felix_10h";
+    };
+    action =
+    [
+      # TODO: Pushbullet
+      {
+        service = "homeassistant.turn_on";
+        entity_id =  [
+          "script.buzz_red_led"
+          "script.blitz_10s"
+        ];
+      }
+      { service = "light.turn_on";
+        data = {
+          rgb_color= [255 0 0];
+          effect = "0";
+          entity_id =  [ "light.status_felix" ];
+        };
+      }
+    ];
+  }
+]
diff --git a/makefu/2configs/bureautomation/automation/bureau-shutdown.nix b/makefu/2configs/bureautomation/automation/bureau-shutdown.nix
new file mode 100644
index 000000000..9e6574300
--- /dev/null
+++ b/makefu/2configs/bureautomation/automation/bureau-shutdown.nix
@@ -0,0 +1,55 @@
+[
+  { alias = "Turn on Fernseher on movement";
+    trigger = {
+      platform = "state";
+      entity_id = "binary_sensor.motion";
+      to = "on";
+    };
+    action = {
+      service = "homeassistant.turn_on";
+      entity_id =  [
+        "switch.fernseher"
+        "switch.feuer"
+      ];
+    };
+  }
+  { alias = "Turn off Fernseher 10 minutes after last movement";
+    trigger = [
+    { # trigger when movement was detected at the time
+      platform = "state";
+      entity_id = "binary_sensor.motion";
+      to = "off";
+      for.minutes = 10;
+    }
+    { # trigger at 20:00 no matter what
+      # to avoid 'everybody left before 18:00:00'
+      platform = "time";
+      at = "18:00:00";
+    }
+  ];
+    action = {
+      service = "homeassistant.turn_off";
+      entity_id =  [
+        "switch.fernseher"
+        "switch.feuer"
+        "light.status_felix"
+      ];
+    };
+    condition =
+    { condition = "and";
+      conditions = [
+        {
+          condition = "time";
+          before = "06:30:00"; #only turn off between 6:30 and 18:00
+          after  = "18:00:00";
+          # weekday = [ "mon" "tue" "wed" "thu" "fri" ];
+        }
+        {
+          condition = "state";
+          entity_id = "binary_sensor.motion";
+          state = "off";
+        }
+      ];
+    };
+  }
+]
diff --git a/makefu/2configs/bureautomation/automation/nachtlicht.nix b/makefu/2configs/bureautomation/automation/nachtlicht.nix
new file mode 100644
index 000000000..066e9b06c
--- /dev/null
+++ b/makefu/2configs/bureautomation/automation/nachtlicht.nix
@@ -0,0 +1,43 @@
+[
+        {
+          alias = "Turn off Nachtlicht on sunrise";
+          trigger =
+          {
+            platform = "sun";
+            event = "sunrise";
+          };
+          action =
+          {
+            service = "homeassistant.turn_off";
+            entity_id =  [ "switch.nachtlicht" ];
+          };
+        }
+
+        {
+          alias = "Turn on Nachtlicht on motion and dusk";
+          trigger =
+          {
+            platform = "state";
+            entity_id = "binary_sensor.motion";
+            to = "on";
+          };
+          condition = # 'when dark'
+          {
+            condition = "or";
+            conditions = [
+              { condition = "sun";
+                after = "sunset";
+                after_offset = "-00:45:00"; # on dusk
+              }
+              { condition = "sun";
+                before = "sunrise";
+              }
+            ];
+          };
+          action =
+          {
+            service = "homeassistant.turn_on";
+            entity_id =  [ "switch.nachtlicht" ];
+          };
+        }
+]
diff --git a/makefu/2configs/bureautomation/binary_sensor/buttons.nix b/makefu/2configs/bureautomation/binary_sensor/buttons.nix
new file mode 100644
index 000000000..e23c4a362
--- /dev/null
+++ b/makefu/2configs/bureautomation/binary_sensor/buttons.nix
@@ -0,0 +1,17 @@
+let
+  tasmota_button = name: topic:
+  # detects a pushbutton press from tasmota
+  { platform = "mqtt";
+    inherit name;
+    state_topic = "/bam/${topic}/cmnd/POWER";
+    availability_topic = "/bam/${topic}/tele/LWT";
+    payload_on = "ON";
+    payload_off = "OFF";
+    payload_available= "Online";
+    payload_not_available= "Offline";
+    # expire_after = "5"; #expire after 5 seconds
+    qos = 1;
+  };
+in [
+  (tasmota_button "RedButton" "redbutton")
+]
diff --git a/makefu/2configs/bureautomation/binary_sensor/motion.nix b/makefu/2configs/bureautomation/binary_sensor/motion.nix
new file mode 100644
index 000000000..ad8fab038
--- /dev/null
+++ b/makefu/2configs/bureautomation/binary_sensor/motion.nix
@@ -0,0 +1,12 @@
+[
+  { platform = "mqtt";
+    device_class = "motion";
+    name = "Motion";
+    state_topic = "/bam/easy2/movement/Switch";
+    payload_on = "1";
+    payload_off = "0";
+    availability_topic = "/bam/easy2/tele/LWT";
+    payload_available = "Online";
+    payload_not_available = "Offline";
+  }
+]
diff --git a/makefu/2configs/bureautomation/camera/verkehrskamera.nix b/makefu/2configs/bureautomation/camera/verkehrskamera.nix
new file mode 100644
index 000000000..f2dfdcd91
--- /dev/null
+++ b/makefu/2configs/bureautomation/camera/verkehrskamera.nix
@@ -0,0 +1,14 @@
+[
+  { name = "Baumarkt";
+    platform = "generic";
+    still_image_url = http://t4915209254324-p80-c0-h6jv2afnujcoftrcstsafb45kdrqv4buy.webdirect.mdex.de/oneshotimage ;# baumarkt
+  }
+  { name = "Autobahn Heilbronn";
+    platform = "generic";
+    still_image_url = https://api.svz-bw.de/v2/verkehrskameras/kameras/K10 ;
+  }
+  { name = "Autobahn Singen";
+    platform = "generic";
+    still_image_url = https://api.svz-bw.de/v2/verkehrskameras/kameras/K11 ;
+  }
+]
diff --git a/makefu/2configs/bureautomation/hass.nix b/makefu/2configs/bureautomation/hass.nix
index b70c9b030..007d00b09 100644
--- a/makefu/2configs/bureautomation/hass.nix
+++ b/makefu/2configs/bureautomation/hass.nix
@@ -1,76 +1,5 @@
 { pkgs, lib, ... }:
 let
-  tasmota_rgb = name: topic:
-# LED WS2812b
-#      effect_state_topic: "stat/led/Scheme"
-#      effect_command_topic: "cmnd/led/Scheme"
-#      effect_value_template: "{{ value_json.Scheme }}"
-  { platform = "mqtt";
-    inherit name;
-    retain = false;
-    qos = 1;
-    optimistic = false;
-    # state
-    # TODO: currently broken, will not use the custom state topic
-    state_topic = "/bam/${topic}/stat/POWER";
-    command_topic = "/bam/${topic}/cmnd/POWER";
-    availability_topic = "/bam/${topic}/tele/LWT";
-    payload_on= "ON";
-    payload_off= "OFF";
-    payload_available= "Online";
-    payload_not_available= "Offline";
-    # brightness
-    brightness_state_topic = "/bam/${topic}/stat/Dimmer";
-    brightness_command_topic = "/bam/${topic}/cmnd/Dimmer";
-    brightness_value_template = "{{ value_json.Dimmer }}";
-    brightness_scale = 100;
-    # color
-    rgb_state_topic = "/bam/${topic}/stat/Color";
-    rgb_command_topic = "/bam/${topic}/cmnd/Color2";
-    rgb_command_mode = "hex";
-    rgb_command_template = "{{ '%02x%02x%02x' | format(red, green, blue)}}";
-    # effects
-    effect_state_topic = "/bam/${topic}/stat/Scheme";
-    effect_command_topic = "/bam/${topic}/cmnd/Scheme";
-    effect_value_template = "{{ value_json.Scheme }}";
-    effect_list = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 ];
-};
-  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";
-    payload_on= "ON";
-    payload_off= "OFF";
-    payload_available= "Online";
-    payload_not_available= "Offline";
-  };
-  espeasy_dht22 = name: [
-  { platform = "mqtt";
-    name = "${name} DHT22 Temperature";
-    device_class = "temperature";
-    state_topic = "/bam/${name}/dht22/Temperature";
-    availability_topic = "/bam/${name}/tele/LWT";
-    payload_available = "Online";
-    payload_not_available = "Offline";
-  }
-  { platform = "mqtt";
-    device_class = "humidity";
-    name = "${name} DHT22 Humidity";
-    state_topic = "/bam/${name}/dht22/Humidity";
-    availability_topic = "/bam/${name}/tele/LWT";
-    payload_available = "Online";
-    payload_not_available = "Offline";
-  }];
-  espeasy_ds18 = name:
-  { platform = "mqtt";
-    name = "${name} DS18 Temperature";
-    state_topic = "/bam/${name}/ds18/Temperature";
-    availability_topic = "/bam/${name}/tele/LWT";
-    payload_available = "Online";
-    payload_not_available = "Offline";
-  };
 in {
   networking.firewall.allowedTCPPorts = [ 8123 ];
 
@@ -104,90 +33,43 @@ in {
           retain = true;
         };
       };
-      switch = [
-        (tasmota_plug "Bauarbeiterlampe" "plug")
-        (tasmota_plug "Blitzdings" "plug2")
-        (tasmota_plug "Fernseher" "plug3")
-        (tasmota_plug "Feuer" "plug4")
-        (tasmota_plug "Nachtlicht" "plug5")
-      ];
-      light = [
-        (tasmota_rgb "Status Felix" "status1")
-      ];
-      binary_sensor = [
-        { platform = "mqtt";
-          device_class = "motion";
-          name = "Motion";
-          state_topic = "/bam/easy2/movement/Switch";
-          payload_on = "1";
-          payload_off = "0";
-          availability_topic = "/bam/easy2/tele/LWT";
-          payload_available = "Online";
-          payload_not_available = "Offline";
+      switch = (import ./switch/tasmota_switch.nix);
+      light =  (import ./light/statuslight.nix) ++
+               (import ./light/buzzer.nix);
+      timer = {
+        felix_10h = {
+          name = "Felix 10h Timer";
+          duration = "10:00:00";
+        };
+        felix_8_30h = {
+          name = "Felix 8_30h Timer";
+          duration = "08:30:00";
+        };
+        felix_7h = {
+          name = "Felix 7h Timer";
+          duration = "07:00:00";
+        };
+      };
+      notify = [
+        {
+          platform = "kodi";
+          name = "wbob";
+          host = "192.168.8.11";
         }
       ];
-      sensor =
-          (espeasy_dht22 "easy1") ++
-          (espeasy_dht22 "easy2") ++
-        [ (espeasy_ds18 "easy3" )
-          { platform = "luftdaten";
-            name = "Ditzingen";
-            sensorid = "5341";
-            monitored_conditions = [ "P1" "P2" ];
-          }
+      script = (import ./script/multi_blink.nix) {inherit lib;};
+      binary_sensor =
+        (import ./binary_sensor/buttons.nix) ++
+        (import ./binary_sensor/motion.nix);
+
+      sensor =
+        (import ./sensor/espeasy.nix) ++
+        ((import ./sensor/outside.nix) {inherit lib;}) ++
+        (import ./sensor/influxdb.nix);
+
+      camera =
+        (import ./camera/verkehrskamera.nix);
 
-          { platform = "darksky";
-            api_key = lib.removeSuffix "\n"
-              (builtins.readFile <secrets/hass/darksky.apikey>);
-            language = "de";
-            monitored_conditions = [ "summary" "icon"
-            "nearest_storm_distance" "precip_probability"
-            "precip_intensity"
-            "temperature" # "temperature_high" "temperature_low"
-            "apparent_temperature"
-            "hourly_summary" # next 24 hours text
-            "humidity"
-            "pressure"
-            "uv_index" ];
-            units =  "si" ;
-            update_interval = {
-                  days = 0;
-                  hours = 0;
-                  minutes = 30;
-                  seconds = 0;
-            };
-          }
-          #{ 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";
-          #    }
-          #  ];
-          #}
-        ];
-        camera = [
-          { name = "Baumarkt";
-            platform = "generic";
-            still_image_url = http://t4915209254324-p80-c0-h6jv2afnujcoftrcstsafb45kdrqv4buy.webdirect.mdex.de/oneshotimage ;# baumarkt
-          }
-          { name = "Autobahn Heilbronn";
-            platform = "generic";
-            still_image_url = https://api.svz-bw.de/v2/verkehrskameras/kameras/K10 ;
-          }
-          { name = "Autobahn Singen";
-            platform = "generic";
-            still_image_url = https://api.svz-bw.de/v2/verkehrskameras/kameras/K11 ;
-          }
-        ];
       frontend = { };
       http = { };
       conversation = {};
@@ -203,13 +85,14 @@ in {
               "group.outside"
               "group.switches"
               "group.automation"
-              "group.camera"
+              # "group.camera"
             ];
           };
         automation = [
-          "automation.turn_off_fernseher_10_minutes_after_last_movement"
-          "automation.turn_off_nachtlicht_on_sunrise"
-          "automation.turn_on_nachtlicht_on_motion_and_dusk"
+          "timer.felix_10h"
+          "script.blitz_10s"
+          "script.buzz_red_led_fast"
+          "camera.Baumarkt"
         ];
         switches = [
           "switch.bauarbeiterlampe"
@@ -218,125 +101,37 @@ in {
           "switch.feuer"
           "switch.nachtlicht"
           "light.status_felix"
+          "light.status_daniel"
+          "light.buslicht"
+          "light.redbutton_buzzer"
         ];
-        camera = [
-          "camera.Baumarkt"
-          "camera.Autobahn_Heilbronn"
-          "camera.Autobahn_Singen"
-        ];
+
+        camera = [ ];
         sensors = [
           "binary_sensor.motion"
+          "binary_sensor.redbutton"
           "sensor.easy2_dht22_humidity"
           "sensor.easy2_dht22_temperature"
         ];
         outside = [
-          "sensor.ditzingen_pm10"
-          "sensor.ditzingen_pm25"
+          # "sensor.ditzingen_pm10"
+          # "sensor.ditzingen_pm25"
           "sensor.dark_sky_temperature"
           "sensor.dark_sky_humidity"
-          "sensor.dark_sky_pressure"
+          # "sensor.dark_sky_pressure"
           "sensor.dark_sky_hourly_summary"
-          "sensor.dark_sky_minutely_summary"
+          "camera.Autobahn_Heilbronn"
+          "camera.Autobahn_Singen"
         ];
       };
       # only for automation
       # feedreader.urls = [ "http://www.heise.de/security/rss/news-atom.xml" ];
-      automation = [
-        { alias = "Turn on Fernseher on movement";
-          trigger = {
-            platform = "state";
-            entity_id = "binary_sensor.motion";
-            to = "on";
-          };
-          action = {
-            service = "homeassistant.turn_on";
-            entity_id =  [
-              "switch.fernseher"
-              "switch.feuer"
-              "light.status_felix"
-            ];
-          };
-        }
-        {
-          alias = "Turn off Nachtlicht on sunrise";
-          trigger =
-          {
-            platform = "sun";
-            event = "sunrise";
-          };
-          action =
-          {
-            service = "homeassistant.turn_off";
-            entity_id =  [ "switch.nachtlicht" ];
-          };
-        }
-        {
-          alias = "Turn on Nachtlicht on motion and dusk";
-          trigger =
-          {
-            platform = "state";
-            entity_id = "binary_sensor.motion";
-            to = "on";
-          };
-          condition = # 'when dark'
-          {
-            condition = "or";
-            conditions = [
-              { condition = "sun";
-                after = "sunset";
-                after_offset = "-00:45:00"; # on dusk
-              }
-              { condition = "sun";
-                before = "sunrise";
-              }
-            ];
-          };
-          action =
-          {
-            service = "homeassistant.turn_on";
-            entity_id =  [ "switch.nachtlicht" ];
-          };
-        }
-        { alias = "Turn off Fernseher 10 minutes after last movement";
-          trigger = [
-          { # trigger when movement was detected at the time
-            platform = "state";
-            entity_id = "binary_sensor.motion";
-            to = "off";
-            for.minutes = 10;
-          }
-          { # trigger at 20:00 no matter what
-            # to avoid 'everybody left before 18:00:00'
-            platform = "time";
-            at = "18:00:00";
-          }
-        ];
-          action = {
-            service = "homeassistant.turn_off";
-            entity_id =  [
-              "switch.fernseher"
-              "switch.feuer"
-              "light.status_felix"
-            ];
-          };
-          condition =
-          { condition = "and";
-            conditions = [
-              {
-                condition = "time";
-                before = "06:30:00"; #only turn off between 6:30 and 18:00
-                after  = "18:00:00";
-                # weekday = [ "mon" "tue" "wed" "thu" "fri" ];
-              }
-              {
-                condition = "state";
-                entity_id = "binary_sensor.motion";
-                state = "off";
-              }
-            ];
-          };
-        }
-      ];
+      # we don't use imports because the expressions do not merge in
+      # home-assistant
+      automation = (import ./automation/bureau-shutdown.nix) ++
+                   (import ./automation/nachtlicht.nix) ++
+                   (import ./automation/10h_timer.nix);
+
     };
   };
 }
diff --git a/makefu/2configs/deployment/led-fader.nix b/makefu/2configs/bureautomation/led-fader.nix
similarity index 94%
rename from makefu/2configs/deployment/led-fader.nix
rename to makefu/2configs/bureautomation/led-fader.nix
index d34b66125..d7f728534 100644
--- a/makefu/2configs/deployment/led-fader.nix
+++ b/makefu/2configs/bureautomation/led-fader.nix
@@ -14,7 +14,7 @@ in {
     serviceConfig = {
       # User = "nobody"; # need a user with permissions to run nix-shell
       ExecStartPre = pkgs.writeDash "sleep.sh" "sleep 2";
-      ExecStart = "${pkg}/bin/ampel 4";
+      ExecStart = "${pkg}/bin/ampel";
       Restart = "always";
       RestartSec = 10;
       PrivateTmp = true;
diff --git a/makefu/2configs/bureautomation/light/buzzer.nix b/makefu/2configs/bureautomation/light/buzzer.nix
new file mode 100644
index 000000000..2067e47bf
--- /dev/null
+++ b/makefu/2configs/bureautomation/light/buzzer.nix
@@ -0,0 +1,28 @@
+let
+  tasmota_pwm = name: topic: pwmid: max:
+    let
+      id = "PWM${toString pwmid}";
+    in { platform = "mqtt";
+    inherit name;
+    state_topic = "/bam/${topic}/stat/RESULT";
+    state_value_template = ''{%- if value_json["PWM"]["${id}"]| int > 0 -%} ${toString max} {%- else -%} 0 {%- endif -%}'';
+
+    command_topic = "/bam/${topic}/cmnd/${id}";
+    on_command_type = "brightness";
+    brightness_command_topic = "/bam/${topic}/cmnd/${id}";
+    brightness_value_template = ''{{value_json["PWM"]["${id}"]}}'';
+    brightness_scale = max;
+    payload_on = "${toString max}";
+    payload_off = "0";
+    availability_topic = "/bam/${topic}/tele/LWT";
+    payload_available= "Online";
+    payload_not_available= "Offline";
+    retain = true;
+    optimistic = false;
+    qos = 0;
+  };
+in
+[
+# (tasmota_pwm "RedButton LED" "redbutton" 1 1023) #LED PWM1
+  (tasmota_pwm "RedButton Buzzer" "redbutton" 2 512) #buzzer PWM2
+]
diff --git a/makefu/2configs/bureautomation/light/statuslight.nix b/makefu/2configs/bureautomation/light/statuslight.nix
new file mode 100644
index 000000000..3a9582f2f
--- /dev/null
+++ b/makefu/2configs/bureautomation/light/statuslight.nix
@@ -0,0 +1,56 @@
+let
+  tasmota_rgb = name: topic:
+# LED WS2812b
+#      effect_state_topic: "stat/led/Scheme"
+#      effect_command_topic: "cmnd/led/Scheme"
+#      effect_value_template: "{{ value_json.Scheme }}"
+  { platform = "mqtt";
+    inherit name;
+    retain = false;
+    qos = 1;
+    optimistic = false;
+    # state
+    # TODO: currently broken, will not use the custom state topic
+    state_topic = "/bam/${topic}/stat/POWER";
+    command_topic = "/bam/${topic}/cmnd/POWER";
+    availability_topic = "/bam/${topic}/tele/LWT";
+    payload_on= "ON";
+    payload_off= "OFF";
+    payload_available= "Online";
+    payload_not_available= "Offline";
+    # brightness
+    brightness_state_topic = "/bam/${topic}/stat/Dimmer";
+    brightness_command_topic = "/bam/${topic}/cmnd/Dimmer";
+    brightness_value_template = "{{ value_json.Dimmer }}";
+    brightness_scale = 100;
+    # color
+    rgb_state_topic = "/bam/${topic}/stat/Color";
+    rgb_command_topic = "/bam/${topic}/cmnd/Color2";
+    rgb_command_mode = "hex";
+    rgb_command_template = "{{ '%02x%02x%02x' | format(red, green, blue)}}";
+    # effects
+    effect_state_topic = "/bam/${topic}/stat/Scheme";
+    effect_command_topic = "/bam/${topic}/cmnd/Scheme";
+    effect_value_template = "{{ value_json.Scheme }}";
+    effect_list = [ 
+      0  # single color for LED light
+      1  # start wake up sequence (same as Wakeup)
+      2  # cycle up through colors using Speed option
+      3  # cycle down through colors using Speed option
+      4  # random cycle through colors using Speed and Fade
+      5  # clock mode (example)
+      6  # candlelight pattern
+      7  # RGB pattern
+      8  # Christmas pattern
+      9  # Hannukah pattern
+      10 # Kwanzaa pattern
+      11 # rainbow pattern
+      12 # fire pattern
+    ];
+  };
+in
+[
+  (tasmota_rgb "Status Felix" "status1")
+  (tasmota_rgb "Status Daniel" "status2")
+  (tasmota_rgb "Buslicht" "buslicht")
+]
diff --git a/makefu/2configs/bureautomation/script/multi_blink.nix b/makefu/2configs/bureautomation/script/multi_blink.nix
new file mode 100644
index 000000000..bb28dd46f
--- /dev/null
+++ b/makefu/2configs/bureautomation/script/multi_blink.nix
@@ -0,0 +1,37 @@
+{lib, ... }:
+let
+  # let an entity blink for X times with  a delay of Y milliseconds
+  flash_entity = { entity, delay ? 500, count ? 4, alias ?  "${entity}_blink_${toString count}_${toString delay}" }:
+  {
+    inherit alias;
+    sequence = lib.flatten (builtins.genList (i: [
+      { service = "homeassistant.turn_on";
+        data.entity_id = entity;
+      }
+      { delay.milliseconds = delay; }
+      { service = "homeassistant.turn_off";
+        data.entity_id = entity;
+      }
+      { delay.milliseconds = delay; }
+    ]
+     ) count);
+   };
+in {
+  buzz_red_led = (flash_entity {
+    entity = "light.redbutton_buzzer";
+    alias = "Red Button Buzz";
+    count = 4;
+  });
+  buzz_red_led_fast = (flash_entity {
+    entity = "light.redbutton_buzzer";
+    delay = 250;
+    count = 2;
+    alias = "Red Button Buzz fast";
+  });
+  blitz_10s = (flash_entity {
+    entity = "switch.blitzdings";
+    delay = 10000;
+    count = 1;
+    alias = "blitz for 10 seconds";
+  });
+}
diff --git a/makefu/2configs/bureautomation/sensor/espeasy.nix b/makefu/2configs/bureautomation/sensor/espeasy.nix
new file mode 100644
index 000000000..4b78ee84e
--- /dev/null
+++ b/makefu/2configs/bureautomation/sensor/espeasy.nix
@@ -0,0 +1,31 @@
+let
+  espeasy_dht22 = name: [
+  { platform = "mqtt";
+    name = "${name} DHT22 Temperature";
+    device_class = "temperature";
+    state_topic = "/bam/${name}/dht22/Temperature";
+    availability_topic = "/bam/${name}/tele/LWT";
+    payload_available = "Online";
+    payload_not_available = "Offline";
+  }
+  { platform = "mqtt";
+    device_class = "humidity";
+    name = "${name} DHT22 Humidity";
+    state_topic = "/bam/${name}/dht22/Humidity";
+    availability_topic = "/bam/${name}/tele/LWT";
+    payload_available = "Online";
+    payload_not_available = "Offline";
+  }];
+  espeasy_ds18 = name:
+  { platform = "mqtt";
+    name = "${name} DS18 Temperature";
+    state_topic = "/bam/${name}/ds18/Temperature";
+    availability_topic = "/bam/${name}/tele/LWT";
+    payload_available = "Online";
+    payload_not_available = "Offline";
+  };
+in
+(espeasy_dht22 "easy1") ++
+(espeasy_dht22 "easy2") ++ [
+  (espeasy_ds18 "easy3" )
+]
diff --git a/makefu/2configs/bureautomation/sensor/influxdb.nix b/makefu/2configs/bureautomation/sensor/influxdb.nix
new file mode 100644
index 000000000..820a56c4d
--- /dev/null
+++ b/makefu/2configs/bureautomation/sensor/influxdb.nix
@@ -0,0 +1,18 @@
+[
+  #{ 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";
+  #    }
+  #  ];
+  #}
+]
diff --git a/makefu/2configs/bureautomation/sensor/outside.nix b/makefu/2configs/bureautomation/sensor/outside.nix
new file mode 100644
index 000000000..7dbc192a4
--- /dev/null
+++ b/makefu/2configs/bureautomation/sensor/outside.nix
@@ -0,0 +1,25 @@
+{lib,...}: [
+  { platform = "darksky";
+    api_key = lib.removeSuffix "\n"
+      (builtins.readFile <secrets/hass/darksky.apikey>);
+    language = "de";
+    monitored_conditions = [
+      "summary" "icon"
+      "nearest_storm_distance" "precip_probability"
+      "precip_intensity"
+      "temperature" # "temperature_high" "temperature_low"
+      "apparent_temperature"
+      "hourly_summary" # next 24 hours text
+      "humidity"
+      "pressure"
+      "uv_index"
+    ];
+    units =  "si" ;
+    update_interval = { days = 0; hours = 0; minutes = 30; seconds = 0; };
+  }
+  { platform = "luftdaten";
+    name = "Ditzingen";
+    sensorid = "5341";
+    monitored_conditions = [ "P1" "P2" ];
+  }
+  ]
diff --git a/makefu/2configs/bureautomation/switch/tasmota_switch.nix b/makefu/2configs/bureautomation/switch/tasmota_switch.nix
new file mode 100644
index 000000000..b00a8e454
--- /dev/null
+++ b/makefu/2configs/bureautomation/switch/tasmota_switch.nix
@@ -0,0 +1,19 @@
+let
+  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";
+    payload_on= "ON";
+    payload_off= "OFF";
+    payload_available= "Online";
+    payload_not_available= "Offline";
+  };
+in [
+  (tasmota_plug "Bauarbeiterlampe" "plug")
+  (tasmota_plug "Blitzdings" "plug2")
+  (tasmota_plug "Fernseher" "plug3")
+  (tasmota_plug "Feuer" "plug4")
+  (tasmota_plug "Nachtlicht" "plug5")
+]