summaryrefslogtreecommitdiffstats
path: root/makefu/2configs/bureautomation
diff options
context:
space:
mode:
Diffstat (limited to 'makefu/2configs/bureautomation')
-rw-r--r--makefu/2configs/bureautomation/automation/philosophische-tuer.nix98
-rw-r--r--makefu/2configs/bureautomation/default.nix141
-rw-r--r--makefu/2configs/bureautomation/device_tracker/openwrt.nix1
-rw-r--r--makefu/2configs/bureautomation/sensor/outside.nix13
-rw-r--r--makefu/2configs/bureautomation/zigbee2mqtt/default.nix33
-rw-r--r--makefu/2configs/bureautomation/zigbee2mqtt/hass.nix130
6 files changed, 298 insertions, 118 deletions
diff --git a/makefu/2configs/bureautomation/automation/philosophische-tuer.nix b/makefu/2configs/bureautomation/automation/philosophische-tuer.nix
new file mode 100644
index 000000000..8c3fed6de
--- /dev/null
+++ b/makefu/2configs/bureautomation/automation/philosophische-tuer.nix
@@ -0,0 +1,98 @@
+{ config, pkgs, lib, ... }:
+
+let
+ short_threshold = 30; #seconds
+ long_threshold = 30; #minutes
+ sensor = "binary_sensor.buerotuer_contact";
+
+ # get the list of all
+ name = "tueraudio";
+ prefix = "http://localhost:8123/local/${name}";
+ audiodir = "${config.services.home-assistant.configDir}/www/${name}";
+ recordrepo = pkgs.fetchFromGitHub {
+ owner = "makefu";
+ repo = "philosophische_tuer";
+ rev = "17544c6";
+ sha256 = "0bm0697fyf6s05c6yw6y25cyck04rlxj1dgazkq8mfqk6756v2bq";
+ };
+ samples = user: lib.mapAttrsToList
+ (file: _: ''"${prefix}/${user}/${file}"'')
+ (builtins.readDir (toString ( recordrepo+ "/recordings/${user}")));
+ random_tuerspruch = ''{{'' + (lib.concatStringsSep "," ((samples "Felix") ++ (samples "Sofia") ++ (samples "Markus"))) + ''| random}}''; # TODO read from derivation
+in
+{
+ systemd.services.copy-philosophische-tuersounds = {
+ description = "copy philosophische tuer";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "oneshot";
+ ExecStart = pkgs.writeDash "update-samples" ''
+ rm -rf "${audiodir}"
+ cp -vr "${recordrepo}/recordings" "${audiodir}"
+ '';
+ };
+ };
+ services.home-assistant.config = {
+ media_extractor = { };
+ script."philosophische_tuer" = {
+ alias = "Durchsage der philosophischen Tür";
+ sequence = [
+ { service = "media_player.play_media";
+ data = {
+ entity_id = "media_player.mpd";
+ media_content_type = "playlist";
+ media_content_id = "ansage";
+ };
+ }
+ { delay.seconds = 5; }
+ { service = "media_extractor.play_media";
+ entity_id = "media_player.mpd";
+ data_template = {
+ media_content_id = random_tuerspruch;
+ media_content_type = "MUSIC";
+ };
+ }
+ ];
+ };
+ automation =
+ [
+ {
+ alias = "Tür offen seit ${toString short_threshold} sekunden";
+ trigger =
+ { platform = "state";
+ entity_id = sensor;
+ to = "on";
+ for.seconds = 60;
+ };
+ action = [
+ { service = "homeassistant.turn_on";
+ entity_id = "script.philosophische_tuer";
+ }
+ ];
+ }
+ {
+ alias = "Tür offen seit ${toString long_threshold} minuten";
+ trigger =
+ { platform = "state";
+ entity_id = sensor;
+ to = "on";
+ for.minutes = long_threshold;
+ };
+
+ action = [
+ { service = "homeassistant.turn_on";
+ entity_id = "script.philosophische_tuer" ;
+ }
+ { service = "tts.google_say";
+ entity_id = "media_player.mpd";
+ data_template = {
+ message = "BEEP BOOP - Die Tür ist schon seit ${toString long_threshold} Minuten offen! Student Nummer {{ range(1,500) | random }}, bitte schliesse die Tür";
+ language = "de";
+ };
+ }
+ ];
+ }
+ ];
+ };
+
+}
diff --git a/makefu/2configs/bureautomation/default.nix b/makefu/2configs/bureautomation/default.nix
index 7e8b6a4d3..7eb297879 100644
--- a/makefu/2configs/bureautomation/default.nix
+++ b/makefu/2configs/bureautomation/default.nix
@@ -1,12 +1,15 @@
{ config, pkgs, lib, ... }:
let
kodi-host = "192.168.8.11";
+ unstable = import <nixpkgs-unstable> {};
in {
imports = [
./ota.nix
./comic-updater.nix
./puppy-proxy.nix
+ ./zigbee2mqtt
+
# hass config
## complex configs
./multi/daily-standup.nix
@@ -39,15 +42,26 @@ in {
./automation/bureau-shutdown.nix
./automation/nachtlicht.nix
./automation/schlechteluft.nix
+ ./automation/philosophische-tuer.nix
./automation/hass-restart.nix
./device_tracker/openwrt.nix
./person/team.nix
];
+
networking.firewall.allowedTCPPorts = [ 8123 ];
state = [ "/var/lib/hass/known_devices.yaml" ];
services.home-assistant = {
enable = true;
+ package = (unstable.home-assistant.overrideAttrs (old: {
+ doInstallCheck = false;
+ })).override {
+ extraPackages = p: [
+ # TODO: put somewhere else
+ (p.callPackage <stockholm/makefu/2configs/home/ham/deps/dwdwfsapi.nix> {})
+ (p.callPackage <stockholm/makefu/2configs/home/ham/deps/pykodi.nix> {})
+ p.APScheduler ];
+ };
autoExtraComponents = true;
config = {
config = {};
@@ -109,13 +123,13 @@ in {
name = "wbob-kodi";
host = kodi-host;
}
- {
- platform = "telegram";
- name = "telegrambot";
- chat_id = builtins.elemAt
- (builtins.fromJSON (builtins.readFile
- <secrets/hass/telegram-bot.json>)).allowed_chat_ids 0;
- }
+ #{
+ # platform = "telegram";
+ # name = "telegrambot";
+ # chat_id = builtins.elemAt
+ # (builtins.fromJSON (builtins.readFile
+ # <secrets/hass/telegram-bot.json>)).allowed_chat_ids 0;
+ #}
];
media_player = [
{ platform = "kodi";
@@ -126,7 +140,7 @@ in {
}
];
- sensor = [{ platform = "version"; }]; # pyhaversion
+ # sensor = [{ platform = "version"; }]; # pyhaversion
@@ -148,113 +162,16 @@ in {
api_key = builtins.readFile <secrets/hass/voicerss.apikey>;
language = "de-de";
}
- { platform = "picotts";
- language = "de-DE";
- }
+ #{ platform = "picotts";
+ # language = "de-DE";
+ #}
];
recorder = {};
sun = {};
- telegram_bot = [
- (builtins.fromJSON
- (builtins.readFile <secrets/hass/telegram-bot.json>))
- ];
- group =
- { default_view =
- { view = "yes";
- entities = [
- "group.sensors"
- "group.camera"
- "group.outside"
- "group.team"
- "group.nachtlicht"
- "group.switches"
- "group.aramark"
- ];
- };
- automation = [];
-
- switches = [
- "switch.bauarbeiterlampe"
- "switch.blitzdings"
- "switch.fernseher"
- "switch.feuer"
- "switch.frosch_blasen"
- "light.status_felix"
- # "light.status_daniel"
- # "light.buslicht"
- ];
- team = [
- "person.thorsten"
- #"device_tracker.thorsten_phone"
- "person.felix"
- "person.ecki"
- "person.daniel"
- # "person.carsten"
- "person.thierry"
- "person.frank"
- "person.emeka"
- "person.tancrede"
- #"device_tracker.felix_phone"
- #"device_tracker.ecki_tablet"
- #"device_tracker.daniel_phone"
- #"device_tracker.carsten_phone"
- #"device_tracker.thierry_phone"
- #"device_tracker.frank_phone"
- #"device_tracker.emeka_phone"
- # "person.thorsten"
- # "person.felix"
- # "person.ecki"
- # "person.daniel"
- ];
- camera = [
- "camera.Baumarkt"
- "camera.Autobahn_Heilbronn"
- "camera.Autobahn_Singen"
- "camera.puppies"
- "camera.poorly_drawn_lines"
- "camera.xkcd"
- ];
- nachtlicht = [
- "switch.nachtlicht_a"
- "switch.nachtlicht_b"
- "switch.nachtlicht_c"
- "switch.nachtlicht_d"
- ];
- Aramark = [
- "binary_sensor.pommes"
- "sensor.menu_1"
- "sensor.menu_1_text"
- "sensor.menu_1_preis"
- "sensor.menu_2"
- "sensor.menu_2_text"
- "sensor.menu_2_preis"
- "sensor.aktion"
- "sensor.aktion_text"
- "sensor.aktion_preis"
- "sensor.mercato"
- "sensor.mercato_text"
- "sensor.mercato_preis"
- ];
- sensors = [
- "media_player.kodi"
- "timer.felix_10h"
- "timer.frank_10h"
- "sensor.easy2_dht22_humidity"
- "sensor.easy2_dht22_temperature"
- "sensor.air_quality"
- # "binary_sensor.aramark_pommes"
- # "binary_sensor.redbutton"
- ];
- outside = [
- # "sensor.ditzingen_pm10"
- # "sensor.ditzingen_pm25"
- "sensor.dark_sky_temperature"
- "sensor.dark_sky_humidity"
- "sensor.dark_sky_uv_index"
- # "sensor.dark_sky_pressure"
- "sensor.dark_sky_hourly_summary"
- ];
- };
+ #telegram_bot = [
+ # (builtins.fromJSON
+ # (builtins.readFile <secrets/hass/telegram-bot.json>))
+ #];
# only for automation
# feedreader.urls = [ "http://www.heise.de/security/rss/news-atom.xml" ];
# we don't use imports because the expressions do not merge in
diff --git a/makefu/2configs/bureautomation/device_tracker/openwrt.nix b/makefu/2configs/bureautomation/device_tracker/openwrt.nix
index 6b0144129..b597548ef 100644
--- a/makefu/2configs/bureautomation/device_tracker/openwrt.nix
+++ b/makefu/2configs/bureautomation/device_tracker/openwrt.nix
@@ -12,7 +12,6 @@
consider_home = 300; # 5 minutes timeout
new_device_defaults = {
track_new_devices = true;
- hide_if_away = false;
};
}
];
diff --git a/makefu/2configs/bureautomation/sensor/outside.nix b/makefu/2configs/bureautomation/sensor/outside.nix
index b5d25ecd3..e7b4d9a7c 100644
--- a/makefu/2configs/bureautomation/sensor/outside.nix
+++ b/makefu/2configs/bureautomation/sensor/outside.nix
@@ -20,10 +20,13 @@
units = "si" ;
scan_interval = "00:30:00";
}
- { platform = "luftdaten";
- name = "Ditzingen";
- sensorid = "5341";
- monitored_conditions = [ "P1" "P2" ];
- }
];
+ services.home-assistant.config.luftdaten = {
+ sensor_id = "26237";
+ show_on_map = true;
+ sensors.monitored_conditions = [
+ "P1"
+ "P2"
+ ];
+ };
}
diff --git a/makefu/2configs/bureautomation/zigbee2mqtt/default.nix b/makefu/2configs/bureautomation/zigbee2mqtt/default.nix
new file mode 100644
index 000000000..ba10ae74b
--- /dev/null
+++ b/makefu/2configs/bureautomation/zigbee2mqtt/default.nix
@@ -0,0 +1,33 @@
+{config, pkgs, lib, ...}:
+
+let
+ dataDir = "/var/lib/zigbee2mqtt";
+in
+ {
+ # symlink the zigbee controller
+ services.udev.extraRules = ''
+ SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dialout"
+ '';
+
+ services.zigbee2mqtt = {
+ enable = true;
+ inherit dataDir;
+ config = {
+ permit_join = true;
+ serial.port = "/dev/cc2531";
+ homeassistant = true;
+ };
+ };
+
+ state = [ "${dataDir}/devices.yaml" "${dataDir}/state.json" ];
+
+ systemd.services.zigbee2mqtt = {
+ # override automatic configuration.yaml deployment
+ environment.ZIGBEE2MQTT_DATA = dataDir;
+ after = [
+ "home-assistant.service"
+ "mosquitto.service"
+ "network-online.target"
+ ];
+ };
+}
diff --git a/makefu/2configs/bureautomation/zigbee2mqtt/hass.nix b/makefu/2configs/bureautomation/zigbee2mqtt/hass.nix
new file mode 100644
index 000000000..faf864ba6
--- /dev/null
+++ b/makefu/2configs/bureautomation/zigbee2mqtt/hass.nix
@@ -0,0 +1,130 @@
+# provides:
+# switch
+# automation
+# binary_sensor
+# sensor
+# input_select
+# timer
+let
+ inherit (import ../lib) zigbee;
+ prefix = zigbee.prefix;
+in
+{
+ services.home-assistant.config = {
+ sensor =
+
+ [
+ # Sensor for monitoring the bridge state
+ {
+ platform = "mqtt";
+ name = "Zigbee2mqtt Bridge state";
+ state_topic = "${prefix}/bridge/state";
+ icon = "mdi:router-wireless";
+ }
+ # Sensor for Showing the Zigbee2mqtt Version
+ {
+ platform = "mqtt";
+ name = "Zigbee2mqtt Version";
+ state_topic = "${prefix}/bridge/config";
+ value_template = "{{ value_json.version }}";
+ icon = "mdi:zigbee";
+ }
+ # Sensor for Showing the Coordinator Version
+ {
+ platform = "mqtt";
+ name = "Coordinator Version";
+ state_topic = "${prefix}/bridge/config";
+ value_template = "{{ value_json.coordinator }}";
+ icon = "mdi:chip";
+ }
+ ];
+ switch = [
+ {
+ platform = "mqtt";
+ name = "Zigbee2mqtt Main join";
+ state_topic = "${prefix}/bridge/config/permit_join";
+ command_topic = "${prefix}/bridge/config/permit_join";
+ payload_on = "true";
+ payload_off = "false";
+ }
+ ];
+ automation = [
+ {
+ alias = "Zigbee2mqtt Log Level";
+ initial_state = "on";
+ trigger = {
+ platform = "state";
+ entity_id = "input_select.zigbee2mqtt_log_level";
+ };
+ action = [
+ {
+ service = "mqtt.publish";
+ data = {
+ payload_template = "{{ states('input_select.zigbee2mqtt_log_level') }}";
+ topic = "${prefix}/bridge/config/log_level";
+ };
+ }
+ ];
+ }
+ # Automation to start timer when enable join is turned on
+ {
+ id = "zigbee_join_enabled";
+ alias = "Zigbee Join Enabled";
+ trigger =
+ {
+ platform = "state";
+ entity_id = "switch.zigbee2mqtt_main_join";
+ to = "on";
+ };
+ action =
+ {
+ service = "timer.start";
+ entity_id = "timer.zigbee_permit_join";
+ };
+ }
+ # # Automation to stop timer when switch turned off and turn off switch when timer finished
+ {
+ id = "zigbee_join_disabled";
+ alias = "Zigbee Join Disabled";
+ trigger = [
+ {
+ platform = "event";
+ event_type = "timer.finished";
+ event_data.entity_id = "timer.zigbee_permit_join";
+ }
+ {
+ platform = "state";
+ entity_id = "switch.zigbee2mqtt_main_join";
+ to = "off";
+ }
+ ];
+ action = [
+ { service = "timer.cancel";
+ data.entity_id = "timer.zigbee_permit_join";
+ }
+ { service = "switch.turn_off";
+ entity_id = "switch.zigbee2mqtt_main_join";
+ }
+ ];
+ }
+ ];
+ input_select.zigbee2mqtt_log_level =
+ {
+ name = "Zigbee2mqtt Log Level";
+ options = [
+ "debug"
+ "info"
+ "warn"
+ "error"
+ ];
+ initial = "info";
+ icon = "mdi:format-list-bulleted";
+ };
+
+ timer.zigbee_permit_join =
+ {
+ name = "Zigbee Time remaining";
+ duration = 120;
+ };
+ };
+}