├── .gitignore ├── README.md ├── configuration.yaml ├── custom_components └── __pycache__ │ ├── group_globber.cpython-36.pyc │ ├── input_label.cpython-35.pyc │ └── input_label.cpython-36.pyc ├── frontend.png ├── packages ├── backyard.yaml ├── batteries.yaml ├── camera.yaml ├── curl.yaml ├── digital_assistant.yaml ├── doorbell.yaml ├── energy.yaml ├── freenas.yaml ├── good_morning.yaml ├── good_night.yaml ├── hallway.yaml ├── holiday.yaml ├── humidity_control.yaml ├── janet.yaml ├── janet_automations.yaml ├── kodi_control.yaml ├── nest.yaml ├── network.yaml ├── nightlight.yaml ├── notify.yaml ├── pc.yaml ├── presence.yaml ├── room_basement.yaml ├── room_finn.yaml ├── room_laundry.yaml ├── room_living.yaml ├── room_masterbed.yaml ├── room_nursery.yaml ├── room_pc_desk.yaml ├── sensors.yaml ├── server_status.yaml ├── theme.yaml ├── vacuum.yaml ├── waste_pickup.yaml ├── weather.yaml └── zones.yaml ├── python_scripts ├── latest_backup.py ├── latest_commit.py ├── latest_snapshot.py └── waste_pickup_garbage_recycle_example.py ├── themes ├── boxing_day.yaml ├── christmas.yaml ├── christmas_eve.yaml ├── day.yaml ├── earth_day.yaml ├── groundhog_day.yaml ├── halloween.yaml ├── mothers_day.yaml ├── new_years_day.yaml ├── new_years_eve.yaml ├── night.yaml ├── remembrance_day.yaml ├── starwars_day.yaml ├── thanksgiving_day.yaml └── victoria_day.yaml ├── ui-lovelace.yaml └── www ├── doorbell_tones ├── R2D2.mp3 ├── ding_dong.mp3 ├── door_1.mp3 ├── door_ff7.mp3 ├── get-to-the-choppa.mp3 ├── halloween.wav └── xmas.mp3 ├── holiday.json ├── linux_distro ├── lovelace ├── animated4.gif ├── bg.jpg ├── boy_away.png ├── boy_home.png ├── girl_away.png ├── girl_home.png ├── header2.png ├── kodi_idle.jpg ├── laundry_off.jpg ├── laundry_on.gif ├── pc.jpg └── pc_off.jpg ├── misc_sound └── dog-barking-2-bullmastiff.mp3 ├── ssl.txt ├── usage.csv ├── waste_pickup_container.txt ├── waste_pickup_garbage_recycle.txt └── waste_pickup_yard_waste.txt /.gitignore: -------------------------------------------------------------------------------- 1 | *.pid 2 | *.xml 3 | *.csr 4 | *.crt 5 | *.key 6 | *.conf 7 | *.db-wal 8 | *.db-shm 9 | *.log 10 | *.db-journal 11 | *.db 12 | *.cfg 13 | *.wav 14 | *.mp3 15 | *.bak 16 | lib 17 | deps 18 | tts 19 | secrets.yaml 20 | known_devices.yaml 21 | config 22 | .uuid 23 | .gitignore 24 | .gitattributes 25 | .HA_VERSION 26 | www/community/* 27 | shell/waste_pickup_yard_waste.py 28 | shell/waste_pickup_garbage_recycle.py 29 | shell/update_ha.log 30 | shell/waste_pickup_container.py 31 | _Hot Commands.txt 32 | shell/cec.sh 33 | photo.jpg 34 | shell/make_github_issue.py 35 | shell/rogersusage.py 36 | shell/gif_maker/* 37 | www/camera_shots/drive1.gif 38 | www/camera_shots/drive1_b.gif 39 | shell/push_image.py 40 | shell/rogers.txt 41 | OZW_Log.txt 42 | pyozw.sqlite 43 | python_scripts/usage_time_remaining.py 44 | custom_components/sensor/__pycache__/steam_online.cpython-35.pyc 45 | python_scripts/make_github_issue.py 46 | python_scripts/rogersusage.py 47 | python_scripts/waste_pickup_container.py 48 | python_scripts/waste_pickup_garbage_recycle.py 49 | python_scripts/waste_pickup_yard_waste.py 50 | known_devices.bak 51 | emulated_hue_ids.json 52 | 53 | www/googlea02a5401c8e2879c.html 54 | packages/zones.yaml 55 | entity_registry.yaml 56 | .config_entries.json 57 | .storage/core.config_entries 58 | crontab.txt 59 | docker-compose.yaml 60 | zwave_device_config.yaml 61 | www/lovelace/room_masterbed_on.jpg 62 | www/lovelace/room_living.jpg 63 | www/deluge_ip 64 | python_scripts/godaddy_ddns.py 65 | python_scripts/godaddy-ddns.config 66 | packages/zones.yaml 67 | packages/notify.yaml 68 | .storage/* 69 | custom_components 70 | packages/zones.yaml 71 | www/ssl.txt 72 | www/ssl.txt 73 | ip_bans.yaml 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Home Assistant Configuration by [@Norien](https://gitter.im/norien) 2 | 3 | This is my [Home Assistant](https://home-assistant.io/) configuration running in docker on an [Intel SkullCanyon NUC](http://a.co/butNrCY) 4 | 5 | ## Software on the server: 6 | * [Ubuntu Desktop 18.04](https://www.ubuntu.com/download/desktop) 7 | * [Home Assistant](https://home-assistant.io/) 8 | * [Glances](https://nicolargo.github.io/glances/) 9 | * [Mosquitto](https://mosquitto.org/) 10 | * [Pi-Hole](https://pi-hole.net/) 11 | * [Kodi](https://kodi.tv/) 12 | * [Plex w Pass](https://plex.tv/) 13 | * [Zoneminder](https://zoneminder.com/) 14 | 15 | ## Devices in Use: 16 | * [UniFi USG](https://www.ui.com/unifi-routing/usg/) 17 | * [UniFi AC-PRO](https://www.ui.com/unifi/unifi-ap-ac-pro/) 18 | * [UniFi UAP](https://www.ui.com/unifi/unifi-ap/) 19 | * [Nest Thermostat - 2nd Gen](http://a.co/6BsUg19) 20 | * [Nest Protect - 1st Gen](http://a.co/5p5p97O) 21 | * [Echo Dot Gen 2](http://amzn.to/2hvCexj) 22 | * [Google Home](https://www.bestbuy.ca/en-ca/product/google-home-white-slate/10721100.aspx?) 23 | * [Google Home Mini](https://www.bestbuy.ca/en-ca/product/google-home-mini-chalk/11615335.aspx?) 24 | * [Chromecast](http://www.bestbuy.ca/en-CA/product/google-google-chromecast-ga3a00097-a03-z01/10392133.aspx?icmp=Recos_4across_cstmrs_ls_vwd) 25 | * [Chromecast Audio](http://www.bestbuy.ca/en-CA/product/google-google-chromecast-audio-ga3a00153-a03-z01/10392132.aspx?icmp=googlestore_chromecastaudio_footer_shopnow&fromBrandStore=google) 26 | * [D-Link DCS 933L](http://a.co/aA0add8) 27 | * [D-Link DCS-936L](http://a.co/ipkXggn) 28 | * [Wyze Cam v2 / rtsp](https://www.wyze.com/product/wyze-cam-v2/) 29 | * [Philips Hue A19 RGB](http://a.co/i7IHr5e) 30 | * [Philips Hue A19 White](http://a.co/1zLLeS7) 31 | * [Philips Hue A19 White Ambiance](http://a.co/2wGd2al) 32 | * [Philips Hue GU10 RGB](http://a.co/1Zeqi6G) 33 | * [Philips Hue GO](http://a.co/b4hjb10) 34 | * [Philips Hue Dimmer Switch](http://a.co/h1jaVRc) 35 | * [Philips Hue Motion Sensor](http://a.co/j12WCmq) 36 | * [WeMo Garden Spot](http://a.co/7MDbYfc) 37 | * [WeMo Switch](http://a.co/iqSGwpO) 38 | * [WeMo Light Switch](http://a.co/d2HZ753) 39 | * [Raspberry Pi 1 Model B](https://www.raspberrypi.org/products/model-b/) 40 | * [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/) 41 | * [Raspberry Pi Zero W](https://www.raspberrypi.org/products/raspberry-pi-zero-w/) 42 | * [H801 Wifi RGB Controller](http://a.co/ej6LvjZ) 43 | * [Carlon RC3105R Modded to NodeMcu for Doorbell](https://github.com/Norien/Home-Assistant-Config/issues/25) 44 | * [TP-Link HS110](http://a.co/2Z7Jq9k) 45 | * [TP-Link LB130](https://www.bestbuy.ca/en-ca/product/tp-link-tp-link-a19-wi-fi-smart-led-light-bulb-lb130-multi-colour-lb130/10538480.aspx?) 46 | * [Flic Wireless Smart button](http://a.co/aZDz2ww) 47 | * [Sonoff WiFi Smart Switch](https://www.itead.cc/sonoff-wifi-wireless-switch.html) - [Firmware](https://github.com/aneisch/Sonoff-Wemo-Home-Assistant) 48 | * [Sonoff Dual WiFi Smart Switch](https://www.itead.cc/smart-home/sonoff-dual.html) - [Firmware](https://github.com/arendst/Sonoff-Tasmota) 49 | * [Sonoff POW](https://www.itead.cc/smart-home/sonoff-pow.html) - [Firmware](https://github.com/arendst/Sonoff-Tasmota) 50 | * [Sonoff SV](https://www.itead.cc/sonoff-sv.html) - [Firmware](https://github.com/arendst/Sonoff-Tasmota) 51 | * [WeMos D1 Mini](http://www.ebay.ca/itm/182035363514?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) 52 | * [NodeMcu ESP8266](https://geek.wish.com/search/1pc%20NodeMcu%20Lua%20ESP8266%20CH340G%20WIFI%20Internet%20Development%20Board%20Module#cid=58c646190b362f70c8bbeb10) 53 | * [Nortek Z-wave Adapter](http://a.co/58q0mCu) 54 | * [Nanoleaf Aurora Rhythm](https://www.bestbuy.ca/en-ca/product/nanoleaf-aurora-rhythm-smarter-led-light-panel-kit/11540362.aspx?) 55 | * [iRobot Roomba 690](http://a.co/bU3Df5K) 56 | -------------------------------------------------------------------------------- /configuration.yaml: -------------------------------------------------------------------------------- 1 | ###### Configuration 2 | homeassistant: 3 | auth_providers: 4 | - type: trusted_networks 5 | trusted_networks: 6 | - 192.168.1.1 7 | name: " " 8 | whitelist_external_dirs: 9 | - /docker/database-home_assistant/ 10 | - /config/ 11 | latitude: !secret latitude 12 | longitude: !secret longitude 13 | elevation: 264 14 | unit_system: metric 15 | time_zone: !secret time_zone 16 | customize: !include_dir_merge_named customizations 17 | packages: !include_dir_named packages 18 | ################################################################################ 19 | frontend: 20 | themes: !include_dir_merge_named themes/ 21 | lovelace: 22 | mode: yaml 23 | config: 24 | python_script: 25 | conversation: 26 | map: 27 | updater: 28 | owntracks: 29 | system_health: 30 | person: 31 | breaking_changes: 32 | hacs: 33 | token: !secret github_access_token 34 | history: 35 | include: 36 | domains: 37 | - light 38 | - switch 39 | - vacuum 40 | - script 41 | entities: 42 | - device_tracker.justin_justin 43 | - device_tracker.nicole_nicole 44 | - input_boolean.justin 45 | - input_boolean.nicole 46 | - input_boolean.vacation 47 | - input_boolean.guest 48 | - input_boolean.away 49 | - input_boolean.finn_sleep 50 | - sensor.dark_sky_apparent_temperature 51 | - sensor.dark_sky_temperature 52 | - sensor.dark_sky_cloud_coverage 53 | - sensor.dark_sky_dew_point 54 | - sensor.dark_sky_humidity 55 | - sensor.dining_room_lux 56 | - sensor.dining_room_motion 57 | - sensor.dining_room_temperature 58 | - sensor.findlay_room_lux 59 | - sensor.findlay_room_motion 60 | - sensor.findlay_room_temperature 61 | - sensor.living_room_lux 62 | - sensor.living_room_motion 63 | - sensor.living_room_temperature 64 | - sensor.glances_cpu_load 65 | - sensor.hallway_thermostat_humidity 66 | - sensor.hallway_thermostat_hvac_state 67 | - sensor.hallway_thermostat_operation_mode 68 | - sensor.hallway_thermostat_operation_mode 69 | - sensor.hallway_thermostat_target 70 | - sensor.hallway_thermostat_temperature 71 | - sensor.mold_indicator 72 | - sensor.office_current 73 | - sensor.office_draw 74 | - sensor.office_today 75 | - sensor.office_voltage 76 | - sensor.office_yesterday 77 | - sensor.server_yesterday 78 | - sensor.washing_machine_today_kwh 79 | - sensor.pws_uv 80 | - sensor.uv_burn_time 81 | - sun.sun 82 | 83 | logbook: 84 | sun: 85 | # discovery: 86 | 87 | zwave: 88 | usb_path: /dev/zwave 89 | 90 | emulated_hue: 91 | host_ip: !secret emulated_hue_url 92 | expose_by_default: false 93 | 94 | logger: 95 | #default: warning 96 | default: error 97 | #default: info 98 | logs: 99 | homeassistant.components.switch.command_line: fatal 100 | homeassistant.components.sensor.command_line: fatal 101 | homeassistant.components.sensor.template: fatal 102 | homeassistant.components.switch.template: fatal 103 | homeassistant.components.camera.generic: fatal 104 | homeassistant.components.camera.mjpeg: fatal 105 | pychromecast.socket_client: fatal 106 | pydroid_ipcam: fatal 107 | 108 | http: 109 | base_url: !secret base_url 110 | api_password: !secret api_password 111 | ssl_certificate: !secret ssl_certificate 112 | ssl_key: !secret ssl_key 113 | ssl_profile: intermediate 114 | ip_ban_enabled: True 115 | login_attempts_threshold: 3 116 | 117 | duckdns: 118 | domain: !secret domain 119 | access_token: !secret access_token 120 | 121 | tts: 122 | platform: google_translate 123 | 124 | recorder: 125 | db_url: !secret database 126 | purge_interval: 10 127 | purge_keep_days: 10 128 | 129 | hue: 130 | bridges: 131 | - host: !secret philips_hue_ip 132 | 133 | tplink: 134 | discovery: false 135 | light: 136 | - host: 192.168.1.108 137 | switch: 138 | - host: 192.168.1.211 139 | - host: 192.168.1.239 140 | - host: 192.168.1.238 141 | 142 | mqtt: 143 | broker: !secret mqtt_url 144 | port: !secret mqtt_port 145 | client_id: !secret mqtt_client_id 146 | keepalive: 60 147 | username: !secret mqtt_user 148 | password: !secret mqtt_password 149 | discovery: true 150 | discovery_prefix: homeassistant 151 | 152 | device_tracker: 153 | - platform: ping 154 | hosts: 155 | philips_hue_hub: 192.168.1.13 156 | skullcanyon: 192.168.1.115 157 | roomba: 192.168.1.147 158 | router: 192.168.1.1 159 | camera_baby: 192.168.1.92 160 | seed_box: 192.168.1.93 161 | 162 | wemo: 163 | static: 164 | - 192.168.1.200 165 | - 192.168.1.201 166 | - 192.168.1.202 167 | - 192.168.1.203 168 | - 192.168.1.204 169 | - 192.168.1.205 170 | - 192.168.1.206 171 | cast: 172 | media_player: 173 | - host: 192.168.1.230 174 | - host: 192.168.1.231 175 | - host: 192.168.1.232 176 | - host: 192.168.1.235 177 | - host: 192.168.1.119 178 | - host: 192.168.1.143 179 | - host: 192.168.1.185 180 | 181 | media_player: 182 | - platform: plex 183 | entity_namespace: 'plex' 184 | scan_interval: 5 185 | show_all_controls: false 186 | use_episode_art: true 187 | remove_unavailable_clients: true 188 | client_remove_interval: 600 189 | - platform: kodi 190 | host: !secret kodi_livingroom_ip 191 | port: !secret kodi_livingroom_port 192 | username: !secret kodi_livingroom_username 193 | password: !secret kodi_livingroom_password 194 | enable_websocket: false 195 | turn_off_action: 196 | service: media_player.kodi_call_method 197 | data_template: 198 | entity_id: '{{ entity_id }}' 199 | method: System.Shutdown 200 | name: kodi_livingroom 201 | -------------------------------------------------------------------------------- /custom_components/__pycache__/group_globber.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/custom_components/__pycache__/group_globber.cpython-36.pyc -------------------------------------------------------------------------------- /custom_components/__pycache__/input_label.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/custom_components/__pycache__/input_label.cpython-35.pyc -------------------------------------------------------------------------------- /custom_components/__pycache__/input_label.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/custom_components/__pycache__/input_label.cpython-36.pyc -------------------------------------------------------------------------------- /frontend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/frontend.png -------------------------------------------------------------------------------- /packages/backyard.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Backyard 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | switch.sonoff_1: 7 | friendly_name: Patio Amplifier 8 | icon: mdi:amplifier 9 | 10 | automation: 11 | ###### TURN ON THE LIGHTS AT NIGHT 12 | - alias: 'light_backyard' 13 | initial_state: 'on' 14 | trigger: 15 | - platform: state 16 | entity_id: binary_sensor.door_back 17 | from: 'off' 18 | to: 'on' 19 | for: '00:00:03' 20 | condition: 21 | - condition: state 22 | entity_id: sun.sun 23 | state: 'below_horizion' 24 | action: 25 | - service: light.turn_on 26 | entity_id: light.deck_lights 27 | 28 | ###### NOTIFY IF FILTER IS CLOGGED 29 | # - alias: 'Pool Filter is clogged' 30 | # initial_state: 'on' 31 | # trigger: 32 | # - platform: numeric_state 33 | # entity_id: sensor.pool_draw 34 | # below: 37 35 | # for: '00:00:05' 36 | # condition: 37 | # - condition: numeric_state 38 | # entity_id: sensor.pool_draw 39 | # above: 20 40 | # action: 41 | # - service: switch.turn_off 42 | # entity_id: switch.pool_pump 43 | # - service: script.janet_speech_engine 44 | # data: 45 | # call_greeting: 1 46 | # data_template: 47 | # CustomMessage: 'The Pool Filter needs Cleaning!' 48 | ####### AUTOMATIC CONTROL OF AMPLIFIER 49 | - alias: "Backyard Amp Off" 50 | initial_state: 'on' 51 | trigger: 52 | - platform: state 53 | entity_id: media_player.backyard 54 | to: 'idle' 55 | for: 56 | minutes: 1 57 | - platform: state 58 | entity_id: media_player.backyard 59 | to: 'off' 60 | - platform: state 61 | entity_id: switch.sonoff_1 62 | from: 'on' 63 | to: 'off' 64 | action: 65 | - service: switch.turn_off 66 | entity_id: switch.sonoff_1 67 | - service: media_player.turn_off 68 | entity_id: media_player.backyard 69 | 70 | - alias: "Backyard Amp On" 71 | initial_state: 'on' 72 | trigger: 73 | - platform: state 74 | entity_id: media_player.backyard 75 | to: 'playing' 76 | action: 77 | - service: switch.turn_on 78 | entity_id: switch.sonoff_1 79 | ####### AUTOMATIC CONTROL OF POOL PUMP 80 | - alias: "Pool Pump On" 81 | initial_state: 'on' 82 | trigger: 83 | - platform: time_pattern 84 | minutes: '/20' 85 | - platform: state 86 | entity_id: sensor.electricity_price 87 | to: '6.5' 88 | condition: 89 | condition: and 90 | conditions: 91 | - condition: template 92 | value_template: '{{ states.sensor.pool_runtime.state|float < 8 }}' 93 | - condition: state 94 | entity_id: 'sensor.electricity_price' 95 | state: '6.5' 96 | action: 97 | - service: switch.turn_on 98 | entity_id: switch.pool_pump 99 | 100 | - alias: "Pool Pump Off" 101 | initial_state: 'on' 102 | trigger: 103 | - platform: time_pattern 104 | minutes: '/20' 105 | - platform: state 106 | entity_id: sensor.electricity_price 107 | to: '9.4' 108 | - platform: state 109 | entity_id: sensor.electricity_price 110 | to: '13.4' 111 | condition: 112 | condition: or 113 | conditions: 114 | - condition: template 115 | value_template: '{{ states.sensor.pool_runtime.state|float > 8 }}' 116 | - condition: state 117 | entity_id: 'sensor.electricity_price' 118 | state: '9.4' 119 | - condition: state 120 | entity_id: 'sensor.electricity_price' 121 | state: '13.4' 122 | action: 123 | - service: switch.turn_off 124 | entity_id: switch.pool_pump 125 | 126 | - alias: "Pool Pump Auto State" 127 | initial_state: 'on' 128 | trigger: 129 | - platform: state 130 | entity_id: input_boolean.pool_auto_pump 131 | to: 'on' 132 | - platform: state 133 | entity_id: input_boolean.pool_auto_pump 134 | to: 'off' 135 | action: 136 | - service: automation.toggle 137 | entity_id: automation.pool_pump_off 138 | - service: automation.toggle 139 | entity_id: automation.pool_pump_on 140 | - service_template: > 141 | {% if states.input_boolean.pool_auto_pump.state == 'off' %} switch.turn_on 142 | {% else %} switch.turn_off 143 | {% endif %} 144 | entity_id: switch.pool_pump 145 | 146 | - alias: "Pool Pump Auto Reset" 147 | initial_state: 'on' 148 | trigger: 149 | - platform: state 150 | entity_id: input_boolean.pool_auto_pump 151 | to: 'off' 152 | for: 153 | hours: 2 154 | action: 155 | - service: input_boolean.turn_on 156 | entity_id: input_boolean.pool_auto_pump 157 | 158 | switch: 159 | ###### SONOFF POW 160 | - platform: mqtt 161 | name: "Pool Pump" 162 | state_topic: "stat/pool/POWER" 163 | command_topic: "cmnd/pool/POWER" 164 | payload_on: "ON" 165 | payload_off: "OFF" 166 | optimistic: false 167 | qos: 0 168 | retain: true 169 | 170 | sensor: 171 | ###### SONOFF POW SENSORS 172 | - platform: mqtt 173 | name: "Pool Draw" 174 | state_topic: "tele/pool/SENSOR" 175 | qos: 0 176 | unit_of_measurement: "W" 177 | value_template: "{{ value_json['ENERGY'].Power }}" 178 | 179 | - platform: mqtt 180 | name: "Pool Voltage" 181 | state_topic: "tele/pool/SENSOR" 182 | qos: 0 183 | unit_of_measurement: "V" 184 | value_template: "{{ value_json['ENERGY'].Voltage }}" 185 | 186 | - platform: mqtt 187 | name: "Pool Today" 188 | state_topic: "tele/pool/SENSOR" 189 | qos: 0 190 | unit_of_measurement: "kWh" 191 | value_template: "{{ value_json['ENERGY'].Today }}" 192 | 193 | - platform: mqtt 194 | name: "Pool Current" 195 | state_topic: "tele/pool/SENSOR" 196 | qos: 0 197 | unit_of_measurement: "A" 198 | value_template: "{{ value_json['ENERGY'].Current }}" 199 | 200 | - platform: mqtt 201 | name: "Pool Yesterday" 202 | state_topic: "tele/pool/SENSOR" 203 | qos: 0 204 | unit_of_measurement: "kWh" 205 | value_template: "{{ value_json['ENERGY'].Yesterday }}" 206 | 207 | - platform: history_stats 208 | name: Pool Runtime 209 | entity_id: switch.pool_pump 210 | state: 'on' 211 | type: time 212 | start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}' 213 | end: '{{ now() }}' 214 | 215 | input_boolean: 216 | pool_auto_pump: 217 | name: pool_auto_pump 218 | -------------------------------------------------------------------------------- /packages/batteries.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Batteries 3 | ## Any sensor with the prefix sensor.battery_ will auto add to group and send notify when low. 4 | ## Dependices: Custom Component in use for generating the battery group. 5 | ## https://github.com/Norien/Home-Assistant-Config/blob/master/custom_components/group_globber.py 6 | ################################################################ 7 | homeassistant: 8 | customize: 9 | sensor.battery_low: 10 | hidden: true 11 | 12 | automation: 13 | - alias: 'Battery Alert' 14 | initial_state: 'on' 15 | trigger: 16 | - platform: time 17 | at: '10:00:00' 18 | - platform: time 19 | at: '18:00:00' 20 | condition: 21 | condition: template 22 | value_template: "{% if states('sensor.battery_low') == '' %}false{%else%}true{% endif %}" 23 | action: 24 | - service: persistent_notification.create 25 | data_template: 26 | title: Low Battery 27 | message: "{{ states('sensor.battery_low') }}" 28 | notification_id: low-battery-alert 29 | 30 | sensor: 31 | ###### DUMMY SENSOR FOR NEST PROTECT TO NOTIFY 32 | - platform: template 33 | sensors: 34 | battery_nest_protect_kitchen: 35 | friendly_name: 'Kitchen Nest Protect' 36 | unit_of_measurement: '%' 37 | value_template: >- 38 | {% set battery = states.sensor.kitchen_nest_protect_battery_health.state %} 39 | {% if battery == 'Ok' %}100{% else %}0{% endif %} 40 | icon_template: >- 41 | {% set battery = states.sensor.kitchen_nest_protect_battery_health.state %} 42 | {% if battery == 'Ok' %}mdi:battery{% else %}mdi:battery-alert{% endif %} 43 | 44 | ###### PHILIPS HUE MOTION SENSOR AND SWITCHES 45 | - platform: rest 46 | resource: !secret finn_room_sensor_battery 47 | value_template: '{{ value_json.config.battery }}' 48 | unit_of_measurement: '%' 49 | scan_interval: 1800 50 | name: 'batteryraw_finn_sensor' 51 | - platform: template 52 | sensors: 53 | battery_finn_sensor_dynamic: 54 | friendly_name: 'Findlays Room Sensor' 55 | value_template: "{{ states.sensor.batteryraw_finn_sensor.state }}" 56 | unit_of_measurement: '%' 57 | icon_template: >- 58 | {% set battery_level = states.sensor.batteryraw_finn_sensor.state|int('unknown') %} 59 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 60 | {% if battery_level == 'unknown' %} 61 | mdi:battery-unknown 62 | {% else %} 63 | {% if battery_round >= 100 %} 64 | mdi:battery 65 | {% elif battery_round > 0 %} 66 | mdi:battery-{{ battery_round }} 67 | {% else %} 68 | mdi:battery-alert 69 | {% endif %} 70 | {% endif %} 71 | 72 | - platform: rest 73 | resource: !secret finn_room_switch_battery 74 | value_template: '{{ value_json.config.battery }}' 75 | unit_of_measurement: '%' 76 | scan_interval: 1800 77 | name: 'batteryraw_finn_switch' 78 | - platform: template 79 | sensors: 80 | battery_finn_switch_dynamic: 81 | friendly_name: 'Findlays Room Switch' 82 | value_template: "{{ states.sensor.batteryraw_finn_switch.state }}" 83 | unit_of_measurement: '%' 84 | icon_template: >- 85 | {% set battery_level = states.sensor.batteryraw_finn_switch.state|int('unknown') %} 86 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 87 | {% if battery_level == 'unknown' %} 88 | mdi:battery-unknown 89 | {% else %} 90 | {% if battery_round >= 100 %} 91 | mdi:battery 92 | {% elif battery_round > 0 %} 93 | mdi:battery-{{ battery_round }} 94 | {% else %} 95 | mdi:battery-alert 96 | {% endif %} 97 | {% endif %} 98 | 99 | - platform: rest 100 | resource: !secret livingroom_sensor_battery 101 | value_template: '{{ value_json.config.battery }}' 102 | unit_of_measurement: '%' 103 | scan_interval: 1800 104 | name: 'batteryraw_livingroom_sensor' 105 | - platform: template 106 | sensors: 107 | battery_livingroom_sensor_dynamic: 108 | friendly_name: 'Living Room Sensor' 109 | value_template: "{{ states.sensor.batteryraw_livingroom_sensor.state }}" 110 | unit_of_measurement: '%' 111 | icon_template: >- 112 | {% set battery_level = states.sensor.batteryraw_livingroom_sensor.state|int('unknown') %} 113 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 114 | {% if battery_level == 'unknown' %} 115 | mdi:battery-unknown 116 | {% else %} 117 | {% if battery_round >= 100 %} 118 | mdi:battery 119 | {% elif battery_round > 0 %} 120 | mdi:battery-{{ battery_round }} 121 | {% else %} 122 | mdi:battery-alert 123 | {% endif %} 124 | {% endif %} 125 | 126 | - platform: rest 127 | resource: !secret livingroom_switch_battery 128 | value_template: '{{ value_json.config.battery }}' 129 | unit_of_measurement: '%' 130 | scan_interval: 1800 131 | name: 'batteryraw_hallway_switch' 132 | - platform: template 133 | sensors: 134 | battery_hallway_switch_dynamic: 135 | friendly_name: 'Hallway Switch' 136 | value_template: "{{ states.sensor.batteryraw_hallway_switch.state }}" 137 | unit_of_measurement: '%' 138 | icon_template: >- 139 | {% set battery_level = states.sensor.batteryraw_hallway_switch.state|int('unknown') %} 140 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 141 | {% if battery_level == 'unknown' %} 142 | mdi:battery-unknown 143 | {% else %} 144 | {% if battery_round >= 100 %} 145 | mdi:battery 146 | {% elif battery_round > 0 %} 147 | mdi:battery-{{ battery_round }} 148 | {% else %} 149 | mdi:battery-alert 150 | {% endif %} 151 | {% endif %} 152 | 153 | - platform: rest 154 | resource: !secret dining_room_sensor_battery 155 | value_template: '{{ value_json.config.battery }}' 156 | unit_of_measurement: '%' 157 | scan_interval: 1800 158 | name: 'batteryraw_diningroom_sensor' 159 | - platform: template 160 | sensors: 161 | battery_diningroom_sensor_dynamic: 162 | friendly_name: 'Dining Room Sensor' 163 | value_template: "{{ states.sensor.batteryraw_diningroom_sensor.state }}" 164 | unit_of_measurement: '%' 165 | icon_template: >- 166 | {% set battery_level = states.sensor.batteryraw_diningroom_sensor.state|int('unknown') %} 167 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 168 | {% if battery_level == 'unknown' %} 169 | mdi:battery-unknown 170 | {% else %} 171 | {% if battery_round >= 100 %} 172 | mdi:battery 173 | {% elif battery_round > 0 %} 174 | mdi:battery-{{ battery_round }} 175 | {% else %} 176 | mdi:battery-alert 177 | {% endif %} 178 | {% endif %} 179 | 180 | - platform: template 181 | sensors: 182 | justin_battery_template: 183 | friendly_name: Justin Phone Battery 184 | unit_of_measurement: '%' 185 | value_template: "{{ states.device_tracker.life360_justin.attributes.battery |int(-1) }}" 186 | icon_template: >- 187 | {% if states.device_tracker.life360_justin.attributes.battery != "unknown" %} 188 | {% set battery_level = states.device_tracker.life360_justin.attributes.battery|int (-1)%} 189 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 190 | {% if states.device_tracker.life360_justin.attributes.battery_charging|lower == "true" %} 191 | {% if battery_level == -1 %} 192 | mdi:battery-unknown 193 | {% else %} 194 | {% if battery_round >= 100 %} 195 | mdi:battery-charging-100 196 | {% elif battery_round > 0 %} 197 | mdi:battery-charging-{{ battery_round }} 198 | {% else %} 199 | mdi:battery-alert 200 | {% endif %} 201 | {% endif %} 202 | {% else %} 203 | {% if battery_level == -1 %} 204 | mdi:battery-unknown 205 | {% else %} 206 | {% if battery_round >= 100 %} 207 | mdi:battery 208 | {% elif battery_round > 0 %} 209 | mdi:battery-{{ battery_round }} 210 | {% else %} 211 | mdi:battery-alert 212 | {% endif %} 213 | {% endif %} 214 | {% endif %} 215 | {% else %} 216 | mdi:battery-alert 217 | {% endif %} 218 | nicole_battery_template: 219 | friendly_name: Nicole Phone Battery 220 | unit_of_measurement: '%' 221 | value_template: "{{ states.device_tracker.life360_nicole.attributes.battery |int(-1) }}" 222 | icon_template: >- 223 | {% if states.device_tracker.life360_nicole.attributes.battery != "unknown" %} 224 | {% set battery_level = states.device_tracker.life360_nicole.attributes.battery|int (-1)%} 225 | {% set battery_round = (battery_level|int / 10)|int * 10 %} 226 | {% if states.device_tracker.life360_nicole.attributes.battery_charging|lower == "true" %} 227 | {% if battery_level == -1 %} 228 | mdi:battery-unknown 229 | {% else %} 230 | {% if battery_round >= 100 %} 231 | mdi:battery-charging-100 232 | {% elif battery_round > 0 %} 233 | mdi:battery-charging-{{ battery_round }} 234 | {% else %} 235 | mdi:battery-alert 236 | {% endif %} 237 | {% endif %} 238 | {% else %} 239 | {% if battery_level == -1 %} 240 | mdi:battery-unknown 241 | {% else %} 242 | {% if battery_round >= 100 %} 243 | mdi:battery 244 | {% elif battery_round > 0 %} 245 | mdi:battery-{{ battery_round }} 246 | {% else %} 247 | mdi:battery-alert 248 | {% endif %} 249 | {% endif %} 250 | {% endif %} 251 | {% else %} 252 | mdi:battery-alert 253 | {% endif %} 254 | 255 | ###### LIST OF LOW BATTERIES ( sensor.battery_ ) 256 | - platform: template 257 | sensors: 258 | battery_low: 259 | friendly_name: 'Low Battery' 260 | icon_template: mdi:battery-alert 261 | entity_id: 262 | - sensor.battery_diningroom_sensor_dynamic 263 | - sensor.battery_finn_sensor_dynamic 264 | - sensor.battery_finn_switch_dynamic 265 | - sensor.battery_hallway_switch_dynamic 266 | - sensor.battery_livingroom_sensor_dynamic 267 | - sensor.battery_nest_protect_kitchen 268 | - sensor.battery_roomba 269 | value_template: >- 270 | {%- for item in states.sensor if ((item.entity_id[0:15] == 'sensor.battery_' and item.state|int <= 10 and item.name != 'Low Battery' and item.state != 'None')) -%} 271 | {{item.name}} 272 | {%- if not loop.last -%} 273 | {{', '}} 274 | {%- endif -%} 275 | {%- endfor -%} 276 | batterystatus: 277 | friendly_name: 'Low Battery Status' 278 | icon_template: mdi:battery-alert 279 | entity_id: 280 | - sensor.battery_low 281 | value_template: >- 282 | {% set battery = states.sensor.battery_low.state %} 283 | {% if battery == '' %} 284 | Low Battery 285 | {% else %} 286 | {{battery}} 287 | {% endif %} 288 | -------------------------------------------------------------------------------- /packages/camera.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Camera 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | script.notify_camera: 7 | friendly_name: Email Camera Photo 8 | 9 | #stream: 10 | camera: 11 | - platform: mjpeg 12 | name: octoprint 13 | mjpeg_url: !secret dlink_camera_mjpeg 14 | still_image_url: !secret dlink_still_image_url 15 | username: !secret dlink_camera_username 16 | password: !secret dlink_camera_password 17 | 18 | - platform: mjpeg 19 | name: nursery 20 | mjpeg_url: !secret dlink2_camera_mjpeg 21 | username: !secret dlink2_camera_username 22 | password: !secret dlink2_camera_password 23 | 24 | - platform: ffmpeg 25 | name: driveway 26 | input: !secret wyze_rtsp 27 | 28 | - platform: ffmpeg 29 | name: findlay 30 | input: !secret wyze_2_rtsp 31 | 32 | automation: 33 | - alias: driveway_motion_detected 34 | initial_state: 'on' 35 | trigger: 36 | - platform: state 37 | entity_id: sensor.driveway_events 38 | condition: 39 | - condition: state 40 | entity_id: input_boolean.away 41 | state: 'on' 42 | action: 43 | - service: notify.discord 44 | data: 45 | message: "Motion Detected in the Driveway" 46 | target: !secret discord 47 | 48 | script: 49 | notify_camera: 50 | sequence: 51 | - service: shell_command.clear_images 52 | - service: shell_command.driveway 53 | - service: shell_command.driveway2 54 | - delay: '00:00:30' 55 | - service: notify.discord 56 | data: 57 | target: !secret discord 58 | message: !secret notify_camera_message 59 | 60 | shell_command: 61 | clear_images: rm /config/www/camera_shots/* 62 | driveway: !secret driveway_camera_photo_url 63 | driveway2: /usr/bin/curl -o /config/www/camera_shots/drive1.gif "127.0.0.1:3333/gif?camera=drive1&duration=60&interval=0.25" 64 | -------------------------------------------------------------------------------- /packages/curl.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / curl 3 | ################################################################ 4 | homeassistant: 5 | ################################################ 6 | ## Configuration: 7 | ## 8 | ## url: string (Required) 9 | ## args: string (Optional) default is '-sS' 10 | ## method: string (Optional) default is 'get' 11 | ## headers: dict (Optional) default is empty 12 | ## payload: dict (Optional) default is empty 13 | ## stream: string (Optional) default is '/dev/null' 14 | ## 15 | ## Example Usage: 16 | ## 17 | ## automation: 18 | ## trigger: 19 | ## - ...your trigger(s) here... 20 | ## condition: 21 | ## - ...your condition(s) here... 22 | ## action: 23 | ## - service: shell_command.curl 24 | ## data: 25 | ## url: http://your.website.com/api/endpoint 26 | ## method: post 27 | ## headers: 28 | ## Content-Type: application/json 29 | ## Another-Header: header value 30 | ## payload: 31 | ## key1: value1 32 | ## key2: value2 33 | ################################################ 34 | 35 | shell_command: 36 | curl: >- 37 | /usr/bin/curl {{ args|default('-sS') }} -X {{ method|default('get')|upper }} {%- for k in headers %} -H "{{ k }}: {{ headers[k] }}"{% endfor %} {{- (' -d \'' ~ payload|tojson ~ '\'') if payload }} {{ url }} > {{ stream|default('/dev/null') }} 38 | -------------------------------------------------------------------------------- /packages/digital_assistant.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Digital Assistant 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | script.pc: 7 | emulated_hue_hidden: false 8 | friendly_name: 'PC' 9 | script.kodi_pause: 10 | emulated_hue_hidden: false 11 | friendly_name: 'pause' 12 | script.kodi_play: 13 | emulated_hue_hidden: false 14 | friendly_name: 'play' 15 | script.kodi_stop: 16 | emulated_hue_hidden: false 17 | friendly_name: 'stop' 18 | script.kodi_nav_select: 19 | emulated_hue_hidden: false 20 | friendly_name: 'select' 21 | script.kodi_next: 22 | emulated_hue_hidden: false 23 | friendly_name: 'next' 24 | script.kodi_previous: 25 | emulated_hue_hidden: false 26 | friendly_name: 'previous' 27 | script.kodi_nav_up: 28 | emulated_hue_hidden: false 29 | friendly_name: 'up' 30 | script.kodi_nav_down: 31 | emulated_hue_hidden: false 32 | friendly_name: 'down' 33 | script.kodi_nav_left: 34 | emulated_hue_hidden: false 35 | friendly_name: 'left' 36 | script.kodi_nav_right: 37 | emulated_hue_hidden: false 38 | friendly_name: 'right' 39 | 40 | google_assistant: 41 | project_id: !secret google_assistant_project_id 42 | api_key: !secret google_assistant_api 43 | exposed_domains: 44 | - switch 45 | entity_config: 46 | script.pc: 47 | expose: true 48 | name: 'PC' 49 | switch.bedroom_fan: 50 | expose: True 51 | name: 'fan' 52 | input_boolean.finn_sleep: 53 | expose: True 54 | name: 'sleep' 55 | light.deck_lights: 56 | expose: true 57 | name: 'backyard lights' 58 | script.kodi_pause: 59 | expose: true 60 | name: 'pause' 61 | script.kodi_play: 62 | expose: true 63 | name: 'play' 64 | script.kodi_stop: 65 | expose: true 66 | name: 'stop' 67 | script.kodi_nav_select: 68 | expose: true 69 | name: 'select' 70 | script.kodi_next: 71 | expose: true 72 | name: 'next' 73 | script.kodi_previous: 74 | expose: true 75 | name: 'previous' 76 | script.kodi_nav_up: 77 | expose: true 78 | name: 'up' 79 | script.kodi_nav_down: 80 | expose: true 81 | name: 'down' 82 | script.kodi_nav_left: 83 | expose: true 84 | name: 'left' 85 | script.kodi_nav_right: 86 | expose: true 87 | name: 'right' 88 | 89 | automation: 90 | - alias: 'google_home_volume' 91 | initial_state: 'on' 92 | trigger: 93 | - platform: state 94 | entity_id: input_boolean.finn_sleep 95 | action: 96 | - service: media_player.volume_set 97 | data_template: 98 | entity_id: media_player.google_home 99 | volume_level: > 100 | {% if is_state('input_boolean.finn_sleep', 'on') %} 0.50 101 | {% elif is_state('input_boolean.finn_sleep', 'off') %} 1 102 | {% endif %} 103 | script: 104 | ###### ALEXA TURN ON or OFF PC (Living Room) 105 | pc: 106 | sequence: 107 | - service: switch.toggle 108 | entity_id: switch.office_pc 109 | -------------------------------------------------------------------------------- /packages/doorbell.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Doorbell 3 | ################################################################ 4 | homeassistant: 5 | automation: 6 | - alias: 'doorbell' 7 | initial_state: 'on' 8 | trigger: 9 | - platform: event 10 | event_type: zha_event 11 | event_data: 12 | unique_id: '0xf0c1:1:0x0006' 13 | device_ieee: '00:15:8d:00:03:26:94:9a' 14 | command: 'attribute_updated' 15 | action: 16 | - service: media_player.volume_set 17 | data_template: 18 | entity_id: media_player.google_home 19 | volume_level: > 20 | {% if is_state('input_boolean.finn_sleep', 'off') %} 1 21 | {% elif is_state('input_boolean.finn_sleep', 'on') %} 0.40 22 | {% endif %} 23 | - service: media_player.play_media 24 | data_template: 25 | entity_id: media_player.google_home 26 | media_content_id: > 27 | http://192.168.1.115/doorbell_tones/ 28 | {%- if is_state('input_select.theme', "New Year's Day") -%} new_years.mp3 29 | {%- elif is_state('input_select.theme', "Groundhog Day") -%} groundhog_day.mp3 30 | {%- elif is_state('input_select.theme', "Valentine's Day") -%} valentines_day.mp3 31 | {%- elif is_state('input_select.theme', "St. Patrick's Day") -%} door_1.mp3 32 | {%- elif is_state('input_select.theme', "Good Friday") -%} door_1.mp3 33 | {%- elif is_state('input_select.theme', "Starwars Day") -%} R2D2.mp3 34 | {%- elif is_state('input_select.theme', "Easter Sunday") -%} door_1.mp3 35 | {%- elif is_state('input_select.theme', "Earth Day") -%} door_1.mp3 36 | {%- elif is_state('input_select.theme', "Mother's Day") -%} door_1.mp3 37 | {% elif is_state('input_select.theme', "Victoria Day") -%} door_1.mp3 38 | {%- elif is_state('input_select.theme', "Father's Day") -%} get-to-the-choppa.mp3 39 | {%- elif is_state('input_select.theme', "Canada Day") -%} door_1.mp3 40 | {%- elif is_state('input_select.theme', "Labour Day") -%} door_1.mp3 41 | {%- elif is_state('input_select.theme', "Thanksgiving Day") -%} door_1.mp3 42 | {%- elif is_state('input_select.theme', "Halloween") -%} halloween.wav 43 | {%- elif is_state('input_select.theme', "Remembrance Day") -%} door_1.mp3 44 | {%- elif is_state('input_select.theme', "Christmas Eve") -%} xmas.mp3 45 | {%- elif is_state('input_select.theme', "Christmas Day") -%} xmas.mp3 46 | {%- elif is_state('input_select.theme', "Boxing Day") -%} xmas.mp3 47 | {%- elif is_state('input_select.theme', "New Year's Eve") -%} new_years.mp3 48 | {%- else -%} door_1.mp3 49 | {%- endif -%} 50 | media_content_type: 'audio/mp3' 51 | 52 | ############## 53 | # - alias: 'guard dog' 54 | # initial_state: 'on' 55 | # trigger: 56 | # - platform: state 57 | # entity_id: binary_sensor.front_doorbell 58 | # from: 'off' 59 | # to: 'on' 60 | # condition: 61 | # condition: or 62 | # conditions: 63 | # - condition: state 64 | # entity_id: 'input_boolean.away' 65 | # state: 'on' 66 | # - condition: state 67 | # entity_id: 'input_boolean.vacation' 68 | # state: 'on' 69 | # action: 70 | # - service: media_player.volume_set 71 | # data: 72 | # entity_id: media_player.google_home 73 | # volume_level: 1.00 74 | # - service: media_player.play_media 75 | # data_template: 76 | # entity_id: media_player.google_home 77 | # media_content_id: "http://192.168.1.115/misc_sound/dog-barking-2-bullmastiff.mp3" 78 | # media_content_type: 'audio/mp3' 79 | # - service: notify.html5 80 | # data: 81 | # message: 'Someone is at the front door, Release the Hounds!' 82 | 83 | sensor: 84 | - platform: template 85 | sensors: 86 | theme_sound: 87 | friendly_name: 'Doorbell Sound' 88 | value_template: > 89 | {%- if is_state('input_select.theme', "New Year's Day") -%} new_years.mp3 90 | {%- elif is_state('input_select.theme', "Groundhog Day") -%} groundhog_day.mp3 91 | {%- elif is_state('input_select.theme', "Valentine's Day") -%} valentines_day.mp3 92 | {%- elif is_state('input_select.theme', "St. Patrick's Day") -%} door_1.mp3 93 | {%- elif is_state('input_select.theme', "Good Friday") -%} door_1.mp3 94 | {%- elif is_state('input_select.theme', "Starwars Day") -%} R2D2.mp3 95 | {%- elif is_state('input_select.theme', "Easter Sunday") -%} door_1.mp3 96 | {%- elif is_state('input_select.theme', "Earth Day") -%} door_1.mp3 97 | {%- elif is_state('input_select.theme', "Mother's Day") -%} door_1.mp3 98 | {% elif is_state('input_select.theme', "Victoria Day") -%} door_1.mp3 99 | {%- elif is_state('input_select.theme', "Father's Day") -%} get-to-the-choppa.mp3 100 | {%- elif is_state('input_select.theme', "Canada Day") -%} door_1.mp3 101 | {%- elif is_state('input_select.theme', "Labour Day") -%} door_1.mp3 102 | {%- elif is_state('input_select.theme', "Thanksgiving Day") -%} door_1.mp3 103 | {%- elif is_state('input_select.theme', "Halloween") -%} halloween.wav 104 | {%- elif is_state('input_select.theme', "Remembrance Day") -%} door_1.mp3 105 | {%- elif is_state('input_select.theme', "Christmas Eve") -%} xmas.mp3 106 | {%- elif is_state('input_select.theme', "Christmas Day") -%} xmas.mp3 107 | {%- elif is_state('input_select.theme', "Boxing Day") -%} xmas.mp3 108 | {%- elif is_state('input_select.theme', "New Year's Eve") -%} new_years.mp3 109 | {%- else -%} door_1.mp3 110 | {%- endif -%} 111 | icon_template: "{% if is_state('sun.sun', 'above_horizon') %}mdi:speaker-wireless{% else %}mdi:speaker{% endif %}" 112 | -------------------------------------------------------------------------------- /packages/energy.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Energy 3 | ################################################################ 4 | homeassistant: 5 | 6 | sensor: 7 | - platform: template 8 | sensors: 9 | energy_yesterday_total: 10 | friendly_name: "Energy Yesterday Total" 11 | unit_of_measurement: 'kWh' 12 | entity_id: sensor.time, sensor.washing_machine_today_kwh, sensor.server_yesterday, sensor.office_yesterday 13 | value_template: > 14 | {% set office = states('sensor.office_yesterday') %} 15 | {% set server = states('sensor.server_yesterday') %} 16 | {% set pool = states('sensor.pool_yesterday') %} 17 | {% set wash = states('sensor.washing_machine_today_kwh') %} 18 | {{ office|float + server|float + wash|float + pool|float}} 19 | 20 | ###### ENERGY SENSORS 21 | - platform: mqtt 22 | name: energy_week_total 23 | state_topic: "homeassistant/energy_week_total" 24 | unit_of_measurement: 'kWh' 25 | value_template: '{{value | round(3)}}' 26 | 27 | automation: 28 | - alias: 'energy_total_week_record' 29 | initial_state: 'on' 30 | trigger: 31 | - platform: time 32 | at: '00:00:00' 33 | action: 34 | - service: mqtt.publish 35 | data_template: 36 | topic: 'homeassistant/energy_week_total' 37 | retain: true 38 | payload: > 39 | {% set week = states('sensor.energy_week_total') %} 40 | {% set today = states('sensor.energy_yesterday_total') %} 41 | {% set day = states('sensor.date_weekday') %} 42 | {%- if day == "Monday"-%} {{today}} 43 | {%- elif day == "Tuesday"-%} {{week|float + today|float}} 44 | {%- elif day == "Wednesday"-%} {{week|float + today|float}} 45 | {%- elif day == "Thursday"-%} {{week|float + today|float}} 46 | {%- elif day == "Friday"-%} {{week|float + today|float}} 47 | {%- elif day == "Saturday"-%} {{week|float + today|float}} 48 | {%- else -%} {{week|float + today|float}} 49 | {%- endif -%} 50 | -------------------------------------------------------------------------------- /packages/freenas.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Freenas 3 | ## Dependencies / Freenas Server 4 | ################################################################ 5 | sensor: 6 | - platform: rest 7 | name: FreeNAS_Media 8 | json_attributes: 9 | - name 10 | - status 11 | - used_pct 12 | - is_decrypted 13 | resource: http://192.168.1.189/api/v1.0/storage/volume/Media/?format=json 14 | value_template: '{{ value_json.status }}' 15 | username: !secret freenas_user 16 | password: !secret freenas_pass 17 | authentication: basic 18 | scan_interval: 21600 19 | headers: 20 | Content-Type: application/json 21 | - platform: template 22 | sensors: 23 | freenas_media_pct: 24 | friendly_name: "freenas_media_pct" 25 | entity_id: sensor.freenas_media 26 | unit_of_measurement: '%' 27 | value_template: "{{states.sensor.freenas_media.attributes.used_pct[0:-1]}}" 28 | 29 | - platform: rest 30 | name: FreeNAS_Television2 31 | json_attributes: 32 | - name 33 | - status 34 | - used_pct 35 | - is_decrypted 36 | resource: http://192.168.1.189/api/v1.0/storage/volume/Television2/?format=json 37 | value_template: '{{ value_json.status }}' 38 | username: !secret freenas_user 39 | password: !secret freenas_pass 40 | authentication: basic 41 | scan_interval: 21600 42 | headers: 43 | Content-Type: application/json 44 | - platform: template 45 | sensors: 46 | freenas_television2_pct: 47 | friendly_name: "freenas_television2_pct" 48 | entity_id: sensor.freenas_television2 49 | unit_of_measurement: '%' 50 | value_template: "{{states.sensor.freenas_television2.attributes.used_pct[0:-1]}}" 51 | 52 | - platform: rest 53 | name: FreeNAS_Movies 54 | json_attributes: 55 | - name 56 | - status 57 | - used_pct 58 | - is_decrypted 59 | resource: http://192.168.1.189/api/v1.0/storage/volume/Movies/?format=json 60 | value_template: '{{ value_json.status }}' 61 | username: !secret freenas_user 62 | password: !secret freenas_pass 63 | authentication: basic 64 | scan_interval: 21600 65 | headers: 66 | Content-Type: application/json 67 | - platform: template 68 | sensors: 69 | freenas_movies_pct: 70 | friendly_name: "freenas_movies_pct" 71 | entity_id: sensor.freenas_movies 72 | unit_of_measurement: '%' 73 | value_template: "{{states.sensor.freenas_movies.attributes.used_pct[0:-1]}}" 74 | 75 | - platform: rest 76 | name: FreeNAS_Cloud 77 | json_attributes: 78 | - name 79 | - status 80 | - used_pct 81 | - is_decrypted 82 | resource: http://192.168.1.189/api/v1.0/storage/volume/Cloud/?format=json 83 | value_template: '{{ value_json.status }}' 84 | username: !secret freenas_user 85 | password: !secret freenas_pass 86 | authentication: basic 87 | scan_interval: 21600 88 | headers: 89 | Content-Type: application/json 90 | - platform: template 91 | sensors: 92 | freenas_cloud_pct: 93 | friendly_name: "freenas_cloud_pct" 94 | entity_id: sensor.freenas_cloud 95 | unit_of_measurement: '%' 96 | value_template: "{{states.sensor.freenas_cloud.attributes.used_pct[0:-1]}}" 97 | 98 | ## Version 99 | - platform: rest 100 | name: FreeNAS_version 101 | json_attributes: 102 | - fullversion 103 | - name 104 | - version 105 | resource: http://192.168.1.189/api/v1.0/system/version/?format=json 106 | value_template: '{{ value_json.fullversion }}' 107 | username: !secret freenas_user 108 | password: !secret freenas_pass 109 | authentication: basic 110 | scan_interval: 86400 111 | headers: 112 | Content-Type: application/json 113 | -------------------------------------------------------------------------------- /packages/good_morning.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Good Morning 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | script.good_morning: 7 | emulated_hue_hidden: false 8 | emulated_hue_name: "Good Morning" 9 | friendly_name: Good Morning 10 | icon: mdi:emoticon-poop 11 | 12 | google_assistant: 13 | entity_config: 14 | script.good_morning: 15 | expose: true 16 | name: 'Good Morning' 17 | 18 | sensor: 19 | - platform: template 20 | sensors: 21 | good_night_morning_button: 22 | entity_id: sensor.time, script.morning_livingroom_lights 23 | friendly_name: 'good_night_morning_button' 24 | value_template: > 25 | {%-set trigger= states('sensor.good_morning_last_triggered')-%} 26 | {%-set now = as_timestamp(now())-%} 27 | {%-set time = states.sensor.time.state-%} 28 | {%-if time >= '06:00' and time <= '11:00' and now|float-trigger|float > 25200 -%} 29 | morning 30 | {%- elif time >= '20:30' and time <= '24:00' -%} 31 | night 32 | {%- else -%} 33 | nothing 34 | {%- endif -%} 35 | 36 | ### CREATE SENSOR FROM MQTT DATA 37 | - platform: mqtt 38 | name: good_morning_last_triggered 39 | state_topic: "homeassistant/good_morning" 40 | force_update: on 41 | 42 | - platform: rest 43 | name: quote_of_the_day 44 | resource: http://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en 45 | value_template: '{{ value_json.quoteText }}' 46 | scan_interval: 43200 47 | 48 | script: 49 | good_morning: 50 | sequence: 51 | - condition: time 52 | after: '06:00:00' 53 | before: '13:00:00' 54 | ### PUSH MQTT DATA FOR RETAINED TIMESTAMP 55 | - service: mqtt.publish 56 | data_template: 57 | topic: "homeassistant/good_morning" 58 | retain: true 59 | payload_template: "{{as_timestamp(now())}}" 60 | - service: script.nightlight_off 61 | - service: switch.turn_off 62 | entity_id: switch.sleep_finn 63 | - service: script.morning_livingroom_lights 64 | - service: switch.turn_off 65 | entity_id: switch.bedroom_fan 66 | - service: switch.turn_off 67 | entity_id: switch.white_noise_living_room 68 | - service: media_player.turn_off 69 | entity_id: media_player.master_bedroom_speaker 70 | - service: media_player.volume_set 71 | data: 72 | entity_id: media_player.google_home 73 | volume_level: '0.70' 74 | - wait_template: "{{ states.binary_sensor.living_room_sensor_motion.state == 'on' }}" 75 | - service: script.good_morning_tts 76 | - service: automation.turn_on 77 | entity_id: automation.night_light 78 | 79 | good_morning_tts: 80 | sequence: 81 | - service: script.janet_speech_engine 82 | data_template: 83 | CustomMessage: >- 84 | {% set weather = states('sensor.weather_report') %} 85 | {%- if states.sensor.holiday_data.state != "" -%} 86 | Today is {{ states.sensor.holiday.state }}, 87 | {%- else -%} 88 | Good Morning, 89 | {%- endif -%} 90 | {{weather}} 91 | {%- if as_timestamp(now())|timestamp_custom('%A %B %d', True) == states.sensor.waste_pickup_garbage_recycling.state -%} 92 | The garbage is to go out this evening. 93 | {%-else-%} 94 | {{' '}}The next garbage pickup is on {{states('sensor.waste_pickup_garbage_recycling')}}.{{' '}} 95 | {%-endif-%} 96 | {%- if is_state('sensor.nicole', 'not_home') -%} 97 | {% elif is_state('sensor.nicole', 'home') %} 98 | {% if is_state('binary_sensor.workday_sensor', 'off') %} 99 | {% elif is_state('binary_sensor.workday_sensor', 'on') %} 100 | {% if 'rain' in states.sensor.dark_sky_hourly_summary.state %} 101 | Don't forget your Umbrella. 102 | {% else %} 103 | {% endif %} 104 | {% endif %} 105 | {%- endif -%} 106 | {%- if is_state("sensor.quote_of_the_day", "unknown") -%} 107 | Do or do not. There is no Try. 108 | {%- else -%} 109 | {{states.sensor.quote_of_the_day.state}} 110 | {%- endif %} 111 | 112 | morning_livingroom_lights: 113 | sequence: 114 | - condition: and 115 | conditions: 116 | - condition: numeric_state 117 | entity_id: 'sensor.living_room_sensor_light_level' 118 | below: 45 119 | - service: homeassistant.turn_on 120 | data: 121 | entity_id: 122 | - group.lr_lights 123 | brightness: 255 124 | rgb_color: [255,255,255] 125 | transition: 900 126 | -------------------------------------------------------------------------------- /packages/good_night.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Good Night 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | script.good_night: 7 | emulated_hue_hidden: false 8 | emulated_hue_name: "Good Night" 9 | google_assistant: true 10 | google_assistant_name: "Good Night" 11 | friendly_name: Good Night 12 | icon: mdi:sleep 13 | 14 | google_assistant: 15 | entity_config: 16 | script.good_night: 17 | expose: true 18 | name: 'Good Night' 19 | 20 | script: 21 | good_night: 22 | sequence: 23 | - condition: time 24 | after: '20:30:00' 25 | before: '00:00:00' 26 | - service: light.turn_off 27 | entity_id: light.front_door 28 | ###### HALLWAY 29 | - service: light.turn_off 30 | entity_id: light.hallway 31 | ##### Master BEDROOM 32 | - service: switch.turn_off 33 | entity_id: switch.bedroom_media 34 | - service: switch.turn_off 35 | entity_id: switch.bedroom_lamps 36 | - service: switch.turn_on 37 | entity_id: switch.bedroom_fan 38 | - service: switch.turn_on 39 | entity_id: switch.white_noise 40 | ###### LIVINGROOM/KITCHEN 41 | - service: light.turn_off 42 | entity_id: light.living_room 43 | - service: light.turn_off 44 | entity_id: light.kitchen_sink 45 | - service: switch.turn_off 46 | entity_id: switch.tv 47 | - service: switch.turn_off 48 | entity_id: switch.receiver 49 | - service: script.nightlight 50 | ###### BACKYARD 51 | - service: light.turn_off 52 | entity_id: light.deck_lights 53 | - service: media_player.turn_off 54 | entity_id: media_player.backyard 55 | - service: switch.turn_off 56 | entity_id: switch.patio_amplifier 57 | ###### OFFICE 58 | - service: light.turn_off 59 | entity_id: light.aurora 60 | - service: switch.turn_off 61 | entity_id: switch.office_lightswitch 62 | -------------------------------------------------------------------------------- /packages/hallway.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Hallway 3 | ################################################################ 4 | homeassistant: 5 | switch: 6 | - platform: flux 7 | name: hallway_flux 8 | mode: mired 9 | interval: 1 10 | transition: 3 11 | lights: 12 | - light.hallway 13 | 14 | automation: 15 | - alias: 'hallway_switch_1' 16 | initial_state: 'on' 17 | trigger: 18 | - platform: state 19 | entity_id: sensor.hallway_switch 20 | condition: 21 | - condition: state 22 | entity_id: sensor.hallway_switch 23 | state: '1_click_up' 24 | action: 25 | - service: switch.hallway_flux_update 26 | - service: light.toggle 27 | data: 28 | entity_id: light.hallway 29 | - service: switch.hallway_flux_update 30 | 31 | - alias: 'hallway_switch_2' 32 | initial_state: 'on' 33 | trigger: 34 | - platform: state 35 | entity_id: sensor.hallway_switch 36 | condition: 37 | - condition: state 38 | entity_id: sensor.hallway_switch 39 | state: '2_click_up' 40 | action: 41 | - service: light.turn_on 42 | data: 43 | entity_id: 44 | - light.hallway 45 | brightness: 255 46 | rgb_color: [255,255,255] 47 | 48 | - alias: 'hallway_switch_3' 49 | initial_state: 'on' 50 | trigger: 51 | - platform: state 52 | entity_id: sensor.hallway_switch 53 | condition: 54 | - condition: state 55 | entity_id: sensor.hallway_switch 56 | state: '3_click_up' 57 | action: 58 | - service: light.turn_on 59 | data: 60 | entity_id: 61 | - light.hallway 62 | brightness: 20 63 | rgb_color: [255,255,255] 64 | 65 | - alias: 'hallway_switch_4' 66 | initial_state: 'on' 67 | trigger: 68 | - platform: state 69 | entity_id: sensor.hallway_switch 70 | condition: 71 | - condition: state 72 | entity_id: sensor.hallway_switch 73 | state: '4_click_up' 74 | action: 75 | - service: light.turn_off 76 | data: 77 | entity_id: light.hallway 78 | -------------------------------------------------------------------------------- /packages/holiday.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Mahasri Kalavala 3 | # @date : 10/28/2017 4 | # @package : Holidays 5 | # @description : Retrieves the holiday 6 | # Adjusted for region and style by @ norien 7 | # 8 | # Sensor updates once every 4 hours (14400 seconds) & runs 6 times in 24 hours 9 | # 10 | # First it checks for holiday in static section, if that doesn't exist, 11 | # it checks in the dynamic section. If neither exists, the value will be empty 12 | ############################################################################### 13 | sensor: 14 | - platform: rest 15 | resource: https://raw.githubusercontent.com/Norien/Home-Assistant-Config/master/www/holiday.json 16 | name: holiday_data 17 | scan_interval: 200 18 | value_template: > 19 | {% set today = now().month ~ '/' ~ now().day %} 20 | {% set holiday = value_json.MAJOR_CA.static[ today ] %} 21 | {% if holiday | trim == "" %} 22 | {% set today = now().month ~ '/' ~ now().day ~ '/' ~ now().year %} 23 | {% set holiday = value_json.MAJOR_CA.dynamic[ today ] %} 24 | {% endif %} 25 | {{ holiday }} 26 | 27 | - platform: template 28 | sensors: 29 | holiday: 30 | friendly_name: 'Holiday' 31 | value_template: > 32 | {%- if states.sensor.holiday_data.state == unknown or states.sensor.holiday_data.state == "" -%} 33 | Standard 34 | {%- else -%} 35 | {{states.sensor.holiday_data.state}} 36 | {%- endif -%} 37 | icon_template: > 38 | {% if is_state('sensor.holiday_data', "New Year's Day") %} mdi:gift 39 | {% elif is_state('sensor.holiday_data', "Groundhog Day") %} mdi:white-balance-sunny 40 | {% elif is_state('sensor.holiday_data', "Valentine's Day") %} mdi:heart 41 | {% elif is_state('sensor.holiday_data', "St. Patrick's Day") %} mdi:beer 42 | {% elif is_state('sensor.holiday_data', "Starwars Day") %} mdi:robot 43 | {% elif is_state('sensor.holiday_data', "Good Friday") %} mdi:owl 44 | {% elif is_state('sensor.holiday_data', "Easter Sunday") %} mdi:owl 45 | {% elif is_state('sensor.holiday_data', "Earth Day") %} mdi:earth 46 | {% elif is_state('sensor.holiday_data', "Mother's Day") %} mdi:flower 47 | {% elif is_state('sensor.holiday_data', "Victoria Day") %} mdi:flower 48 | {% elif is_state('sensor.holiday_data', "Father's Day") %} mdi:face 49 | {% elif is_state('sensor.holiday_data', "Canada Day") %} mdi:flag 50 | {% elif is_state('sensor.holiday_data', "Labour Day") %} mdi:worker 51 | {% elif is_state('sensor.holiday_data', "Thanksgiving Day") %} mdi:corn 52 | {% elif is_state('sensor.holiday_data', "Halloween") %} mdi:ghost 53 | {% elif is_state('sensor.holiday_data', "Remembrance Day") %} mdi:sword-cross 54 | {% elif is_state('sensor.holiday_data', "Christmas Eve") %} mdi:candycane 55 | {% elif is_state('sensor.holiday_data', "Christmas Day") %} mdi:candycane 56 | {% elif is_state('sensor.holiday_data', "Boxing Day") %} mdi:candycane 57 | {% elif is_state('sensor.holiday_data', "New Year's Eve") %} mdi:gift 58 | {% else %} mdi:calendar-today 59 | {% endif %} 60 | -------------------------------------------------------------------------------- /packages/humidity_control.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Humidity Control 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | switch.dehumidifier: 7 | friendly_name: Dehumidifier 8 | icon: mdi:water-off 9 | sensor.mold_indicator: 10 | friendly_name: Mold Indicator 11 | icon: mdi:chemical-weapon 12 | automation.dehumidifier: 13 | friendly_name: Automatic Dehumidifier 14 | icon: mdi:water-percent 15 | 16 | sensor: 17 | - platform: mold_indicator 18 | indoor_temp_sensor: sensor.mold_indoor_temp 19 | indoor_humidity_sensor: sensor.mold_indoor_humidity 20 | outdoor_temp_sensor: sensor.dark_sky_apparent_temperature 21 | calibration_factor: 1.25 22 | ###### Bufer Sensors to bybass startup errors 23 | - platform: template 24 | sensors: 25 | mold_indoor_temp: 26 | unit_of_measurement: °C 27 | value_template: "{{states.sensor.average_whole_home.state|int|default(19)}}" 28 | mold_indoor_humidity: 29 | unit_of_measurement: '%' 30 | value_template: "{{states.sensor.hallway_thermostat_humidity.state|int|default(50)}}" 31 | 32 | ###### AVERAGE HUMIDITY 33 | - platform: min_max 34 | type: mean 35 | name: Average Humidity 36 | entity_ids: 37 | - sensor.server_room_humidity 38 | - sensor.hallway_thermostat_humidity 39 | 40 | automation: 41 | - alias: 'dehumidifier' 42 | initial_state: 'on' 43 | trigger: 44 | - platform: template 45 | value_template: > 46 | {% if float(states.sensor.mold_indicator.state) > float(65) or float(states.sensor.mold_indicator.state) < float(64) %} true 47 | {% else %} false 48 | {% endif %} 49 | action: 50 | - service_template: > 51 | {% if states.sensor.mold_indicator.state | float > 65 %} switch.turn_on 52 | {% else %} switch.turn_off 53 | {% endif %} 54 | entity_id: switch.dehumidifier 55 | - service: climate.set_fan_mode 56 | data_template: 57 | entity_id: climate.hallway 58 | fan_mode: > 59 | {% if states.sensor.mold_indicator.state | float > 65 %} 'on' 60 | {% else %} 'auto' 61 | {% endif %} 62 | 63 | ###### NOTIFY IF MOLD SENSOR IS GREATER OR EQUAL TO 70% 64 | - alias: 'Notify if Mold sensor is too high' 65 | initial_state: 'on' 66 | trigger: 67 | - platform: numeric_state 68 | entity_id: sensor.mold_indicator 69 | above: 69 70 | action: 71 | - service: notify.discord 72 | data_template: 73 | title: "Possible Mold Growth" 74 | message: "It's possible to have mold growth because the mold indicator is {{ states.sensor.mold_indicator.state }}" 75 | target: !secret discord 76 | - service: automation.turn_off 77 | data: 78 | entity_id: automation.notify_if_mold_sensor_is_too_high 79 | - delay: '05:00:00' 80 | - service: automation.turn_on 81 | data: 82 | entity_id: automation.notify_if_mold_sensor_is_too_high 83 | -------------------------------------------------------------------------------- /packages/janet_automations.yaml: -------------------------------------------------------------------------------- 1 | automation: 2 | ############################################################################## 3 | ### New Device has connected to the network. let everyone know. 4 | ############################################################################## 5 | 6 | - alias: "New device connected" 7 | trigger: 8 | - platform: event 9 | event_type: device_tracker_new_device 10 | 11 | action: 12 | - service: input_boolean.turn_on 13 | data: 14 | entity_id: input_boolean.janet_alert_mode 15 | 16 | - service: script.janet_speech_engine 17 | data: 18 | call_greeting: 1 19 | call_new_device: 1 20 | data_template: 21 | person: >- 22 | {{ trigger.event.data.name }} 23 | 24 | - alias: Janet Update Available 25 | trigger: 26 | - platform: state 27 | entity_id: sensor.up_to_date 28 | from: 'true' 29 | to: 'false' 30 | 31 | action: 32 | - service: script.janet_speech_engine 33 | data: 34 | call_greeting: 1 35 | call_update: 1 36 | -------------------------------------------------------------------------------- /packages/kodi_control.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Kodi Control 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | media_player.kodi_livingroom: 7 | friendly_name: Living Room KODI 8 | 9 | packages.kodi_control: &customize 10 | emulated_hue_hidden: false 11 | package: 'kodi_control' 12 | 13 | script.kodi_play: 14 | <<: *customize 15 | friendly_name: Play 16 | icon: mdi:play 17 | 18 | script.kodi_pause: 19 | <<: *customize 20 | friendly_name: Pause 21 | icon: mdi:pause 22 | 23 | script.kodi_playpause: 24 | <<: *customize 25 | friendly_name: Play / Pause 26 | icon: mdi:play-pause 27 | 28 | script.kodi_stop: 29 | <<: *customize 30 | friendly_name: Stop 31 | icon: mdi:stop 32 | 33 | script.kodi_next: 34 | <<: *customize 35 | friendly_name: Next 36 | icon: mdi:skip-next 37 | 38 | script.kodi_previous: 39 | <<: *customize 40 | friendly_name: Previous 41 | icon: mdi:skip-previous 42 | 43 | script.kodi_nav_back: 44 | <<: *customize 45 | friendly_name: Back 46 | icon: mdi:backspace 47 | 48 | script.kodi_nav_up: 49 | <<: *customize 50 | friendly_name: Up 51 | icon: mdi:arrow-up-bold-circle 52 | 53 | script.kodi_nav_down: 54 | <<: *customize 55 | friendly_name: Down 56 | icon: mdi:arrow-down-bold-circle 57 | 58 | script.kodi_nav_left: 59 | <<: *customize 60 | friendly_name: Left 61 | icon: mdi:arrow-left-bold-circle 62 | 63 | script.kodi_nav_right: 64 | <<: *customize 65 | friendly_name: Right 66 | icon: mdi:arrow-right-bold-circle 67 | 68 | script.kodi_nav_select: 69 | <<: *customize 70 | friendly_name: Select 71 | icon: mdi:circle 72 | 73 | script: 74 | ################################################ 75 | ## Kodi Commands 76 | ################################################ 77 | kodi_defaults: 78 | sequence: 79 | - service: shell_command.curl 80 | data: &defaults 81 | url: !secret kodi_livingroom_json 82 | method: "post" 83 | headers: 84 | content-type: "application/json" 85 | 86 | kodi_play_file: 87 | sequence: 88 | - service: shell_command.curl 89 | # We need full config here since we're using data_template 90 | data_template: 91 | url: !secret kodi_livingroom_json 92 | method: "post" 93 | headers: 94 | content-type: "application/json" 95 | payload: 96 | jsonrpc: "2.0" 97 | id: "1" 98 | method: "Player.Open" 99 | params: 100 | item: 101 | file: "{{ file }}" 102 | 103 | ###### PLAYBACK CONTROLS 104 | kodi_playpause: 105 | sequence: 106 | - service: shell_command.curl 107 | data: 108 | <<: *defaults 109 | payload: 110 | jsonrpc: "2.0" 111 | id: 1 112 | method: "Player.PlayPause" 113 | params: 114 | playerid: 1 115 | 116 | kodi_play: 117 | sequence: 118 | - service: shell_command.curl 119 | data: 120 | <<: *defaults 121 | payload: 122 | jsonrpc: "2.0" 123 | id: 1 124 | method: "Player.PlayPause" 125 | params: 126 | playerid: 1 127 | play: true 128 | 129 | kodi_pause: 130 | sequence: 131 | - service: shell_command.curl 132 | data: 133 | <<: *defaults 134 | payload: 135 | jsonrpc: "2.0" 136 | id: 1 137 | method: "Player.PlayPause" 138 | params: 139 | playerid: 1 140 | play: false 141 | 142 | kodi_stop: 143 | sequence: 144 | - service: shell_command.curl 145 | data: 146 | <<: *defaults 147 | payload: 148 | jsonrpc: "2.0" 149 | id: 1 150 | method: "Player.Stop" 151 | params: 152 | playerid: 1 153 | 154 | kodi_next: 155 | sequence: 156 | - service: shell_command.curl 157 | data: 158 | <<: *defaults 159 | payload: 160 | jsonrpc: "2.0" 161 | id: 1 162 | method: "Player.GoTo" 163 | params: 164 | playerid: 1 165 | to: "next" 166 | 167 | kodi_previous: 168 | sequence: 169 | - service: shell_command.curl 170 | data: 171 | <<: *defaults 172 | payload: 173 | jsonrpc: "2.0" 174 | id: 1 175 | method: "Player.GoTo" 176 | params: 177 | playerid: 1 178 | to: "previous" 179 | 180 | kodi_seek_forward: 181 | sequence: 182 | - service: shell_command.curl 183 | data: 184 | <<: *defaults 185 | payload: 186 | jsonrpc: "2.0" 187 | id: 1 188 | method: "Player.Seek" 189 | params: 190 | playerid: 1 191 | value: "smallforward" 192 | 193 | kodi_seek_backward: 194 | sequence: 195 | - service: shell_command.curl 196 | data: 197 | <<: *defaults 198 | payload: 199 | jsonrpc: "2.0" 200 | id: 1 201 | method: "Player.Seek" 202 | params: 203 | playerid: 1 204 | value: "smallbackward" 205 | 206 | kodi_nav_back: 207 | sequence: 208 | - service: shell_command.curl 209 | data: 210 | <<: *defaults 211 | payload: 212 | jsonrpc: "2.0" 213 | id: 1 214 | method: "Input.Back" 215 | 216 | kodi_nav_select: 217 | sequence: 218 | - service: shell_command.curl 219 | data: 220 | <<: *defaults 221 | payload: 222 | jsonrpc: "2.0" 223 | id: 1 224 | method: "Input.Select" 225 | 226 | kodi_nav_left: 227 | sequence: 228 | - service: shell_command.curl 229 | data: 230 | <<: *defaults 231 | payload: 232 | jsonrpc: "2.0" 233 | id: 1 234 | method: "Input.Left" 235 | 236 | kodi_nav_right: 237 | sequence: 238 | - service: shell_command.curl 239 | data: 240 | <<: *defaults 241 | payload: 242 | jsonrpc: "2.0" 243 | id: 1 244 | method: "Input.Right" 245 | 246 | kodi_nav_up: 247 | sequence: 248 | - service: shell_command.curl 249 | data: 250 | <<: *defaults 251 | payload: 252 | jsonrpc: "2.0" 253 | id: 1 254 | method: "Input.Up" 255 | 256 | kodi_nav_down: 257 | sequence: 258 | - service: shell_command.curl 259 | data: 260 | <<: *defaults 261 | payload: 262 | jsonrpc: "2.0" 263 | id: 1 264 | method: "Input.Down" 265 | -------------------------------------------------------------------------------- /packages/nest.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Nest 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | #Nest Thermostat 7 | binary_sensor.hallway_thermostat_fan: 8 | friendly_name: Thermostat Fan 9 | icon: mdi:fan 10 | sensor.hallway_thermostat_humidity: 11 | friendly_name: Hallway Humidity 12 | icon: mdi:water-percent 13 | sensor.hallway_thermostat_temperature: 14 | friendly_name: Hallway 15 | sensor.hallway_thermostat_hvac_state: 16 | friendly_name: Thermostat HVAC State 17 | sensor.hallway_thermostat_operation_mode: 18 | friendly_name: Thermostat Operation Mode 19 | #Nest Protect 20 | sensor.kitchen_nest_protect_co_status: 21 | entity_picture: /local/custom_icons/nestprotect.png 22 | sensor.kitchen_nest_protect_smoke_status: 23 | entity_picture: /local/custom_icons/nestprotect.png 24 | sensor.kitchen_nest_protect_battery_health: 25 | friendly_name: Kitchen Nest Protect Battery 26 | hidden: true 27 | icon: mdi:battery 28 | #Script 29 | script.fan: 30 | emulated_hue_hidden: false 31 | emulated_hue_name: "fan" 32 | friendly_name: Turn Fan on 33 | icon: mdi:fan 34 | script.hotter: 35 | emulated_hue_hidden: false 36 | friendly_name: 'Hotter' 37 | script.colder: 38 | emulated_hue_hidden: false 39 | friendly_name: 'Colder' 40 | 41 | nest: 42 | client_id: !secret nest_client_id 43 | client_secret: !secret nest_client_secret 44 | 45 | script: 46 | ###### ALEXA TURN ON HOT / COLD / FAN 47 | hotter: 48 | sequence: 49 | - service: climate.set_temperature 50 | data_template: 51 | entity_id: climate.hallway 52 | temperature: "{{ (states.climate.hallway.attributes.current_temperature | float) +1 }}" 53 | colder: 54 | sequence: 55 | - service: climate.set_temperature 56 | data_template: 57 | entity_id: climate.hallway 58 | temperature: "{{ (states.climate.hallway.attributes.current_temperature | float) -1 }}" 59 | fan: 60 | sequence: 61 | - service: climate.set_fan_mode 62 | data: 63 | entity_id: climate.hallway 64 | fan_mode: 'on' 65 | 66 | switch: 67 | - platform: template 68 | switches: 69 | nest_fan: 70 | value_template: >- 71 | {%-set fan = states.climate.hallway.attributes.fan_mode-%} 72 | {%-if fan == 'on' -%} 73 | on 74 | {%- else -%} 75 | off 76 | {%- endif -%} 77 | turn_on: 78 | service: climate.set_fan_mode 79 | data: 80 | entity_id: climate.hallway 81 | fan_mode: 'on' 82 | turn_off: 83 | service: climate.set_fan_mode 84 | data: 85 | entity_id: climate.hallway 86 | fan_mode: 'off' 87 | nest_away: 88 | value_template: >- 89 | {%-set away = states.climate.hallway.attributes.preset_mode-%} 90 | {%-if away == 'away' -%} 91 | on 92 | {%- else -%} 93 | off 94 | {%- endif -%} 95 | turn_on: 96 | service: climate.set_preset_mode 97 | data: 98 | entity_id: climate.hallway 99 | preset_mode: 'away' 100 | turn_off: 101 | service: climate.set_preset_mode 102 | data: 103 | entity_id: climate.hallway 104 | preset_mode: 'none' 105 | input_text: 106 | # A variable to store Nest's current mode - used when we restore from away mode 107 | nest_mode: 108 | name: Heating/Cooling Mode 109 | 110 | automation: 111 | ###### SET STATE WHEN WINDOWS TOGGLED 112 | - alias: 'nest_to_off_windows_open' 113 | initial_state: 'on' 114 | trigger: 115 | - platform: state 116 | entity_id: binary_sensor.kitchen_window 117 | from: 'off' 118 | to: 'on' 119 | action: 120 | # Save the current mode for Nest so we can restore it later 121 | - service: input_text.set_value 122 | data_template: 123 | entity_id: input_text.nest_mode 124 | value: '{{ states.climate.hallway.state }}' 125 | # Set Nest to Eco mode 126 | - service: climate.set_preset_mode 127 | data: 128 | entity_id: climate.hallway 129 | preset_mode: 'eco' 130 | - alias: 'nest_to_on_windows_closed' 131 | initial_state: 'on' 132 | trigger: 133 | - platform: state 134 | entity_id: binary_sensor.kitchen_window 135 | from: 'on' 136 | to: 'off' 137 | condition: 138 | condition: and 139 | conditions: 140 | # House is currently in eco mode 141 | - condition: template 142 | value_template: '{{ is_state_attr("climate.hallway", "preset_mode", "eco") }}' 143 | # The last state was successfully saved/set 144 | - condition: template 145 | value_template: '{{ states.input_text.nest_mode.state != "unknown" }}' 146 | action: 147 | # Restore Nest to the orgional mode 148 | - service: climate.set_hvac_mode 149 | data_template: 150 | entity_id: climate.hallway 151 | operation_mode: '{{ states.input_text.nest_mode.state }}' 152 | ###### Nest protect states are - ok warning emergency 153 | - alias: 'notify if nest protect is not ok' 154 | initial_state: 'on' 155 | trigger: 156 | - platform: state 157 | entity_id: sensor.kitchen_nest_protect_co_status,sensor.kitchen_nest_protect_smoke_status 158 | to: 'emergency' 159 | action: 160 | - service: script.janet_speech_engine 161 | data: 162 | call_greeting: 1 163 | call_inform: 1 164 | data_template: 165 | CustomMessage: >- 166 | 'Nest has detected Smoke or CO in the Kitchen.' 167 | - service: hue.hue_activate_scene 168 | data: 169 | group_name: "Living Room" 170 | scene_name: "Alarm" 171 | sensor: 172 | - platform: template 173 | sensors: 174 | # TEMPS 175 | nest_target_temperature: 176 | friendly_name: "Target Temperature" 177 | entity_id: climate.hallway 178 | unit_of_measurement: "°C" 179 | value_template: "{{states.climate.hallway.attributes.temperature}}" 180 | nest_current_temperature: 181 | friendly_name: "Current Temperature" 182 | entity_id: climate.hallway 183 | unit_of_measurement: "°C" 184 | value_template: "{{states.climate.hallway.attributes.current_temperature}}" 185 | nest_target_temp_high: 186 | friendly_name: "target_temp_high" 187 | entity_id: climate.hallway 188 | unit_of_measurement: "°C" 189 | value_template: "{{states.climate.hallway.attributes.target_temp_high}}" 190 | nest_target_temp_low: 191 | friendly_name: "target_temp_low" 192 | entity_id: climate.hallway 193 | unit_of_measurement: "°C" 194 | value_template: "{{states.climate.hallway.attributes.target_temp_low}}" 195 | # MODES 196 | nest_operation_mode: 197 | friendly_name: "Operation Mode" 198 | entity_id: climate.hallway 199 | value_template: "{{states.climate.hallway.state}}" 200 | nest_away_mode: 201 | friendly_name: "Operation Mode" 202 | entity_id: climate.hallway 203 | value_template: "{{states.climate.hallway.attributes.away_mode}}" 204 | -------------------------------------------------------------------------------- /packages/network.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / internet_usage 3 | ## @norien - https://github.com/Norien/Home-Assistant-Config 4 | ################################################################ 5 | homeassistant: 6 | 7 | sensor: 8 | - platform: unifigateway 9 | host: localhost 10 | username: !secret unifi_user 11 | password: !secret unifi_password 12 | monitored_conditions: 13 | - www 14 | - wlan 15 | - lan 16 | - wan 17 | - alerts 18 | - firmware 19 | ## BREAKOUT UNIFI FOR LOVELACE 20 | - platform: template 21 | sensors: 22 | unifi_gateway_www_rx: 23 | entity_id: sensor.unifi_gateway_www 24 | unit_of_measurement: 'kB/s' 25 | value_template: "{{ state_attr('sensor.unifi_gateway_www', 'rx_bytes-r') / 1000}}" 26 | unifi_gateway_www_tx: 27 | entity_id: sensor.unifi_gateway_www 28 | unit_of_measurement: 'kB/s' 29 | value_template: "{{ state_attr('sensor.unifi_gateway_www', 'tx_bytes-r') / 1000}}" 30 | unifi_gateway_www_cpu: 31 | entity_id: sensor.unifi_gateway_wan 32 | unit_of_measurement: '%' 33 | value_template: "{{states.sensor.unifi_gateway_wan.attributes['gw_system-stats']['cpu']}}" 34 | unifi_gateway_www_mem: 35 | entity_id: sensor.unifi_gateway_wan 36 | unit_of_measurement: '%' 37 | value_template: "{{states.sensor.unifi_gateway_wan.attributes['gw_system-stats']['mem']}}" 38 | unifi_gateway_lan_num_user: 39 | entity_id: sensor.unifi_gateway_lan 40 | unit_of_measurement: 'Users' 41 | value_template: "{{states.sensor.unifi_gateway_lan.attributes['num_user']}}" 42 | unifi_gateway_wlan_num_user: 43 | entity_id: sensor.unifi_gateway_wlan 44 | unit_of_measurement: 'Users' 45 | value_template: "{{states.sensor.unifi_gateway_wlan.attributes['num_user']}}" 46 | ###### SENSOR FOR SEEXBOX DELUGE 47 | - platform: deluge 48 | host: !secret deluge_host 49 | port: !secret deluge_port 50 | username: !secret deluge_user 51 | password: !secret deluge_pass 52 | monitored_variables: 53 | - 'current_status' 54 | - 'download_speed' 55 | - 'upload_speed' 56 | - platform: command_line 57 | command: 'cat /config/www/deluge_ip' 58 | name: 'SeedBox IP' 59 | scan_interval: 60 60 | ###### CERT DAYS LEFT 61 | - platform: command_line 62 | command: 'cat /config/www/ssl.txt' 63 | name: Certificate 64 | unit_of_measurement: Days 65 | scan_interval: 43200 66 | ###### EXTERNAL IP FOR NOTIFY 67 | - platform: rest 68 | resource: https://api.ipify.org/?format=json 69 | #resource: http://ip.jsontest.com 70 | name: external_ip 71 | value_template: '{{ value_json.ip }}' 72 | scan_interval: 14400 73 | ###### CUSTOM DATA USAGE PYTHON SCRIPT 74 | # - platform: ssh 75 | # name: usage_test 76 | # host: !secret skullcanyon_host 77 | # username: !secret skullcanyon_user 78 | # password: !secret skullcanyon_pass 79 | # command: !secret internet_usage_test 80 | # value_template: >- 81 | # {{value.split("\r\n")[1]}} 82 | 83 | - platform: command_line 84 | command: !secret internet_usage 85 | name: 'usage' 86 | scan_interval: 21600 87 | - platform: template 88 | sensors: 89 | seedbox_vpn_status: 90 | friendly_name: "VPN Status" 91 | value_template: > 92 | {%-set nuc = states.sensor.external_ip.state-%} 93 | {%-set deluge = states.sensor.seedbox_ip.state-%} 94 | {%-if deluge==nuc-%} 95 | Disconnected 96 | {%-elif deluge==unknown or nuc==unknown-%} 97 | Unknown 98 | {%-else-%} 99 | Connected 100 | {%-endif-%} 101 | icon_template: "{% if icon == icon %}mdi:earth-box{% endif %}" 102 | entity_id: sensor.usage, sensor.quote_of_the_day 103 | usage_downloaded: 104 | friendly_name: "Downloaded" 105 | value_template: "{{states.sensor.usage.state.split(',')[0]}}" 106 | unit_of_measurement: "GB" 107 | icon_template: "{% if icon == icon %}mdi:folder-download{% endif %}" 108 | entity_id: sensor.usage, sensor.quote_of_the_day 109 | usage_uploaded: 110 | friendly_name: "Uploaded" 111 | value_template: "{{states.sensor.usage.state.split(',')[1]}}" 112 | unit_of_measurement: "GB" 113 | icon_template: "{% if icon == icon %}mdi:folder-upload{% endif %}" 114 | entity_id: sensor.usage, sensor.quote_of_the_day 115 | usage_total_usage: 116 | friendly_name: "Total Bandwidth" 117 | value_template: "{{states.sensor.usage.state.split(',')[3]}}" 118 | unit_of_measurement: "GB" 119 | icon_template: "{% if icon == icon %}mdi:folder-star{% endif %}" 120 | entity_id: sensor.usage, sensor.quote_of_the_day 121 | usage_days_remaining: 122 | friendly_name: "Billing Period" 123 | value_template: "{{states.sensor.usage.state.split(',')[6]}}" 124 | unit_of_measurement: "Days" 125 | icon_template: "{% if icon == icon %}mdi:calendar-clock{% endif %}" 126 | entity_id: sensor.usage, sensor.quote_of_the_day 127 | 128 | automation: 129 | ###### NOTIFY AND RESTART SEEDBOX IF VPN DISCONNECTS 130 | - alias: Notify Of VPN Disconnect 131 | initial_state: 'on' 132 | trigger: 133 | platform: state 134 | entity_id: sensor.seedbox_ip 135 | condition: 136 | - condition: template 137 | value_template: "{%-if states.sensor.seedbox_ip.state==states.sensor.external_ip.state-%}True{% else%}False{%endif%}" 138 | action: 139 | - service: notify.discord 140 | data: 141 | target: !secret discord 142 | message: 'SeedBox VPN Has Disconnected!' 143 | - service: persistent_notification.create 144 | data_template: 145 | title: VPN Disconnected 146 | message: "VPN has disconnected and SeedBox was restarted!" 147 | notification_id: VPN Disconnected 148 | ###### NOTIFY IF IP CHANGES 149 | - alias: Notify Of New External IP 150 | initial_state: 'on' 151 | trigger: 152 | platform: state 153 | entity_id: sensor.external_ip 154 | condition: 155 | - condition: template 156 | value_template: "{% if trigger.from_state and trigger.to_state %} True {% else %} False {% endif %}" 157 | action: 158 | - service: shell_command.update_godaddy 159 | - service: notify.discord 160 | data_template: 161 | target: !secret discord 162 | message: "Your External IP changed from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}" 163 | 164 | ### SWITCH FOR DELUGE SEEXBOX 165 | switch: 166 | platform: deluge 167 | host: !secret deluge_host 168 | port: !secret deluge_port 169 | username: !secret deluge_user 170 | password: !secret deluge_pass 171 | 172 | shell_command: 173 | update_godaddy: /usr/bin/python3 /config/python_scripts/godaddy_ddns.py %/config/python_scripts/godaddy-ddns.config 174 | -------------------------------------------------------------------------------- /packages/nightlight.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Night Light 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | automation.night_light: 7 | friendly_name: 'Night Light' 8 | icon: mdi:brightness-4 9 | 10 | automation: 11 | - alias: 'Night Light' 12 | initial_state: 'on' 13 | trigger: 14 | - platform: state 15 | entity_id: binary_sensor.living_room_sensor_motion, binary_sensor.dining_room_sensor_motion 16 | to: 'on' 17 | condition: 18 | - condition: state 19 | entity_id: 'sun.sun' 20 | state: 'below_horizon' 21 | - condition: state 22 | entity_id: 'input_boolean.vacation' 23 | state: 'off' 24 | - condition: state 25 | entity_id: 'input_boolean.away' 26 | state: 'off' 27 | - condition: time 28 | after: '20:00:00' 29 | before: '08:00:00' 30 | - condition: state 31 | entity_id: 'light.living_room' 32 | state: 'off' 33 | - condition: state 34 | entity_id: 'media_player.kodi_livingroom' 35 | state: 'idle' 36 | action: 37 | - service: script.turn_off 38 | data: 39 | entity_id: script.nightlight 40 | - service: script.turn_on 41 | data: 42 | entity_id: script.nightlight 43 | 44 | script: 45 | nightlight: 46 | sequence: 47 | - service: light.turn_on 48 | data: 49 | entity_id: 50 | - light.kitchen_sink 51 | - light.living_room_lamp 52 | - light.hue_color_lamp_1 53 | - light.hue_color_lamp_3 54 | brightness: 10 55 | rgb_color: [255,104,18] 56 | - delay: 57 | minutes: 4 58 | - service_template: > 59 | {% if is_state_attr('light.kitchen_sink', 'rgb_color', (255, 104, 21)) %} 60 | script.nightlight_off 61 | {% else %} 62 | script.nightlight 63 | {% endif %} 64 | 65 | nightlight_off: 66 | sequence: 67 | - service: light.turn_off 68 | data: 69 | entity_id: 70 | - light.hue_color_lamp_1 71 | - light.hue_color_lamp_3 72 | - light.kitchen_sink 73 | - light.living_room_lamp 74 | -------------------------------------------------------------------------------- /packages/notify.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Notifications 3 | ################################################################ 4 | 5 | notify: 6 | - platform: discord 7 | name: discord 8 | token: !secret discord_token 9 | automation: 10 | ###### NOTIFY IF NICOLE HAS LEFT ONE OF HER WORKPLACES 11 | - alias: Notify If Left Work 12 | initial_state: 'on' 13 | trigger: 14 | - platform: zone 15 | entity_id: device_tracker.life360_nicole 16 | zone: zone.work_whitehills 17 | event: leave 18 | - platform: zone 19 | entity_id: device_tracker.life360_nicole 20 | zone: zone.work_westmount 21 | event: leave 22 | - platform: zone 23 | entity_id: device_tracker.life360_nicole 24 | zone: zone.work_old_south 25 | event: leave 26 | - platform: zone 27 | entity_id: device_tracker.life360_nicole 28 | zone: zone.victoria_hospital 29 | event: leave 30 | - platform: zone 31 | entity_id: device_tracker.life360_nicole 32 | zone: zone.daycare 33 | event: leave 34 | action: 35 | - service: notify.discord 36 | data_template: 37 | target: !secret discord 38 | message: > 39 | {{ trigger.to_state.attributes.friendly_name }} has left {{ trigger.zone.attributes.friendly_name }} 40 | - service: script.janet_speech_engine 41 | data: 42 | call_greeting: 1 43 | data_template: 44 | CustomMessage: > 45 | {{ trigger.to_state.attributes.friendly_name }} has left {{ trigger.zone.attributes.friendly_name }} 46 | 47 | # Announce new devices on the network. Thanks to @robotsandcakes 48 | - alias: "Notify if New device connected" 49 | initial_state: 'on' 50 | trigger: 51 | - platform: event 52 | event_type: device_tracker_new_device 53 | action: 54 | - service: script.janet_speech_engine 55 | data: 56 | call_introduction: 1 57 | data_template: 58 | CustomMessage: > 59 | New entity ID {{ trigger.event.data.entity_id }} and hostname {{ trigger.event.data.host_name }} 60 | 61 | ###### NOTIFY IF VACATION MODE toggled 62 | - alias: 'Notify Vacation Mode' 63 | initial_state: 'on' 64 | trigger: 65 | - platform: state 66 | entity_id: input_boolean.vacation 67 | action: 68 | - service: script.janet_speech_engine 69 | data: 70 | call_greeting: 1 71 | data_template: 72 | CustomMessage: 'Vacation Mode is now {{states.input_boolean.vacation.state}}' 73 | 74 | ###### NOTIFY IF GUEST MODE toggled 75 | - alias: 'Notify Guest Mode' 76 | initial_state: 'on' 77 | trigger: 78 | - platform: state 79 | entity_id: input_boolean.guest 80 | action: 81 | - service: script.janet_speech_engine 82 | data: 83 | call_greeting: 1 84 | data_template: 85 | CustomMessage: 'Guest Mode is now {{states.input_boolean.guest.state}}' 86 | 87 | ###### NOTIFY IF UPDATE IS AVAILABLE 88 | ##HOME-ASSISTANT 89 | - alias: 'notify if update available' 90 | initial_state: 'on' 91 | trigger: 92 | - platform: template 93 | value_template: "{{states.sensor.ha_version.attributes.icon != 'mdi:checkbox-marked'}}" 94 | action: 95 | - service: notify.discord 96 | data: 97 | target: !secret discord 98 | message: "Home Assistant {{ states('sensor.ha_version') }} for update." 99 | - service: persistent_notification.create 100 | data_template: 101 | title: Update Available 102 | message: "Home Assistant {{ states('sensor.ha_version') }} for update." 103 | notification_id: Update Available 104 | -------------------------------------------------------------------------------- /packages/pc.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / PC 3 | ################################################################ 4 | homeassistant: 5 | binary_sensor: 6 | - platform: mqtt 7 | name: "My Computer - Connected" 8 | state_topic: "iotlink/workgroup/game/lwt" 9 | value_template: "{{ value }}" 10 | payload_on: "ON" 11 | payload_off: "OFF" 12 | device_class: "connectivity" 13 | qos: 1 14 | 15 | sensor: 16 | - platform: mqtt 17 | name: "My Computer - Idle Time" 18 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/idle-time/game" 19 | unit_of_measurement: 'seconds' 20 | icon: mdi:timer 21 | value_template: "{{ value }}" 22 | availability_topic: "iotlink/workgroup/game/lwt" 23 | payload_available: "ON" 24 | payload_not_available: "OFF" 25 | qos: 1 26 | 27 | - platform: mqtt 28 | name: "My Computer - CPU Usage" 29 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/cpu" 30 | unit_of_measurement: '%' 31 | icon: mdi:speedometer 32 | value_template: "{{ value }}" 33 | availability_topic: "iotlink/workgroup/game/lwt" 34 | payload_available: "ON" 35 | payload_not_available: "OFF" 36 | qos: 1 37 | 38 | - platform: mqtt 39 | name: "My Computer - RAM Usage" 40 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/memory/usage" 41 | unit_of_measurement: '%' 42 | icon: mdi:memory 43 | value_template: "{{ value }}" 44 | availability_topic: "iotlink/workgroup/game/lwt" 45 | payload_available: "ON" 46 | payload_not_available: "OFF" 47 | qos: 1 48 | 49 | - platform: mqtt 50 | name: "My Computer - RAM Available" 51 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/memory/available" 52 | unit_of_measurement: 'MB' 53 | icon: mdi:memory 54 | value_template: "{{ value }}" 55 | availability_topic: "iotlink/workgroup/game/lwt" 56 | payload_available: "ON" 57 | payload_not_available: "OFF" 58 | qos: 1 59 | 60 | - platform: mqtt 61 | name: "My Computer - RAM Used" 62 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/memory/used" 63 | unit_of_measurement: 'MB' 64 | icon: mdi:memory 65 | value_template: "{{ value }}" 66 | availability_topic: "iotlink/workgroup/game/lwt" 67 | payload_available: "ON" 68 | payload_not_available: "OFF" 69 | qos: 1 70 | 71 | - platform: mqtt 72 | name: "My Computer - RAM Total" 73 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/memory/total" 74 | unit_of_measurement: 'MB' 75 | icon: mdi:memory 76 | value_template: "{{ value }}" 77 | availability_topic: "iotlink/workgroup/game/lwt" 78 | payload_available: "ON" 79 | payload_not_available: "OFF" 80 | qos: 1 81 | 82 | - platform: mqtt 83 | name: "My Computer - HDD Usage (C)" 84 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/hard-drive/c/drive-usage" 85 | unit_of_measurement: '%' 86 | icon: mdi:chart-donut 87 | value_template: "{{ value }}" 88 | availability_topic: "iotlink/workgroup/game/lwt" 89 | payload_available: "ON" 90 | payload_not_available: "OFF" 91 | qos: 1 92 | 93 | - platform: mqtt 94 | name: "My Computer - HDD Usage (F)" 95 | state_topic: "iotlink/workgroup/game/windows-monitor/stats/hard-drive/f/drive-usage" 96 | unit_of_measurement: '%' 97 | icon: mdi:chart-donut 98 | value_template: "{{ value }}" 99 | availability_topic: "iotlink/workgroup/game/lwt" 100 | payload_available: "ON" 101 | payload_not_available: "OFF" 102 | qos: 1 103 | 104 | script: 105 | my_computer_vol_mute: 106 | alias: "My Computer - Toggle Mute" 107 | sequence: 108 | - service: mqtt.publish 109 | data: 110 | topic: "iotlink/workgroup/game/commands/volume/mute" 111 | payload: "" 112 | 113 | my_computer_vol_max: 114 | alias: "My Computer - Vol Max" 115 | sequence: 116 | - service: mqtt.publish 117 | data: 118 | topic: "iotlink/workgroup/game/commands/volume/set" 119 | payload: "100" 120 | 121 | my_computer_run_chrome: 122 | alias: "My Computer - Run Chrome" 123 | sequence: 124 | - service: mqtt.publish 125 | data: 126 | topic: "iotlink/workgroup/game/commands/run" 127 | payload: '{ "command": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", "args": "https://iotlink.gitlab.io", "path": "C:\\Program Files (x86)\\Google\\Chrome\\Application", "user": "", "visible": true, "fallback": true }' 128 | -------------------------------------------------------------------------------- /packages/presence.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Presence 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | # GOOGLE TRAVEL TIME SENSORS 7 | sensor.nicole_phone_to_home: 8 | friendly_name: 'Nicole Phone to Home' 9 | icon: mdi:car 10 | sensor.nicole_home_to_work: 11 | friendly_name: 'Nicole Home to Work' 12 | icon: mdi:car 13 | 14 | google_assistant: 15 | entity_config: 16 | script.location: 17 | expose: true 18 | name: 'location' 19 | 20 | automation: 21 | - alias: house_mode_away 22 | initial_state: 'on' 23 | trigger: 24 | - platform: state 25 | entity_id: person.justin, person.nicole, input_boolean.guest 26 | action: 27 | - service_template: > 28 | {% if states.person.justin.state == 'not_home' and states.person.nicole.state == 'not_home' and states.input_boolean.guest.state == 'off' and states.input_boolean.away.state == 'off' %} input_boolean.turn_on 29 | {% elif states.person.justin.state == 'home' or states.person.nicole.state == 'home' or states.input_boolean.guest.state == 'on' and states.input_boolean.away.state == 'on' %} input_boolean.turn_off 30 | {% endif %} 31 | entity_id: input_boolean.away 32 | - service_template: > 33 | {% if states.input_boolean.away.state == 'on' %} script.house_mode_away 34 | {% elif states.input_boolean.away.state == 'on' %} script.house_mode_away 35 | {% endif %} 36 | 37 | - alias: house_mode_vacation 38 | initial_state: 'on' 39 | trigger: 40 | - platform: state 41 | entity_id: input_boolean.away 42 | to: 'on' 43 | for: 44 | hours: 17 45 | - platform: state 46 | entity_id: input_boolean.away 47 | to: 'off' 48 | action: 49 | - service_template: > 50 | {% if states.input_boolean.vacation.state == 'off' and states.input_boolean.away.state == 'on' %} homeassistant.turn_on 51 | {% elif states.input_boolean.vacation.state == 'on' and states.input_boolean.away.state == 'off' %} homeassistant.turn_off 52 | {% endif %} 53 | entity_id: input_boolean.vacation 54 | 55 | - alias: 'welcome_home' 56 | initial_state: 'on' 57 | trigger: 58 | - platform: state 59 | entity_id: input_boolean.away, input_boolean.vacation 60 | to: 'off' 61 | action: 62 | # OUTDOOR PORCH LIGHT IS SET ON WHEN HOME FROM THEME PACKAGE 63 | - service_template: > 64 | {% if states.sensor.living_room_lux.state | float < 45 %} 65 | script.lr_concentrate 66 | {% endif %} 67 | entity_id: script.lr_concentrate 68 | - service: climate.set_away_mode 69 | data: 70 | entity_id: climate.hallway 71 | away_mode: 'false' 72 | 73 | # - alias: 'welcome_home_greeting' 74 | # initial_state: 'on' 75 | # trigger: 76 | # - platform: state 77 | # entity_id: device_tracker.life360_justin, device_tracker.life360_nicole 78 | # to: 'home' 79 | # action: 80 | # - wait_template: "{{ states.binary_sensor.door_front.state == 'on' }}" 81 | # - service: script.janet_speech_engine 82 | # data_template: 83 | # person: > 84 | # {%set nicole = states.device_tracker.life360_nicole.state%} 85 | # {%set nicole_ = states.device_tracker.life360_nicole%} 86 | # {%set justin = states.device_tracker.life360_justin.state%} 87 | # {%set justin_ = states.device_tracker.life360_justin%} 88 | # {%-if nicole != "home" and justin == "home"-%} 89 | # Justin 90 | # {%elif nicole == "home" and justin != "home"%} 91 | # Nicole 92 | # {%elif nicole == "home" and justin == "home" and (now() - nicole_.last_changed).total_seconds() < 600 and (now() - justin_.last_changed).total_seconds() < 600 %} 93 | # Nicole and Justin 94 | # {%elif nicole == "home" and justin == "home" and (now() - nicole_.last_changed).total_seconds() > 600 and (now() - justin_.last_changed).total_seconds() < 600 %} 95 | # Justin 96 | # {%elif nicole == "home" and justin == "home" and (now() - nicole_.last_changed).total_seconds() < 600 and (now() - justin_.last_changed).total_seconds() > 600 %} 97 | # Nicole 98 | # {%else%} 99 | # {%endif%} 100 | # message: > 101 | # {{ ["Welcome back home PERSON", 102 | # "Guess who is home. PERSON is!", 103 | # "PERSON is now in the house.", 104 | # "Welcome Home PERSON. We have missed you. Or at least I did.", 105 | # "Our home is now complete, Rest your head and relax your feet, Welcome Back PERSON", 106 | # "Life is like a song, you’re back where you belong, Welcome home PERSON", 107 | # "Hey there PERSON Welcome Home!", 108 | # "Knock Knock. Who is There? PERSON is!", 109 | # "PERSON, you are home!", 110 | # "I know a secret. PERSON is home!" 111 | # ] | random }} 112 | 113 | script: 114 | house_mode_away: 115 | sequence: 116 | - service: light.turn_off 117 | data_template: 118 | entity_id: > 119 | {%- for state in states.light if state.entity_id != 'light.front_door' -%} 120 | {{- "," if not loop.first-}}{{ state.entity_id }}{{-endif-}} 121 | {%- endfor -%} 122 | ## this started turning off all my docker switches killing my whole system everytime we left the house! 123 | # - service: switch.turn_off 124 | # data_template: 125 | # entity_id: > 126 | # {%- for state in states.switch if 127 | # state.entity_id != 'switch.washing_machine' and 128 | # state.entity_id != 'switch.dehumidifier' and 129 | # state.entity_id != 'switch.office_powerbar' and 130 | # state.entity_id != 'switch.pihole'-%} 131 | # {{- "," if not loop.first-}}{{ state.entity_id }}{{-endif-}} 132 | # {%- endfor -%} 133 | - service: media_player.turn_off 134 | data_template: 135 | entity_id: > 136 | {%- for state in states.media_player if 137 | state.entity_id != 'media_player.kodi_livingroom'-%} 138 | {{- "," if not loop.first-}}{{ state.entity_id }}{{-endif-}} 139 | {%- endfor -%} 140 | - service: climate.set_away_mode 141 | data: 142 | entity_id: climate.hallway 143 | away_mode: 'true' 144 | 145 | sensor: 146 | ###### GOOGLE TRAVEL TIME 147 | - platform: google_travel_time 148 | name: Nicole Phone To Home 149 | scan_interval: 10 150 | api_key: !secret google_secret 151 | origin: device_tracker.life360_nicole 152 | destination: zone.home 153 | - platform: google_travel_time 154 | name: Justin Phone To Home 155 | scan_interval: 10 156 | api_key: !secret google_secret_justin 157 | origin: device_tracker.life360_justin 158 | destination: zone.home 159 | 160 | device_tracker: 161 | - platform: life360 162 | username: !secret life360_username 163 | password: !secret life360_password 164 | prefix: 'life360' 165 | 166 | ###### MODES / PEOPLE 167 | input_boolean: 168 | guest: 169 | name: Guest 170 | icon: mdi:account-box 171 | initial: off 172 | vacation: 173 | name: Vacation 174 | icon: mdi:sunglasses 175 | initial: off 176 | away: 177 | name: Away 178 | icon: mdi:account-off 179 | initial: off 180 | map_justin: 181 | name: map 182 | icon: mdi:map-search-outline 183 | map_nicole: 184 | name: map 185 | icon: mdi:map-search-outline 186 | -------------------------------------------------------------------------------- /packages/room_basement.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Basement 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | light.couch: 7 | emulated_hue_hidden: false 8 | friendly_name: Basement Light 9 | 10 | octoprint: 11 | host: 192.168.1.93 12 | api_key: !secret octoprint_api 13 | bed: true 14 | number_of_tools: 1 15 | 16 | input_number: 17 | octoprint_level: 18 | name: Octoprint Level 19 | min: 0 20 | max: 9999999 21 | step: 1 22 | mode: box 23 | icon: mdi:gamepad-variant 24 | 25 | sensor: 26 | ###### OCTOPRINT FORMATED TIME 27 | - platform: template 28 | sensors: 29 | octoprint_time_elapsed_format: 30 | friendly_name: 'Printing Time Elapsed' 31 | value_template: >- 32 | {% set etime = states.sensor.octoprint_time_elapsed.state | int %} 33 | {% set seconds = etime % 60 %} 34 | {% set minutes = ((etime % 3600) / 60) | int %} 35 | {% set hours = ((etime % 86400) / 3600) | int %} 36 | {% set days = (etime / 86400) | int %} 37 | {%- if days > 0 -%} 38 | {%- if days == 1 -%} 39 | 1 day 40 | {%- else -%} 41 | {{ days }} days 42 | {%- endif -%} 43 | {{ ', ' }} 44 | {%- endif -%} 45 | {%- if hours > 0 -%} 46 | {%- if hours == 1 -%} 47 | 1 hour 48 | {%- else -%} 49 | {{ hours }} hours 50 | {%- endif -%} 51 | {{ ', ' }} 52 | {%- endif -%} 53 | {%- if minutes > 0 -%} 54 | {%- if minutes == 1 -%} 55 | 1 minute 56 | {%- else -%} 57 | {{ minutes }} minutes 58 | {%- endif -%} 59 | {%- endif -%} 60 | octoprint_time_remaining_format: 61 | friendly_name: 'Printing Time Remaining' 62 | value_template: >- 63 | {% set rtime = states.sensor.octoprint_time_remaining.state | int %} 64 | {% set seconds = rtime % 60 %} 65 | {% set minutes = ((rtime % 3600) / 60) | int %} 66 | {% set hours = ((rtime % 86400) / 3600) | int %} 67 | {% set days = (rtime / 86400) | int %} 68 | {%- if days > 0 -%} 69 | {%- if days == 1 -%} 70 | 1 day 71 | {%- else -%} 72 | {{ days }} days 73 | {%- endif -%} 74 | {{ ', ' }} 75 | {%- endif -%} 76 | {%- if hours > 0 -%} 77 | {%- if hours == 1 -%} 78 | 1 hour 79 | {%- else -%} 80 | {{ hours }} hours 81 | {%- endif -%} 82 | {{ ', ' }} 83 | {%- endif -%} 84 | {%- if minutes > 0 -%} 85 | {%- if minutes == 1 -%} 86 | 1 minute 87 | {%- else -%} 88 | {{ minutes }} minutes 89 | {%- endif -%} 90 | {%- endif -%} 91 | ###### motion SENSOR 92 | - platform: mqtt 93 | name: 'Server Room Motion' 94 | state_topic: "/server_room/motion/motion" 95 | qos: 0 96 | payload_available: "1" 97 | payload_not_available: "0" 98 | 99 | ###### SONOFF POW SENSORS 100 | - platform: mqtt 101 | name: "Server Draw" 102 | state_topic: "tele/sonoff_server/SENSOR" 103 | qos: 0 104 | unit_of_measurement: "W" 105 | value_template: "{{ value_json['ENERGY'].Power }}" 106 | 107 | - platform: mqtt 108 | name: "Server Voltage" 109 | state_topic: "tele/sonoff_server/SENSOR" 110 | qos: 0 111 | unit_of_measurement: "V" 112 | value_template: "{{ value_json['ENERGY'].Voltage }}" 113 | 114 | - platform: mqtt 115 | name: "Server Today" 116 | state_topic: "tele/sonoff_server/SENSOR" 117 | qos: 0 118 | unit_of_measurement: "kWh" 119 | value_template: "{{ value_json['ENERGY'].Today }}" 120 | 121 | - platform: mqtt 122 | name: "Server Current" 123 | state_topic: "tele/sonoff_server/SENSOR" 124 | qos: 0 125 | unit_of_measurement: "A" 126 | value_template: "{{ value_json['ENERGY'].Current }}" 127 | 128 | - platform: mqtt 129 | name: "Server Yesterday" 130 | state_topic: "tele/sonoff_server/SENSOR" 131 | qos: 0 132 | unit_of_measurement: "kWh" 133 | value_template: "{{ value_json['ENERGY'].Yesterday }}" 134 | 135 | ###### MQTT DHT22 136 | - platform: mqtt 137 | state_topic: '/server_room/environment/Temperature' 138 | name: 'Server Room Temperature' 139 | value_template: '{{ (value | float - 0) | round(1) }}' 140 | unit_of_measurement: '°C' 141 | - platform: mqtt 142 | state_topic: '/server_room/environment/Humidity' 143 | name: 'Server Room Humidity' 144 | value_template: '{{ (value | float - 0) | round }}' 145 | unit_of_measurement: '%' 146 | 147 | switch: 148 | ###### SONOFF POW POWERBAR 149 | - platform: mqtt 150 | name: "Server Room Network" 151 | state_topic: "stat/sonoff_server/POWER" 152 | command_topic: "cmnd/sonoff_server/POWER" 153 | payload_on: "ON" 154 | payload_off: "OFF" 155 | optimistic: false 156 | qos: 0 157 | retain: true 158 | 159 | - platform: mqtt 160 | name: "Server Room lights" 161 | state_topic: "stat/sonoff_server_light/POWER" 162 | command_topic: "cmnd/sonoff_server_light/POWER" 163 | payload_on: "ON" 164 | payload_off: "OFF" 165 | optimistic: false 166 | qos: 0 167 | retain: true 168 | 169 | automation: 170 | - alias: 'light_server_room_on' 171 | initial_state: 'on' 172 | trigger: 173 | - platform: state 174 | entity_id: sensor.server_room_motion 175 | to: '1' 176 | for: '00:00:02' 177 | action: 178 | - service: switch.turn_on 179 | data_template: 180 | entity_id: switch.server_room_lights, switch.bench_light 181 | 182 | - alias: 'light_server_room_off' 183 | initial_state: 'on' 184 | trigger: 185 | - platform: state 186 | entity_id: sensor.server_room_motion 187 | to: '0' 188 | for: 189 | minutes: 3 190 | action: 191 | - service: switch.turn_off 192 | data_template: 193 | entity_id: switch.server_room_lights, switch.bench_light 194 | 195 | ## OCTOPRINT Notifications 196 | - alias: 'Notify if Print Completed' 197 | initial_state: 'on' 198 | trigger: 199 | - platform: state 200 | entity_id: sensor.octoprint_current_state 201 | from: 'Printing' 202 | to: 'Operational' 203 | for: '00:00:02' 204 | action: 205 | - service: input_number.increment 206 | data: 207 | entity_id: input_number.octoprint_level 208 | - service: script.janet_speech_engine 209 | data_template: 210 | CustomMessage: >- 211 | {% set level = states.input_number.octoprint_level.state|int %} 212 | Congratulations! The printer has leveled up to {{level}} 213 | -------------------------------------------------------------------------------- /packages/room_finn.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Findlays Room 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | automation.light_finn_sleep: 7 | friendly_name: 'Keep Light Off' 8 | icon: mdi:brightness-4 9 | automation.finn_temp_watchdog: 10 | friendly_name: 'Temperature Watch Dog' 11 | icon: mdi:thermometer-lines 12 | switch.sleep_finn: 13 | emulated_hue_hidden: false 14 | google_assistant: true 15 | google_assistant_name: "Sleep" 16 | friendly_name: 'Sleep' 17 | icon: mdi:sleep 18 | 19 | automation: 20 | - alias: 'finn_temp_watchdog' 21 | initial_state: 'on' 22 | trigger: 23 | - platform: numeric_state 24 | entity_id: sensor.findlays_room_temperature 25 | below: 19 26 | condition: 27 | - condition: state 28 | entity_id: 'input_boolean.finn_sleep' 29 | state: 'on' 30 | action: 31 | - service: climate.set_temperature 32 | data_template: 33 | entity_id: climate.hallway 34 | temperature: "{{ (states.climate.hallway.attributes.current_temperature | float) +0.5 }}" 35 | 36 | - alias: 'light_finn_sleep' 37 | initial_state: 'on' 38 | trigger: 39 | - platform: state 40 | entity_id: input_boolean.finn_sleep 41 | to: 'on' 42 | - platform: template 43 | value_template: "{% if is_state('light.findlay_s_room', 'on') %}true{% endif %}" 44 | condition: 45 | - condition: state 46 | entity_id: 'input_boolean.finn_sleep' 47 | state: 'on' 48 | action: 49 | - service: light.turn_off 50 | data: 51 | entity_id: light.findlay_s_room 52 | - service: media_player.volume_set 53 | data: 54 | entity_id: media_player.findlays_speaker 55 | volume_level: 0.5 56 | - service: media_player.play_media 57 | data: 58 | entity_id: media_player.findlays_speaker 59 | media_content_id: "http://192.168.1.115/white_noise/blizzard.mp3" 60 | media_content_type: "audio/mp3" 61 | 62 | - alias: 'light_finn' 63 | initial_state: 'on' 64 | trigger: 65 | - platform: state 66 | entity_id: input_boolean.finn_sleep 67 | to: 'off' 68 | - platform: state 69 | entity_id: binary_sensor.findlays_room_motion 70 | to: 'on' 71 | - platform: numeric_state 72 | entity_id: 'sensor.findlays_room_light_level' 73 | below: 45 74 | condition: 75 | - condition: numeric_state 76 | entity_id: 'sensor.findlays_room_light_level' 77 | below: 45 78 | - condition: state 79 | entity_id: 'input_boolean.finn_sleep' 80 | state: 'off' 81 | - condition: state 82 | entity_id: binary_sensor.findlays_room_motion 83 | state: 'on' 84 | action: 85 | - service: light.turn_on 86 | data_template: 87 | entity_id: light.findlay_s_room 88 | brightness: > 89 | {% if (as_timestamp(now()) - as_timestamp(states.input_boolean.finn_sleep.last_changed)) > 600 %} 250 90 | {% else %} 91 | 100 92 | {% endif %} 93 | 94 | - alias: 'light_finn_off' 95 | initial_state: 'on' 96 | trigger: 97 | - platform: state 98 | entity_id: binary_sensor.findlays_room_motion 99 | to: 'off' 100 | for: 101 | minutes: 3 102 | - platform: numeric_state 103 | entity_id: 'sensor.findlays_room_light_level' 104 | above: 45 105 | action: 106 | - service: light.turn_off 107 | data: 108 | entity_id: light.findlay_s_room 109 | 110 | switch: 111 | ###### Switch for Sleep Mode 112 | - platform: template 113 | switches: 114 | sleep_finn: 115 | value_template: '{{ states.input_boolean.finn_sleep.state }}' 116 | turn_on: 117 | - service: input_boolean.turn_on 118 | entity_id: input_boolean.finn_sleep 119 | - service: input_boolean.turn_off 120 | entity_id: input_boolean.janet_speech_notifications 121 | turn_off: 122 | - service: input_boolean.turn_off 123 | entity_id: input_boolean.finn_sleep 124 | - service: input_boolean.turn_on 125 | entity_id: input_boolean.janet_speech_notifications 126 | - service: media_player.turn_off 127 | entity_id: media_player.findlays_speaker 128 | 129 | input_boolean: 130 | finn_sleep: 131 | name: 'Sleep' 132 | icon: mdi:sleep 133 | -------------------------------------------------------------------------------- /packages/room_laundry.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Laundry Room 3 | ################################################################ 4 | homeassistant: 5 | sensor: 6 | ###### WASHING MACHINE ENERGY SENSORS 7 | - platform: template 8 | sensors: 9 | washing_machine_amps: 10 | friendly_name_template: "{{ states.switch.washing_machine.name}} Current" 11 | value_template: '{{ states.switch.washing_machine.attributes["current_a"] | float }}' 12 | unit_of_measurement: 'A' 13 | washing_machine_watts: 14 | friendly_name_template: "{{ states.switch.washing_machine.name}} Current Consumption" 15 | value_template: '{{ states.switch.washing_machine.attributes["current_power_w"] | float }}' 16 | unit_of_measurement: 'W' 17 | washing_machine_kw: 18 | friendly_name_template: "{{ states.switch.washing_machine.name}} Total Consumption" 19 | value_template: '{{ states.switch.washing_machine.attributes["total_energy_kwh"] | float }}' 20 | unit_of_measurement: 'kW' 21 | washing_machine_volts: 22 | friendly_name_template: "{{ states.switch.washing_machine.name}} Today's Consumption" 23 | value_template: '{{ states.switch.washing_machine.attributes["today_energy_kwh"] | float }}' 24 | unit_of_measurement: 'V' 25 | washing_machine_today_kwh: 26 | friendly_name_template: "{{ states.switch.washing_machine.name}} Today's Consumption" 27 | value_template: '{{ states.switch.washing_machine.attributes["today_energy_kwh"] | float }}' 28 | unit_of_measurement: 'kWh' 29 | 30 | ###### STATUS SENSORS 31 | washing_machine_status: 32 | value_template: >- 33 | {%- if states.sensor.washing_machine_watts.state|int <= 4.3 -%} 34 | Off 35 | {% else %} 36 | Running 37 | {% endif %} 38 | 39 | automation: 40 | - alias: 'notify if washing machine is done' 41 | initial_state: 'on' 42 | trigger: 43 | - platform: state 44 | entity_id: sensor.washing_machine_status 45 | from: 'Running' 46 | to: 'Off' 47 | for: 48 | minutes: 6 49 | action: 50 | - service: switch.turn_off 51 | entity_id: switch.washing_machine 52 | - service: script.laundy_light_alert 53 | - service: script.laundry_tts 54 | 55 | script: 56 | laundry_tts: 57 | sequence: 58 | - service: script.janet_speech_engine 59 | data: 60 | call_greeting: 1 61 | call_inform: 1 62 | CustomMessage: "The Washing machine has completed it's cycle." 63 | laundy_light_alert: 64 | sequence: 65 | - service: light.turn_on 66 | data: 67 | entity_id: light.hue_go 68 | - delay: 69 | milliseconds: 600 70 | - service: light.turn_off 71 | data: 72 | entity_id: light.hue_go 73 | - delay: 74 | milliseconds: 600 75 | laundy_light_alert_10: 76 | sequence: 77 | - service: script.laundy_light_alert 78 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 79 | - service: script.laundy_light_alert 80 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 81 | - service: script.laundy_light_alert 82 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 83 | - service: script.laundy_light_alert 84 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 85 | - service: script.laundy_light_alert 86 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 87 | - service: script.laundy_light_alert 88 | - wait_template: "{{ is_state('script.laundy_light_alert', 'off') }}" 89 | - service: script.laundy_light_alert 90 | -------------------------------------------------------------------------------- /packages/room_masterbed.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Master Bedroom 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | switch.white_noise: 7 | emulated_hue_hidden: false 8 | friendly_name: 'White Noise' 9 | icon: mdi:snowflake 10 | switch.bedroom_tv: 11 | friendly_name: TV 12 | icon: mdi:monitor 13 | switch.bedroom_fan: 14 | emulated_hue_hidden: false 15 | icon: mdi:fan 16 | friendly_name: Bedroom Fan 17 | switch.bedroom_lamps: 18 | emulated_hue_hidden: false 19 | icon: mdi:lamp 20 | friendly_name: Bedroom Lamp 21 | #Bedroom computer Switch 22 | switch.bedroom_media: 23 | emulated_hue_hidden: false 24 | icon: mdi:monitor 25 | friendly_name: Bedroom Media 26 | #Motion Sensor 27 | binary_sensor.room_masterbed_motion: 28 | friendly_name: "Master Bed" 29 | sensor.master_bed_temperature: 30 | friendly_name: "Master Bed" 31 | 32 | sensor: 33 | - platform: template 34 | sensors: 35 | white_noise: 36 | value_template: >- 37 | {% set state = states.media_player.master_bedroom_speaker.attributes.media_content_id%} 38 | {% set object = "http://192.168.1.115/white_noise/blizzard.mp3" %} 39 | {% if state == object %}on{% else %}off{% endif %} 40 | 41 | switch: 42 | ###### Switch for White Noise 43 | - platform: template 44 | switches: 45 | white_noise: 46 | value_template: '{{ states.sensor.white_noise.state }}' 47 | turn_on: 48 | service: script.turn_on 49 | entity_id: script.white_noise 50 | turn_off: 51 | service: media_player.turn_off 52 | entity_id: media_player.master_bedroom_speaker 53 | 54 | - platform: template 55 | switches: 56 | bedroom_media: 57 | value_template: '{{ states.sensor.bedroom_pc_status.state }}' 58 | turn_on: 59 | service: script.turn_on 60 | entity_id: script.bedroom_media_on 61 | turn_off: 62 | service: script.turn_on 63 | entity_id: script.bedroom_media_off 64 | 65 | script: 66 | bedroom_media_on: 67 | sequence: 68 | - service: switch.turn_on 69 | entity_id: switch.bedroom_tv 70 | - delay: '00:00:10' 71 | - delay: '00:00:05' 72 | - service: shell_command.bedroom_tv_cec 73 | 74 | bedroom_media_off: 75 | sequence: 76 | - service: switch.turn_off 77 | entity_id: switch.bedroom_tv 78 | 79 | white_noise: 80 | sequence: 81 | - service: media_player.volume_set 82 | data: 83 | entity_id: media_player.master_bedroom_speaker 84 | volume_level: 0.5 85 | - service: media_player.play_media 86 | data: 87 | entity_id: media_player.master_bedroom_speaker 88 | media_content_id: "http://192.168.1.115/white_noise/blizzard.mp3" 89 | media_content_type: "audio/mp3" 90 | -------------------------------------------------------------------------------- /packages/room_nursery.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Nursery 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | switch.office_lightswitch: 7 | friendly_name: Nursery Light Switch 8 | icon: mdi:lightbulb 9 | 10 | light: 11 | - platform: nanoleaf 12 | name: aurora 13 | host: 192.168.1.101 14 | token: !secret nanoleaf 15 | 16 | sensor: 17 | - platform: template 18 | sensors: 19 | white_noise_nursery: 20 | value_template: >- 21 | {% set state = states.media_player.nursery_speaker.attributes.media_content_id%} 22 | {% set object = "http://192.168.1.115/white_noise/blizzard.mp3" %} 23 | {% if state == object %}on{% else %}off{% endif %} 24 | 25 | switch: 26 | ###### Switch for White Noise 27 | - platform: template 28 | switches: 29 | white_noise_nursery: 30 | value_template: '{{ states.sensor.white_noise_nursery.state }}' 31 | turn_on: 32 | service: script.turn_on 33 | entity_id: script.white_noise_nursery 34 | turn_off: 35 | service: media_player.turn_off 36 | entity_id: media_player.nursery_speaker 37 | 38 | script: 39 | white_noise_nursery: 40 | sequence: 41 | - service: media_player.volume_set 42 | data: 43 | entity_id: media_player.nursery_speaker 44 | volume_level: 0.5 45 | - service: media_player.play_media 46 | data: 47 | entity_id: media_player.nursery_speaker 48 | media_content_id: "http://192.168.1.115/white_noise/blizzard.mp3" 49 | media_content_type: "audio/mp3" 50 | 51 | nurse: 52 | sequence: 53 | - service: switch.turn_off 54 | data: 55 | entity_id: switch.office_lightswitch 56 | - service: switch.turn_on 57 | data: 58 | entity_id: switch.white_noise_nursery 59 | - service: light.turn_on 60 | data: 61 | entity_id: light.aurora 62 | brightness: 70 63 | effect: 'Flames' 64 | automation: 65 | - alias: 'nursery_switch_1' 66 | initial_state: 'on' 67 | trigger: 68 | - platform: state 69 | entity_id: sensor.findlay_s_room 70 | condition: 71 | - condition: state 72 | entity_id: sensor.findlay_s_room 73 | state: '1_click_up' 74 | action: 75 | - service: switch.toggle 76 | data: 77 | entity_id: switch.office_lightswitch 78 | 79 | - alias: 'nursery_switch_2' 80 | initial_state: 'on' 81 | trigger: 82 | - platform: state 83 | entity_id: sensor.findlay_s_room 84 | condition: 85 | - condition: state 86 | entity_id: sensor.findlay_s_room 87 | state: '2_click_up' 88 | action: 89 | - service: light.toggle 90 | data: 91 | entity_id: light.aurora 92 | 93 | - alias: 'nursery_switch_3' 94 | initial_state: 'on' 95 | trigger: 96 | - platform: state 97 | entity_id: sensor.findlay_s_room 98 | condition: 99 | - condition: state 100 | entity_id: sensor.findlay_s_room 101 | state: '3_click_up' 102 | action: 103 | - service: switch.toggle 104 | data: 105 | entity_id: switch.white_noise_nursery 106 | 107 | - alias: 'nursery_switch_4' 108 | initial_state: 'on' 109 | trigger: 110 | - platform: state 111 | entity_id: sensor.findlay_s_room 112 | condition: 113 | - condition: state 114 | entity_id: sensor.findlay_s_room 115 | state: '4_click_up' 116 | action: 117 | - service: switch.turn_off 118 | data: 119 | entity_id: switch.white_noise_nursery, switch.office_lightswitch 120 | - service: light.turn_off 121 | data: 122 | entity_id: light.aurora 123 | -------------------------------------------------------------------------------- /packages/room_pc_desk.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Office 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | #Office computer Switch 7 | switch.office_pc: 8 | icon: mdi:monitor 9 | friendly_name: PC 10 | switch.office_powerbar: 11 | icon: mdi:power 12 | friendly_name: Power Strip 13 | 14 | switch: 15 | ###### SONOFF POW POWERBAR 16 | - platform: mqtt 17 | name: "Office PowerBar" 18 | state_topic: "stat/office_pwrbar/POWER" 19 | command_topic: "cmnd/office_pwrbar/POWER" 20 | payload_on: "ON" 21 | payload_off: "OFF" 22 | optimistic: false 23 | qos: 0 24 | retain: true 25 | 26 | - platform: template 27 | switches: 28 | office_pc: 29 | value_template: "{{ states.sensor.office_draw.state|int > 100 }}" 30 | turn_on: 31 | service: script.office_pc_on 32 | turn_off: 33 | service: script.office_pc_off 34 | 35 | sensor: 36 | ###### SONOFF POW SENSORS 37 | - platform: mqtt 38 | name: "Office Draw" 39 | state_topic: "tele/office_pwrbar/ENERGY" 40 | qos: 0 41 | unit_of_measurement: "W" 42 | value_template: "{{ value_json.Power }}" 43 | 44 | - platform: mqtt 45 | name: "Office Voltage" 46 | state_topic: "tele/office_pwrbar/ENERGY" 47 | qos: 0 48 | unit_of_measurement: "V" 49 | value_template: "{{ value_json.Voltage }}" 50 | 51 | - platform: mqtt 52 | name: "Office Today" 53 | state_topic: "tele/office_pwrbar/ENERGY" 54 | qos: 0 55 | unit_of_measurement: "kWh" 56 | value_template: "{{ value_json.Today }}" 57 | 58 | - platform: mqtt 59 | name: "Office Current" 60 | state_topic: "tele/office_pwrbar/ENERGY" 61 | qos: 0 62 | unit_of_measurement: "A" 63 | value_template: "{{ value_json.Current }}" 64 | 65 | - platform: mqtt 66 | name: "Office Yesterday" 67 | state_topic: "tele/office_pwrbar/ENERGY" 68 | qos: 0 69 | unit_of_measurement: "kWh" 70 | value_template: "{{ value_json.Yesterday }}" 71 | 72 | ###### POWER & RESET SWITCH ON PC CASE ROUTED TO WEMOS D1 MINI 73 | binary_sensor: 74 | - platform: mqtt 75 | name: "Office Reset Button" 76 | state_topic: "Office_PC_Buttons/Switch/Switch_2" 77 | qos: 0 78 | payload_on: 1 79 | payload_off: 0 80 | 81 | - platform: mqtt 82 | name: "Office Power Button" 83 | state_topic: "Office_PC_Buttons/Switch/Switch_1" 84 | qos: 0 85 | payload_on: 1 86 | payload_off: 0 87 | 88 | automation: 89 | # - alias: office_reset_button 90 | # initial_state: 'on' 91 | # trigger: 92 | # - platform: state 93 | # entity_id: binary_sensor.office_reset_button 94 | # from: 'off' 95 | # to: 'on' 96 | # action: 97 | # - service: switch.toggle 98 | # entity_id: switch.led_strip 99 | # - service_template: > 100 | # {% if states.light.hue_go.state == 'off' %} script.office_hue_go_on 101 | # {% elif states.light.hue_go.state == 'on' %} script.office_hue_go_off 102 | # {% endif %} 103 | # - service: light.toggle 104 | # entity_id: light.aurora 105 | 106 | - alias: office_power_button 107 | initial_state: 'on' 108 | trigger: 109 | - platform: state 110 | entity_id: binary_sensor.office_power_button 111 | from: 'off' 112 | to: 'on' 113 | action: 114 | - service: switch.toggle 115 | entity_id: switch.office_pc 116 | 117 | script: 118 | office_pc_on: 119 | sequence: 120 | - service: mqtt.publish 121 | data: 122 | topic: "cmnd/office_pwrbar/TelePeriod" 123 | payload: "10" 124 | - service: switch.turn_on 125 | entity_id: switch.office_powerbar 126 | - delay: '00:00:03' 127 | - service: shell_command.office_relay_1 128 | - service: shell_command.office_relay_0 129 | - delay: '00:00:10' 130 | - service: mqtt.publish 131 | data: 132 | topic: "cmnd/office_pwrbar/TelePeriod" 133 | payload: "1" 134 | office_pc_off: 135 | sequence: 136 | - service: shell_command.office_relay_1 137 | - service: shell_command.office_relay_0 138 | - delay: '00:00:08' 139 | - service: shell_command.office_relay_1 140 | - service: shell_command.office_relay_0 141 | - service: mqtt.publish 142 | data: 143 | topic: "cmnd/office_pwrbar/TelePeriod" 144 | payload: "10" 145 | - wait_template: "{{ states.sensor.office_draw.state|int < 100 }}" 146 | - service: switch.turn_off 147 | entity_id: switch.office_powerbar 148 | - service: mqtt.publish 149 | data: 150 | topic: "cmnd/office_pwrbar/TelePeriod" 151 | payload: "1" 152 | 153 | shell_command: 154 | office_relay_0: !secret office_relay_0 155 | office_relay_1: !secret office_relay_1 156 | -------------------------------------------------------------------------------- /packages/sensors.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Sensors 3 | ################################################################ 4 | homeassistant: 5 | 6 | ###### BINARY SENSORS ------------------------------------------ 7 | binary_sensor: 8 | - platform: workday 9 | country: CA 10 | ###### SENSORS ------------------------------------------------- 11 | sensor: 12 | - platform: huesensor 13 | ### tautulli and plex monitor 14 | - platform: tautulli 15 | api_key: !secret tautulli_api 16 | host: !secret tautulli_host 17 | - platform: template 18 | sensors: 19 | tautulli_lan: 20 | friendly_name: "tautulli_lan" 21 | entity_id: sensor.tautulli 22 | unit_of_measurement: 'Mbps' 23 | value_template: "{{states.sensor.tautulli.attributes.lan_bandwidth|float / 1000}}" 24 | tautulli_wan: 25 | friendly_name: "tautulli_wan" 26 | entity_id: sensor.tautulli 27 | unit_of_measurement: 'Mbps' 28 | value_template: "{{states.sensor.tautulli.attributes.wan_bandwidth|float / 1000}}" 29 | tautulli_total: 30 | friendly_name: "tautulli_total" 31 | entity_id: sensor.tautulli 32 | unit_of_measurement: 'Mbps' 33 | value_template: "{{states.sensor.tautulli.attributes.total_bandwidth|float / 1000}}" 34 | ### SCRAPE CURRENT ENERGY TIER 35 | - platform: command_line 36 | name: Electricity Price 37 | command: !secret energy_scrape_url 38 | value_template: "{{value.split('>')[4]|replace('¢/kWh- 38 | {% if states.sensor.latest_version.state == states.sensor.installed_version.state %} 39 | mdi:checkbox-marked 40 | {% else %} 41 | mdi:checkbox-blank-outline 42 | {% endif %} 43 | ###### CUSTOM LINUX VERSION 44 | - platform: command_line 45 | command: cat /config/www/linux_distro 46 | name: 'linux_distro' 47 | scan_interval: 604800 48 | ###### UPTIMES 49 | - platform: uptime 50 | name: 'HA Uptime' 51 | - platform: command_line 52 | command: /usr/bin/curl -X GET http://127.0.0.1:61208/api/3/uptime 53 | name: 'Server Uptime' 54 | value_template: '{{ value[1:-1] }}' 55 | scan_interval: 720 56 | ###### CPU TEMPERATURE 57 | - platform: command_line 58 | name: CPU Temperature 59 | command: /usr/bin/curl -X GET http://127.0.0.1:61208/api/3/sensors 60 | unit_of_measurement: '°C' 61 | value_template: '{{ value_json[8].value }}' 62 | ###### CPU SPEED 63 | - platform: cpuspeed 64 | name: 'CPU Speed' 65 | ###### CPU LOAD 66 | - platform: command_line 67 | command: /usr/bin/curl -X GET http://127.0.0.1:61208/api/3/load 68 | name: 'glances_cpu_load' 69 | value_template: '{{ value_json.min5 }}' 70 | unit_of_measurement: '%' 71 | scan_interval: 300 72 | ###### GLANCES 73 | - platform: glances 74 | host: 127.0.0.1 75 | version: 3 76 | resources: 77 | - 'disk_free' 78 | - 'disk_use' 79 | - 'memory_use' 80 | - 'memory_free' 81 | ###### HARD DRIVE DISPLAY 82 | - platform: command_line 83 | command: /usr/bin/curl -X GET http://127.0.0.1:61208/api/2/fs 84 | name: 'glances_disk_total' 85 | value_template: '{{ value_json[0].size }}' 86 | scan_interval: 604800 87 | ###### PYSICAL DRIVE % 88 | - platform: command_line 89 | command: df -h / | awk '{print $5}' | grep -v -e "Use%" | sed 's/.$//' 90 | name: 'Disk File System' 91 | scan_interval: 3600 92 | unit_of_measurement: '%' 93 | ##### CUSTOM RAM DISPLAY 94 | - platform: command_line 95 | command: /usr/bin/curl -X GET http://127.0.0.1:61208/api/3/mem/total 96 | name: 'glances_ram_total' 97 | value_template: '{{ value_json.total }}' 98 | scan_interval: 604800 99 | - platform: template 100 | sensors: 101 | glances_ram_used_gb: 102 | value_template: '{{(states.sensor.glances_ram_used.state|float/1000)|round(1)}}' 103 | unit_of_measurement: 'GB' 104 | ###### Home Assistant Component counts 105 | - platform: template 106 | sensors: 107 | #----- Count Automations 108 | count_automations: 109 | entity_id: sensor.date 110 | value_template: > 111 | {%- set domains = ['automation'] -%} 112 | {%- for domain in domains -%} 113 | {%- for item in states[domain] -%} 114 | {% if loop.first %} 115 | {{loop.length}} 116 | {% endif %} 117 | {%- endfor -%} 118 | {%- endfor -%} 119 | #----- Count Scripts 120 | count_scripts: 121 | entity_id: sensor.date 122 | value_template: > 123 | {%- set domains = ['script'] -%} 124 | {%- for domain in domains -%} 125 | {%- for item in states[domain] -%} 126 | {% if loop.first %} 127 | {{loop.length}} 128 | {% endif %} 129 | {%- endfor -%} 130 | {%- endfor -%} 131 | #----- Count Device Trackers 132 | count_device_trackers: 133 | entity_id: sensor.date 134 | value_template: > 135 | {%- set domains = ['device_tracker'] -%} 136 | {%- for domain in domains -%} 137 | {%- for item in states[domain] -%} 138 | {% if loop.first %} 139 | {{loop.length}} 140 | {% endif %} 141 | {%- endfor -%} 142 | {%- endfor -%} 143 | #----- Count Binary Sensors 144 | count_binary_sensors: 145 | entity_id: sensor.date 146 | value_template: > 147 | {%- set domains = ['binary_sensor'] -%} 148 | {%- for domain in domains -%} 149 | {%- for item in states[domain] -%} 150 | {% if loop.first %} 151 | {{loop.length}} 152 | {% endif %} 153 | {%- endfor -%} 154 | {%- endfor -%} 155 | #----- Count Sensors 156 | count_sensors: 157 | entity_id: sensor.date 158 | value_template: > 159 | {%- set domains = ['sensor'] -%} 160 | {%- for domain in domains -%} 161 | {%- for item in states[domain] -%} 162 | {% if loop.first %} 163 | {{loop.length}} 164 | {% endif %} 165 | {%- endfor -%} 166 | {%- endfor -%} 167 | #----- Count Switches 168 | count_switches: 169 | entity_id: sensor.date 170 | value_template: > 171 | {%- set domains = ['switch'] -%} 172 | {%- for domain in domains -%} 173 | {%- for item in states[domain] -%} 174 | {% if loop.first %} 175 | {{loop.length}} 176 | {% endif %} 177 | {%- endfor -%} 178 | {%- endfor -%} 179 | #----- Count Zones 180 | count_zones: 181 | entity_id: sensor.date 182 | value_template: > 183 | {%- set domains = ['zone'] -%} 184 | {%- for domain in domains -%} 185 | {%- for item in states[domain] -%} 186 | {% if loop.first %} 187 | {{loop.length}} 188 | {% endif %} 189 | {%- endfor -%} 190 | {%- endfor -%} 191 | #----- Input Booleans 192 | count_input_booleans: 193 | entity_id: sensor.date 194 | value_template: > 195 | {%- set domains = ['input_boolean'] -%} 196 | {%- for domain in domains -%} 197 | {%- for item in states[domain] -%} 198 | {% if loop.first %} 199 | {{loop.length}} 200 | {% endif %} 201 | {%- endfor -%} 202 | {%- endfor -%} 203 | #----- Input Numbers 204 | count_input_numbers: 205 | entity_id: sensor.date 206 | value_template: > 207 | {%- set domains = ['input_number'] -%} 208 | {%- for domain in domains -%} 209 | {%- for item in states[domain] -%} 210 | {% if loop.first %} 211 | {{loop.length}} 212 | {% endif %} 213 | {%- endfor -%} 214 | {%- endfor -%} 215 | #----- Input Texts 216 | count_input_texts: 217 | entity_id: sensor.date 218 | value_template: > 219 | {%- set domains = ['input_text'] -%} 220 | {%- for domain in domains -%} 221 | {%- for item in states[domain] -%} 222 | {% if loop.first %} 223 | {{loop.length}} 224 | {% endif %} 225 | {%- endfor -%} 226 | {%- endfor -%} 227 | #----- Input Selects 228 | count_input_selects: 229 | entity_id: sensor.date 230 | value_template: > 231 | {%- set domains = ['input_select'] -%} 232 | {%- for domain in domains -%} 233 | {%- for item in states[domain] -%} 234 | {% if loop.first %} 235 | {{loop.length}} 236 | {% endif %} 237 | {%- endfor -%} 238 | {%- endfor -%} 239 | #----- Input Date Times 240 | count_input_datetimes: 241 | entity_id: sensor.date 242 | value_template: > 243 | {%- set domains = ['input_datetime'] -%} 244 | {%- for domain in domains -%} 245 | {%- for item in states[domain] -%} 246 | {% if loop.first %} 247 | {{loop.length}} 248 | {% endif %} 249 | {%- endfor -%} 250 | {%- endfor -%} 251 | 252 | ###### DOCKER CONTROL POINTS 253 | switch: 254 | - platform: hadockermon 255 | host: 127.0.0.1 256 | port: 8126 257 | - platform: hadockermon 258 | host: 192.168.1.174 259 | port: 8126 260 | input_boolean: 261 | docker_control: 262 | name: 'Docker Control' 263 | icon: mdi:docker 264 | 265 | shell_command: 266 | restart_hass: /usr/bin/curl -s http://127.0.0.1:8126/container/Home_Assistant/restart 267 | -------------------------------------------------------------------------------- /packages/theme.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Theme 3 | ## Change frontend theme to match holiday sensor 4 | ## Change lights to match theme 5 | ## Change Doorbell tone to match theme 6 | ## Color Picker - https://www.google.ca/search?q=rgb+color+picker&rlz=1C1GGRV_enCA749CA749&oq=rgb+color+picker&aqs=chrome.0.0l6.3705j0j4&sourceid=chrome&ie=UTF-8 7 | ################################################################ 8 | automation: 9 | - alias: 'theme_set' 10 | initial_state: 'on' 11 | trigger: 12 | - platform: state 13 | entity_id: input_select.theme 14 | - platform: homeassistant 15 | event: start 16 | action: 17 | - service: input_select.select_option 18 | data_template: 19 | entity_id: input_select.theme 20 | option: >- 21 | {% set holiday = states.sensor.holiday.state %} 22 | {% set sun= states.sun.sun.state %} 23 | {%- if holiday == "Standard" and sun == "above_horizon"-%} Night 24 | {%- elif holiday == "Standard" and sun == "below_horizon"-%} Night 25 | {%- else -%} {{states.sensor.holiday.state}} 26 | {%- endif -%} 27 | - service: frontend.set_theme 28 | data_template: 29 | name: '{{states.input_select.theme.state}}' 30 | 31 | - alias: 'theme_holiday' 32 | initial_state: 'on' 33 | trigger: 34 | - platform: state 35 | entity_id: sensor.holiday 36 | condition: 37 | - condition: template 38 | value_template: '{{states.sensor.holiday.state != "Standard"}}' 39 | action: 40 | - service: input_select.select_option 41 | data_template: 42 | entity_id: input_select.theme 43 | option: '{{states.sensor.holiday.state}}' 44 | 45 | - alias: 'theme_night_day' 46 | initial_state: 'on' 47 | trigger: 48 | - platform: state 49 | entity_id: sun.sun 50 | - platform: state 51 | entity_id: sensor.holiday 52 | to: 'Standard' 53 | condition: 54 | - condition: template 55 | value_template: '{{states.input_select.theme.state == "Day" or states.input_select.theme.state == "Night" or states.sensor.holiday.state == "Standard"}}' 56 | action: 57 | - service: input_select.select_option 58 | data_template: 59 | entity_id: input_select.theme 60 | option: > 61 | {% if states.sun.sun.state == "above_horizon" %} Day 62 | {% else %} Night 63 | {% endif %} 64 | 65 | - alias: 'theme_light' 66 | initial_state: 'on' 67 | trigger: 68 | - platform: state 69 | entity_id: sun.sun 70 | to: "below_horizon" 71 | - platform: state 72 | entity_id: input_boolean.away 73 | to: 'off' 74 | condition: 75 | - condition: template 76 | value_template: '{{states.input_boolean.away.state == "off" and states.sun.sun.state == "below_horizon"}}' 77 | action: 78 | - service: light.turn_on 79 | data: 80 | entity_id: 81 | - light.front_door 82 | brightness: 250 83 | data_template: 84 | rgb_color: [ "{{ states.sensor.theme_color.state.split(',')[0]|int }}", "{{ states.sensor.theme_color.state.split(',')[1]|int }}", "{{ states.sensor.theme_color.state.split(',')[2]|int }}" ] 85 | 86 | - alias: 'theme_light_auto_off' 87 | initial_state: 'on' 88 | trigger: 89 | - platform: state 90 | entity_id: sun.sun 91 | from: "below_horizon" 92 | to: "above_horizon" 93 | action: 94 | - service: light.turn_off 95 | data: 96 | entity_id: light.front_door 97 | 98 | sensor: 99 | - platform: template 100 | sensors: 101 | theme_color: 102 | friendly_name: 'Porch Light RGB Value' 103 | value_template: > 104 | {%- if is_state('input_select.theme', "New Year's Day") -%} 255,0,0 105 | {%- elif is_state('input_select.theme', "Groundhog Day") -%} 255,0,0 106 | {%- elif is_state('input_select.theme', "Valentine's Day") -%} 255,196,250 107 | {%- elif is_state('input_select.theme', "St. Patrick's Day") -%} 85,255,56 108 | {%- elif is_state('input_select.theme', "Starwars Day") -%} 86,66,244 109 | {%- elif is_state('input_select.theme', "Good Friday") -%} 255,255,56 110 | {%- elif is_state('input_select.theme', "Easter Sunday") -%} 255,255,56 111 | {%- elif is_state('input_select.theme', "Earth Day") -%} 82,255,56 112 | {%- elif is_state('input_select.theme', "Mother's Day") -%} 255,196,250 113 | {%- elif is_state('input_select.theme', "Victoria Day") -%} 255,0,0 114 | {%- elif is_state('input_select.theme', "Father's Day") -%} 56,56,255 115 | {%- elif is_state('input_select.theme', "Canada Day") -%} 255,0,0 116 | {%- elif is_state('input_select.theme', "Labour Day") -%} 255,0,0 117 | {%- elif is_state('input_select.theme', "Thanksgiving Day") -%} 255,110,0 118 | {%- elif is_state('input_select.theme', "Halloween") -%} 255,168,39 119 | {%- elif is_state('input_select.theme', "Remembrance Day") -%} 252,10,10 120 | {%- elif is_state('input_select.theme', "Christmas Eve") -%} 33,55,0 121 | {%- elif is_state('input_select.theme', "Christmas Day") -%} 33,55,0 122 | {%- elif is_state('input_select.theme', "Boxing Day") -%} 33,55,0 123 | {%- elif is_state('input_select.theme', "New Year's Eve") -%} 255,0,0 124 | {%- else -%} 255,255,255 125 | {%- endif -%} 126 | icon_template: "{% if is_state('sun.sun', 'above_horizon') %} mdi:led-on {% else %}mdi:led-on{% endif %}" 127 | 128 | input_select: 129 | theme: 130 | name: Theme 131 | options: 132 | - "Day" 133 | - "Night" 134 | - "New Year's Day" 135 | - "Groundhog Day" 136 | - "Valentine's Day" 137 | - "St. Patrick's Day" 138 | - "Starwars Day" 139 | - "Good Friday" 140 | - "Easter Sunday" 141 | - "Earth Day" 142 | - "Mother's Day" 143 | - "Victoria Day" 144 | - "Father's Day" 145 | - "Canada Day" 146 | - "Labour Day" 147 | - "Thanksgiving Day" 148 | - "Halloween" 149 | - "Remembrance Day" 150 | - "Christmas Eve" 151 | - "Christmas Day" 152 | - "Boxing Day" 153 | - "New Year's Eve" 154 | - "Standard" 155 | initial: "Day" 156 | icon: 'mdi:palette' 157 | -------------------------------------------------------------------------------- /packages/vacuum.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Vacuum 3 | ## Roomba 690 SW: 3.2.10 4 | ## blid and password found with https://github.com/koalazak/dorita980#how-to-get-your-usernameblid-and-password 5 | ################################################################ 6 | homeassistant: 7 | customize: 8 | automation.vacuum_auto: 9 | friendly_name: Auto Clean 10 | icon: mdi:robot-vacuum 11 | vacuum.roomba: 12 | emulated_hue_hidden: false 13 | emulated_hue_name: "roomba" 14 | google_assistant: true 15 | google_assistant_name: "roomba" 16 | sensor.roomba_runtime: 17 | friendly_name: Runtime This Week 18 | sensor.roomba_last_run: 19 | friendly_name: Last Clean 20 | icon: mdi:calendar-range 21 | 22 | vacuum: 23 | - platform: roomba 24 | host: !secret roomba_ip 25 | username: !secret roomba_blid 26 | password: !secret roomba_pass 27 | 28 | # Toggle vacuum as we come and go 29 | automation: 30 | - alias: 'vacuum_auto' 31 | initial_state: 'on' 32 | trigger: 33 | - platform: state 34 | entity_id: input_boolean.away 35 | to: 'on' 36 | - platform: state 37 | entity_id: input_boolean.away 38 | to: 'off' 39 | action: 40 | - service_template: > 41 | {%-if states.input_boolean.away.state == 'on'-%} vacuum.turn_on 42 | {%-else-%} vacuum.turn_off 43 | {%-endif-%} 44 | entity_id: vacuum.roomba 45 | 46 | - alias: 'vacuum_watchdog' 47 | initial_state: 'on' 48 | trigger: 49 | - platform: state 50 | entity_id: sensor.roomba_status 51 | to: 'Charging' 52 | - platform: numeric_state 53 | entity_id: sensor.battery_roomba 54 | above: 50 55 | condition: 56 | - condition: state 57 | entity_id: input_boolean.away 58 | state: 'on' 59 | - condition: numeric_state 60 | entity_id: sensor.battery_roomba 61 | above: 50 62 | action: 63 | - service: vacuum.turn_on 64 | entity_id: vacuum.roomba 65 | 66 | - alias: 'vacuum_status' 67 | initial_state: 'on' 68 | trigger: 69 | - platform: state 70 | entity_id: sensor.roomba_status 71 | from: 'Docking - End Mission' 72 | to: 'Charging' 73 | - platform: state 74 | entity_id: sensor.roomba_status 75 | from: 'User Docking' 76 | to: 'Charging' 77 | - platform: state 78 | entity_id: sensor.roomba_status 79 | from: 'Docking' 80 | to: 'Charging' 81 | - platform: state 82 | entity_id: sensor.roomba_status 83 | from: 'User Docking' 84 | to: 'Dead' 85 | action: 86 | - service: mqtt.publish 87 | data_template: 88 | topic: homeassistant/vacuum 89 | retain: true 90 | payload: "{{as_timestamp(now())|timestamp_custom('%h %d,%H:%M')}}" 91 | 92 | # NOTIFY IF STUCK or DEAD 93 | - alias: 'Vacuum Alert' 94 | initial_state: 'on' 95 | trigger: 96 | - platform: state 97 | entity_id: sensor.roomba_status 98 | to: 'Stuck' 99 | - platform: state 100 | entity_id: sensor.roomba_status 101 | to: 'Dead' 102 | action: 103 | - service: script.janet_speech_engine 104 | data: 105 | call_greeting: 1 106 | call_inform: 1 107 | data_template: 108 | CustomMessage: >- 109 | {%-set status = states.sensor.roomba_status.state -%} 110 | {%-if status =="Stuck"-%} Roomba is Stuck 111 | {%-elif status =="Dead"-%} Roomba is Dead 112 | {%-else-%} {{status}} 113 | {%-endif-%} 114 | sensor: 115 | ###### Pull out the battery and status data for use in frontend display. 116 | - platform: template 117 | sensors: 118 | battery_roomba: 119 | friendly_name: 'Roomba' 120 | value_template: "{{ states.vacuum.roomba.attributes.battery_level|int }}" 121 | unit_of_measurement: '%' 122 | icon_template: "{{ states.vacuum.roomba.attributes.battery_icon }}" 123 | roomba_status: 124 | friendly_name: 'Status' 125 | value_template: >- 126 | {%-set battery = states.vacuum.roomba.attributes.battery_level -%} 127 | {%-set status = states.vacuum.roomba.attributes.status -%} 128 | {%-set unknown = states.vacuum.roomba.state -%} 129 | {%-if battery|int == 100 and status =="Charging"-%} Ready 130 | {%-elif battery|int== 0 and status =="Charging"-%} Charging 131 | {%-elif battery|int== 0-%} Dead 132 | {%-else-%} {{status}} 133 | {%-endif-%} 134 | icon_template: >- 135 | {% if is_state('sensor.roomba_status', "Ready") %} mdi:checkbox-marked-circle 136 | {% elif is_state('sensor.roomba_status', "Charging") %} mdi:flash-circle 137 | {% elif is_state('sensor.roomba_status', "New Mission") %} mdi:checkbox-marked-circle 138 | {% elif is_state('sensor.roomba_status', "Running") %} mdi:donkey 139 | {% elif is_state('sensor.roomba_status', "Stuck") %} mdi:alert-circle 140 | {% elif is_state('sensor.roomba_status', "User Docking") %} mdi:home-circle 141 | {% elif is_state('sensor.roomba_status', "Docking - End Mission") %} mdi:home-circle 142 | {% elif is_state('sensor.roomba_status', "Docking") %} mdi:home-circle 143 | {% elif is_state('sensor.roomba_status', "Paused") %} mdi:pause-circle 144 | {% elif is_state('sensor.roomba_status', "Stopped") %} mdi:stop-circle 145 | {% elif is_state('sensor.roomba_status', "Dead") %} mdi:skull 146 | {% else %} mdi:checkbox-marked-circle 147 | {% endif %} 148 | - platform: history_stats 149 | name: roomba_runtime 150 | entity_id: sensor.roomba_status 151 | state: 'Running' 152 | start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().weekday() * 86400 }}' 153 | end: '{{ now() }}' 154 | - platform: mqtt 155 | name: roomba_last_run 156 | state_topic: "homeassistant/vacuum" 157 | -------------------------------------------------------------------------------- /packages/waste_pickup.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Waste Pickup 3 | ################################################################ 4 | homeassistant: 5 | customize: 6 | sensor.waste_pickup_garbage_recycling: 7 | friendly_name: Waste Pickup 8 | icon: mdi:delete 9 | sensor.waste_pickup_yard_waste: 10 | friendly_name: Yard Waste Pickup 11 | icon: mdi:delete 12 | sensor.waste_pickup_container: 13 | friendly_name: 3 Container Exemption 14 | icon: mdi:delete 15 | script.garbage_tracker: 16 | friendly_name: Garbage Tracker 17 | emulated_hue_hidden: false 18 | 19 | google_assistant: 20 | entity_config: 21 | script.garbage_tracker: 22 | expose: true 23 | name: 'Garbage Tracker' 24 | 25 | sensor: 26 | ###### GARBAGE AND RECYCLE 27 | - platform: command_line 28 | command: "cat /config/www/waste_pickup_garbage_recycle.txt" 29 | name: 'Waste Pickup Garbage Recycling' 30 | scan_interval: 43200 31 | value_template: '{{value | int | timestamp_custom("%A %B %d", true)}}' 32 | ###### YARD WASTE 33 | - platform: command_line 34 | command: "cat /config/www/waste_pickup_yard_waste.txt" 35 | name: 'Waste Pickup Yard Waste' 36 | scan_interval: 43200 37 | value_template: '{{value | int | timestamp_custom("%A %B %d", true)}}' 38 | ###### 3 Container Exemption 39 | - platform: command_line 40 | command: "cat /config/www/waste_pickup_container.txt" 41 | name: 'Waste Pickup Container' 42 | scan_interval: 43200 43 | value_template: '{{value | int | timestamp_custom("%A %B %d", true)}}' 44 | ###### TTS SCRIPT TO CALL FROM ALEXA 45 | script: 46 | garbage_tracker: 47 | sequence: 48 | - service: script.janet_speech_engine 49 | data: 50 | call_greeting: 1 51 | call_inform: 1 52 | data_template: 53 | CustomMessage: >- 54 | {%- if as_timestamp(now())|timestamp_custom('%A %B %d', True) == states.sensor.waste_pickup_garbage_recycling.state -%} 55 | The garbage is to go out this evening. 56 | {%-else-%} 57 | {{' '}}The next garbage pickup is on {{states('sensor.waste_pickup_garbage_recycling')}}.{{' '}} 58 | {%-endif-%} 59 | -------------------------------------------------------------------------------- /packages/weather.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Weather 3 | ## Dependencies: DARKSKY - https://darksky.net/dev/ 4 | ## WUNDERGROUND - https://home-assistant.io/components/sensor.wunderground/ 5 | ################################################################ 6 | homeassistant: 7 | customize: 8 | #DARKSKY 9 | sensor.dark_sky_apparent_temperature: 10 | friendly_name: 'Current Temperature' 11 | icon: mdi:thermometer 12 | sensor.dark_sky_daytime_high_apparent_temperature_0: 13 | friendly_name: 'Daily High' 14 | icon: mdi:thermometer 15 | sensor.dark_sky_overnight_low_apparent_temperature_0: 16 | friendly_name: 'Daily Low' 17 | icon: mdi:thermometer 18 | sensor.dark_sky_humidity: 19 | friendly_name: 'Current Humidity' 20 | sensor.dark_sky_temperature: 21 | friendly_name: 'Current Temperature' 22 | sensor.dark_sky_daily_summary: 23 | friendly_name: 'Daily Summary' 24 | # WEATHER report 25 | script.weather_report: 26 | friendly_name: 'Weather Report' 27 | emulated_hue_hidden: false 28 | google_assistant: true 29 | google_assistant_name: 'Weather Report' 30 | 31 | weather: 32 | - platform: openweathermap 33 | api_key: !secret openweathermap 34 | name: openweathermap 35 | 36 | openuv: 37 | api_key: !secret openuv 38 | sensors: 39 | monitored_conditions: 40 | - current_ozone_level 41 | - current_uv_index 42 | - current_uv_level 43 | - max_uv_index 44 | 45 | sensor: 46 | ## Custom Weather Report 47 | - platform: template 48 | sensors: 49 | weather_report: 50 | value_template: > 51 | The weather is {{states('sensor.dark_sky_minutely_summary')[:-1]|lower}} and {{states('sensor.dark_sky_apparent_temperature') | round}} degrees. Today's high is {{states('sensor.dark_sky_daytime_high_apparent_temperature_0d')| round}} with a low of {{states('sensor.dark_sky_overnight_low_apparent_temperature_0d') | round}}. 52 | ###### UV HAS EXPIRED NEED TO FIND A NEW SOURCE 53 | # {%- if states.sensor.pws_uv.state|int == 0 -%} 54 | # {%- else -%} 55 | # {{' '}}The current UV index is {{states('sensor.pws_uv')}} with a burn time of {{states('sensor.uv_burn_time')}} minutes. 56 | # {%- endif -%} 57 | weather_inside_vs_outside: 58 | value_template: > 59 | {% if (states.sensor.average_whole_home.state | float) > (states.sensor.dark_sky_apparent_temperature.state | float) %} 60 | true 61 | {% else %} 62 | false 63 | {% endif %} 64 | ###### DARKSKY 65 | - platform: darksky 66 | api_key: !secret darksky_api_key 67 | forecast: 68 | - 0 69 | monitored_conditions: 70 | - summary 71 | - icon 72 | - nearest_storm_distance 73 | - nearest_storm_bearing 74 | - precip_type 75 | - precip_intensity 76 | - precip_probability 77 | - temperature 78 | - apparent_temperature 79 | - dew_point 80 | #- wind_speed 81 | #- wind_bearing 82 | - cloud_cover 83 | - humidity 84 | #- pressure 85 | #- visibility 86 | - ozone 87 | - minutely_summary 88 | - hourly_summary 89 | - daily_summary 90 | - temperature_high 91 | - temperature_low 92 | - apparent_temperature_high 93 | - apparent_temperature_low 94 | - precip_intensity_max 95 | 96 | ####### UV 97 | # http://beautyinthebackcountry.com/2013/04/09/uv-index-and-spf-explained/ 98 | # - platform: template 99 | # sensors: 100 | # uv_burn_time: 101 | # unit_of_measurement: Minutes 102 | # ### SUB IN CORRECT VALUE FOR YOUR SKIN################################################################################################################################# 103 | # ### Celtic"all babies and children" = 67Min // caucasian = 100Min // Central Europe = 200Min // south american = 200Min // Middle Eastern = 400Min // African = 500Min 104 | # value_template: > 105 | # {% if is_state('sensor.pws_uv', '0') %} 106 | # 0 107 | # {% elif is_state('sensor.pws_uv', '-1') %} 108 | # 0 109 | # {% elif is_state('sensor.pws_uv', 'unknown') %} 110 | # 0 111 | # {% else %} 112 | # {{ (67 / states.sensor.pws_uv.state | float) | round }} 113 | # {% endif %} 114 | 115 | script: 116 | weather_report: 117 | sequence: 118 | - service: tts.google_translate 119 | data_template: 120 | entity_id: media_player.google_home 121 | message: > 122 | {{states('sensor.weather_report')}} 123 | -------------------------------------------------------------------------------- /packages/zones.yaml: -------------------------------------------------------------------------------- 1 | ################################################################ 2 | ## Packages / Zones 3 | ################################################################ 4 | zone: 5 | - name: Home 6 | latitude: !secret latitude 7 | longitude: !secret longitude 8 | radius: 190 9 | icon: mdi:account-multiple 10 | 11 | - name: Work Old South 12 | latitude: !secret latitude_work_oldsouth 13 | longitude: !secret longitude_work_oldsouth 14 | radius: 190 15 | icon: mdi:worker 16 | 17 | - name: Work Westmount 18 | latitude: !secret latitude_work_westmount 19 | longitude: !secret longitude_work_westmount 20 | radius: 260 21 | icon: mdi:worker 22 | 23 | - name: Work Whitehills 24 | latitude: !secret latitude_work_whitehills 25 | longitude: !secret longitude_work_whitehills 26 | radius: 190 27 | icon: mdi:worker 28 | 29 | - name: Victoria Hospital 30 | latitude: !secret latitude_victoria 31 | longitude: !secret longitude_victoria 32 | radius: 280 33 | icon: mdi:worker 34 | 35 | - name: Daycare 36 | latitude: !secret latitude_daycare 37 | longitude: !secret longitude_daycare 38 | radius: 50 39 | icon: mdi:baby 40 | 41 | - name: University Hospital 42 | latitude: !secret latitude_UH 43 | longitude: !secret longitude_UH 44 | radius: 190 45 | icon: mdi:worker 46 | -------------------------------------------------------------------------------- /python_scripts/latest_backup.py: -------------------------------------------------------------------------------- 1 | import os.path, time, datetime 2 | timestamp=(os.path.getmtime("/media/usb0/hass_backup/")) 3 | dt_obj = time.strftime('%b %d @ %I:%M%p', time.localtime(timestamp)) 4 | print (dt_obj) -------------------------------------------------------------------------------- /python_scripts/latest_commit.py: -------------------------------------------------------------------------------- 1 | import os.path, time, datetime 2 | timestamp=(os.path.getmtime("/home/homeassistant/.homeassistant/.git/index")) 3 | dt_obj = time.strftime('%b %d @ %I:%M%p', time.localtime(timestamp)) 4 | print dt_obj -------------------------------------------------------------------------------- /python_scripts/latest_snapshot.py: -------------------------------------------------------------------------------- 1 | import os.path, time, datetime 2 | timestamp=(os.path.getmtime("/mnt/backup/snapshots")) 3 | dt_obj = time.strftime('%b %d @ %I:%M%p', time.localtime(timestamp)) 4 | print dt_obj -------------------------------------------------------------------------------- /python_scripts/waste_pickup_garbage_recycle_example.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import json 4 | import requests 5 | import StringIO 6 | import time 7 | 8 | current_milli_time = lambda: int(round(time.time() * 1000)) 9 | 10 | def TimestampMillisec64(): 11 | return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 12 | 13 | def formatRecursiveDict(data): 14 | return dict(map(lambda (x, y): (x.encode('ascii'), y.encode('ascii')), data.iteritems())) 15 | 16 | def formatDict(data): 17 | return dict(map(lambda (x, y): (x.encode('ascii'), y.encode('ascii')) if x != 'details' else (x.encode('ascii'), formatRecursiveDict(y)), data.iteritems())) 18 | 19 | r = requests.get('https://ADDRESS TO API'); 20 | s = str(r.text)[17:-1] 21 | data = json.loads(s); 22 | schedule = data['schedules']['S1595'] 23 | print min(filter(lambda time: int(time) * 1000 > current_milli_time(), schedule.iterkeys())) -------------------------------------------------------------------------------- /themes/boxing_day.yaml: -------------------------------------------------------------------------------- 1 | "Boxing Day": 2 | #Main colors 3 | primary-color: '#3C8D0D' # Header 4 | accent-color: '#d32f2f' # Accent color 5 | dark-primary-color: 'var(--accent-color)' # Hyperlinks 6 | light-primary-color: 'var(--accent-color)' # Horizontal line in about 7 | 8 | #Text colors 9 | primary-text-color: '#000000' # Primary text colour, here is referencing dark-primary-color 10 | text-primary-color: 'var(--primary-text-color)' # Primary text colour 11 | secondary-text-color: '#5294E2' # For secondary titles in more info boxes etc. 12 | disabled-text-color: '#7F848E' # Disabled text colour 13 | label-badge-border-color: 'green' # Label badge border, just a reference value 14 | 15 | #Background colors 16 | primary-background-color: '#ff7878' # Settings background 17 | secondary-background-color: '#d32f2f' # Main card UI background 18 | divider-color: 'rgba(0, 0, 0, .12)' # Divider 19 | 20 | #Table rows 21 | table-row-background-color: '#353840' # Table row 22 | table-row-alternative-background-color: '#3E424B' # Table row alternative 23 | 24 | #Nav Menu 25 | paper-listbox-color: 'var(--primary-color)' # Navigation menu selection hoover 26 | paper-listbox-background-color: '#ffffff' # Navigation menu background 27 | paper-grey-50: 'var(--primary-text-color)' 28 | paper-grey-200: '#ffffff' # Navigation menu selection 29 | 30 | #Paper card 31 | paper-card-header-color: 'var(--accent-color)' # Card header text colour 32 | paper-card-background-color: '#ffffff' # Card background colour 33 | paper-dialog-background-color: '#ff0000' # Card dialog background colour 34 | paper-item-icon-color: '#74d680' #'var(--primary-text-color)' # Icon color 35 | paper-item-icon-active-color: '#ff7878' # Icon color active 36 | paper-item-icon_-_color: 'green' 37 | paper-item-selected_-_background-color: '#74d680' # Popup item select 38 | paper-tabs-selection-bar-color: 'green' 39 | 40 | #Labels 41 | label-badge-red: 'var(--accent-color)' # References the brand colour label badge border 42 | label-badge-text-color: 'var(--primary-text-color)' # Now same as label badge border but that's a matter of taste 43 | label-badge-background-color: '#ffffff' # Same, but can also be set to transparent here 44 | 45 | #Switches 46 | paper-toggle-button-checked-button-color: 'var(--accent-color)' 47 | paper-toggle-button-checked-bar-color: 'var(--accent-color)' 48 | paper-toggle-button-checked-ink-color: 'var(--accent-color)' 49 | paper-toggle-button-unchecked-button-color: 'var(--disabled-text-color)' 50 | paper-toggle-button-unchecked-bar-color: 'var(--disabled-text-color)' 51 | paper-toggle-button-unchecked-ink-color: 'var(--disabled-text-color)' 52 | 53 | #Sliders 54 | paper-slider-knob-color: 'var(--accent-color)' 55 | paper-slider-knob-start-color: 'var(--accent-color)' 56 | paper-slider-pin-color: '#378b29' #'var(--accent-color)' 57 | paper-slider-active-color: '74d680' #'var(--accent-color)' 58 | paper-slider-container-color: 'linear-gradient(var(--primary-background-color), var(--secondary-background-color)) no-repeat' 59 | paper-slider-secondary-color: 'var(--secondary-background-color)' 60 | paper-slider-disabled-active-color: 'var(--disabled-text-color)' 61 | paper-slider-disabled-secondary-color: 'var(--disabled-text-color)' 62 | 63 | #Google colors 64 | google-red-500: '#E45E65' 65 | google-green-500: '#39E949' 66 | -------------------------------------------------------------------------------- /themes/christmas.yaml: -------------------------------------------------------------------------------- 1 | "Christmas Day": 2 | #Main colors 3 | primary-color: '#3C8D0D' # Header 4 | accent-color: '#d32f2f' # Accent color 5 | dark-primary-color: 'var(--accent-color)' # Hyperlinks 6 | light-primary-color: 'var(--accent-color)' # Horizontal line in about 7 | 8 | #Text colors 9 | primary-text-color: '#000000' # Primary text colour, here is referencing dark-primary-color 10 | text-primary-color: 'var(--primary-text-color)' # Primary text colour 11 | secondary-text-color: '#5294E2' # For secondary titles in more info boxes etc. 12 | disabled-text-color: '#7F848E' # Disabled text colour 13 | label-badge-border-color: 'green' # Label badge border, just a reference value 14 | 15 | #Background colors 16 | primary-background-color: '#ff7878' # Settings background 17 | secondary-background-color: '#d32f2f' # Main card UI background 18 | divider-color: 'rgba(0, 0, 0, .12)' # Divider 19 | 20 | #Table rows 21 | table-row-background-color: '#353840' # Table row 22 | table-row-alternative-background-color: '#3E424B' # Table row alternative 23 | 24 | #Nav Menu 25 | paper-listbox-color: 'var(--primary-color)' # Navigation menu selection hoover 26 | paper-listbox-background-color: '#ffffff' # Navigation menu background 27 | paper-grey-50: 'var(--primary-text-color)' 28 | paper-grey-200: '#ffffff' # Navigation menu selection 29 | 30 | #Paper card 31 | paper-card-header-color: 'var(--accent-color)' # Card header text colour 32 | paper-card-background-color: '#ffffff' # Card background colour 33 | paper-dialog-background-color: '#ff0000' # Card dialog background colour 34 | paper-item-icon-color: '#74d680' #'var(--primary-text-color)' # Icon color 35 | paper-item-icon-active-color: '#ff7878' # Icon color active 36 | paper-item-icon_-_color: 'green' 37 | paper-item-selected_-_background-color: '#74d680' # Popup item select 38 | paper-tabs-selection-bar-color: 'green' 39 | 40 | #Labels 41 | label-badge-red: 'var(--accent-color)' # References the brand colour label badge border 42 | label-badge-text-color: 'var(--primary-text-color)' # Now same as label badge border but that's a matter of taste 43 | label-badge-background-color: '#ffffff' # Same, but can also be set to transparent here 44 | 45 | #Switches 46 | paper-toggle-button-checked-button-color: 'var(--accent-color)' 47 | paper-toggle-button-checked-bar-color: 'var(--accent-color)' 48 | paper-toggle-button-checked-ink-color: 'var(--accent-color)' 49 | paper-toggle-button-unchecked-button-color: 'var(--disabled-text-color)' 50 | paper-toggle-button-unchecked-bar-color: 'var(--disabled-text-color)' 51 | paper-toggle-button-unchecked-ink-color: 'var(--disabled-text-color)' 52 | 53 | #Sliders 54 | paper-slider-knob-color: 'var(--accent-color)' 55 | paper-slider-knob-start-color: 'var(--accent-color)' 56 | paper-slider-pin-color: '#378b29' #'var(--accent-color)' 57 | paper-slider-active-color: '74d680' #'var(--accent-color)' 58 | paper-slider-container-color: 'linear-gradient(var(--primary-background-color), var(--secondary-background-color)) no-repeat' 59 | paper-slider-secondary-color: 'var(--secondary-background-color)' 60 | paper-slider-disabled-active-color: 'var(--disabled-text-color)' 61 | paper-slider-disabled-secondary-color: 'var(--disabled-text-color)' 62 | 63 | #Google colors 64 | google-red-500: '#E45E65' 65 | google-green-500: '#39E949' 66 | -------------------------------------------------------------------------------- /themes/christmas_eve.yaml: -------------------------------------------------------------------------------- 1 | "Christmas Eve": 2 | #Main colors 3 | primary-color: '#3C8D0D' # Header 4 | accent-color: '#d32f2f' # Accent color 5 | dark-primary-color: 'var(--accent-color)' # Hyperlinks 6 | light-primary-color: 'var(--accent-color)' # Horizontal line in about 7 | 8 | #Text colors 9 | primary-text-color: '#000000' # Primary text colour, here is referencing dark-primary-color 10 | text-primary-color: 'var(--primary-text-color)' # Primary text colour 11 | secondary-text-color: '#5294E2' # For secondary titles in more info boxes etc. 12 | disabled-text-color: '#7F848E' # Disabled text colour 13 | label-badge-border-color: 'green' # Label badge border, just a reference value 14 | 15 | #Background colors 16 | primary-background-color: '#ff7878' # Settings background 17 | secondary-background-color: '#d32f2f' # Main card UI background 18 | divider-color: 'rgba(0, 0, 0, .12)' # Divider 19 | 20 | #Table rows 21 | table-row-background-color: '#353840' # Table row 22 | table-row-alternative-background-color: '#3E424B' # Table row alternative 23 | 24 | #Nav Menu 25 | paper-listbox-color: 'var(--primary-color)' # Navigation menu selection hoover 26 | paper-listbox-background-color: '#ffffff' # Navigation menu background 27 | paper-grey-50: 'var(--primary-text-color)' 28 | paper-grey-200: '#ffffff' # Navigation menu selection 29 | 30 | #Paper card 31 | paper-card-header-color: 'var(--accent-color)' # Card header text colour 32 | paper-card-background-color: '#ffffff' # Card background colour 33 | paper-dialog-background-color: '#ff0000' # Card dialog background colour 34 | paper-item-icon-color: '#74d680' #'var(--primary-text-color)' # Icon color 35 | paper-item-icon-active-color: '#ff7878' # Icon color active 36 | paper-item-icon_-_color: 'green' 37 | paper-item-selected_-_background-color: '#74d680' # Popup item select 38 | paper-tabs-selection-bar-color: 'green' 39 | 40 | #Labels 41 | label-badge-red: 'var(--accent-color)' # References the brand colour label badge border 42 | label-badge-text-color: 'var(--primary-text-color)' # Now same as label badge border but that's a matter of taste 43 | label-badge-background-color: '#ffffff' # Same, but can also be set to transparent here 44 | 45 | #Switches 46 | paper-toggle-button-checked-button-color: 'var(--accent-color)' 47 | paper-toggle-button-checked-bar-color: 'var(--accent-color)' 48 | paper-toggle-button-checked-ink-color: 'var(--accent-color)' 49 | paper-toggle-button-unchecked-button-color: 'var(--disabled-text-color)' 50 | paper-toggle-button-unchecked-bar-color: 'var(--disabled-text-color)' 51 | paper-toggle-button-unchecked-ink-color: 'var(--disabled-text-color)' 52 | 53 | #Sliders 54 | paper-slider-knob-color: 'var(--accent-color)' 55 | paper-slider-knob-start-color: 'var(--accent-color)' 56 | paper-slider-pin-color: '#378b29' #'var(--accent-color)' 57 | paper-slider-active-color: '74d680' #'var(--accent-color)' 58 | paper-slider-container-color: 'linear-gradient(var(--primary-background-color), var(--secondary-background-color)) no-repeat' 59 | paper-slider-secondary-color: 'var(--secondary-background-color)' 60 | paper-slider-disabled-active-color: 'var(--disabled-text-color)' 61 | paper-slider-disabled-secondary-color: 'var(--disabled-text-color)' 62 | 63 | #Google colors 64 | google-red-500: '#E45E65' 65 | google-green-500: '#39E949' 66 | -------------------------------------------------------------------------------- /themes/day.yaml: -------------------------------------------------------------------------------- 1 | "Day": 2 | # Primary Color 3 | primary-color: 'hsl(192, 96%, 48%)' 4 | # Backgrounds 5 | primary-background-color: 'hsl(0, 0%, 98%)' 6 | secondary-background-color: 'hsl(0, 0%, 95%)' 7 | paper-listbox-background-color: 'var(--primary-background-color)' 8 | paper-card-background-color: 'var(--primary-background-color)' 9 | paper-dialog-background-color: 'var(--primary-background-color)' 10 | table-row-background-color: 'hsl(0, 0%, 96%)' 11 | table-row-alternative-background-color: 'var(--primary-background-color)' 12 | # Divider 13 | divider-color: 'hsla(0, 0%, 0%, 0)' 14 | dark-divider-opacity: '0' 15 | light-divider-opacity: '0' 16 | # Text colors 17 | primary-text-color: 'hsl(0, 0%, 50%)' 18 | text-primary-color: 'hsl(0, 0%, 60%)' 19 | secondary-text-color: 'hsl(0, 0%, 60%)' 20 | disabled-text-color: 'hsl(0, 0%, 70%)' 21 | label-badge-border-color: 'hsl(0, 0%, 100%)' 22 | sidebar-text_-_color: 'hsl(0, 0%, 54%)' 23 | sidebar-text-color: 'hsl(0, 0%, 54%)' 24 | # Text Adjustments 25 | paper-font-headline_-_letter-spacing: '-0.5px' 26 | paper-font-headline_-_font-weight: '500' 27 | paper-font-body1_-_font-weight: '500' 28 | # Nav Menu 29 | paper-listbox-color: 'hsl(0, 0%, 85%)' 30 | paper-grey-50: 'hsl(0, 0%, 85%)' 31 | paper-grey-200: 'hsl(0, 0%, 95%)' 32 | # Paper card 33 | paper-card-header-color: 'hsla(0, 0%, 0%, 0.5)' 34 | paper-item-icon-color: 'hsl(0, 0%, 45%)' 35 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 36 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 37 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 38 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 39 | ha-slider-background-color: 'var(--primary-background-color)' 40 | paper-slider-bar-color: 'var(--primary-background-color)' 41 | # Labels 42 | label-badge-red: 'var(--primary-color)' 43 | label-badge-background-color: 'var(--paper-card-background-color)' 44 | label-badge-text-color: 'hsl(0, 0%, 60%)' 45 | # Shadows 46 | shadow-elevation-2dp_-_box-shadow: 'inset 0px 0px 0px 3px hsl(0, 0%, 88%)' 47 | shadow-elevation-4dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 48 | shadow-elevation-6dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 49 | shadow-elevation-8dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 50 | shadow-elevation-10dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 51 | shadow-elevation-12dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 52 | shadow-elevation-14dp_-_box-shadow: 'var(--shadow-elevation-2dp_-_box-shadow)' 53 | shadow-elevation-16dp_-_box-shadow: '0px 0px 0px 4px var(--primary-color)' 54 | # Switches 55 | paper-toggle-button-checked-button-color: 'hsl(192, 0%, 98%)' 56 | paper-toggle-button-checked-bar-color: 'hsl(192, 0%, 50%)' 57 | paper-toggle-button-unchecked-button-color: 'hsl(192, 0%, 98%)' 58 | paper-toggle-button-unchecked-bar-color: 'hsl(192, 0%, 85%)' 59 | # Sliders 60 | paper-slider-knob-color: 'var(--primary-color)' 61 | paper-slider-knob-start-color: 'hsl(0, 0%, 60%)' 62 | paper-slider-pin-color: 'var(--primary-color)' 63 | paper-slider-active-color: 'var(--primary-color)' 64 | paper-slider-container-color: 'hsl(0, 0%, 90%)' 65 | paper-slider-secondary-color: 'hsl(0, 0%, 90%)' 66 | paper-slider-disabled-active-color: 'hsl(0, 0%, 90%)' 67 | paper-slider-disabled-secondary-color: 'hsl(0, 0%, 90%)' 68 | paper-dialog-color: 'hsl(0, 0%, 50%)' 69 | -------------------------------------------------------------------------------- /themes/earth_day.yaml: -------------------------------------------------------------------------------- 1 | "Earth Day": 2 | turmeric-color: "#DEB853" 3 | light-turmeric-color: "#E2D9A2" 4 | slate-color: "#0A373A" 5 | light-slate-color: "#789F8A" 6 | maroon-color: "#862715" 7 | primary-font-family: "Lucida Console" 8 | paper-listbox-background-color: "var(--turmeric-color)" 9 | light-primary-color: "var(--light-turmeric-color)" 10 | paper-item-selected_-_background-color: "var(--light-turmeric-color)" 11 | paper-grey-200: "var(--light-turmeric-color)" 12 | divider-color: "var(--light-turmeric-color)" 13 | primary-background-color: "var(--light-turmeric-color)" 14 | secondary-background-color: "var(--light-turmeric-color)" 15 | paper-slider-secondary-color: "var(--light-turmeric-color)" 16 | paper-toggle-button-checked-bar-color: "var(--light-turmeric-color)" 17 | primary-color: "var(--slate-color)" 18 | paper-grey-50: "var(--slate-color)" 19 | primary-text-color: "var(--slate-color)" 20 | secondary-text-color: "var(--slate-color)" 21 | paper-item-icon-color: "var(--slate-color)" 22 | label-badge-text-color: "var(--slate-color)" 23 | paper-item-icon_-_color: "var(--slate-color)" 24 | paper-slider-knob-color: "var(--slate-color)" 25 | paper-slider-knob-start-color: "var(--slate-color)" 26 | paper-slider-pin-color: "var(--slate-color)" 27 | paper-toggle-button-checked-button-color: "var(--slate-color)" 28 | paper-toggle-button-unchecked-bar-color: "var(--slate-color)" 29 | paper-card-header-color: "var(--slate-color)" 30 | disabled-text-color: "var(--light-slate-color)" 31 | paper-card-background-color: "var(--light-slate-color)" 32 | label-badge-background-color: "var(--light-slate-color)" 33 | dark-primary-color: "var(--maroon-color)" 34 | paper-listbox-color: "var(--maroon-color)" 35 | paper-item-icon-active-color: "var(--maroon-color)" 36 | label-badge-red: "var(--maroon-color)" 37 | paper-slider-active-color: "var(--maroon-color)" 38 | paper-toggle-button-checked-ink-color: "var(--maroon-color)" 39 | paper-font-common-base_-_font-family: "var(--primary-font-family)" 40 | paper-font-common-code_-_font-family: "var(--primary-font-family)" 41 | paper-font-body1_-_font-family: "var(--primary-font-family)" 42 | paper-font-subhead_-_font-family: "var(--primary-font-family)" 43 | paper-font-headline_-_font-family: "var(--primary-font-family)" 44 | paper-font-caption_-_font-family: "var(--primary-font-family)" 45 | paper-font-title_-_font-family: "var(--primary-font-family)" 46 | -------------------------------------------------------------------------------- /themes/groundhog_day.yaml: -------------------------------------------------------------------------------- 1 | "Groundhog Day": 2 | primary-color: "#643815" 3 | disabled-text-color: "#DC742D" 4 | divider-color: "#EDE4D8" #"rgba(255, 255, 255, 0.15)" 5 | dark-primary-color: "#592A13" 6 | 7 | primary-background-color: "#85AC3F" 8 | primary-text-color: "#5C3410" 9 | secondary-background-color: "#C5D8DF" 10 | secondary-text-color: "#693A23" 11 | text-primary-color: "#693A23" 12 | 13 | label-badge-background-color: "var(--primary-background-color)" 14 | label-badge-text-color: "var(--text-primary-color)" 15 | 16 | paper-card-background-color: "#DC742D" 17 | paper-grey-50: "#ED7C30" 18 | paper-grey-200: "#B0D24A" 19 | paper-item-icon-color: "#B3D54A" 20 | paper-listbox-background-color: "#DC742D" 21 | paper-listbox-color: "#ED7C30" 22 | 23 | paper-card-header-color: "#EDE4D8" 24 | 25 | paper-item-icon-active-color: "#85AC3F" 26 | paper-item-icon_-_color: "#B3D54A" 27 | 28 | paper-slider-active-color: "#A56521" 29 | paper-slider-knob-color: "#A56521" 30 | paper-slider-knob-start-color: "#ED7C30" 31 | paper-slider-pin-color: "#FF00FF" 32 | paper-slider-secondary-color: "#A06020" 33 | 34 | paper-toggle-button-checked-ink-color: "#A56521" 35 | paper-toggle-button-checked-button-color: "#A56521" 36 | paper-toggle-button-checked-bar-color: "#EDE4D8" 37 | paper-toggle-button-unchecked-bar-color: "#EDE4D8" 38 | 39 | table-row-background-color: "#DC742D" 40 | table-row-alternative-background-color: "#C67A2E" 41 | 42 | google-red: "#A56521" 43 | google-green: "#DC742D" 44 | google-blue: "#268BD2" 45 | google-yellow: "#ED7C30" 46 | accent-color: "#EDE4D8" 47 | paper-green: "#DC742D" 48 | paper-blue: "#268BD2" 49 | paper-orange: "#EDE4D8" -------------------------------------------------------------------------------- /themes/halloween.yaml: -------------------------------------------------------------------------------- 1 | "Halloween": 2 | # orange: dd5800; black: 000000; white: ffffff; coffee: 7a4901 3 | primary-color: "#dd5800" 4 | disabled-text-color: "#242424" 5 | divider-color: "rgba(255, 0, 0, 0.12)" 6 | paper-card-background-color: "#000000" 7 | paper-grey-200: "#4e4e4e" 8 | paper-item-icon-color: "#FFFFFF" 9 | paper-listbox-background-color: "#202020" 10 | paper-listbox-color: "#FFFFFF" 11 | primary-background-color: "#2b2b2b" # For dialogs and popups...etc 12 | primary-text-color: "#dd5800" 13 | secondary-background-color: "#2b2b2b" 14 | secondary-text-color: "#dd5800" 15 | text-primary-color: "#000000" 16 | dark-primary-color: "#7a4901" 17 | light-primary-color: "#ff8f45" 18 | paper-toggle-button-checked-ink-color: "#ff8f45" 19 | paper-toggle-button-checked-button-color: "#dd5800" 20 | paper-toggle-button-checked-bar-color: "#ff8f45" 21 | paper-slider-knob-color: "#dd5800" 22 | paper-slider-knob-start-color: "#dd5800" 23 | paper-slider-pin-color: "#dd5800" 24 | paper-slider-active-color: "#dd5800" 25 | paper-slider-secondary-color: "#ff8f45" 26 | 27 | label-badge-background-color: "var(--secondary-background-color)" 28 | label-badge-text-color: "var(--text-primary-color)" 29 | paper-card-header-color: "#var(--paper-item-icon-color)" 30 | paper-grey-50: "var(--primary-text-color)" 31 | paper-item-icon-active-color: "#ff0000" #var(--primary-color) 32 | paper-item-icon_-_color: "var(--primary-text-color)" 33 | paper-toggle-button-unchecked-bar-color: "var(--primary-text-color)" 34 | -------------------------------------------------------------------------------- /themes/mothers_day.yaml: -------------------------------------------------------------------------------- 1 | "Mother's Day": 2 | # MyVariables 3 | base-hue: '315' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '55%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: 'hsl(var(--huesat) 20%)' 9 | # Backgrounds 10 | primary-background-color: 'var(--primary-color)' 11 | secondary-background-color: 'hsl(var(--huesat) 16%)' 12 | paper-listbox-background-color: 'var(--primary-color)' 13 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 14 | paper-dialog-background-color: 'var(--paper-card-background-color)' 15 | table-row-background-color: 'hsl(var(--huesat) 12%)' 16 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 17 | # Devider 18 | divider-color: 'hsla(0, 0%, 0%, 0)' 19 | dark-divider-opacity: '0' 20 | light-divider-opacity: '0' 21 | # Text colors 22 | primary-text-color: 'hsl(var(--huesat) 60%)' 23 | text-primary-color: 'hsl(var(--huesat) 60%)' 24 | secondary-text-color: 'hsl(var(--huesat) 60%)' 25 | disabled-text-color: 'hsl(var(--huesat) 70%)' 26 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 27 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 28 | paper-card-header-color: 'hsl(var(--base-hue), 90%, 50%)' 29 | # Text Adjustments 30 | paper-font-headline_-_letter-spacing: '-0.5px' 31 | paper-font-headline_-_font-weight: '500' 32 | paper-font-body1_-_font-weight: '500' 33 | # Nav Menu 34 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 35 | paper-grey-50: 'hsl(var(--huesat) 50%)' 36 | paper-grey-200: 'hsla(var(--huesat) 26%)' 37 | # Paper card 38 | paper-item-icon-color: 'hsl(var(--huesat) 30%)' 39 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 40 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 41 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 42 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 43 | # Labels 44 | label-badge-red: 'hsla(0, 0%, 0%, 0)' 45 | label-badge-border-color: 'var(--label-badge-red)' 46 | label-badge-background-color: 'var(--paper-card-background-color)' 47 | label-badge-text-color: 'var(--primary-text-color)' 48 | # Shadows 49 | shadow-elevation-2dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 18%)' 50 | shadow-elevation-16dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 28%)' 51 | # Switches 52 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 53 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 54 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 55 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 56 | # Sliders 57 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 58 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 59 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 60 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 62 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 63 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 64 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 65 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' 66 | -------------------------------------------------------------------------------- /themes/new_years_day.yaml: -------------------------------------------------------------------------------- 1 | New Year's Day: 2 | # Main Stuff # 3 | primary-color: "#0179d8" # Primary (most of the UI) 4 | primary-background-color: "#060606" # Primary background colour (dialogs, e.t.c) 5 | secondary-background-color: "#060606" # Secondary background colour (main UI background) 6 | paper-card-background-color: "#131313" # Card background colour 7 | paper-item-icon-color: "#0179d8" # Icon colour 8 | primary-text-color: "#FFFFFF" # Primary text colour 9 | secondary-text-color: "rgba(255, 255, 255, 0.5)" # Secondary text colour 10 | disabled-text-color: "rgba(255, 255, 255, 0.5)" # Disabled text colour 11 | divider-color: "rgba(255, 255, 255, 0.12)" # Divider colour 12 | paper-card-header-color: "#FFFFFF" # Card header text colour 13 | 14 | # Nav Menu # 15 | paper-listbox-background-color: "#131313" # Listbox background colour 16 | paper-listbox-color: "#FFFFFF" # Listbox text colour 17 | paper-grey-200: "#060606" # Listbox selected item background colour 18 | 19 | # Switches # 20 | paper-toggle-button-checked-ink-color: "#d80129" 21 | paper-toggle-button-checked-button-color: "#0179d8" 22 | paper-toggle-button-checked-bar-color: "#FFFFFF" 23 | 24 | # Sliders # 25 | paper-slider-knob-color: "#0179d8" 26 | paper-slider-knob-start-color: "#0179d8" 27 | paper-slider-pin-color: "#0179d8" 28 | paper-slider-active-color: "#0179d8" 29 | paper-slider-secondary-color: "#0179d8" 30 | 31 | # Tables # 32 | table-row-background-color: transparant 33 | table-row-alternative-background-color: transparant -------------------------------------------------------------------------------- /themes/new_years_eve.yaml: -------------------------------------------------------------------------------- 1 | New Year's Eve: 2 | # Main Stuff # 3 | primary-color: "#0179d8" # Primary (most of the UI) 4 | primary-background-color: "#060606" # Primary background colour (dialogs, e.t.c) 5 | secondary-background-color: "#060606" # Secondary background colour (main UI background) 6 | paper-card-background-color: "#131313" # Card background colour 7 | paper-item-icon-color: "#0179d8" # Icon colour 8 | primary-text-color: "#FFFFFF" # Primary text colour 9 | secondary-text-color: "rgba(255, 255, 255, 0.5)" # Secondary text colour 10 | disabled-text-color: "rgba(255, 255, 255, 0.5)" # Disabled text colour 11 | divider-color: "rgba(255, 255, 255, 0.12)" # Divider colour 12 | paper-card-header-color: "#FFFFFF" # Card header text colour 13 | 14 | # Nav Menu # 15 | paper-listbox-background-color: "#131313" # Listbox background colour 16 | paper-listbox-color: "#FFFFFF" # Listbox text colour 17 | paper-grey-200: "#060606" # Listbox selected item background colour 18 | 19 | # Switches # 20 | paper-toggle-button-checked-ink-color: "#d80129" 21 | paper-toggle-button-checked-button-color: "#0179d8" 22 | paper-toggle-button-checked-bar-color: "#FFFFFF" 23 | 24 | # Sliders # 25 | paper-slider-knob-color: "#0179d8" 26 | paper-slider-knob-start-color: "#0179d8" 27 | paper-slider-pin-color: "#0179d8" 28 | paper-slider-active-color: "#0179d8" 29 | paper-slider-secondary-color: "#0179d8" 30 | 31 | # Tables # 32 | table-row-background-color: transparant 33 | table-row-alternative-background-color: transparant -------------------------------------------------------------------------------- /themes/night.yaml: -------------------------------------------------------------------------------- 1 | "Night": 2 | # MyVariables 3 | base-hue: '220' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '5%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: 'hsl(var(--huesat) 36%)' #header colors and some text colors 9 | # Backgrounds 10 | primary-background-color: 'hsl(var(--huesat) 16%)' 11 | secondary-background-color: 'hsl(var(--huesat) 16%)' # background behind cards 12 | paper-listbox-background-color: 'hsl(var(--huesat) 16%)' 13 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 14 | paper-dialog-background-color: 'var(--paper-card-background-color)' 15 | table-row-background-color: 'hsl(var(--huesat) 12%)' 16 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 17 | # Divider 18 | divider-color: 'hsla(0, 0%, 0%, 0)' 19 | dark-divider-opacity: '0' 20 | light-divider-opacity: '0' 21 | # Text colors 22 | primary-text-color: 'hsl(var(--huesat) 90%)' 23 | text-primary-color: 'hsl(var(--huesat) 80%)' 24 | secondary-text-color: 'hsl(var(--huesat) 80%)' 25 | disabled-text-color: 'hsl(var(--huesat) 70%)' 26 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 27 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 28 | paper-card-header-color: 'hsl(var(--huesat) 90%)' 29 | # Text Adjustments 30 | paper-font-headline_-_letter-spacing: '-0.5px' 31 | paper-font-headline_-_font-weight: '400' 32 | paper-font-body1_-_font-weight: '300' 33 | # Nav Menu 34 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 35 | paper-grey-50: 'hsl(var(--huesat) 50%)' 36 | paper-grey-200: 'hsl(var(--huesat) 10%)' #active menu item 37 | # Paper card 38 | paper-item-icon-color: 'hsl(var(--huesat) 40%)' 39 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 40 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 41 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 42 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 43 | # Labels 44 | #label-badge-red: 'var(--paper-card-background-color)' 45 | label-badge-red: '#FF0000' 46 | label-badge-border-color: 'var(--label-badge-red)' 47 | label-badge-background-color: 'var(--paper-card-background-color)' 48 | label-badge-text-color: 'var(--primary-text-color)' 49 | # Shadows 50 | shadow-elevation-2dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 10%)' 51 | shadow-elevation-16dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 25%)' 52 | # Switches 53 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 54 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 55 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 56 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 57 | # Sliders 58 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 59 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 60 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 62 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 63 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 64 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 65 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 66 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' 67 | -------------------------------------------------------------------------------- /themes/remembrance_day.yaml: -------------------------------------------------------------------------------- 1 | "Remembrance Day": 2 | # Main colors that can be changed 3 | dark-primary-color: "#c66900" 4 | disabled-text-color: "#545454" 5 | divider-color: "rgba(255, 255, 255, 0.12)" 6 | light-primary-color: "#e06c6c" 7 | paper-card-background-color: "#1d1d1d" 8 | paper-grey-200: "#191919" 9 | paper-item-icon-color: "#d3d3d3" 10 | paper-listbox-background-color: "#202020" 11 | primary-background-color: "#303030" 12 | primary-color: "#d32f2f" 13 | primary-text-color: "#cfcfcf" 14 | secondary-background-color: "#131313" 15 | sidebar-text_-_background: "#62717b" 16 | # Colors based on variables, see above 17 | paper-card-header-color: "var(--paper-item-icon-color)" 18 | paper-item-icon-active-color: "var(--primary-color)" 19 | paper-item-icon_-_color: "var(--primary-text-color)" 20 | paper-listbox-color: "var(--primary-text-color)" 21 | paper-grey-50: "var(--primary-text-color)" 22 | paper-slider-active-color: "var(--primary-color)" 23 | paper-slider-knob-color: "var(--primary-color)" 24 | paper-slider-knob-start-color: "var(--primary-color)" 25 | paper-slider-pin-color: "var(--primary-color)" 26 | paper-slider-secondary-color: "var(--light-primary-color)" 27 | paper-toggle-button-checked-ink-color: "var(--dark-primary-color)" 28 | paper-toggle-button-checked-button-color: "var(--primary-color)" 29 | paper-toggle-button-checked-bar-color: "var(--light-primary-color)" 30 | paper-toggle-button-unchecked-bar-color: "var(--primary-text-color)" 31 | secondary-text-color: "var(--primary-color)" 32 | table-row-background-color: "var(--paper-card-background-color)" 33 | table-row-alternative-background-color: "var(--sidebar-text_-_background)" 34 | -------------------------------------------------------------------------------- /themes/starwars_day.yaml: -------------------------------------------------------------------------------- 1 | "Starwars Day": 2 | primary-color: "#FF0000" # Primary (most of the UI) 3 | primary-background-color: "#101010" # Primary background colour (dialogs, e.t.c) 4 | secondary-background-color: "#202020" # Secondary background colour (main UI background) 5 | paper-card-background-color: "#000000" # Card background colour 6 | paper-item-icon-color: "#FF3030" # Icon colour 7 | primary-text-color: "#BBBBBB" # Primary text colour 8 | secondary-text-color: "#777777)" # Secondary text colour 9 | disabled-text-color: "#444444" # Disabled text colour 10 | divider-color: "#777777" # Divider colour 11 | paper-card-header-color: "#FFFFFF" # Card header text colour 12 | 13 | # Nav Menu # 14 | paper-listbox-background-color: "#FFFFFF" # Listbox background colour 15 | paper-listbox-color: "#000000" # Listbox text colour 16 | paper-grey-200: "#404040" # Listbox selected item background colour 17 | 18 | # Switches # 19 | paper-toggle-button-checked-ink-color: "#AAAAAA" 20 | paper-toggle-button-checked-button-color: "FF0000" 21 | paper-toggle-button-checked-bar-color: "#FFFFFF" 22 | 23 | # Sliders # 24 | paper-slider-knob-color: "#FFFFFF" 25 | paper-slider-knob-start-color: "#CCCCCC" 26 | paper-slider-pin-color: "#FF0000" 27 | paper-slider-active-color: "#C00000" 28 | paper-slider-secondary-color: "#AAAAAA" 29 | 30 | # Tables # 31 | table-row-background-color: "#666666" 32 | table-row-alternative-background-color: "#444444" 33 | -------------------------------------------------------------------------------- /themes/thanksgiving_day.yaml: -------------------------------------------------------------------------------- 1 | "Thanksgiving Day": 2 | primary-color: "#6B3A1F" 3 | disabled-text-color: "#A58456" 4 | divider-color: "#EDE4D8" #"rgba(255, 255, 255, 0.15)" 5 | dark-primary-color: "#592A13" 6 | 7 | primary-background-color: "#C4AD92" 8 | primary-text-color: "#FFFFFF" 9 | secondary-background-color: "#675335" 10 | secondary-text-color: "#6B3A1F" 11 | text-primary-color: "#693A23" 12 | 13 | label-badge-background-color: "var(--primary-background-color)" 14 | label-badge-text-color: "var(--text-primary-color)" 15 | 16 | paper-card-background-color: "#A58456" 17 | paper-grey-50: "#6B3A1F" 18 | paper-grey-200: "#DDD4C8" 19 | paper-item-icon-color: "#6B3A1F" 20 | paper-listbox-background-color: "#A58456" 21 | paper-listbox-color: "#6B3A1F" 22 | 23 | paper-card-header-color: "#EDE4D8" 24 | 25 | paper-item-icon-active-color: "#F7C02A" 26 | paper-item-icon_-_color: "#FF00FF" 27 | 28 | paper-slider-active-color: "#A56521" 29 | paper-slider-knob-color: "#A56521" 30 | paper-slider-knob-start-color: "#6B3A1F" 31 | paper-slider-pin-color: "#FF00FF" 32 | paper-slider-secondary-color: "#A06020" 33 | 34 | paper-toggle-button-checked-ink-color: "#A56521" 35 | paper-toggle-button-checked-button-color: "#A56521" 36 | paper-toggle-button-checked-bar-color: "#EDE4D8" 37 | paper-toggle-button-unchecked-bar-color: "#EDE4D8" 38 | 39 | table-row-background-color: "#A58456" 40 | table-row-alternative-background-color: "#C67A2E" 41 | 42 | google-red: "#A56521" 43 | google-green: "#A58456" 44 | google-blue: "#268BD2" 45 | google-yellow: "#6B3A1F" 46 | accent-color: "#EDE4D8" 47 | paper-green: "#A58456" 48 | paper-blue: "#268BD2" 49 | paper-orange: "#EDE4D8" -------------------------------------------------------------------------------- /themes/victoria_day.yaml: -------------------------------------------------------------------------------- 1 | "Victoria Day": 2 | # MyVariables 3 | base-hue: '360' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '100%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: 'hsl(var(--huesat) 20%)' 9 | # Backgrounds 10 | primary-background-color: 'var(--primary-color)' 11 | secondary-background-color: 'hsl(var(--huesat) 16%)' 12 | paper-listbox-background-color: 'var(--primary-color)' 13 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 14 | paper-dialog-background-color: 'var(--paper-card-background-color)' 15 | table-row-background-color: 'hsl(var(--huesat) 12%)' 16 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 17 | # Devider 18 | divider-color: 'hsla(0, 0%, 0%, 0)' 19 | dark-divider-opacity: '0' 20 | light-divider-opacity: '0' 21 | # Text colors 22 | primary-text-color: 'hsl(var(--huesat) 60%)' 23 | text-primary-color: 'hsl(var(--huesat) 60%)' 24 | secondary-text-color: 'hsl(var(--huesat) 60%)' 25 | disabled-text-color: 'hsl(var(--huesat) 70%)' 26 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 27 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 28 | paper-card-header-color: 'hsl(var(--base-hue), 90%, 50%)' 29 | # Text Adjustments 30 | paper-font-headline_-_letter-spacing: '-0.5px' 31 | paper-font-headline_-_font-weight: '500' 32 | paper-font-body1_-_font-weight: '500' 33 | # Nav Menu 34 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 35 | paper-grey-50: 'hsl(var(--huesat) 50%)' 36 | paper-grey-200: 'hsla(var(--huesat) 26%)' 37 | # Paper card 38 | paper-item-icon-color: 'hsl(var(--huesat) 30%)' 39 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 40 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 41 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 42 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 43 | # Labels 44 | label-badge-red: 'hsla(0, 0%, 0%, 0)' 45 | label-badge-border-color: 'var(--label-badge-red)' 46 | label-badge-background-color: 'var(--paper-card-background-color)' 47 | label-badge-text-color: 'var(--primary-text-color)' 48 | # Shadows 49 | shadow-elevation-2dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 18%)' 50 | shadow-elevation-16dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 28%)' 51 | # Switches 52 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 53 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 54 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 55 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 56 | # Sliders 57 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 58 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 59 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 60 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 62 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 63 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 64 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 65 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' 66 | -------------------------------------------------------------------------------- /www/doorbell_tones/R2D2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/R2D2.mp3 -------------------------------------------------------------------------------- /www/doorbell_tones/ding_dong.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/ding_dong.mp3 -------------------------------------------------------------------------------- /www/doorbell_tones/door_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/door_1.mp3 -------------------------------------------------------------------------------- /www/doorbell_tones/door_ff7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/door_ff7.mp3 -------------------------------------------------------------------------------- /www/doorbell_tones/get-to-the-choppa.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/get-to-the-choppa.mp3 -------------------------------------------------------------------------------- /www/doorbell_tones/halloween.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/halloween.wav -------------------------------------------------------------------------------- /www/doorbell_tones/xmas.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/doorbell_tones/xmas.mp3 -------------------------------------------------------------------------------- /www/holiday.json: -------------------------------------------------------------------------------- 1 | { 2 | "MAJOR_US": { 3 | "static": { 4 | "1/1": "New Year's Day", 5 | "2/2": "Groundhog Day", 6 | "2/14": "Valentine's Day", 7 | "3/17": "St. Patrick's Day", 8 | "4/22": "Earth Day", 9 | "5/4": "Starwars Day", 10 | "7/4": "Independence Day", 11 | "9/11": "Patriot Day", 12 | "10/31": "Halloween", 13 | "11/11": "Veterans' Day", 14 | "12/7": "Pearl Harbor Day", 15 | "12/25": "Christmas Day", 16 | "12/31": "New Year's Eve" 17 | }, 18 | "dynamic": { 19 | "1/19/2015": "MLK Day", 20 | "1/18/2016": "MLK Day", 21 | "1/16/2017": "MLK Day", 22 | "1/15/2018": "MLK Day", 23 | "1/21/2019": "MLK Day", 24 | "1/20/2020": "MLK Day", 25 | "2/16/2015": "Presidents' Day", 26 | "2/15/2016": "Presidents' Day", 27 | "2/20/2017": "Presidents' Day", 28 | "2/19/2018": "Presidents' Day", 29 | "2/18/2019": "Presidents' Day", 30 | "2/17/2020": "Presidents' Day", 31 | "5/10/2015": "Mother's Day", 32 | "5/8/2016": "Mother's Day", 33 | "5/14/2017": "Mother's Day", 34 | "5/13/2018": "Mother's Day", 35 | "5/12/2019": "Mother's Day", 36 | "5/10/2020": "Mother's Day", 37 | "5/25/2015": "Memorial Day", 38 | "5/30/2016": "Memorial Day", 39 | "5/29/2017": "Memorial Day", 40 | "5/28/2018": "Memorial Day", 41 | "5/27/2019": "Memorial Day", 42 | "5/25/2020": "Memorial Day", 43 | "6/21/2015": "Father's Day", 44 | "6/19/2016": "Father's Day", 45 | "6/18/2017": "Father's Day", 46 | "6/17/2018": "Father's Day", 47 | "6/16/2019": "Father's Day", 48 | "6/21/2020": "Father's Day", 49 | "9/7/2015": "Labor Day", 50 | "9/5/2016": "Labor Day", 51 | "9/4/2017": "Labor Day", 52 | "9/3/2018": "Labor Day", 53 | "9/2/2019": "Labor Day", 54 | "9/7/2020": "Labor Day", 55 | "10/12/2015": "Columbus Day", 56 | "10/10/2016": "Columbus Day", 57 | "10/9/2017": "Columbus Day", 58 | "10/8/2018": "Columbus Day", 59 | "10/14/2019": "Columbus Day", 60 | "10/12/2020": "Columbus Day", 61 | "11/26/2015": "Thanksgiving Day", 62 | "11/24/2016": "Thanksgiving Day", 63 | "11/23/2017": "Thanksgiving Day", 64 | "11/22/2018": "Thanksgiving Day", 65 | "11/28/2019": "Thanksgiving Day", 66 | "11/26/2020": "Thanksgiving Day" 67 | } 68 | }, 69 | "MAJOR_CA": { 70 | "static": { 71 | "1/1": "New Year's Day", 72 | "2/2": "Groundhog Day", 73 | "2/14": "Valentine's Day", 74 | "3/17": "St. Patrick's Day", 75 | "5/4": "Starwars Day", 76 | "4/22": "Earth Day", 77 | "7/1": "Canada Day", 78 | "10/31": "Halloween", 79 | "11/11": "Remembrance Day", 80 | "12/24": "Christmas Eve", 81 | "12/25": "Christmas Day", 82 | "12/26": "Boxing Day", 83 | "12/31": "New Year's Eve" 84 | }, 85 | "dynamic": { 86 | "4/3/2015": "Good Friday", 87 | "3/25/2016": "Good Friday", 88 | "4/14/2017": "Good Friday", 89 | "3/30/2018": "Good Friday", 90 | "4/19/2019": "Good Friday", 91 | "4/10/2020": "Good Friday", 92 | "4/5/2015": "Easter Sunday", 93 | "3/27/2016": "Easter Sunday", 94 | "4/16/2017": "Easter Sunday", 95 | "4/1/2018": "Easter Sunday", 96 | "4/21/2019": "Easter Sunday", 97 | "4/12/2020": "Easter Sunday", 98 | "5/10/2015": "Mother's Day", 99 | "5/8/2016": "Mother's Day", 100 | "5/14/2017": "Mother's Day", 101 | "5/13/2018": "Mother's Day", 102 | "5/12/2019": "Mother's Day", 103 | "5/10/2020": "Mother's Day", 104 | "5/18/2015": "Victoria Day", 105 | "5/23/2016": "Victoria Day", 106 | "5/22/2017": "Victoria Day", 107 | "5/21/2018": "Victoria Day", 108 | "5/20/2019": "Victoria Day", 109 | "5/18/2020": "Victoria Day", 110 | "6/21/2015": "Father's Day", 111 | "6/19/2016": "Father's Day", 112 | "6/18/2017": "Father's Day", 113 | "6/17/2018": "Father's Day", 114 | "6/16/2019": "Father's Day", 115 | "6/21/2020": "Father's Day", 116 | "9/7/2015": "Labour Day", 117 | "9/5/2016": "Labour Day", 118 | "9/4/2017": "Labour Day", 119 | "9/3/2018": "Labour Day", 120 | "9/2/2019": "Labour Day", 121 | "9/7/2020": "Labour Day", 122 | "10/12/2015": "Thanksgiving Day", 123 | "10/10/2016": "Thanksgiving Day", 124 | "10/9/2017": "Thanksgiving Day", 125 | "10/8/2018": "Thanksgiving Day", 126 | "10/14/2019": "Thanksgiving Day", 127 | "10/12/2020": "Thanksgiving Day" 128 | } 129 | }, 130 | "CHRISTIAN": { 131 | "static": { 132 | "12/24": "Christmas Eve", 133 | "12/25": "Christmas Day" 134 | }, 135 | "dynamic": { 136 | "2/18/2015": "Ash Wednesday", 137 | "2/10/2016": "Ash Wednesday", 138 | "3/1/2017": "Ash Wednesday", 139 | "2/14/2018": "Ash Wednesday", 140 | "3/6/2019": "Ash Wednesday", 141 | "2/26/2020": "Ash Wednesday", 142 | "3/29/2015": "Palm Sunday", 143 | "3/20/2016": "Palm Sunday", 144 | "4/9/2017": "Palm Sunday", 145 | "3/25/2018": "Palm Sunday", 146 | "4/14/2019": "Palm Sunday", 147 | "4/5/2020": "Palm Sunday", 148 | "4/3/2015": "Good Friday", 149 | "3/25/2016": "Good Friday", 150 | "4/14/2017": "Good Friday", 151 | "3/30/2018": "Good Friday", 152 | "4/19/2019": "Good Friday", 153 | "4/10/2020": "Good Friday", 154 | "4/5/2015": "Easter Sunday", 155 | "3/27/2016": "Easter Sunday", 156 | "4/16/2017": "Easter Sunday", 157 | "4/1/2018": "Easter Sunday", 158 | "4/21/2019": "Easter Sunday", 159 | "4/12/2020": "Easter Sunday" 160 | } 161 | }, 162 | "JEWISH": { 163 | "static": {}, 164 | "dynamic": { 165 | "4/3/2015": "Passover (Begin)", 166 | "4/11/2015": "Passover (End)", 167 | "4/22/2016": "Passover (Begin)", 168 | "4/30/2016": "Passover (End)", 169 | "4/10/2017": "Passover (Begin)", 170 | "4/18/2017": "Passover (End)", 171 | "3/30/2018": "Passover (Begin)", 172 | "4/7/2018": "Passover (End)", 173 | "4/19/2019": "Passover (Begin)", 174 | "4/27/2019": "Passover (End)", 175 | "4/8/2020": "Passover (Begin)", 176 | "4/16/2020": "Passover (End)", 177 | "9/13/2015": "Rosh Hashanah (Begin)", 178 | "9/15/2015": "Rosh Hashanah (End)", 179 | "10/2/2016": "Rosh Hashanah (Begin)", 180 | "10/4/2016": "Rosh Hashanah (End)", 181 | "9/20/2017": "Rosh Hashanah (Begin)", 182 | "9/22/2017": "Rosh Hashanah (End)", 183 | "9/9/2018": "Rosh Hashanah (Begin)", 184 | "9/11/2018": "Rosh Hashanah (End)", 185 | "9/29/2019": "Rosh Hashanah (Begin)", 186 | "10/1/2019": "Rosh Hashanah (End)", 187 | "9/18/2020": "Rosh Hashanah (Begin)", 188 | "9/20/2020": "Rosh Hashanah (End)", 189 | "9/22/2015": "Yom Kippur (Begin)", 190 | "9/23/2015": "Yom Kippur (End)", 191 | "10/11/2016": "Yom Kippur (Begin)", 192 | "10/12/2016": "Yom Kippur (End)", 193 | "9/29/2017": "Yom Kippur (Begin)", 194 | "9/30/2017": "Yom Kippur (End)", 195 | "9/18/2018": "Yom Kippur (Begin)", 196 | "9/19/2018": "Yom Kippur (End)", 197 | "10/8/2019": "Yom Kippur (Begin)", 198 | "10/9/2019": "Yom Kippur (End)", 199 | "9/27/2020": "Yom Kippur (Begin)", 200 | "9/28/2020": "Yom Kippur (End)", 201 | "9/27/2015": "Sukkot (Begin)", 202 | "10/4/2015": "Sukkot (End)", 203 | "10/16/2016": "Sukkot (Begin)", 204 | "10/23/2016": "Sukkot (End)", 205 | "10/4/2017": "Sukkot (Begin)", 206 | "10/11/2017": "Sukkot (End)", 207 | "9/23/2018": "Sukkot (Begin)", 208 | "9/30/2018": "Sukkot (End)", 209 | "10/13/2019": "Sukkot (Begin)", 210 | "10/20/2019": "Sukkot (End)", 211 | "10/2/2020": "Sukkot (Begin)", 212 | "10/9/2020": "Sukkot (End)", 213 | "12/6/2015": "Hanukkah (Begin)", 214 | "12/14/2015": "Hanukkah (End)", 215 | "12/24/2016": "Hanukkah (Begin)", 216 | "1/1/2017": "Hanukkah (End)", 217 | "12/12/2017": "Hanukkah (Begin)", 218 | "12/20/2017": "Hanukkah (End)", 219 | "12/2/2018": "Hanukkah (Begin)", 220 | "12/10/2018": "Hanukkah (End)", 221 | "12/22/2019": "Hanukkah (Begin)", 222 | "12/30/2019": "Hanukkah (End)", 223 | "12/10/2020": "Hanukkah (Begin)", 224 | "12/18/2020": "Hanukkah (End)" 225 | } 226 | } 227 | } -------------------------------------------------------------------------------- /www/linux_distro: -------------------------------------------------------------------------------- 1 | Ubuntu 18.10 2 | -------------------------------------------------------------------------------- /www/lovelace/animated4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/animated4.gif -------------------------------------------------------------------------------- /www/lovelace/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/bg.jpg -------------------------------------------------------------------------------- /www/lovelace/boy_away.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/boy_away.png -------------------------------------------------------------------------------- /www/lovelace/boy_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/boy_home.png -------------------------------------------------------------------------------- /www/lovelace/girl_away.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/girl_away.png -------------------------------------------------------------------------------- /www/lovelace/girl_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/girl_home.png -------------------------------------------------------------------------------- /www/lovelace/header2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/header2.png -------------------------------------------------------------------------------- /www/lovelace/kodi_idle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/kodi_idle.jpg -------------------------------------------------------------------------------- /www/lovelace/laundry_off.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/laundry_off.jpg -------------------------------------------------------------------------------- /www/lovelace/laundry_on.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/laundry_on.gif -------------------------------------------------------------------------------- /www/lovelace/pc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/pc.jpg -------------------------------------------------------------------------------- /www/lovelace/pc_off.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/lovelace/pc_off.jpg -------------------------------------------------------------------------------- /www/misc_sound/dog-barking-2-bullmastiff.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Norien/Home-Assistant-Config/f2affdaa0d0d5a056c8c79a62b0196fa343a7836/www/misc_sound/dog-barking-2-bullmastiff.mp3 -------------------------------------------------------------------------------- /www/ssl.txt: -------------------------------------------------------------------------------- 1 | 83 2 | -------------------------------------------------------------------------------- /www/usage.csv: -------------------------------------------------------------------------------- 1 | 808.05,140.59,,948.64,0,0,18 2 | -------------------------------------------------------------------------------- /www/waste_pickup_container.txt: -------------------------------------------------------------------------------- 1 | 1567987200 2 | -------------------------------------------------------------------------------- /www/waste_pickup_garbage_recycle.txt: -------------------------------------------------------------------------------- 1 | 1564704000 2 | -------------------------------------------------------------------------------- /www/waste_pickup_yard_waste.txt: -------------------------------------------------------------------------------- 1 | 1566777600 2 | --------------------------------------------------------------------------------