diff options
Diffstat (limited to 'lass/2configs/hass')
-rw-r--r-- | lass/2configs/hass/default.nix | 121 | ||||
-rw-r--r-- | lass/2configs/hass/lib.nix | 256 | ||||
-rw-r--r-- | lass/2configs/hass/pyscript/.gitignore | 1 | ||||
-rw-r--r-- | lass/2configs/hass/pyscript/default.nix | 26 | ||||
-rw-r--r-- | lass/2configs/hass/pyscript/shell.nix | 51 | ||||
-rw-r--r-- | lass/2configs/hass/rooms/bett.nix | 39 | ||||
-rw-r--r-- | lass/2configs/hass/rooms/essen.nix | 9 | ||||
-rw-r--r-- | lass/2configs/hass/rooms/nass.nix | 10 | ||||
-rw-r--r-- | lass/2configs/hass/zigbee.nix | 151 |
9 files changed, 0 insertions, 664 deletions
diff --git a/lass/2configs/hass/default.nix b/lass/2configs/hass/default.nix deleted file mode 100644 index cc8189f51..000000000 --- a/lass/2configs/hass/default.nix +++ /dev/null @@ -1,121 +0,0 @@ -{ config, lib, pkgs, ... }: -with import ./lib.nix { inherit lib; }; -let - dwdwfsapi = pkgs.python3Packages.buildPythonPackage rec { - pname = "dwdwfsapi"; - version = "1.0.3"; - - src = pkgs.python3Packages.fetchPypi { - inherit pname version; - sha256 = "0fcv79xiq0qr4kivhd68iqpgrsjc7djxqs2h543pyr0sdgb5nz9x"; - }; - - buildInputs = with pkgs.python3Packages; [ - requests ciso8601 - ]; - - # LC_ALL = "en_US.UTF-8"; - }; - -in { - imports = [ - ./pyscript - ./zigbee.nix - ./rooms/bett.nix - ./rooms/essen.nix - ./rooms/nass.nix - ]; - - krebs.iptables.tables.filter.INPUT.rules = [ - { predicate = "-i int0 -p tcp --dport 1883"; target = "ACCEPT"; } # mosquitto - { predicate = "-i docker0 -p tcp --dport 1883"; target = "ACCEPT"; } # mosquitto - { predicate = "-i int0 -p tcp --dport 8123"; target = "ACCEPT"; } # hass - { predicate = "-i int0 -p tcp --dport 1337"; target = "ACCEPT"; } # zigbee2mqtt frontend - { predicate = "-i retiolum -p tcp --dport 8123"; target = "ACCEPT"; } # hass - { predicate = "-i retiolum -p tcp --dport 1337"; target = "ACCEPT"; } # zigbee2mqtt frontend - { predicate = "-i wiregrill -p tcp --dport 8123"; target = "ACCEPT"; } # hass - ]; - - services.home-assistant = { - enable = true; - configWritable = true; - lovelaceConfigWritable = true; - config = let - tasmota_s20 = name: topic: { - platform = "mqtt"; - inherit name; - state_topic = "stat/${topic}/POWER"; - command_topic = "cmnd/${topic}/POWER"; - payload_on = "ON"; - payload_off = "OFF"; - }; - in { - homeassistant = { - name = "Home"; - time_zone = "Europe/Berlin"; - latitude = "52.46187"; - longitude = "13.41489"; - elevation = 90; - unit_system = "metric"; - customize = friendly_names; - }; - config = {}; - sun.elevation = 66; - shopping_list = {}; - discovery = {}; - frontend = {}; - http = {}; - mqtt = { - broker = "localhost"; - port = 1883; - client_id = "home-assistant"; - username = "gg23"; - password = "gg23-mqtt"; - keepalive = 60; - protocol = 3.1; - - discovery = true; - birth_message = { - topic = "/hass/status"; - payload = "online"; - }; - will_message = { - topic = "/hass/status"; - payload = "offline"; - }; - }; - sensor = [ - { - platform = "dwd_weather_warnings"; - region_name = "Berlin"; - } - ]; - switch = [ - (tasmota_s20 "TV" "tv") - (tasmota_s20 "Drucker Strom" "drucker") - (tasmota_s20 "Waschmaschine" "wasch") - (tasmota_s20 "Stereo Anlage" "stereo") - ]; - mobile_app = {}; - weather = [ - { - platform = "openweathermap"; - api_key = "xxx"; # TODO put into secrets - } - ]; - system_health = {}; - history = {}; - shopping_list = {}; - }; - }; - - services.mosquitto = { - enable = true; - listeners = [{ - acl = [ ]; - users.gg23 = { acl = [ "readwrite #" ]; password = "gg23-mqtt"; }; - }]; - }; - - environment.systemPackages = [ pkgs.mosquitto ]; -} diff --git a/lass/2configs/hass/lib.nix b/lass/2configs/hass/lib.nix deleted file mode 100644 index 1f9f9945d..000000000 --- a/lass/2configs/hass/lib.nix +++ /dev/null @@ -1,256 +0,0 @@ -{ lib, ... }: -rec { - lights = { - bett = "0x0017880106ed3bd8"; - essen = "0x0017880108327622"; - arbeit = "0x0017880106ee2865"; - nass = "0x00178801082e9f2f"; - }; - - switches = { - dimmer = { - bett = "0x00178801086ac38c"; - essen = "0x00178801086ad1fb"; - nass = "0x00178801086ac373"; - }; - }; - - sensors = { - movement = { - essen = "0x0017880106f772f2"; - nass = "0x0017880106f77f30"; - }; - }; - - friendly_names = - lib.mapAttrs' (n: v: lib.nameValuePair "light.${v}" { friendly_name = "l.${n}"; }) lights // - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "s.${n}_up"; }) switches.dimmer // - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "i.${n}_up"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "l.${n}_up"; }) lights // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "s.${n}_link"; }) switches.dimmer // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "i.${n}_link"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "l.${n}_link"; }) lights // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_battery" { friendly_name = "s.${n}_bat"; }) switches.dimmer // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_battery" { friendly_name = "i.${n}_bat"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_action" { friendly_name = "s.${n}_act"; }) switches.dimmer // - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_occupancy" { friendly_name = "i.${n}_move"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_occupancy" { friendly_name = "i.${n}_move"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_temperature" { friendly_name = "i.${n}_heat"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_temperature" { friendly_name = "i.${n}_heat"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_illuminance" { friendly_name = "i.${n}_lux"; }) sensors.movement // - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_illuminance" { friendly_name = "i.${n}_lux"; }) sensors.movement // - {}; - - detect_movement = name: sensor: light: delay: - let - id = name; - sensor_ = "binary_sensor.${sensor}_occupancy"; - light_ = "light.${light}"; - in { - input_boolean."${id}" = { - }; - timer."${id}" = { - duration = delay; - }; - automation = [ - # { - # alias = "debug detect_movement"; - # trigger = { - # platform = "state"; - # entity_id = sensor_; - # }; - # action = [ - # { - # service = "system_log.write"; - # data_template = { - # message = "XXXXXXXXXXXXXXXXXXXXXX {{ states('input_boolean.${sensor}_${light}_triggered') == 'on' }}"; - # #message = "XXXXXXXXXXXXXXXXXXXXXX {{ state_attr('trigger.to_state.state', 'illuminance') }}"; - # }; - # } - # ]; - # } - { - alias = "movement reset timer ${id}"; - trigger = { - platform = "state"; - entity_id = sensor_; - from = "off"; - to = "on"; - }; - action = [ - { - service = "timer.cancel"; - data_template.entity_id = "timer.${id}"; - } - ]; - } - { - alias = "movement on ${id}"; - trigger = { - platform = "state"; - entity_id = "binary_sensor.${sensor}_occupancy"; - from = "off"; - to = "on"; - }; - condition = { - condition = "and"; - conditions = [ - { - condition = "template"; - value_template = "{{ trigger.to_state.attributes.illuminance < 7500 }}"; - } - { - condition = "template"; - value_template = "{{ states('${light_}') == 'off' }}"; - } - ]; - }; - action = [ - { - service = "light.turn_on"; - data_template = { - entity_id = light_; - brightness = "100"; - }; - } - { delay = "0:00:02"; } - { - service = "input_boolean.turn_on"; - data_template.entity_id = "input_boolean.${id}"; - } - ]; - } - { - alias = "movement off ${id}"; - trigger = { - platform = "state"; - entity_id = sensor_; - from = "on"; - to = "off"; - }; - condition = { - condition = "template"; - value_template = "{{ states('input_boolean.${id}') == 'on' }}"; - }; - action = [ - { - service = "timer.start"; - entity_id = "timer.${id}"; - } - ]; - } - { - alias = "movement override ${id}"; - trigger = { - platform = "state"; - entity_id = light_; - }; - action = [ - { - service = "input_boolean.turn_off"; - data_template.entity_id = "input_boolean.${id}"; - } - { - service = "system_log.write"; - data_template = { - message = "XXXXXXXXXXXXXXXXXXXXXX {{ trigger }}"; - }; - } - ]; - } - { - alias = "movement expired ${id}"; - trigger = { - platform = "event"; - event_type = "timer.finished"; - event_data.entity_id = "timer.${id}"; - }; - action = [ - { - service = "light.turn_off"; - data_template = { - entity_id = light_; - }; - } - { - service = "input_boolean.turn_off"; - data_template.entity_id = "input_boolean.${id}"; - } - ]; - } - ]; - }; - - lightswitch = name: switch: light: { - automation = [ - { - alias = "lightswitch ${name} turn on"; - trigger = { - platform = "mqtt"; - topic = "zigbee/${switch}"; - }; - condition = { - condition = "or"; - conditions = [ - { - condition = "template"; - value_template = "{{ trigger.payload_json.action == 'on-press' }}"; - } - { - condition = "template"; - value_template = "{{ trigger.payload_json.action == 'up-press' }}"; - } - { - condition = "and"; - conditions = [ - { - condition = "template"; - value_template = "{{ trigger.payload_json.action == 'down-press' }}"; - } - { - condition = "template"; - value_template = "{{ trigger.payload_json.brightness > 30 }}"; - } - ]; - } - ]; - }; - action = [ - { - service = "light.turn_on"; - data_template = { - entity_id = "light.${light}"; - brightness = "{{ trigger.payload_json.brightness }}"; - }; - } - ]; - } - { - alias = "lightswitch ${name} turn off"; - trigger = { - platform = "mqtt"; - topic = "zigbee/${switch}"; - }; - condition = { - condition = "or"; - conditions = [ - { - condition = "template"; - value_template = "{{ trigger.payload_json.action == 'off-press' }}"; - } - { - condition = "template"; - value_template = "{{ trigger.payload_json.brightness < 30 }}"; - } - ]; - }; - action = { - service = "light.turn_off"; - data_template = { - entity_id = "light.${light}"; - }; - }; - } - ]; - }; -} diff --git a/lass/2configs/hass/pyscript/.gitignore b/lass/2configs/hass/pyscript/.gitignore deleted file mode 100644 index 282debf56..000000000 --- a/lass/2configs/hass/pyscript/.gitignore +++ /dev/null @@ -1 +0,0 @@ -hass_token diff --git a/lass/2configs/hass/pyscript/default.nix b/lass/2configs/hass/pyscript/default.nix deleted file mode 100644 index c56967e4b..000000000 --- a/lass/2configs/hass/pyscript/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - systemd.tmpfiles.rules = [ - "L+ /var/lib/hass/custom_components/pyscript - - - - ${pkgs.fetchzip { - url = "https://github.com/custom-components/pyscript/releases/download/1.3.2/hass-custom-pyscript.zip"; - sha256 = "0cqdjj46s5xp4mqxb0ic790jm1xp3z0zr2n9f7bsfl5zpvdshl8z"; - stripRoot = false; - }}" - ]; - - services.home-assistant = { - package = (pkgs.home-assistant.overrideAttrs (old: { - doInstallCheck = false; - })).override { - extraPackages = pp: [ pp.croniter ]; - }; - config.pyscript = { - allow_all_imports = true; - hass_is_global = true; - }; - }; - - networking.firewall.interfaces.retiolum.allowedTCPPortRanges = [ - { from = 50321; to = 50341; } # for ipython interactive debugging - ]; -} diff --git a/lass/2configs/hass/pyscript/shell.nix b/lass/2configs/hass/pyscript/shell.nix deleted file mode 100644 index 3cfac0275..000000000 --- a/lass/2configs/hass/pyscript/shell.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ pkgs ? import <nixpkgs> {} }: let - - hass_host = "styx.r"; - hass_token = builtins.readFile ./hass_token; - - mach-nix = import (builtins.fetchGit { - url = "https://github.com/DavHau/mach-nix/"; - ref = "refs/tags/3.4.0"; - }) { - pkgs = pkgs; - }; - pyenv = mach-nix.mkPython { - requirements = '' - hass_pyscript_kernel - ''; - }; - jupyter = import (builtins.fetchGit { - url = https://github.com/tweag/jupyterWith; - ref = "master"; - }) {}; - - pyscriptKernel = { - spec = pkgs.runCommand "pyscript" {} '' - mkdir -p $out/kernels/pyscript - cp ${kernel_json} $out/kernels/pyscript/kernel.json - cp ${pyscript_conf} $out/kernels/pyscript/pyscript.conf - ''; - runtimePackages = [ pyenv ]; - }; - - kernel_json = pkgs.writeText "kernel.json" (builtins.toJSON { - argv = [ - "${pyenv}/bin/python3" "-m" "hass_pyscript_kernel" - "-f" "{connection_file}" - ]; - display_name = "hass_pyscript"; - language = "python"; - }); - - pyscript_conf = pkgs.writeText "pyscript.conf" '' - [homeassistant] - hass_host = ${hass_host} - hass_url = http://''${hass_host}:8123 - hass_token = ${hass_token} - ''; - - jupyterEnvironment = jupyter.jupyterlabWith { - kernels = [ pyscriptKernel ]; - }; - -in jupyterEnvironment.env diff --git a/lass/2configs/hass/rooms/bett.nix b/lass/2configs/hass/rooms/bett.nix deleted file mode 100644 index 026c5722c..000000000 --- a/lass/2configs/hass/rooms/bett.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ lib, ... }: -with import ../lib.nix { inherit lib; }; - -{ - services.home-assistant.config = lib.mkMerge [ - (lightswitch "bett" switches.dimmer.bett lights.bett) - ]; - - # lass.hass.love = { - # resources = [{ - # url = "https://raw.githubusercontent.com/ljmerza/light-entity-card/master/dist/light-entity-card.js.map"; - # type = "js"; - # }]; - # views = [{ - # title = "bett"; - # cards = [ - # { - # type = "markdown"; - # title = "hello world"; - # content = "This is just a test"; - # } - # { - # type = "light"; - # entity = "light.${lights.bett}"; - # } - # { - # type = "custom:light-entity-card"; - # entity = "light.${lights.bett}"; - # } - # { - # type = "history-graph"; - # entities = [ - # "light.${lights.bett}" - # ]; - # } - # ]; - # }]; - # }; -} diff --git a/lass/2configs/hass/rooms/essen.nix b/lass/2configs/hass/rooms/essen.nix deleted file mode 100644 index 293935f65..000000000 --- a/lass/2configs/hass/rooms/essen.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ lib, ... }: -with import ../lib.nix { inherit lib; }; - -{ - services.home-assistant.config = lib.mkMerge [ - (detect_movement "essen" sensors.movement.essen lights.essen 70) - (lightswitch "essen" switches.dimmer.essen lights.essen) - ]; -} diff --git a/lass/2configs/hass/rooms/nass.nix b/lass/2configs/hass/rooms/nass.nix deleted file mode 100644 index b23ba86cd..000000000 --- a/lass/2configs/hass/rooms/nass.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ lib, ... }: -with import ../lib.nix { inherit lib; }; - -{ - services.home-assistant.config = lib.mkMerge [ - (detect_movement "nass" sensors.movement.nass lights.nass 100) - (lightswitch "nass" switches.dimmer.nass lights.nass) - ]; -} - diff --git a/lass/2configs/hass/zigbee.nix b/lass/2configs/hass/zigbee.nix deleted file mode 100644 index 8fc02263b..000000000 --- a/lass/2configs/hass/zigbee.nix +++ /dev/null @@ -1,151 +0,0 @@ -{config, pkgs, lib, ...}: let - - unstable-pkgs = import <nixpkgs-unstable> {}; - -in { - # symlink the zigbee controller - services.udev.extraRules = '' - SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dialout" - SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="cc2652", MODE="0660", GROUP="dialout" - ''; - - # needed to use unstable package - systemd.services.zigbee2mqtt.environment.ZIGBEE2MQTT_DATA = "/var/lib/zigbee2mqtt"; - - services.zigbee2mqtt = { - enable = true; - package = unstable-pkgs.zigbee2mqtt; - settings = { - homeassistant = true; - frontend.port = 1337; - experimental.new_api = true; - permit_join = false; - mqtt = { - discovery = true; - base_topic = "zigbee"; - server = "mqtt://10.42.0.1"; - user = "gg23"; - password = "gg23-mqtt"; - }; - serial = { - port = "/dev/cc2652"; - # disable_led = true; - }; - advanced = { - pan_id = 4222; - }; - }; - }; - - services.home-assistant.config = { - sensor = [ - # Sensor for monitoring the bridge state - { - platform = "mqtt"; - name = "Zigbee2mqtt Bridge state"; - state_topic = "/zigbee2mqtt/bridge/state"; - icon = "mdi:router-wireless"; - } - # Sensor for Showing the Zigbee2mqtt Version - { - platform = "mqtt"; - name = "Zigbee2mqtt Version"; - state_topic = "/zigbee2mqtt/bridge/config"; - value_template = "{{ value_json.version }}"; - icon = "mdi:zigbee"; - } - # Sensor for Showing the Coordinator Version - { - platform = "mqtt"; - name = "Coordinator Version"; - state_topic = "/zigbee2mqtt/bridge/config"; - value_template = "{{ value_json.coordinator }}"; - icon = "mdi:chip"; - } - ]; - switch = [ - { - platform = "mqtt"; - name = "zigbee2mqtt_join"; - state_topic = "/zigbee2mqtt/bridge/config/permit_join"; - command_topic = "/zigbee2mqtt/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 = "/zigbee2mqtt/bridge/config/log_level"; - # }; - # } - # ]; - #} - # Automation to start timer when enable join is turned on - { - id = "zigbee_join_enabled"; - alias = ""; - trigger = { - platform = "state"; - entity_id = "switch.zigbee2mqtt_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"; - trigger = [ - { - platform = "event"; - event_type = "timer.finished"; - event_data.entity_id = "timer.zigbee_permit_join"; - } - { - platform = "state"; - entity_id = "switch.zigbee2mqtt_join"; - to = "off"; - } - ]; - action = [ - { service = "timer.cancel"; - data.entity_id = "timer.zigbee_permit_join"; - } - { service = "switch.turn_off"; - entity_id = "switch.zigbee2mqtt_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; - }; - }; -} - |