This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

hass: cleanup

+1 -397
+1 -5
2configs/hass/default.nix
··· 1 - { config, lib, pkgs, ... }: 1 + { pkgs, ... }: 2 2 { 3 3 imports = [ 4 - ./pyscript 5 4 ./zigbee.nix 6 - ./rooms/bett.nix 7 - ./rooms/essen.nix 8 - ./rooms/nass.nix 9 5 ]; 10 6 11 7 krebs.iptables.tables.filter.INPUT.rules = [
-256
2configs/hass/lib.nix
··· 1 - { lib, ... }: 2 - rec { 3 - lights = { 4 - bett = "l_bett"; 5 - essen = "l_essen"; 6 - arbeit = "l_arbeit"; 7 - nass = "l_nass"; 8 - }; 9 - 10 - switches = { 11 - dimmer = { 12 - bett = "i_bett"; 13 - essen = "i_essen"; 14 - nass = "i_nass"; 15 - }; 16 - }; 17 - 18 - sensors = { 19 - movement = { 20 - essen = "s_essen"; 21 - nass = "s_nass"; 22 - }; 23 - }; 24 - 25 - friendly_names = 26 - lib.mapAttrs' (n: v: lib.nameValuePair "light.${v}" { friendly_name = "l.${n}"; }) lights // 27 - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "s.${n}_up"; }) switches.dimmer // 28 - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "i.${n}_up"; }) sensors.movement // 29 - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_update_available" { friendly_name = "l.${n}_up"; }) lights // 30 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "s.${n}_link"; }) switches.dimmer // 31 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "i.${n}_link"; }) sensors.movement // 32 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_linkquality" { friendly_name = "l.${n}_link"; }) lights // 33 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_battery" { friendly_name = "s.${n}_bat"; }) switches.dimmer // 34 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_battery" { friendly_name = "i.${n}_bat"; }) sensors.movement // 35 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_action" { friendly_name = "s.${n}_act"; }) switches.dimmer // 36 - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_occupancy" { friendly_name = "i.${n}_move"; }) sensors.movement // 37 - lib.mapAttrs' (n: v: lib.nameValuePair "binary_sensor.${v}_occupancy" { friendly_name = "i.${n}_move"; }) sensors.movement // 38 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_temperature" { friendly_name = "i.${n}_heat"; }) sensors.movement // 39 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_temperature" { friendly_name = "i.${n}_heat"; }) sensors.movement // 40 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_illuminance" { friendly_name = "i.${n}_lux"; }) sensors.movement // 41 - lib.mapAttrs' (n: v: lib.nameValuePair "sensor.${v}_illuminance" { friendly_name = "i.${n}_lux"; }) sensors.movement // 42 - {}; 43 - 44 - detect_movement = name: sensor: light: delay: 45 - let 46 - id = name; 47 - sensor_ = "binary_sensor.${sensor}_occupancy"; 48 - light_ = "light.${light}"; 49 - in { 50 - input_boolean."${id}" = { 51 - }; 52 - timer."${id}" = { 53 - duration = delay; 54 - }; 55 - automation = [ 56 - # { 57 - # alias = "debug detect_movement"; 58 - # trigger = { 59 - # platform = "state"; 60 - # entity_id = sensor_; 61 - # }; 62 - # action = [ 63 - # { 64 - # service = "system_log.write"; 65 - # data_template = { 66 - # message = "XXXXXXXXXXXXXXXXXXXXXX {{ states('input_boolean.${sensor}_${light}_triggered') == 'on' }}"; 67 - # #message = "XXXXXXXXXXXXXXXXXXXXXX {{ state_attr('trigger.to_state.state', 'illuminance') }}"; 68 - # }; 69 - # } 70 - # ]; 71 - # } 72 - { 73 - alias = "movement reset timer ${id}"; 74 - trigger = { 75 - platform = "state"; 76 - entity_id = sensor_; 77 - from = "off"; 78 - to = "on"; 79 - }; 80 - action = [ 81 - { 82 - service = "timer.cancel"; 83 - data_template.entity_id = "timer.${id}"; 84 - } 85 - ]; 86 - } 87 - { 88 - alias = "movement on ${id}"; 89 - trigger = { 90 - platform = "state"; 91 - entity_id = "binary_sensor.${sensor}_occupancy"; 92 - from = "off"; 93 - to = "on"; 94 - }; 95 - condition = { 96 - condition = "and"; 97 - conditions = [ 98 - { 99 - condition = "template"; 100 - value_template = "{{ trigger.to_state.attributes.illuminance < 7500 }}"; 101 - } 102 - { 103 - condition = "template"; 104 - value_template = "{{ states('${light_}') == 'off' }}"; 105 - } 106 - ]; 107 - }; 108 - action = [ 109 - { 110 - service = "light.turn_on"; 111 - data_template = { 112 - entity_id = light_; 113 - brightness = "100"; 114 - }; 115 - } 116 - { delay = "0:00:02"; } 117 - { 118 - service = "input_boolean.turn_on"; 119 - data_template.entity_id = "input_boolean.${id}"; 120 - } 121 - ]; 122 - } 123 - { 124 - alias = "movement off ${id}"; 125 - trigger = { 126 - platform = "state"; 127 - entity_id = sensor_; 128 - from = "on"; 129 - to = "off"; 130 - }; 131 - condition = { 132 - condition = "template"; 133 - value_template = "{{ states('input_boolean.${id}') == 'on' }}"; 134 - }; 135 - action = [ 136 - { 137 - service = "timer.start"; 138 - entity_id = "timer.${id}"; 139 - } 140 - ]; 141 - } 142 - { 143 - alias = "movement override ${id}"; 144 - trigger = { 145 - platform = "state"; 146 - entity_id = light_; 147 - }; 148 - action = [ 149 - { 150 - service = "input_boolean.turn_off"; 151 - data_template.entity_id = "input_boolean.${id}"; 152 - } 153 - { 154 - service = "system_log.write"; 155 - data_template = { 156 - message = "XXXXXXXXXXXXXXXXXXXXXX {{ trigger }}"; 157 - }; 158 - } 159 - ]; 160 - } 161 - { 162 - alias = "movement expired ${id}"; 163 - trigger = { 164 - platform = "event"; 165 - event_type = "timer.finished"; 166 - event_data.entity_id = "timer.${id}"; 167 - }; 168 - action = [ 169 - { 170 - service = "light.turn_off"; 171 - data_template = { 172 - entity_id = light_; 173 - }; 174 - } 175 - { 176 - service = "input_boolean.turn_off"; 177 - data_template.entity_id = "input_boolean.${id}"; 178 - } 179 - ]; 180 - } 181 - ]; 182 - }; 183 - 184 - lightswitch = name: switch: light: { 185 - automation = [ 186 - { 187 - alias = "lightswitch ${name} turn on"; 188 - trigger = { 189 - platform = "mqtt"; 190 - topic = "zigbee/${switch}"; 191 - }; 192 - condition = { 193 - condition = "or"; 194 - conditions = [ 195 - { 196 - condition = "template"; 197 - value_template = "{{ trigger.payload_json.action == 'on-press' }}"; 198 - } 199 - { 200 - condition = "template"; 201 - value_template = "{{ trigger.payload_json.action == 'up-press' }}"; 202 - } 203 - { 204 - condition = "and"; 205 - conditions = [ 206 - { 207 - condition = "template"; 208 - value_template = "{{ trigger.payload_json.action == 'down-press' }}"; 209 - } 210 - { 211 - condition = "template"; 212 - value_template = "{{ trigger.payload_json.brightness > 30 }}"; 213 - } 214 - ]; 215 - } 216 - ]; 217 - }; 218 - action = [ 219 - { 220 - service = "light.turn_on"; 221 - data_template = { 222 - entity_id = "light.${light}"; 223 - brightness = "{{ trigger.payload_json.brightness }}"; 224 - }; 225 - } 226 - ]; 227 - } 228 - { 229 - alias = "lightswitch ${name} turn off"; 230 - trigger = { 231 - platform = "mqtt"; 232 - topic = "zigbee/${switch}"; 233 - }; 234 - condition = { 235 - condition = "or"; 236 - conditions = [ 237 - { 238 - condition = "template"; 239 - value_template = "{{ trigger.payload_json.action == 'off-press' }}"; 240 - } 241 - { 242 - condition = "template"; 243 - value_template = "{{ trigger.payload_json.brightness < 30 }}"; 244 - } 245 - ]; 246 - }; 247 - action = { 248 - service = "light.turn_off"; 249 - data_template = { 250 - entity_id = "light.${light}"; 251 - }; 252 - }; 253 - } 254 - ]; 255 - }; 256 - }
-1
2configs/hass/pyscript/.gitignore
··· 1 - hass_token
-26
2configs/hass/pyscript/default.nix
··· 1 - { config, lib, pkgs, ... }: 2 - { 3 - systemd.tmpfiles.rules = [ 4 - "L+ /var/lib/hass/custom_components/pyscript - - - - ${pkgs.fetchzip { 5 - url = "https://github.com/custom-components/pyscript/releases/download/1.3.2/hass-custom-pyscript.zip"; 6 - sha256 = "0cqdjj46s5xp4mqxb0ic790jm1xp3z0zr2n9f7bsfl5zpvdshl8z"; 7 - stripRoot = false; 8 - }}" 9 - ]; 10 - 11 - services.home-assistant = { 12 - package = (pkgs.home-assistant.overrideAttrs (old: { 13 - doInstallCheck = false; 14 - })).override { 15 - extraPackages = pp: [ pp.croniter ]; 16 - }; 17 - config.pyscript = { 18 - allow_all_imports = true; 19 - hass_is_global = true; 20 - }; 21 - }; 22 - 23 - networking.firewall.interfaces.retiolum.allowedTCPPortRanges = [ 24 - { from = 50321; to = 50341; } # for ipython interactive debugging 25 - ]; 26 - }
-51
2configs/hass/pyscript/shell.nix
··· 1 - { pkgs ? import <nixpkgs> {} }: let 2 - 3 - hass_host = "styx.r"; 4 - hass_token = builtins.readFile ./hass_token; 5 - 6 - mach-nix = import (builtins.fetchGit { 7 - url = "https://github.com/DavHau/mach-nix/"; 8 - ref = "refs/tags/3.4.0"; 9 - }) { 10 - pkgs = pkgs; 11 - }; 12 - pyenv = mach-nix.mkPython { 13 - requirements = '' 14 - hass_pyscript_kernel 15 - ''; 16 - }; 17 - jupyter = import (builtins.fetchGit { 18 - url = https://github.com/tweag/jupyterWith; 19 - ref = "master"; 20 - }) {}; 21 - 22 - pyscriptKernel = { 23 - spec = pkgs.runCommand "pyscript" {} '' 24 - mkdir -p $out/kernels/pyscript 25 - cp ${kernel_json} $out/kernels/pyscript/kernel.json 26 - cp ${pyscript_conf} $out/kernels/pyscript/pyscript.conf 27 - ''; 28 - runtimePackages = [ pyenv ]; 29 - }; 30 - 31 - kernel_json = pkgs.writeText "kernel.json" (builtins.toJSON { 32 - argv = [ 33 - "${pyenv}/bin/python3" "-m" "hass_pyscript_kernel" 34 - "-f" "{connection_file}" 35 - ]; 36 - display_name = "hass_pyscript"; 37 - language = "python"; 38 - }); 39 - 40 - pyscript_conf = pkgs.writeText "pyscript.conf" '' 41 - [homeassistant] 42 - hass_host = ${hass_host} 43 - hass_url = http://''${hass_host}:8123 44 - hass_token = ${hass_token} 45 - ''; 46 - 47 - jupyterEnvironment = jupyter.jupyterlabWith { 48 - kernels = [ pyscriptKernel ]; 49 - }; 50 - 51 - in jupyterEnvironment.env
-39
2configs/hass/rooms/bett.nix
··· 1 - { lib, ... }: 2 - with import ../lib.nix { inherit lib; }; 3 - 4 - { 5 - services.home-assistant.config = lib.mkMerge [ 6 - (lightswitch "bett" switches.dimmer.bett lights.bett) 7 - ]; 8 - 9 - # lass.hass.love = { 10 - # resources = [{ 11 - # url = "https://raw.githubusercontent.com/ljmerza/light-entity-card/master/dist/light-entity-card.js.map"; 12 - # type = "js"; 13 - # }]; 14 - # views = [{ 15 - # title = "bett"; 16 - # cards = [ 17 - # { 18 - # type = "markdown"; 19 - # title = "hello world"; 20 - # content = "This is just a test"; 21 - # } 22 - # { 23 - # type = "light"; 24 - # entity = "light.${lights.bett}"; 25 - # } 26 - # { 27 - # type = "custom:light-entity-card"; 28 - # entity = "light.${lights.bett}"; 29 - # } 30 - # { 31 - # type = "history-graph"; 32 - # entities = [ 33 - # "light.${lights.bett}" 34 - # ]; 35 - # } 36 - # ]; 37 - # }]; 38 - # }; 39 - }
-9
2configs/hass/rooms/essen.nix
··· 1 - { lib, ... }: 2 - with import ../lib.nix { inherit lib; }; 3 - 4 - { 5 - services.home-assistant.config = lib.mkMerge [ 6 - (detect_movement "essen" sensors.movement.essen lights.essen 70) 7 - (lightswitch "essen" switches.dimmer.essen lights.essen) 8 - ]; 9 - }
-10
2configs/hass/rooms/nass.nix
··· 1 - { lib, ... }: 2 - with import ../lib.nix { inherit lib; }; 3 - 4 - { 5 - services.home-assistant.config = lib.mkMerge [ 6 - (detect_movement "nass" sensors.movement.nass lights.nass 100) 7 - (lightswitch "nass" switches.dimmer.nass lights.nass) 8 - ]; 9 - } 10 -