summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@smartpi.suren.me>2023-01-10 07:45:02 +0400
committerroot <root@smartpi.suren.me>2023-01-10 07:45:02 +0400
commit2c0c331eb7b7a03152309bbbd4e0fee157e8d86c (patch)
tree03391160212b39c4597ecc26010f2ba1235a65e3
downloadhass-2c0c331eb7b7a03152309bbbd4e0fee157e8d86c.tar.gz
hass-2c0c331eb7b7a03152309bbbd4e0fee157e8d86c.tar.bz2
hass-2c0c331eb7b7a03152309bbbd4e0fee157e8d86c.tar.xz
hass-2c0c331eb7b7a03152309bbbd4e0fee157e8d86c.zip
Initial configuration
-rw-r--r--.gitignore35
-rw-r--r--.storage/core.area_registry49
-rw-r--r--.storage/core.config16
-rw-r--r--.storage/energy140
-rw-r--r--.storage/input_boolean46
-rw-r--r--.storage/input_button21
-rw-r--r--.storage/input_datetime8
-rw-r--r--.storage/input_number8
-rw-r--r--.storage/lovelace.lovelace_climate164
-rw-r--r--.storage/lovelace.lovelace_control366
-rw-r--r--.storage/lovelace.lovelace_power266
-rw-r--r--.storage/lovelace.lovelace_research185
-rw-r--r--.storage/lovelace.lovelace_status256
-rw-r--r--.storage/lovelace.lovelace_test402
-rw-r--r--.storage/lovelace_dashboards63
-rw-r--r--.storage/lovelace_resources19
-rw-r--r--.storage/person17
-rw-r--r--.storage/tag15
-rw-r--r--.storage/zone18
-rw-r--r--automations.yaml1057
-rw-r--r--blueprints/automation/camera/intrusion.yaml91
-rw-r--r--blueprints/automation/homeassistant/motion_light.yaml54
-rw-r--r--blueprints/automation/homeassistant/notify_leaving_zone.yaml46
-rw-r--r--blueprints/automation/lights/knob-bulb-control.yaml271
-rw-r--r--blueprints/automation/lights/knob-multi-bulb-control.yaml191
-rw-r--r--blueprints/automation/lights/light_button.yaml171
-rw-r--r--blueprints/automation/lights/light_switch.yaml115
-rw-r--r--blueprints/automation/lights/light_switch_combo.yaml92
-rw-r--r--blueprints/automation/lights/light_sync.yaml55
-rw-r--r--blueprints/automation/motion/motion_switch.yaml163
-rw-r--r--blueprints/script/camera/security_camera.yaml142
-rw-r--r--blueprints/script/camera/send_photo.yaml37
-rw-r--r--blueprints/script/devices/aircon.yaml135
-rw-r--r--blueprints/script/devices/kodi-alarm.yaml29
-rw-r--r--blueprints/script/homeassistant/confirmable_notification.yaml84
-rw-r--r--blueprints/script/lights/turn_off_lights.yaml32
-rw-r--r--configuration.yaml89
-rw-r--r--custom/binary_sensor.yaml1
-rw-r--r--custom/group.yaml10
-rw-r--r--custom/input_number.yaml37
-rw-r--r--custom/scripts/sleep-and-wake.yaml129
-rw-r--r--custom/template.yaml54
-rw-r--r--python_scripts/set_state.py27
-rw-r--r--scenes.yaml9
-rw-r--r--scripts.yaml97
-rw-r--r--ui-lovelace.yaml9
46 files changed, 5321 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ee8a9f4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,35 @@
+.HA_VERSION
+secrets.yaml
+keys
+backups
+custom_components
+*\.log
+*\.log\.*
+*\.db
+*\.db-*
+themes
+www
+
+.storage/auth
+.storage/auth_module.totp
+.storage/auth_provider.homeassistant
+.storage/core.analytics
+.storage/core.entity_registry
+.storage/core.restore_state
+.storage/core.uuid
+.storage/frontend.user_data_31a296cc30a243089f121cef93b46cc0
+.storage/frontend.user_data_fc5071ef5c3c441ea15903aa679e796f
+.storage/hacs.critical
+.storage/hacs.hacs
+.storage/hacs.repositories
+.storage/homekit_controller-entity-map
+.storage/http
+.storage/http.auth
+.storage/mobile_app
+.storage/onboarding
+.storage/trace.saved_traces
+
+# This is part of config (but may contain security entities)
+.storage/core.config_entries
+.storage/core.device_registry
+.storage/sonoff/
diff --git a/.storage/core.area_registry b/.storage/core.area_registry
new file mode 100644
index 0000000..4225896
--- /dev/null
+++ b/.storage/core.area_registry
@@ -0,0 +1,49 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "core.area_registry",
+ "data": {
+ "areas": [
+ {
+ "name": "Living Room",
+ "id": "living_room",
+ "picture": null
+ },
+ {
+ "name": "Kitchen",
+ "id": "kitchen",
+ "picture": null
+ },
+ {
+ "name": "Bedroom",
+ "id": "bedroom",
+ "picture": null
+ },
+ {
+ "name": "Hall",
+ "id": "hall",
+ "picture": null
+ },
+ {
+ "name": "Virtual",
+ "id": "virtual",
+ "picture": null
+ },
+ {
+ "name": "Bathroom",
+ "id": "bathroom",
+ "picture": null
+ },
+ {
+ "name": "Portable",
+ "id": "portable",
+ "picture": null
+ },
+ {
+ "name": "Guestroom",
+ "id": "guestroom",
+ "picture": null
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/core.config b/.storage/core.config
new file mode 100644
index 0000000..40052c9
--- /dev/null
+++ b/.storage/core.config
@@ -0,0 +1,16 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "core.config",
+ "data": {
+ "latitude": 40.20199333859466,
+ "longitude": 44.48050969769397,
+ "elevation": 1050,
+ "unit_system": "metric",
+ "location_name": "Halabyan24",
+ "time_zone": "Asia/Yerevan",
+ "external_url": null,
+ "internal_url": null,
+ "currency": "EUR"
+ }
+} \ No newline at end of file
diff --git a/.storage/energy b/.storage/energy
new file mode 100644
index 0000000..5f2fb7e
--- /dev/null
+++ b/.storage/energy
@@ -0,0 +1,140 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "energy",
+ "data": {
+ "energy_sources": [
+ {
+ "type": "grid",
+ "flow_from": [
+ {
+ "stat_energy_from": "sensor.living_office_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.living_office_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.kitchen_oven_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.kitchen_oven_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.kitchen_wash_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.kitchen_wash_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.kitchen_teatable_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.kitchen_teatable_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.bedroom_aircon_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.bedroom_aircon_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.bedroom_roof_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.bedroom_roof_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.hall_camera_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.hall_camera_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.kitchen_ledlights_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.kitchen_ledlights_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.living_tablelamp_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.living_tablelamp_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.bedroom_tablelamp_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.bedroom_tablelamp_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ },
+ {
+ "stat_energy_from": "sensor.bedroom_bedsidelampsocket_energy",
+ "stat_cost": null,
+ "entity_energy_from": "sensor.bedroom_bedsidelampsocket_energy",
+ "entity_energy_price": null,
+ "number_energy_price": null
+ }
+ ],
+ "flow_to": [],
+ "cost_adjustment_day": 0.0
+ }
+ ],
+ "device_consumption": [
+ {
+ "stat_consumption": "sensor.kitchen_oven_energy"
+ },
+ {
+ "stat_consumption": "sensor.kitchen_wash_energy"
+ },
+ {
+ "stat_consumption": "sensor.kitchen_teatable_energy"
+ },
+ {
+ "stat_consumption": "sensor.bedroom_aircon_energy"
+ },
+ {
+ "stat_consumption": "sensor.office_aircon_energy"
+ },
+ {
+ "stat_consumption": "sensor.living_office_energy"
+ },
+ {
+ "stat_consumption": "sensor.office_shelfbottom_energy"
+ },
+ {
+ "stat_consumption": "sensor.office_shelftop_energy"
+ },
+ {
+ "stat_consumption": "sensor.office_table_energy"
+ },
+ {
+ "stat_consumption": "sensor.bedroom_roof_energy"
+ },
+ {
+ "stat_consumption": "sensor.hall_camera_energy"
+ },
+ {
+ "stat_consumption": "sensor.kitchen_ledlights_energy"
+ },
+ {
+ "stat_consumption": "sensor.bedroom_bedsidelampsocket_energy"
+ },
+ {
+ "stat_consumption": "sensor.bedroom_tablelamp_energy"
+ },
+ {
+ "stat_consumption": "sensor.living_tablelamp_energy"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/input_boolean b/.storage/input_boolean
new file mode 100644
index 0000000..ea55fac
--- /dev/null
+++ b/.storage/input_boolean
@@ -0,0 +1,46 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "input_boolean",
+ "data": {
+ "items": [
+ {
+ "name": "Mode Away",
+ "id": "away_mode"
+ },
+ {
+ "name": "State Office Button Pressed",
+ "icon": "mdi:state-machine",
+ "id": "office_button_pressed"
+ },
+ {
+ "name": "Mode Guests",
+ "id": "mode_guests"
+ },
+ {
+ "name": "Mode Alone",
+ "id": "mode_alone"
+ },
+ {
+ "name": "Mode Production",
+ "id": "mode_production"
+ },
+ {
+ "name": "State Office Knob Pressed",
+ "id": "state_office_knob_pressed"
+ },
+ {
+ "name": "Mode House Sleep",
+ "id": "mode_house_sleep"
+ },
+ {
+ "name": "Mode House Hibernate",
+ "id": "mode_house_hibernate"
+ },
+ {
+ "name": "Mode Bright",
+ "id": "mode_bright"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/input_button b/.storage/input_button
new file mode 100644
index 0000000..f93f6f1
--- /dev/null
+++ b/.storage/input_button
@@ -0,0 +1,21 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "input_button",
+ "data": {
+ "items": [
+ {
+ "name": "Button Confirm",
+ "id": "button_confirm"
+ },
+ {
+ "name": "Button Ring or Warn",
+ "id": "button_ring_or_warn"
+ },
+ {
+ "name": "Button Alert",
+ "id": "button_alert"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/input_datetime b/.storage/input_datetime
new file mode 100644
index 0000000..3a5d0f2
--- /dev/null
+++ b/.storage/input_datetime
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "input_datetime",
+ "data": {
+ "items": []
+ }
+} \ No newline at end of file
diff --git a/.storage/input_number b/.storage/input_number
new file mode 100644
index 0000000..b5a1496
--- /dev/null
+++ b/.storage/input_number
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "input_number",
+ "data": {
+ "items": []
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_climate b/.storage/lovelace.lovelace_climate
new file mode 100644
index 0000000..b17f2fd
--- /dev/null
+++ b/.storage/lovelace.lovelace_climate
@@ -0,0 +1,164 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_climate",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "title": "Home",
+ "cards": [
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "title": "Office Climate",
+ "entities": [
+ {
+ "entity": "sensor.ble_temperature_a4c138bfa169"
+ },
+ {
+ "entity": "sensor.ble_humidity_a4c138bfa169"
+ }
+ ]
+ },
+ {
+ "type": "entities",
+ "title": "Office Climate Control",
+ "entities": [
+ {
+ "entity": "switch.smart_power_strip_pro_socket_2"
+ },
+ {
+ "entity": "scene.lg_aircon_cool_18"
+ },
+ {
+ "entity": "scene.lg_aircon_warm_25"
+ },
+ {
+ "entity": "scene.lg_aircon_power_off"
+ }
+ ]
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.ble_temperature_a4c138bfa169"
+ },
+ {
+ "entity": "sensor.ble_humidity_a4c138bfa169"
+ }
+ ],
+ "title": "Office Progress",
+ "hours_to_show": 2
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "title": "Bedroom Climate",
+ "entities": [
+ {
+ "entity": "sensor.bedroom_temp_temperature"
+ },
+ {
+ "entity": "sensor.bedroom_temp_humidity"
+ },
+ {
+ "entity": "sensor.bedroom_temp_pressure"
+ }
+ ]
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.bedroom_aircon"
+ },
+ {
+ "entity": "scene.hyundai_aircon_cool_18"
+ },
+ {
+ "entity": "scene.hyundai_aircon_warm_28"
+ },
+ {
+ "entity": "scene.hyundai_aircon_off"
+ }
+ ],
+ "title": "Bedroom Climate Control"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.bedroom_temp_temperature"
+ },
+ {
+ "entity": "sensor.bedroom_temp_humidity"
+ },
+ {
+ "entity": "sensor.bedroom_temp_pressure"
+ }
+ ],
+ "title": "Bedroom Progress",
+ "hours_to_show": 2
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "sensor.hall_smoke_temperature"
+ }
+ ],
+ "title": "Hall Climate"
+ },
+ {
+ "show_current": true,
+ "show_forecast": true,
+ "type": "weather-forecast",
+ "entity": "weather.halabyan24",
+ "name": "Yerevan"
+ },
+ {
+ "type": "history-graph",
+ "title": "Trends",
+ "hours_to_show": 72,
+ "entities": [
+ {
+ "entity": "sensor.bedroom_temp_temperature"
+ },
+ {
+ "entity": "sensor.bedroom_temp_humidity"
+ },
+ {
+ "entity": "sensor.bedroom_temp_pressure"
+ },
+ {
+ "entity": "sensor.ble_temperature_a4c138bfa169"
+ },
+ {
+ "entity": "sensor.ble_humidity_a4c138bfa169"
+ },
+ {
+ "entity": "sensor.hall_smoke_temperature"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_control b/.storage/lovelace.lovelace_control
new file mode 100644
index 0000000..6e87b1c
--- /dev/null
+++ b/.storage/lovelace.lovelace_control
@@ -0,0 +1,366 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_control",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "title": "Control",
+ "cards": [
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "confirm": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "input_boolean.mode_away",
+ "name": "Away"
+ },
+ {
+ "entity": "input_boolean.mode_production",
+ "name": "Loud"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "entity": "input_boolean.mode_house_sleep",
+ "name": "House Sleep"
+ },
+ {
+ "entity": "input_boolean.mode_house_hibernate",
+ "name": "House Hibernate"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "entity": "input_boolean.mode_bright",
+ "name": "Bright"
+ },
+ {
+ "entity": "input_boolean.mode_alone",
+ "name": "Alone"
+ },
+ {
+ "entity": "input_boolean.mode_guests",
+ "name": "Guests"
+ }
+ ],
+ "title": "Modes"
+ }
+ },
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "block": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.bedroom_roof",
+ "name": "Roof"
+ },
+ {
+ "entity": "switch.living_office",
+ "name": "Office"
+ },
+ {
+ "entity": "switch.smart_power_strip_pro_usb_1",
+ "name": "SmartPI"
+ },
+ {
+ "entity": "switch.hall_camera",
+ "name": "Camera"
+ }
+ ],
+ "title": "Infrastructure"
+ }
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.entrance_lights_left",
+ "name": "Toilet"
+ },
+ {
+ "entity": "switch.entrance_lights_center",
+ "name": "Entrance"
+ },
+ {
+ "entity": "switch.hall_lights_left",
+ "name": "Hall"
+ },
+ {
+ "entity": "switch.bathroom_lights_left",
+ "name": "Bathroom"
+ },
+ {
+ "entity": "switch.bathroom_lights_center",
+ "name": "Sauna"
+ },
+ {
+ "entity": "light.aqara_hub_m1s_426c",
+ "name": "M1S"
+ }
+ ],
+ "title": "Lights"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "square": true,
+ "columns": 2,
+ "type": "grid",
+ "cards": [
+ {
+ "type": "light",
+ "entity": "light.yeelight_color_0x7caaf86",
+ "name": "Office Bulb"
+ },
+ {
+ "type": "light",
+ "entity": "light.smart_light",
+ "name": "Bedroom Bulb"
+ }
+ ]
+ },
+ {
+ "type": "media-control",
+ "entity": "media_player.smartpi"
+ },
+ {
+ "square": true,
+ "columns": 2,
+ "type": "grid",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.living_lights_left",
+ "name": "Lustre-1"
+ },
+ {
+ "entity": "switch.living_lights_center",
+ "name": "Lustre-2"
+ },
+ {
+ "entity": "light.yeelight_color_0x7caaf86",
+ "name": "Bulb"
+ },
+ {
+ "entity": "switch.living_tablelamp",
+ "name": "DeskLamp"
+ }
+ ],
+ "title": "Living Lights"
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.smart_power_strip_pro_socket_2",
+ "name": "AirCon"
+ },
+ {
+ "entity": "switch.office_aircon",
+ "name": "Power"
+ }
+ ],
+ "title": "Living Plugs"
+ },
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "confirm": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.smart_power_strip_pro_socket_1",
+ "name": "Table"
+ },
+ {
+ "entity": "switch.office_table",
+ "name": "Power"
+ },
+ {
+ "entity": "switch.smart_power_strip_pro_socket_4",
+ "name": "Top"
+ },
+ {
+ "entity": "switch.office_shelftop",
+ "name": "Power"
+ },
+ {
+ "entity": "switch.smart_power_strip_pro_socket_3",
+ "name": "Bottom"
+ },
+ {
+ "entity": "switch.office_shelfbottom",
+ "name": "Power"
+ }
+ ],
+ "title": "Office Plugs"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "square": true,
+ "columns": 2,
+ "type": "grid",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.bedroom_lights_left",
+ "name": "Lustre-1"
+ },
+ {
+ "entity": "switch.bedroom_lights_center",
+ "name": "Lustre-2"
+ },
+ {
+ "entity": "light.smart_light",
+ "name": "Bulb"
+ },
+ {
+ "entity": "switch.bedroom_tablelamp",
+ "name": "DeskLamp"
+ },
+ {
+ "entity": "binary_sensor.bedroom_bedsidelamp",
+ "name": "BedLED"
+ }
+ ],
+ "title": "Bedroom Lights"
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.bedroom_aircon",
+ "name": "AirCon"
+ },
+ {
+ "entity": "switch.bedroom_bedsidelampsocket",
+ "name": "BedLamp"
+ }
+ ],
+ "title": "Bedroom Plugs"
+ }
+ ]
+ },
+ {
+ "square": true,
+ "columns": 2,
+ "type": "grid",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.kitchen_lights_left",
+ "name": "Lustre"
+ },
+ {
+ "entity": "switch.kitchen_ledlights",
+ "name": "LED"
+ }
+ ],
+ "title": "Kitchen Lights"
+ },
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "confirm": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.kitchen_oven",
+ "name": "Oven"
+ },
+ {
+ "entity": "switch.kitchen_wash",
+ "title": "Wash"
+ },
+ {
+ "entity": "switch.kitchen_teatable",
+ "title": "Table"
+ }
+ ],
+ "title": "Kitchen Plugs"
+ }
+ }
+ ]
+ },
+ {
+ "square": true,
+ "columns": 2,
+ "type": "grid",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "switch.guestroom_lights_left",
+ "name": "Lustre-1"
+ },
+ {
+ "entity": "switch.guestroom_lights_right",
+ "name": "Lustre-2"
+ }
+ ],
+ "title": "Guest Lights"
+ },
+ {
+ "type": "entities",
+ "entities": [],
+ "title": "Guest Plugs"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_power b/.storage/lovelace.lovelace_power
new file mode 100644
index 0000000..b50b8ab
--- /dev/null
+++ b/.storage/lovelace.lovelace_power
@@ -0,0 +1,266 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_power",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "theme": "Backend-selected",
+ "title": "Home",
+ "type": "custom:grid-layout",
+ "layout": {
+ "max_cols": 4,
+ "grid-template-columns": "25% 25% 25% 25%",
+ "grid-template-rows": "auto",
+ "mediaquery": {
+ "(max-width: 600px)": {
+ "grid-template-columns": "100%"
+ },
+ "(max-width: 1200px)": {
+ "grid-template-columns": "50% 50%"
+ }
+ }
+ },
+ "badges": [],
+ "cards": [
+ {
+ "type": "entities",
+ "title": "Infrastructure",
+ "entities": [
+ {
+ "entity": "sensor.bedroom_roof_power"
+ },
+ {
+ "entity": "sensor.hall_camera_power"
+ },
+ {
+ "entity": "sensor.power_smartpi"
+ }
+ ]
+ },
+ {
+ "type": "entities",
+ "title": "Office",
+ "entities": [
+ {
+ "entity": "sensor.living_office_power"
+ },
+ {
+ "entity": "sensor.office_shelfbottom_power"
+ },
+ {
+ "entity": "sensor.office_shelftop_power"
+ },
+ {
+ "entity": "sensor.office_table_power"
+ }
+ ]
+ },
+ {
+ "type": "entities",
+ "title": "Appliances",
+ "entities": [
+ {
+ "entity": "sensor.kitchen_oven_power"
+ },
+ {
+ "entity": "sensor.kitchen_wash_power"
+ },
+ {
+ "entity": "sensor.kitchen_teatable_power"
+ },
+ {
+ "entity": "sensor.office_aircon_power"
+ },
+ {
+ "entity": "sensor.bedroom_aircon_power"
+ }
+ ]
+ },
+ {
+ "type": "entities",
+ "title": "Lights",
+ "entities": [
+ {
+ "entity": "sensor.kitchen_ledlights_power"
+ },
+ {
+ "entity": "sensor.bedroom_bedsidelampsocket_power"
+ },
+ {
+ "entity": "sensor.bedroom_tablelamp_power"
+ },
+ {
+ "entity": "sensor.living_tablelamp_power"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.bedroom_roof_power"
+ },
+ {
+ "entity": "sensor.hall_camera_power"
+ }
+ ],
+ "hours_to_show": 24,
+ "title": "Infrastructure (24h)"
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.bedroom_roof_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.hall_camera_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_smartpi",
+ "detail": 2
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.office_shelfbottom_power"
+ },
+ {
+ "entity": "sensor.office_shelftop_power"
+ },
+ {
+ "entity": "sensor.office_table_power"
+ }
+ ],
+ "hours_to_show": 24,
+ "title": "Office (24h)"
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.living_office_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.office_shelfbottom_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.office_shelftop_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.office_table_power",
+ "detail": 2
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.kitchen_oven_power"
+ },
+ {
+ "entity": "sensor.kitchen_wash_power"
+ },
+ {
+ "entity": "sensor.kitchen_teatable_power"
+ }
+ ],
+ "hours_to_show": 24,
+ "title": "Kitchen (24h)"
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.kitchen_oven_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.kitchen_wash_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.kitchen_teatable_power",
+ "detail": 2
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "sensor.office_aircon_power"
+ },
+ {
+ "entity": "sensor.bedroom_aircon_power"
+ }
+ ],
+ "hours_to_show": 24,
+ "title": "Climate (24h)"
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.office_aircon_power",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 24,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.bedroom_aircon_power",
+ "detail": 2
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_research b/.storage/lovelace.lovelace_research
new file mode 100644
index 0000000..dffc4a1
--- /dev/null
+++ b/.storage/lovelace.lovelace_research
@@ -0,0 +1,185 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_research",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "title": "Home",
+ "cards": [
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "confirm": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "input_boolean.mode_away"
+ },
+ {
+ "entity": "input_boolean.mode_production"
+ },
+ {
+ "entity": "select.entrance_vibrations_sensitivity"
+ }
+ ],
+ "title": "Mode"
+ }
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "binary_sensor.entrance_door_contact"
+ },
+ {
+ "entity": "sensor.entrance_vibrations_action"
+ },
+ {
+ "entity": "binary_sensor.motions_all"
+ },
+ {
+ "entity": "switch.lights_all"
+ }
+ ],
+ "title": "Intrusion"
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_smoke_smoke"
+ },
+ {
+ "entity": "sensor.kitchen_gas_carbon_monoxide"
+ },
+ {
+ "entity": "binary_sensor.bathroom_leak_water_leak"
+ },
+ {
+ "entity": "binary_sensor.kitchen_door_contact"
+ },
+ {
+ "entity": "sensor.living_office_device_temperature"
+ }
+ ],
+ "title": "Safety"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_smoke_smoke",
+ "name": "Smoke"
+ },
+ {
+ "entity": "binary_sensor.kitchen_gas",
+ "name": "Gas (CO)"
+ },
+ {
+ "entity": "binary_sensor.bathroom_leak_water_leak",
+ "name": "Water Leak"
+ }
+ ],
+ "hours_to_show": 48,
+ "title": "Safety (Last 48 hours)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.entrance_door_contact",
+ "name": "Entrance Door"
+ },
+ {
+ "entity": "binary_sensor.kitchen_door_contact",
+ "name": "Kitchen Door"
+ },
+ {
+ "entity": "binary_sensor.entrance_vibrations_vibration",
+ "name": "Vibrations"
+ },
+ {
+ "entity": "sensor.entrance_vibrations_strength",
+ "name": "Strength"
+ },
+ {
+ "entity": "sensor.hall_motions_illuminance_lux",
+ "name": "Illumination Hall"
+ },
+ {
+ "entity": "switch.lights_all",
+ "name": "All Lights"
+ }
+ ],
+ "hours_to_show": 48,
+ "title": "Intrusion (Last 48 hours)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "hours_to_show": 48,
+ "title": "Motions (Last 48 hours)"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "picture-entity",
+ "entity": "camera.192_168_50_51"
+ },
+ {
+ "type": "logbook",
+ "entities": [
+ "binary_sensor.entrance_door_contact",
+ "sensor.entrance_vibrations_strength",
+ "binary_sensor.hall_motions_occupancy",
+ "sensor.entrance_vibrations_action"
+ ],
+ "hours_to_show": 24,
+ "title": "Logs"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_status b/.storage/lovelace.lovelace_status
new file mode 100644
index 0000000..a5ea896
--- /dev/null
+++ b/.storage/lovelace.lovelace_status
@@ -0,0 +1,256 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_status",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "title": "Home",
+ "cards": [
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "block": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "title": "Plugs",
+ "entities": [
+ {
+ "entity": "switch.plugs_infrastructure",
+ "name": "Infrastructure"
+ },
+ {
+ "entity": "switch.plugs_manual",
+ "name": "Manual Sockets"
+ },
+ {
+ "entity": "switch.plugs_controlled",
+ "name": "Controlled Sockets"
+ },
+ {
+ "entity": "switch.plugs_office",
+ "name": "Office Sockets"
+ }
+ ]
+ }
+ },
+ {
+ "type": "custom:restriction-card",
+ "restrictions": {
+ "confirm": {
+ "exemptions": null
+ }
+ },
+ "card": {
+ "type": "entities",
+ "title": "Manual Plugs",
+ "entities": [
+ {
+ "entity": "switch.plugs_kitchen",
+ "name": "Kitchen"
+ },
+ {
+ "entity": "switch.plugs_office",
+ "name": "Office All"
+ },
+ {
+ "entity": "switch.smart_power_strip_pro_socket_1",
+ "name": "Office Desk"
+ },
+ {
+ "entity": "switch.bedroom_bedsidelampsocket",
+ "name": "Bedside"
+ }
+ ]
+ }
+ },
+ {
+ "type": "entities",
+ "title": "Lights",
+ "entities": [
+ {
+ "entity": "switch.lights_living",
+ "name": "Living Room"
+ },
+ {
+ "entity": "switch.lights_bedroom",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.bedroom_bedsidelamp",
+ "name": "Bedside LED"
+ },
+ {
+ "entity": "switch.lights_guest",
+ "name": "Guestroom"
+ },
+ {
+ "entity": "switch.lights_kitchen",
+ "name": "Kitchen"
+ },
+ {
+ "entity": "switch.lights_bathroom",
+ "name": "Bathroom/Toilet"
+ },
+ {
+ "entity": "switch.lights_hall",
+ "name": "Hall"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "title": "Motions"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "hours_to_show": 2,
+ "title": "2 hours"
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "sensor.192_168_50_1_devices_connected",
+ "name": "Asgard clients"
+ },
+ {
+ "entity": "device_tracker.legion8",
+ "name": "Legion8/Asgard"
+ },
+ {
+ "entity": "device_tracker.lm_g810",
+ "name": "Legion8/Hass"
+ },
+ {
+ "entity": "device_tracker.nyx",
+ "name": "Nyx/Asgard"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "title": "Power (24h -> 2h)",
+ "entities": [
+ {
+ "entity": "sensor.power_infrastructure"
+ },
+ {
+ "entity": "sensor.power_office"
+ },
+ {
+ "entity": "sensor.power_kitchen"
+ },
+ {
+ "entity": "sensor.power_climate"
+ },
+ {
+ "entity": "sensor.power_lights"
+ }
+ ],
+ "hours_to_show": 24
+ },
+ {
+ "hours_to_show": 2,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_infrastructure",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 2,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_office",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 2,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_kitchen",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 2,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_climate",
+ "detail": 2
+ },
+ {
+ "hours_to_show": 2,
+ "graph": "line",
+ "type": "sensor",
+ "entity": "sensor.power_lights",
+ "detail": 2
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace.lovelace_test b/.storage/lovelace.lovelace_test
new file mode 100644
index 0000000..d9477fe
--- /dev/null
+++ b/.storage/lovelace.lovelace_test
@@ -0,0 +1,402 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace.lovelace_test",
+ "data": {
+ "config": {
+ "views": [
+ {
+ "theme": "Backend-selected",
+ "title": "Home",
+ "type": "custom:grid-layout",
+ "layout": {
+ "max_cols": 4,
+ "grid-template-columns": "25% 25% 25% 25%",
+ "grid-template-rows": "auto",
+ "mediaquery": {
+ "(max-width: 600px)": {
+ "grid-template-columns": "100%"
+ },
+ "(max-width: 1200px)": {
+ "grid-template-columns": "50% 50%"
+ },
+ "(max-width: 1800px)": {
+ "grid-template-columns": "33% 33% 33%"
+ }
+ }
+ },
+ "badges": [],
+ "cards": [
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.entrance_door_contact",
+ "name": "Contact"
+ },
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Motions"
+ },
+ {
+ "entity": "binary_sensor.entrance_vibrations_vibration",
+ "name": "Vibration"
+ },
+ {
+ "entity": "sensor.entrance_vibrations_strength",
+ "name": "Strength"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Vibration Sensor (1h)"
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "title": "Motions"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Motion Sensors (1h)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Hall"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Living"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Bedroom"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Kitchen"
+ }
+ ],
+ "hours_to_show": 12,
+ "title": "Motion Sensors (12h)"
+ },
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "group.master_phones",
+ "name": "Phones"
+ },
+ {
+ "entity": "group.master_laptops",
+ "name": "Laptops"
+ },
+ {
+ "entity": "sensor.192_168_50_1_devices_connected",
+ "name": "Asgard clients"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "entity": "device_tracker.legion8",
+ "name": "Legion8/Asgard"
+ },
+ {
+ "entity": "device_tracker.lm_g810",
+ "name": "Legion8/Hass"
+ },
+ {
+ "entity": "device_tracker.nyx",
+ "name": "Nyx/Asgard"
+ }
+ ]
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "group.master_phones",
+ "name": "Phones"
+ },
+ {
+ "entity": "group.master_laptops",
+ "name": "Laptops"
+ },
+ {
+ "entity": "device_tracker.legion8",
+ "name": "Legion8/Asgard"
+ },
+ {
+ "entity": "device_tracker.lm_g810",
+ "name": "Legion8/Hass"
+ },
+ {
+ "entity": "device_tracker.nyx",
+ "name": "Nyx/Asgard"
+ },
+ {
+ "entity": "sensor.192_168_50_1_devices_connected",
+ "name": "Asgard clients"
+ }
+ ],
+ "hours_to_show": 12
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "switch.living_lights_left",
+ "name": "Lustre 1"
+ },
+ {
+ "entity": "switch.living_lights_center",
+ "name": "Lustre 2"
+ },
+ {
+ "entity": "switch.living_lights_right",
+ "name": "Smart Bulb"
+ },
+ {
+ "entity": "switch.living_tablelamp",
+ "name": "DeskLamp"
+ },
+ {
+ "entity": "binary_sensor.living_motions_occupancy",
+ "name": "Room Motions"
+ },
+ {
+ "entity": "sensor.living_motions_illuminance_lux",
+ "name": "Room Lux"
+ },
+ {
+ "entity": "binary_sensor.office_motions_occupancy",
+ "name": "Office Motions"
+ },
+ {
+ "entity": "sensor.office_motions_illuminance_lux",
+ "name": "Office Lux"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Living Illuminance (1h)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "switch.hall_lights_left",
+ "name": "Hall Light"
+ },
+ {
+ "entity": "switch.entrance_lights_left",
+ "name": "Entrance Light"
+ },
+ {
+ "entity": "binary_sensor.hall_motions_occupancy",
+ "name": "Motions"
+ },
+ {
+ "entity": "sensor.hall_motions_illuminance_lux",
+ "name": "Lux"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Hall Illuminance (1h)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "switch.kitchen_lights_left",
+ "name": "Lustre"
+ },
+ {
+ "entity": "switch.kitchen_lights_center",
+ "name": "LED"
+ },
+ {
+ "entity": "binary_sensor.kitchen_motions_occupancy",
+ "name": "Motions"
+ },
+ {
+ "entity": "sensor.kitchen_motions_illuminance_lux",
+ "name": "Lux"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Kitchen Illuminance (1h)"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "switch.bedroom_lights_left",
+ "name": "Lustre 1"
+ },
+ {
+ "entity": "switch.bedroom_lights_center",
+ "name": "Lustre 2"
+ },
+ {
+ "entity": "switch.bedroom_lights_right",
+ "name": "Smart Bulb"
+ },
+ {
+ "entity": "switch.bedroom_tablelamp",
+ "name": "DeskLamp"
+ },
+ {
+ "entity": "binary_sensor.bedroom_bedsidelamp",
+ "name": "BedLamp"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Motions"
+ },
+ {
+ "entity": "sensor.bedroom_motions_illuminance_lux",
+ "name": "Lux"
+ }
+ ],
+ "hours_to_show": 1,
+ "title": "Bedroom Illuminance (1h)"
+ },
+ {
+ "type": "history-graph",
+ "entities": [
+ {
+ "entity": "switch.bedroom_lights_left",
+ "name": "Lustre 1"
+ },
+ {
+ "entity": "switch.bedroom_lights_center",
+ "name": "Lustre 2"
+ },
+ {
+ "entity": "switch.bedroom_lights_right",
+ "name": "Smart Bulb"
+ },
+ {
+ "entity": "switch.bedroom_tablelamp",
+ "name": "DeskLamp"
+ },
+ {
+ "entity": "binary_sensor.bedroom_bedsidelamp",
+ "name": "BedLamp"
+ },
+ {
+ "entity": "binary_sensor.bedroom_motions_occupancy",
+ "name": "Motions"
+ },
+ {
+ "entity": "sensor.bedroom_motions_illuminance_lux",
+ "name": "Lux"
+ }
+ ],
+ "hours_to_show": 12,
+ "title": "Bedroom Illuminance (12h)"
+ }
+ ]
+ },
+ {
+ "type": "vertical-stack",
+ "cards": [
+ {
+ "type": "entities",
+ "entities": [
+ {
+ "entity": "input_number.knob_office_current"
+ },
+ {
+ "entity": "input_number.knob_office_brightness0"
+ },
+ {
+ "entity": "input_number.knob_office_temperature0"
+ },
+ {
+ "entity": "input_number.knob_office_hue0"
+ },
+ {
+ "entity": "input_number.knob_office_brightness1"
+ },
+ {
+ "entity": "input_number.knob_office_temperature1"
+ },
+ {
+ "entity": "input_number.knob_office_hue1"
+ }
+ ],
+ "title": "Knob Control"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace_dashboards b/.storage/lovelace_dashboards
new file mode 100644
index 0000000..4e4a887
--- /dev/null
+++ b/.storage/lovelace_dashboards
@@ -0,0 +1,63 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace_dashboards",
+ "data": {
+ "items": [
+ {
+ "show_in_sidebar": true,
+ "title": "Security",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-research",
+ "id": "lovelace_research",
+ "icon": "mdi:security"
+ },
+ {
+ "show_in_sidebar": true,
+ "icon": "mdi:lamps",
+ "title": "Status",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-status",
+ "id": "lovelace_status"
+ },
+ {
+ "show_in_sidebar": true,
+ "icon": "mdi:air-conditioner",
+ "title": "Climate",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-climate",
+ "id": "lovelace_climate"
+ },
+ {
+ "show_in_sidebar": true,
+ "icon": "mdi:gesture-tap",
+ "title": "Control",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-control",
+ "id": "lovelace_control"
+ },
+ {
+ "show_in_sidebar": true,
+ "icon": "mdi:sine-wave",
+ "title": "Power",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-power",
+ "id": "lovelace_power"
+ },
+ {
+ "show_in_sidebar": true,
+ "icon": "mdi:flask-outline",
+ "title": "Research",
+ "require_admin": false,
+ "mode": "storage",
+ "url_path": "lovelace-test",
+ "id": "lovelace_test"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/lovelace_resources b/.storage/lovelace_resources
new file mode 100644
index 0000000..e468e69
--- /dev/null
+++ b/.storage/lovelace_resources
@@ -0,0 +1,19 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "lovelace_resources",
+ "data": {
+ "items": [
+ {
+ "url": "/local/community/lovelace-layout-card/layout-card.js",
+ "type": "module",
+ "id": "1ff60dcd5dcd4490bc7f3f0c5a2fcdbc"
+ },
+ {
+ "url": "/local/community/restriction-card/restriction-card.js?hacstag=215633404127",
+ "type": "module",
+ "id": "85c450ddee1d420e973dbe6346afe952"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/person b/.storage/person
new file mode 100644
index 0000000..4ed5236
--- /dev/null
+++ b/.storage/person
@@ -0,0 +1,17 @@
+{
+ "version": 2,
+ "minor_version": 1,
+ "key": "person",
+ "data": {
+ "items": [
+ {
+ "name": "Suren A. Chilingaryan",
+ "user_id": "31a296cc30a243089f121cef93b46cc0",
+ "device_trackers": [
+ "device_tracker.lm_g810"
+ ],
+ "id": "suren_a_chilingaryan"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/tag b/.storage/tag
new file mode 100644
index 0000000..1436d47
--- /dev/null
+++ b/.storage/tag
@@ -0,0 +1,15 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "tag",
+ "data": {
+ "items": [
+ {
+ "tag_id": "8acfd2d9-0f48-425a-94ab-fb466db77c30",
+ "name": "Test",
+ "id": "8acfd2d9-0f48-425a-94ab-fb466db77c30",
+ "last_scanned": "2023-01-09T02:09:31.722141+00:00"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/.storage/zone b/.storage/zone
new file mode 100644
index 0000000..11b7a98
--- /dev/null
+++ b/.storage/zone
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "minor_version": 1,
+ "key": "zone",
+ "data": {
+ "items": [
+ {
+ "latitude": 40.20070712833234,
+ "longitude": 44.47609064687973,
+ "name": "HomeHalabyanExtended",
+ "icon": "mdi:map-marker",
+ "passive": false,
+ "radius": 856.0,
+ "id": "homehalabyan"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/automations.yaml b/automations.yaml
new file mode 100644
index 0000000..3e183c3
--- /dev/null
+++ b/automations.yaml
@@ -0,0 +1,1057 @@
+- id: '1654820574086'
+ alias: 'Motions: Hall-based'
+ description: ''
+ trigger:
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 0
+ minutes: 0
+ seconds: 10
+ id: Short
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 0
+ minutes: 20
+ seconds: 0
+ id: Toilet
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 1
+ minutes: 0
+ seconds: 0
+ id: Long
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 20
+ minutes: 0
+ seconds: 0
+ id: Away
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: trigger
+ id: Short
+ sequence:
+ - type: turn_off
+ device_id: 87071fc9d8fb9ebbccb145f5642c7404
+ entity_id: light.aqara_hub_m1s_426c
+ domain: light
+ - type: turn_off
+ device_id: 5c1c363a6825ad5a006f3bb84bb104ce
+ entity_id: switch.hall_lights_left
+ domain: switch
+ - type: turn_off
+ device_id: 07b7086cf34752386c82a5109311ac6e
+ entity_id: switch.entrance_lights_center
+ domain: switch
+ - conditions:
+ - condition: trigger
+ id: Toilet
+ sequence:
+ - type: turn_off
+ device_id: 07b7086cf34752386c82a5109311ac6e
+ entity_id: switch.entrance_lights_left
+ domain: switch
+ - conditions:
+ - condition: trigger
+ id: Long
+ sequence:
+ - type: turn_off
+ device_id: 04c6f563c006599ed7754aba652654ae
+ entity_id: switch.bathroom_lights_left
+ domain: switch
+ - type: turn_off
+ device_id: 04c6f563c006599ed7754aba652654ae
+ entity_id: switch.bathroom_lights_center
+ domain: switch
+ - type: turn_off
+ device_id: 558ce3c924f9478aad68cb5b98f05ecc
+ entity_id: switch.kitchen_lights_left
+ domain: switch
+ - type: turn_off
+ device_id: 558ce3c924f9478aad68cb5b98f05ecc
+ entity_id: switch.kitchen_lights_center
+ domain: switch
+ default: []
+ mode: single
+- id: '1654901560778'
+ alias: 'Living: Office Light'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.living_lights_right
+ light: light.yeelight_color_0x7caaf86
+ dblclick:
+ - parallel:
+ - service: script.sleep_and_wake
+ data:
+ mode: hibernate
+ target: office
+ - service: switch.turn_off
+ data: {}
+ target:
+ entity_id: switch.lights_living
+- id: '1654986053564'
+ alias: 'Hall: Kitchen LED'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.kitchen_lights_center
+ light: switch.kitchen_ledlights
+- id: '1654986378177'
+ alias: 'Bedroom: Bulb'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.bedroom_lights_right
+ light: light.smart_light
+ dblclick:
+ - service: script.turn_off_bedroom_lights
+ data: {}
+ - type: turn_off
+ device_id: bf45f1d630db6e2aa1307866603f548a
+ entity_id: light.smart_light
+ domain: light
+ off_click:
+ - type: turn_off
+ device_id: 4ca2827c57a086e0da4d63756b15261b
+ entity_id: switch.bedroom_tablelamp
+ domain: switch
+- id: '1654994043723'
+ alias: Aqara Sounds
+ description: ''
+ trigger:
+ - platform: state
+ entity_id:
+ - input_button.button_alert
+ - input_button.button_confirm
+ - input_button.button_ring
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.entity_id == ''input_button.button_confirm'' }}'
+ sequence:
+ - service: alarm_control_panel.alarm_arm_night
+ data: {}
+ target:
+ entity_id: alarm_control_panel.aqara_hub_m1s_426c
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.entity_id == ''input_button.button_ring'' }}'
+ sequence:
+ - service: alarm_control_panel.alarm_arm_home
+ data: {}
+ target:
+ entity_id: alarm_control_panel.aqara_hub_m1s_426c
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 5
+ milliseconds: 0
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.entity_id == ''input_button.button_alert'' }}'
+ sequence:
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_production
+ state: 'on'
+ then:
+ - service: alarm_control_panel.alarm_arm_away
+ target:
+ entity_id: alarm_control_panel.aqara_hub_m1s_426c
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 15
+ milliseconds: 0
+ else:
+ - service: alarm_control_panel.alarm_arm_home
+ target:
+ entity_id: alarm_control_panel.aqara_hub_m1s_426c
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 5
+ milliseconds: 0
+ default: []
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 5
+ milliseconds: 0
+ - service: alarm_control_panel.alarm_disarm
+ data: {}
+ target:
+ entity_id: alarm_control_panel.aqara_hub_m1s_426c
+ mode: single
+- id: '1654996443007'
+ alias: 'Bedroom: BedSwitch'
+ description: ''
+ trigger:
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: single_left
+ discovery_id: 0x54ef4410001b175a action_single_left
+ id: left
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: single_right
+ discovery_id: 0x54ef4410001b175a action_single_right
+ id: right
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: double_right
+ discovery_id: 0x54ef4410001b175a action_double_right
+ id: right_dbl
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: double_left
+ discovery_id: 0x54ef4410001b175a action_double_left
+ id: left_dbl
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: hold_right
+ discovery_id: 0x54ef4410001b175a action_hold_right
+ id: right_hold
+ - platform: device
+ domain: mqtt
+ device_id: f7f321e14489d5f5ef9e332f06055769
+ type: action
+ subtype: hold_left
+ discovery_id: 0x54ef4410001b175a action_hold_left
+ id: left_hold
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: trigger
+ id: left
+ sequence:
+ - if:
+ - condition: and
+ conditions:
+ - condition: state
+ entity_id: switch.lights_bedroom
+ state: 'off'
+ - condition: numeric_state
+ entity_id: sensor.bedroom_bedsidelampsocket_power
+ below: '2'
+ then:
+ - parallel:
+ - type: turn_on
+ device_id: 4ca2827c57a086e0da4d63756b15261b
+ entity_id: switch.bedroom_tablelamp
+ domain: switch
+ else:
+ - parallel:
+ - service: script.turn_off_bedroom_lights
+ data: {}
+ - conditions:
+ - condition: trigger
+ id: left_dbl
+ sequence:
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_alone
+ state: 'off'
+ then:
+ - parallel:
+ - service: script.sleep_and_wake
+ data:
+ mode: sleep
+ target: office
+ else:
+ - parallel:
+ - service: switch.turn_off
+ data: {}
+ target:
+ entity_id:
+ - switch.lights_living
+ - switch.lights_guest
+ - switch.lights_temporary
+ - service: script.sleep_and_wake
+ data:
+ mode: hibernate
+ target: office
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+ - conditions:
+ - condition: trigger
+ id: left_hold
+ sequence:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_ring
+ enabled: false
+ - service: media_player.play_media
+ target:
+ entity_id: media_player.smartpi
+ data:
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1$0$0
+ media_content_type: audio/mpeg
+ metadata:
+ title: Wish I Had An Angel
+ thumbnail:
+ media_class: music
+ children_media_class:
+ navigateIds:
+ - {}
+ - media_content_type: app
+ media_content_id: media-source://dlna_dms
+ - media_content_type: channel
+ media_content_id: media-source://dlna_dms/asgard/:0
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1$0
+ - conditions:
+ - condition: trigger
+ id: right
+ sequence:
+ - service: script.bedroom_aircon
+ data: {}
+ default:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+ mode: restart
+- id: '1655029337428'
+ alias: 'Alarms: Safety'
+ description: ''
+ trigger:
+ - type: moist
+ platform: device
+ device_id: 62b0726b0781074264bd1ba3a69de306
+ entity_id: binary_sensor.bathroom_leak_water_leak
+ domain: binary_sensor
+ - platform: device
+ type: turned_on
+ device_id: d070cf57873fde4d4eeeed45e0e72f4a
+ entity_id: switch.hall_smoke_alarm
+ domain: switch
+ - type: unsafe
+ platform: device
+ device_id: a40e83403ac69c75db53e21c88afd53b
+ entity_id: binary_sensor.kitchen_gas
+ domain: binary_sensor
+ condition: []
+ action:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_alert
+ - service: notify.mobile_app_lm_g810
+ data:
+ title: SmartPI Alarm
+ message: Safety incidient
+ - service: notify.smartpi
+ data:
+ message: Safety incidient
+ mode: single
+- id: '1655032416924'
+ alias: 'Alarms: Wine Notification'
+ description: ''
+ trigger:
+ - type: opened
+ platform: device
+ device_id: 1ac71f2a54426da15458e5b5090f7603
+ entity_id: binary_sensor.kitchen_door_contact
+ domain: binary_sensor
+ condition: []
+ action:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_ring
+ mode: single
+- id: '1655037280868'
+ alias: 'Alarms: Door-knock'
+ description: ''
+ trigger:
+ - platform: device
+ domain: mqtt
+ device_id: 65b9dbde95854b17f5e0e31545962734
+ type: action
+ subtype: vibration
+ discovery_id: 0x00158d0002b310d2 action_vibration
+ condition:
+ - type: is_no_motion
+ condition: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ - type: is_not_open
+ condition: device
+ device_id: b45b5a514dd669f9f4bb8ebdaa396998
+ entity_id: binary_sensor.entrance_door_contact
+ domain: binary_sensor
+ action:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_ring
+ mode: single
+- id: '1655084794489'
+ alias: Telegram
+ description: ''
+ trigger:
+ - platform: event
+ event_type: telegram_command
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.event.data.command == "/office_light" }} '
+ sequence:
+ - type: toggle
+ device_id: 95931a9049849e575f2de543adf111eb
+ entity_id: light.yeelight_color_0x7caaf86
+ domain: light
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.event.data.command == "/switch" }} '
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ trigger.event.data.args|length == 1 }}'
+ - condition: template
+ value_template: '{{ states(trigger.event.data.args[0]) in ["on", "off",
+ "true", "false" ] }}'
+ then:
+ - service: notify.smartpi
+ data:
+ message: Toggling entity {{ trigger.event.data.args[0] }} from the current
+ state "{{ states(trigger.event.data.args[0]) }}"
+ - service: homeassistant.toggle
+ target:
+ entity_id: '{{ trigger.event.data.args }}'
+ else:
+ choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.event.data.args|length != 1 }}'
+ sequence:
+ - service: notify.smartpi
+ data:
+ message: 'Wrong number of arguments for /switch command: {{ trigger.event.data.args
+ | length }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ states(trigger.event.data.args[0]) in ["unknown"]
+ }}'
+ sequence:
+ - service: notify.smartpi
+ data:
+ message: 'Unknown entity: {{ trigger.event.data.args[0] }}'
+ default:
+ - service: notify.smartpi
+ data:
+ message: 'Entity {{ trigger.event.data.args[0] }} is in unsupported
+ state: {{ states(trigger.event.data.args) }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.event.data.command == "/camera" }} '
+ sequence:
+ - service: telegram_bot.send_photo
+ data:
+ disable_notification: true
+ caption: AubergineView
+ url: http://smartpi:8123{{ state_attr("camera.192_168_50_51", "entity_picture")
+ }}
+ default:
+ - service: notify.smartpi
+ data:
+ message: 'Unsupported command: {{ trigger.event.data.command }} with params:
+ {{ trigger.event.data.args }}'
+ mode: single
+- id: '1672608894803'
+ alias: 'Hall: Camera Switch'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.hall_lights_center
+ light: switch.hall_camera
+- id: '1672624569107'
+ alias: 'Hall: Entrance Combo'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch_combo.yaml
+ input:
+ switch: switch.entrance_lights_right
+ master: switch.hall_lights_left
+ on_click: []
+ off_click: []
+ dblclick:
+ - service: script.sleep_and_wake
+ data:
+ mode: sleep
+ target: house
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+ enabled: false
+- id: '1672627582279'
+ alias: 'Hall: Kitchen Combo'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch_combo.yaml
+ input:
+ switch: switch.kitchen_lights_right
+ master: switch.hall_lights_left
+ on_click: []
+ off_click:
+ - service: switch.turn_off
+ data: {}
+ target:
+ entity_id:
+ - switch.entrance_lights_center
+ dblclick:
+ - service: switch.toggle
+ target:
+ entity_id:
+ - switch.entrance_lights_center
+ data: {}
+- id: '1672629824242'
+ alias: 'Hall: Away/Security Mode Switch'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.hall_lights_right
+ light: input_boolean.mode_away
+ delay: 0
+ on_click:
+ - service: switch.turn_on
+ target:
+ entity_id: switch.hall_lights_center
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+ post_action: []
+- id: '1672638756112'
+ alias: 'Alarms: Intrusion'
+ description: ''
+ use_blueprint:
+ path: camera/intrusion.yaml
+ input:
+ mode: input_boolean.mode_away
+ arm_delay: 15
+ disarm_delay: 5
+ sensors:
+ - binary_sensor.entrance_door_contact
+ - binary_sensor.hall_motions_occupancy
+ - switch.lights_bedroom
+ - switch.lights_living
+ camera_script:
+ - service: script.1672637427937
+ data: {}
+ script:
+ - parallel:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_alert
+ - service: notify.mobile_app_lm_g810
+ data:
+ title: SmartPI Alarm
+ message: Intrusion detected
+ - service: notify.smartpi
+ data:
+ message: Intrusion detected
+- id: '1672677604586'
+ alias: 'Guestroom: Mode switch'
+ description: ''
+ use_blueprint:
+ path: lights/light_switch.yaml
+ input:
+ switch: switch.guestroom_lights_right
+ light: input_boolean.mode_guests
+ on_click:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+- id: '1672972431474'
+ alias: Knob Office Bulb Control
+ description: ''
+ use_blueprint:
+ path: lights/knob-bulb-control.yaml
+ input:
+ light: light.yeelight_color_0x7caaf86
+ knob: sensor.office_knob_action
+ toggle:
+ - type: toggle
+ device_id: 32787706a8ff87380633b7c817057935
+ entity_id: switch.living_tablelamp
+ domain: switch
+ brightness: input_number.knob_office_brightness0
+ temperature: input_number.knob_office_temperature0
+ hue: input_number.knob_office_hue0
+ state: input_boolean.state_office_knob_pressed
+- id: '1672979291802'
+ alias: Knob Multi-Bulb Control
+ description: ''
+ use_blueprint:
+ path: lights/knob-multi-bulb-control.yaml
+ input:
+ knob: sensor.office_knob_action
+ lights:
+ - light.yeelight_color_0x7caaf86
+ - light.smart_light
+- id: '1672987670623'
+ alias: 'Office: Dimming Button'
+ description: ''
+ use_blueprint:
+ path: lights/light_button.yaml
+ input:
+ button: sensor.office_button_action
+ light: light.yeelight_color_0x7caaf86
+ on_click:
+ - service: homeassistant.turn_off
+ data: {}
+ target:
+ entity_id: switch.lights_living_lustre
+ dblclick:
+ - if:
+ - condition: state
+ entity_id: switch.lights_living_lustre
+ state: 'on'
+ then:
+ - type: turn_off
+ device_id: 32787706a8ff87380633b7c817057935
+ entity_id: switch.living_tablelamp
+ domain: switch
+ - service: homeassistant.toggle
+ data: {}
+ target:
+ entity_id: switch.lights_living_lustre
+ hold_delay: 500
+ state: input_boolean.state_office_button_pressed
+ hold:
+ - device_id: 95931a9049849e575f2de543adf111eb
+ domain: light
+ entity_id: light.yeelight_color_0x7caaf86
+ type: brightness_decrease
+- id: '1672989606410'
+ alias: 'Office: Button'
+ description: ''
+ use_blueprint:
+ path: lights/light_button.yaml
+ input:
+ button: sensor.office_button_action
+ light: light.yeelight_color_0x7caaf86
+ on_click:
+ - if:
+ - condition: state
+ entity_id: switch.smart_power_strip_pro_socket_1
+ state: 'off'
+ then:
+ - service: script.sleep_and_wake
+ data:
+ mode: wake
+ target: office
+ - service: homeassistant.turn_off
+ data: {}
+ target:
+ entity_id: switch.lights_living_lustre
+ dblclick:
+ - if:
+ - condition: state
+ entity_id: switch.lights_living_lustre
+ state: 'on'
+ then:
+ - type: turn_off
+ device_id: 32787706a8ff87380633b7c817057935
+ entity_id: switch.living_tablelamp
+ domain: switch
+ - service: homeassistant.toggle
+ data: {}
+ target:
+ entity_id: switch.lights_living_lustre
+ hold_delay: 500
+ hold: []
+ longclick:
+ - if:
+ - condition: state
+ entity_id: switch.smart_power_strip_pro_socket_1
+ state: 'off'
+ then:
+ - service: script.sleep_and_wake
+ data:
+ mode: wake
+ target: office
+ else:
+ - parallel:
+ - service: switch.turn_off
+ data: {}
+ target:
+ entity_id: switch.lights_temporary
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_alone
+ state: 'on'
+ then:
+ - service: script.turn_off_bedroom_lights
+ data: {}
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_guests
+ state: 'off'
+ then:
+ - service: switch.turn_off
+ data: {}
+ target:
+ entity_id: switch.lights_guest
+ - service: input_button.press
+ target:
+ entity_id: input_button.button_confirm
+ data: {}
+- id: '1672991247298'
+ alias: 'Living: Light Sync'
+ description: ''
+ use_blueprint:
+ path: lights/light_sync.yaml
+ input:
+ master: switch.living_lights_left
+ slave: switch.living_lights_center
+- id: '1672991298090'
+ alias: 'Bedroom: Light Sync'
+ description: ''
+ use_blueprint:
+ path: lights/light_sync.yaml
+ input:
+ master: switch.bedroom_lights_left
+ slave: switch.bedroom_lights_center
+- id: '1673021522642'
+ alias: 'Motions: Kitchen'
+ description: ''
+ use_blueprint:
+ path: motion/motion_switch.yaml
+ input:
+ light_target:
+ - switch.kitchen_lights_left
+ - switch.kitchen_lights_center
+ motion_entity: binary_sensor.kitchen_motions_occupancy
+ illumination_test: sensor
+ illuminance_entity: sensor.kitchen_motions_illuminance_lux
+ lux_threshold: 30
+- id: '1673037015865'
+ alias: 'Motions: Night Light'
+ description: ''
+ use_blueprint:
+ path: motion/motion_switch.yaml
+ input:
+ light_target: []
+ motion_entity: binary_sensor.hall_motions_occupancy
+ illumination_test: sun
+ illuminance_entity: sensor.hall_motions_illuminance_lux
+ lux_threshold: 30
+ no_motion_wait: 5
+ on_click:
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_away
+ state: 'off'
+ - condition: state
+ entity_id: input_boolean.mode_alone
+ state: 'on'
+ - condition: state
+ entity_id: input_boolean.mode_bright
+ state: 'on'
+ then:
+ - type: turn_on
+ device_id: 5c1c363a6825ad5a006f3bb84bb104ce
+ entity_id: switch.hall_lights_left
+ domain: switch
+ else:
+ - type: turn_on
+ device_id: 87071fc9d8fb9ebbccb145f5642c7404
+ entity_id: light.aqara_hub_m1s_426c
+ domain: light
+ brightness_pct: 100
+ off_click:
+ - parallel:
+ - type: turn_off
+ device_id: 5c1c363a6825ad5a006f3bb84bb104ce
+ entity_id: switch.hall_lights_left
+ domain: switch
+ - type: turn_off
+ device_id: 87071fc9d8fb9ebbccb145f5642c7404
+ entity_id: light.aqara_hub_m1s_426c
+ domain: light
+ brightness_pct: 100
+- id: '1673153262822'
+ alias: 'Motions: Global '
+ description: ''
+ trigger:
+ - platform: state
+ id: home
+ entity_id:
+ - group.master_phones
+ from: not_home
+ to: home
+ for:
+ hours: 0
+ minutes: 1
+ seconds: 0
+ - platform: state
+ id: away
+ entity_id:
+ - group.master_phones
+ from: home
+ to: not_home
+ for:
+ hours: 1
+ minutes: 0
+ seconds: 0
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 24
+ minutes: 0
+ seconds: 0
+ id: empty_day
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 120
+ minutes: 0
+ seconds: 0
+ id: empty_week
+ - type: motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 0
+ minutes: 1
+ seconds: 0
+ id: motions
+ - platform: state
+ entity_id:
+ - input_boolean.mode_away
+ from: 'on'
+ to: 'off'
+ id: away_gone
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: state
+ entity_id: input_boolean.mode_house_sleep
+ state: 'off'
+ - condition: or
+ conditions:
+ - condition: trigger
+ id: empty_day
+ - condition: and
+ conditions:
+ - condition: trigger
+ id: away
+ - condition: state
+ entity_id: input_boolean.mode_single
+ state: 'on'
+ - condition: state
+ entity_id: binary_sensor.hall_motions_occupancy
+ state: 'off'
+ for:
+ hours: 2
+ minutes: 0
+ seconds: 0
+ sequence:
+ - service: script.sleep_and_wake
+ data:
+ mode: sleep
+ target: house
+ - service: input_boolean.turn_on
+ data: {}
+ target:
+ entity_id: input_boolean.mode_house_sleep
+ - conditions:
+ - condition: trigger
+ id: empty_week
+ - condition: state
+ entity_id: input_boolean.mode_house_hibernate
+ state: 'off'
+ sequence:
+ - service: script.sleep_and_wake
+ data:
+ mode: hibernate
+ target: house
+ - service: input_boolean.turn_on
+ data: {}
+ target:
+ entity_id: input_boolean.mode_house_hibernate
+ - conditions:
+ - condition: trigger
+ id: home
+ sequence:
+ - service: input_boolean.turn_off
+ data: {}
+ target:
+ entity_id: input_boolean.mode_away
+ - conditions:
+ - condition: or
+ conditions:
+ - condition: state
+ entity_id: input_boolean.mode_house_sleep
+ state: 'on'
+ - condition: state
+ entity_id: input_boolean.mode_house_hibernate
+ state: 'on'
+ - condition: or
+ conditions:
+ - condition: and
+ conditions:
+ - condition: trigger
+ id: motions
+ - condition: state
+ entity_id: input_boolean.mode_away
+ state: 'off'
+ - condition: and
+ conditions:
+ - condition: trigger
+ id: away_gone
+ - type: is_motion
+ condition: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ sequence:
+ - if:
+ - condition: state
+ entity_id: input_boolean.mode_house_hibernate
+ state: 'on'
+ then:
+ - service: script.sleep_and_wake
+ data:
+ mode: wake
+ target: house
+ - service: input_boolean.turn_off
+ data: {}
+ target:
+ entity_id:
+ - input_boolean.mode_house_sleep
+ - input_boolean.mode_house_hibernate
+ default: []
+ mode: single
+- id: '1673156009695'
+ alias: 'Motions: Office'
+ description: ''
+ trigger:
+ - type: no_motion
+ platform: device
+ device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+ entity_id: binary_sensor.hall_motions_occupancy
+ domain: binary_sensor
+ for:
+ hours: 2
+ minutes: 0
+ seconds: 0
+ id: sleep
+ condition: []
+ action:
+ - choose:
+ - conditions:
+ - condition: trigger
+ id: sleep
+ - condition: state
+ entity_id: switch.smart_power_strip_pro_socket_1
+ state: 'on'
+ sequence:
+ - service: script.sleep_and_wake
+ data:
+ mode: sleep
+ target: office
+ default: []
+ mode: single
+- id: '1673156130994'
+ alias: 'Hall: Kitchen Sync'
+ description: ''
+ trigger:
+ - platform: device
+ type: turned_off
+ device_id: 558ce3c924f9478aad68cb5b98f05ecc
+ entity_id: switch.kitchen_lights_left
+ domain: switch
+ condition: []
+ action:
+ - type: turn_off
+ device_id: 558ce3c924f9478aad68cb5b98f05ecc
+ entity_id: switch.kitchen_lights_center
+ domain: switch
+ mode: single
+- id: '1673212686198'
+ alias: 'Office: Sven'
+ description: ''
+ trigger:
+ - platform: state
+ entity_id:
+ - switch.smart_power_strip_pro_socket_4
+ from: 'off'
+ to: 'on'
+ for:
+ hours: 0
+ minutes: 0
+ seconds: 4
+ condition: []
+ action:
+ - service: scene.turn_on
+ data: {}
+ target:
+ entity_id: scene.sven_power_switch
+ mode: single
diff --git a/blueprints/automation/camera/intrusion.yaml b/blueprints/automation/camera/intrusion.yaml
new file mode 100644
index 0000000..4d2b62c
--- /dev/null
+++ b/blueprints/automation/camera/intrusion.yaml
@@ -0,0 +1,91 @@
+blueprint:
+ name: Intrusion
+ description: Script to execute in case of intrusion, e.g. streaming photos from Security Camera
+ domain: automation
+ input:
+ sensors:
+ name: Sensors
+ description: Trigger on motion, open doors, etc.
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [ binary_sensor, light, switch ]
+ mode:
+ name: Mode
+ description: Switch enabling/disabling shooting
+ selector:
+ entity:
+ domain: input_boolean
+ arm_delay:
+ name: Arm Delay
+ description: Delay before 'Away' mode activated and intrusion detection is operational (to allow you leaving the flat)
+ default: 15
+ selector:
+ number:
+ min: 0
+ max: 60
+ unit_of_measurement: m
+ disarm_delay:
+ name: Disarm Delay
+ description: Delay before alarms triggered after motion is detected (to allow disarm on arrival), camera shots are made without delay
+ default: 5
+ selector:
+ number:
+ min: 0
+ max: 60
+ unit_of_measurement: m
+ camera_script:
+ name: camera_script
+ description: Streaming Script for Security Camera
+ default: []
+ selector:
+ action:
+ script:
+ name: script
+ description: Alarming scipt to issue notifications once intrusion is confirmed
+ default: []
+ selector:
+ action:
+
+trigger:
+ - platform: state
+ entity_id: !input "sensors"
+ to: 'on'
+
+condition:
+ - condition: state
+ entity_id: !input "mode"
+ state: 'on'
+ enabled: true
+ for:
+ hours: 0
+ minutes: !input arm_delay
+ seconds: 0
+
+variables:
+ disarm_delay: !input disarm_delay
+ disarm_delay_seconds: '{{ (( disarm_delay * 60 )) }}'
+
+mode: single
+action:
+ - parallel:
+ - choose: []
+ default: !input "camera_script"
+ - sequence:
+ - service: input_button.press
+ target:
+ entity_id: input_button.button_confirm
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input mode
+ to: 'off'
+ timeout: '{{ disarm_delay_seconds }}'
+ continue_on_timeout: true
+
+ - if:
+ - condition: template
+ value_template: '{{ wait.trigger == None }}'
+ then:
+ - choose: []
+ default: !input "script"
diff --git a/blueprints/automation/homeassistant/motion_light.yaml b/blueprints/automation/homeassistant/motion_light.yaml
new file mode 100644
index 0000000..54a4a4f
--- /dev/null
+++ b/blueprints/automation/homeassistant/motion_light.yaml
@@ -0,0 +1,54 @@
+blueprint:
+ name: Motion-activated Light
+ description: Turn on a light when motion is detected.
+ domain: automation
+ source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
+ input:
+ motion_entity:
+ name: Motion Sensor
+ selector:
+ entity:
+ domain: binary_sensor
+ device_class: motion
+ light_target:
+ name: Light
+ selector:
+ target:
+ entity:
+ domain: light
+ no_motion_wait:
+ name: Wait time
+ description: Time to leave the light on after last motion is detected.
+ default: 120
+ selector:
+ number:
+ min: 0
+ max: 3600
+ unit_of_measurement: seconds
+
+# If motion is detected within the delay,
+# we restart the script.
+mode: restart
+max_exceeded: silent
+
+trigger:
+ platform: state
+ entity_id: !input motion_entity
+ from: "off"
+ to: "on"
+
+action:
+ - alias: "Turn on the light"
+ service: light.turn_on
+ target: !input light_target
+ - alias: "Wait until there is no motion from device"
+ wait_for_trigger:
+ platform: state
+ entity_id: !input motion_entity
+ from: "on"
+ to: "off"
+ - alias: "Wait the number of seconds that has been set"
+ delay: !input no_motion_wait
+ - alias: "Turn off the light"
+ service: light.turn_off
+ target: !input light_target
diff --git a/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/blueprints/automation/homeassistant/notify_leaving_zone.yaml
new file mode 100644
index 0000000..1dc8a0e
--- /dev/null
+++ b/blueprints/automation/homeassistant/notify_leaving_zone.yaml
@@ -0,0 +1,46 @@
+blueprint:
+ name: Zone Notification
+ description: Send a notification to a device when a person leaves a specific zone.
+ domain: automation
+ source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml
+ input:
+ person_entity:
+ name: Person
+ selector:
+ entity:
+ domain: person
+ zone_entity:
+ name: Zone
+ selector:
+ entity:
+ domain: zone
+ notify_device:
+ name: Device to notify
+ description: Device needs to run the official Home Assistant app to receive notifications.
+ selector:
+ device:
+ integration: mobile_app
+
+trigger:
+ platform: state
+ entity_id: !input person_entity
+
+variables:
+ zone_entity: !input zone_entity
+ # This is the state of the person when it's in this zone.
+ zone_state: "{{ states[zone_entity].name }}"
+ person_entity: !input person_entity
+ person_name: "{{ states[person_entity].name }}"
+
+condition:
+ condition: template
+ # The first case handles leaving the Home zone which has a special state when zoning called 'home'.
+ # The second case handles leaving all other zones.
+ value_template: "{{ zone_entity == 'zone.home' and trigger.from_state.state == 'home' and trigger.to_state.state != 'home' or trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}"
+
+action:
+ - alias: "Notify that a person has left the zone"
+ domain: mobile_app
+ type: notify
+ device_id: !input notify_device
+ message: "{{ person_name }} has left {{ zone_state }}"
diff --git a/blueprints/automation/lights/knob-bulb-control.yaml b/blueprints/automation/lights/knob-bulb-control.yaml
new file mode 100644
index 0000000..5b6c3c7
--- /dev/null
+++ b/blueprints/automation/lights/knob-bulb-control.yaml
@@ -0,0 +1,271 @@
+blueprint:
+ name: Knob Bulb Control
+ description: Knob (clicking/rotating) to control bulb (or LED band) brightness, color temperature, and hue
+ domain: automation
+ input:
+ knob:
+ name: knob
+ description: controller (select _action entity)
+ selector:
+ entity:
+ domain: sensor
+ light:
+ name: Bulb
+ description: smart bulb or power socket
+ selector:
+ entity:
+ multiple: true
+ domain: light
+ toggle:
+ name: toggle
+ description: Script to run on clicking knob button (e.g. turn-of bulb power on/off)
+ default: []
+ selector:
+ action:
+
+ brightness:
+ name: Brightness
+ description: Current brightness of the bulb
+ selector:
+ entity:
+ domain: input_number
+ temperature:
+ name: Temperature
+ description: Current color temperature of the bulb
+ selector:
+ entity:
+ domain: input_number
+ hue:
+ name: Hue
+ description: Current hue of the bulb
+ selector:
+ entity:
+ domain: input_number
+ state:
+ name: State
+ description: Indicates if button is pressed and we currently changing the hue
+ selector:
+ entity:
+ domain: input_boolean
+
+ brightness_step:
+ name: Brightness Step
+ description: Increment/Decrement of brightness
+ default: 50
+ selector:
+ number:
+ min: 10
+ max: 100
+ hue_delay:
+ name: Hue Delay
+ description: Delay between hue changes
+ default: 500
+ selector:
+ number:
+ min: 100
+ max: 10000
+
+# Light is triggering when bulb is controlled by other means. So, I think it is better to follow 'multi' way
+# and just store knob settings for the bulb ignoring how it is changed in other ways (in the end use-cases differ also)
+trigger:
+ - platform: state
+ id: knob
+ entity_id: !input "knob"
+ to:
+ - "toggle"
+ - "brightness_step_up"
+ - "brightness_step_down"
+ - "color_temperature_step_up"
+ - "color_temperature_step_down"
+ - "hue_move"
+
+ - platform: state
+ id: brightness_change
+ entity_id: !input light
+ attribute: brightness
+# - platform: state
+# id: hue_move
+# entity_id: !input state
+# to: 'on'
+
+variables:
+ light: !input light
+ brightness: !input brightness
+ temperature: !input temperature
+ hue: !input hue
+
+ brightness_step: !input brightness_step
+ hue_delay: !input hue_delay
+
+mode: queued
+action:
+- choose:
+ - conditions:
+ - condition: trigger
+ id: knob
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "brightness_step_up" }}'
+ sequence:
+ - service: light.turn_on
+ data:
+ brightness_step: '{{ brightness_step }}'
+ target:
+ entity_id: !input light
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "brightness_step_down" }}'
+ sequence:
+ - service: light.turn_on
+ data:
+ brightness_step: '-{{ brightness_step }}'
+ target:
+ entity_id: !input light
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "color_temperature_step_up" }}'
+ sequence:
+ - service: input_number.increment
+ target:
+ entity_id: !input temperature
+ - service: light.turn_on
+ data:
+ kelvin: '{{ states(temperature) }}'
+ target:
+ entity_id: !input light
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "color_temperature_step_down" }}'
+ sequence:
+ - service: input_number.decrement
+ data: {}
+ target:
+ entity_id: !input temperature
+ - service: light.turn_on
+ data:
+ kelvin: '{{ states(temperature) }}'
+ target:
+ entity_id: !input light
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "hue_move" }}'
+ sequence:
+ - service: input_boolean.turn_on
+ target:
+ entity_id: !input state
+ - repeat:
+ until:
+# - condition: state
+# entity_id: !input state
+# state: 'off'
+ - condition: template
+ value_template: '{{ wait.trigger != None }}'
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ states(hue) | float < 359 }}'
+ then:
+ - service: input_number.increment
+ data: {}
+ target:
+ entity_id: !input hue
+ else:
+ - service: input_number.set_value
+ data:
+ value: 0
+ target:
+ entity_id: !input hue
+ - service: light.turn_on
+ data:
+ hs_color: '{{ states(hue) }}, 100'
+ target:
+ entity_id: !input light
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input knob
+ to: 'hue_stop'
+ timeout:
+ milliseconds: !input hue_delay
+ continue_on_timeout: true
+ - service: input_boolean.turn_off
+ target:
+ entity_id: !input state
+# - conditions:
+# - condition: template
+# value_template: '{{ trigger.to_state.state == "hue_stop" }}'
+# sequence:
+# - service: input_boolean.turn_off
+# target:
+# entity_id: !input state
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "toggle" }}'
+ sequence:
+ - choose: []
+ default: !input "toggle"
+
+ - conditions:
+ - condition: trigger
+ id: brightness_change
+ - condition: state
+ entity_id: !input light
+ state: 'on'
+ sequence:
+ - service: input_number.set_value
+ data:
+ value: '{{ state_attr(light, ''brightness'') }}'
+ target:
+ entity_id: !input brightness
+
+# - conditions:
+# - condition: trigger
+# id: hue_move
+# sequence:
+# - repeat:
+# until:
+# - condition: state
+# entity_id: !input state
+# state: 'off'
+# - condition: template
+# value_template: '{{ wait.trigger != None }}'
+# sequence:
+# - if:
+# - condition: template
+# value_template: '{{ states(hue) | float < 359 }}'
+# then:
+# - service: input_number.increment
+# data: {}
+# target:
+# entity_id: !input hue
+# else:
+# - service: input_number.set_value
+# data:
+# value: 0
+# target:
+# entity_id: !input hue
+# - service: light.turn_on
+# data:
+# hs_color: '{{ states(hue) }}, 100'
+# target:
+# entity_id: !input light
+#
+# - wait_for_trigger:
+# - platform: state
+# entity_id: !input knob
+# to: 'hue_stop'
+# timeout:
+# milliseconds: !input hue_delay
+# continue_on_timeout: true
+#
+# - if:
+# - condition: template
+# value_template: '{{ wait.trigger != None }}'
+# then:
+# - service: input_boolean.turn_off
+# target:
+# entity_id: !input state
+# - delay:
+# timeout:
+# milliseconds: !input hue_delay
diff --git a/blueprints/automation/lights/knob-multi-bulb-control.yaml b/blueprints/automation/lights/knob-multi-bulb-control.yaml
new file mode 100644
index 0000000..412ce3d
--- /dev/null
+++ b/blueprints/automation/lights/knob-multi-bulb-control.yaml
@@ -0,0 +1,191 @@
+blueprint:
+ name: Knob Multi-Bulb Control
+ description: Knob (clicking/rotating) to control bulb (or LED band) brightness, color temperature, and hue
+ domain: automation
+ input:
+ knob:
+ name: knob
+ description: controller (select _action entity)
+ selector:
+ entity:
+ domain: sensor
+ lights:
+ name: Bulb
+ description: smart bulb or power socket
+ selector:
+ entity:
+ multiple: true
+ domain: light
+ toggle:
+ name: toggle
+ description: Script to run on clicking knob button (e.g. turn-of bulb power on/off)
+ default: []
+ selector:
+ action:
+
+ name:
+ name: name
+ description: Name of variables tracking bulb parameters (should include ***_current, ***_brighness0, ***_temperature0, ***_hue0
+ default: knob_office
+
+ hue_delay:
+ name: Hue Delay
+ description: Delay between hue changes
+ default: 500
+ selector:
+ number:
+ min: 100
+ max: 10000
+
+trigger:
+ - platform: state
+ id: knob
+ entity_id: !input "knob"
+ to:
+ - "toggle"
+ - "brightness_step_up"
+ - "brightness_step_down"
+ - "color_temperature_step_up"
+ - "color_temperature_step_down"
+ - "hue_move"
+
+variables:
+ name: !input name
+ current: 'input_number.{{ name + "_current" }}'
+ brightness: 'input_number.{{ name + "_brightness" }}{{ states(current) | int }}'
+ temperature: 'input_number.{{ name + "_temperature" }}{{ states(current) | int }}'
+ hue: 'input_number.{{ name + "_hue" }}{{ states(current) | int }}'
+
+ lights: !input lights
+ light: '{{ lights[states(current) | int] }}'
+
+ hue_delay: !input hue_delay
+
+mode: queued
+action:
+- choose:
+ - conditions:
+ - condition: trigger
+ id: knob
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "brightness_step_up" }}'
+ sequence:
+ - service: input_number.increment
+ target:
+ entity_id: '{{ brightness }}'
+ - service: light.turn_on
+ data:
+ brightness: '{{ states(brightness) }}'
+ target:
+ entity_id: '{{ light }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "brightness_step_down" }}'
+ sequence:
+ - service: input_number.decrement
+ data: {}
+ target:
+ entity_id: '{{ brightness }}'
+ - service: light.turn_on
+ data:
+ brightness: '{{ states(brightness) }}'
+ target:
+ entity_id: '{{ light }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "color_temperature_step_up" }}'
+ sequence:
+ - service: input_number.increment
+ target:
+ entity_id: '{{ temperature }}'
+ - service: light.turn_on
+ data:
+ kelvin: '{{ states(temperature) }}'
+ target:
+ entity_id: '{{ light }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "color_temperature_step_down" }}'
+ sequence:
+ - service: input_number.decrement
+ target:
+ entity_id: '{{ temperature }}'
+ - service: light.turn_on
+ data:
+ kelvin: '{{ states(temperature) }}'
+ target:
+ entity_id: '{{ light }}'
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "hue_move" }}'
+ sequence:
+ - repeat:
+ until:
+ - condition: template
+ value_template: '{{ wait.trigger != None }}'
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ states(hue) | float < 359 }}'
+ then:
+ - service: input_number.increment
+ data: {}
+ target:
+ entity_id: '{{ hue }}'
+ else:
+ - service: input_number.set_value
+ data:
+ value: 0
+ target:
+ entity_id: '{{ hue }}'
+ - service: light.turn_on
+ data:
+ hs_color: '{{ states(hue) }}, 100'
+ target:
+ entity_id: '{{ light }}'
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input knob
+ to: 'hue_stop'
+ timeout:
+ milliseconds: !input hue_delay
+ continue_on_timeout: true
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "toggle" }}'
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ toggle | length > 0 }}'
+ then:
+ - choose: []
+ default: !input "toggle"
+ else:
+ - service: input_number.increment
+ target:
+ entity_id: '{{ current }}'
+ - if:
+ - condition: template
+ value_template: '{{ states(current) | float == (lights | length) }}'
+ then:
+ - service: input_number.set_value
+ data:
+ value: 0
+ target:
+ entity_id: '{{ current }}'
+
+ - service: light.turn_off
+ target:
+ entity_id: '{{ lights[states(current) | int] }}'
+ - delay:
+ seconds: 1
+ - service: light.turn_on
+ data:
+ kelvin: '{{ states("input_number." + name + "_temperature" + (states(current) | int | string)) }}'
+ brightness: '{{ states("input_number." + name + "_brightness" + (states(current) | int | string)) }}'
+# hs_color: '{{ states("input_number." + name + "_hue" + (states(current) | int | string)) }}, 100'
+ target:
+ entity_id: '{{ lights[states(current) | int] }}'
diff --git a/blueprints/automation/lights/light_button.yaml b/blueprints/automation/lights/light_button.yaml
new file mode 100644
index 0000000..7aeb0ab
--- /dev/null
+++ b/blueprints/automation/lights/light_button.yaml
@@ -0,0 +1,171 @@
+blueprint:
+ name: Light Button
+ description: Button to control smart bulb and perform other actions when bulb turns on/off, plus additional actions on double-click and long-press (select *_action entity)
+ domain: automation
+ input:
+ button:
+ name: button
+ description: controller
+ selector:
+ entity:
+ domain: sensor
+ light:
+ name: light
+ description: another switch, smart bulb, or power socket
+ selector:
+ entity:
+ domain: light
+ temperature:
+ name: Temperature
+ description: Color Temperature
+ default: 6500
+ selector:
+ number:
+ min: 2000
+ max: 6500
+ on_click:
+ name: on_click
+ description: Additional actions to perform while turning on master light
+ default: []
+ selector:
+ action:
+ off_click:
+ name: off_click
+ description: Additional actions to perform while turning off master light
+ default: []
+ selector:
+ action:
+ dblclick:
+ name: dblclick
+ description: Actions to perform on double click
+ default: []
+ selector:
+ action:
+ longclick:
+ name: longclick
+ description: Actions to perform on long-press (single action)
+ default: []
+ selector:
+ action:
+ hold:
+ name: hold
+ description: Actions to perform on hold (iterative until released)
+ default: []
+ selector:
+ action:
+ hold_delay:
+ name: Hold Delay
+ description: Delay between calling hold actions (milliseconds)
+ default: 500
+ selector:
+ number:
+ min: 100
+ max: 10000
+
+ state:
+ name: State
+ description: Indicates if button is pressed and we currently changing the brightness
+ default: None
+ selector:
+ entity:
+ domain: input_boolean
+
+trigger:
+ - platform: state
+ id: button
+ entity_id: !input "button"
+ to:
+ - "single"
+ - "double"
+ - "hold"
+
+
+variables:
+ state: !input state
+ hold: !input hold
+
+# Can't do 'restart' since it will break wait_for_trigger
+mode: single
+
+action:
+- choose:
+ - conditions:
+ - condition: trigger
+ id: button
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "single" }}'
+ sequence:
+ - if:
+ - condition: state
+ entity_id: !input light
+ state: 'on'
+ then:
+ - parallel:
+ - service: light.turn_off
+ target:
+ entity_id: !input light
+ - choose: []
+ default: !input "off_click"
+ else:
+ - parallel:
+ - service: light.turn_on
+ data:
+ brightness_pct: 100
+ kelvin: !input temperature
+ target:
+ entity_id: !input light
+ - choose: []
+ default: !input "on_click"
+
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "double" }}'
+ sequence:
+ - choose: []
+ default: !input "dblclick"
+
+ - conditions:
+ - condition: template
+ value_template: '{{ trigger.to_state.state == "hold" }}'
+ sequence:
+ - choose: []
+ default: !input "longclick"
+
+ - if:
+ - condition: template
+ value_template: '{{ hold | length > 0 }}'
+ then:
+ - if:
+ - condition: template
+ value_template: '{{ state }}'
+ then:
+ - service: input_boolean.turn_on
+ target:
+ entity_id: !input state
+
+ - repeat:
+ until:
+ - condition: template
+ value_template: '{{ wait.trigger != None }}'
+ sequence:
+ - choose: []
+ default: !input "hold"
+
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input button
+ to: 'release'
+ timeout:
+ milliseconds: !input hold_delay
+ continue_on_timeout: true
+
+ - if:
+ - condition: template
+ value_template: '{{ state }}'
+ then:
+ - service: input_boolean.turn_off
+ target:
+ entity_id: !input state
diff --git a/blueprints/automation/lights/light_switch.yaml b/blueprints/automation/lights/light_switch.yaml
new file mode 100644
index 0000000..b3a4f81
--- /dev/null
+++ b/blueprints/automation/lights/light_switch.yaml
@@ -0,0 +1,115 @@
+blueprint:
+ name: Light Switch
+ description: Switch to control light bulb or power plug (including two-way synchronization)
+ domain: automation
+ input:
+ switch:
+ name: Switch
+ description: controller
+ selector:
+ entity:
+ domain: switch
+ light:
+ name: Bulb
+ description: smart bulb or power socket
+ selector:
+ entity:
+ domain: [light, switch]
+ dblclick:
+ name: dblclick
+ description: Actions to perform on double click
+ default: []
+ selector:
+ action:
+ on_click:
+ name: on_click
+ description: Additional actions to perform while turning on master switch
+ default: []
+ selector:
+ action:
+ off_click:
+ name: off_click
+ description: Additional actions to perform while turning off master switch
+ default: []
+ selector:
+ action:
+
+variables:
+ switch_entity: !input switch
+ light_entity: !input light
+ dblclick: !input dblclick
+
+trigger:
+ - platform: state
+ entity_id: !input "switch"
+ - platform: state
+ entity_id: !input "light"
+
+mode: single
+action:
+ - choose:
+ - conditions:
+ - "{{ trigger.entity_id == switch_entity }}"
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ dblclick | length > 0 }}'
+ then:
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input switch
+ timeout: '1'
+ continue_on_timeout: true
+ - if:
+ - condition: template
+ value_template: '{{ wait.trigger == None }}'
+ then:
+ - if:
+ - condition: template
+ value_template: '{{trigger.to_state.state == "on" }}'
+ then:
+ - parallel:
+ - choose: []
+ default: !input "on_click"
+ - service: homeassistant.turn_on
+ target:
+ entity_id: !input light
+ else:
+ - parallel:
+ - choose: []
+ default: !input "off_click"
+ - service: homeassistant.turn_off
+ target:
+ entity_id: !input light
+ else:
+ - choose: []
+ default: !input "dblclick"
+ else:
+ - if:
+ - condition: template
+ value_template: '{{trigger.to_state.state == "on" }}'
+ then:
+ - parallel:
+ - choose: []
+ default: !input "on_click"
+ - service: homeassistant.turn_on
+ target:
+ entity_id: !input light
+ else:
+ - parallel:
+ - choose: []
+ default: !input "off_click"
+ - service: homeassistant.turn_off
+ target:
+ entity_id: !input light
+ - conditions:
+ - "{{ trigger.entity_id == light_entity }}"
+ sequence:
+ - service: >
+ {% if trigger.to_state.state == "on" %}
+ switch.turn_on
+ {% else %}
+ switch.turn_off
+ {% endif %}
+ target:
+ entity_id: !input switch
diff --git a/blueprints/automation/lights/light_switch_combo.yaml b/blueprints/automation/lights/light_switch_combo.yaml
new file mode 100644
index 0000000..9ea8655
--- /dev/null
+++ b/blueprints/automation/lights/light_switch_combo.yaml
@@ -0,0 +1,92 @@
+blueprint:
+ name: Light Switch Combo
+ description: Switch to control another switch, light bulb, or power plug (no sync) and allow another action on double click
+ domain: automation
+ input:
+ switch:
+ name: switch
+ description: controller
+ selector:
+ entity:
+ domain: switch
+ master:
+ name: master
+ description: another switch, smart bulb, or power socket
+ selector:
+ entity:
+ dblclick:
+ name: dblclick
+ description: Actions to perform on double click
+ default: []
+ selector:
+ action:
+ on_click:
+ name: on_click
+ description: Additional actions to perform while turning on master switch
+ default: []
+ selector:
+ action:
+ off_click:
+ name: off_click
+ description: Additional actions to perform while turning off master switch
+ default: []
+ selector:
+ action:
+
+#variables:
+# switch_entity: !input switch
+# master_entity: !input master
+
+trigger:
+ - platform: state
+ entity_id: !input "switch"
+
+# Can't do 'restart' since it will break wait_for_trigger
+mode: single
+action:
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input switch
+ timeout: '1'
+ continue_on_timeout: true
+
+ - if:
+ - condition: template
+ value_template: '{{ wait.trigger == None }}'
+ then:
+ - if:
+ - condition: state
+ entity_id: !input switch
+ state: 'on'
+ then:
+ - if:
+ - condition: state
+ entity_id: !input master
+ state: 'on'
+ then:
+ - parallel:
+ - service: homeassistant.toggle
+ target:
+ entity_id: !input master
+ - choose: []
+ default: !input "off_click"
+ else:
+ - parallel:
+ - service: homeassistant.toggle
+ target:
+ entity_id: !input master
+ - choose: []
+ default: !input "on_click"
+ else:
+ - choose: []
+ default: !input "dblclick"
+# - service: switch.turn_off
+# target:
+# entity_id: switch.all_lights
+# - service: input_button.press
+# target:
+# entity_id: input_button.button_confirm
+
+ - service: switch.turn_off
+ target:
+ entity_id: !input switch
diff --git a/blueprints/automation/lights/light_sync.yaml b/blueprints/automation/lights/light_sync.yaml
new file mode 100644
index 0000000..44161ae
--- /dev/null
+++ b/blueprints/automation/lights/light_sync.yaml
@@ -0,0 +1,55 @@
+blueprint:
+ name: Light Sync
+ description: Allows to switch both parts of lustre with single click
+ domain: automation
+
+ input:
+ master:
+ name: Master
+ description: Master Switch
+ selector:
+ entity:
+ domain: switch
+ slave:
+ name: Slave
+ description: Slave Switch
+ selector:
+ entity:
+ domain: switch
+ on_click:
+ name: on_click
+ description: Additional actions to perform while turning on master switch
+ default: []
+ selector:
+ action:
+ off_click:
+ name: off_click
+ description: Additional actions to perform while turning off master switch
+ default: []
+ selector:
+ action:
+
+
+trigger:
+ - platform: state
+ entity_id: !input "master"
+
+mode: single
+action:
+ - if:
+ - condition: template
+ value_template: '{{trigger.to_state.state == "on" }}'
+ then:
+ - parallel:
+ - choose: []
+ default: !input "on_click"
+ - service: homeassistant.turn_on
+ target:
+ entity_id: !input slave
+ else:
+ - parallel:
+ - choose: []
+ default: !input "off_click"
+ - service: homeassistant.turn_off
+ target:
+ entity_id: !input slave
diff --git a/blueprints/automation/motion/motion_switch.yaml b/blueprints/automation/motion/motion_switch.yaml
new file mode 100644
index 0000000..c78e31f
--- /dev/null
+++ b/blueprints/automation/motion/motion_switch.yaml
@@ -0,0 +1,163 @@
+blueprint:
+ name: Motion-activated Switch
+ description: Turn on a light when motion is detected and surroundings are dark
+ domain: automation
+ input:
+ motion_entity:
+ name: Motion Sensor
+ selector:
+ entity:
+ domain: binary_sensor
+ device_class: motion
+
+ illumination_test:
+ name: Illumination Test
+ description: Select how to check if existing illumination is sufficient
+ default: sun
+ selector:
+ select:
+ options:
+ - label: Illuminance Sensor
+ value: sensor
+ - label: Sun Elevation
+ value: sun
+ - label: Always turn on lights
+ value: none
+ illuminance_entity:
+ name: Illuminance Sensor
+ description: Sensor providing information about illumination in the room (keep empty to rely on sun position)
+ selector:
+ entity:
+ domain: sensor
+ device_class: illuminance
+ lux_threshold:
+ name: LUX threshold
+ description: Threshold bellow which we consider that lighting is needed
+ default: 40
+ selector:
+ number:
+ min: 10
+ max: 1000
+ unit_of_measurement: lux
+ sun_elevation:
+ name: Sun Elevation
+ description: Sun elevation (suggested between 0 and -6) when dusks settles and we need to turn on lights)
+ default: 0
+ selector:
+ number:
+ min: -30
+ max: 30
+ unit_of_measurement: °
+
+
+ light_target:
+ name: Light Target
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [switch, light]
+ no_motion_wait:
+ name: Wait time
+ description: Time to leave the light on after last motion is detected.
+ default: 120
+ selector:
+ number:
+ min: 0
+ max: 3600
+ unit_of_measurement: seconds
+
+ on_click:
+ name: on_click
+ description: Additional actions to perform while turning on master light
+ default: []
+ selector:
+ action:
+ off_click:
+ name: off_click
+ description: Additional actions to perform while turning off master light
+ default: []
+ selector:
+ action:
+
+
+
+variables:
+ lux_threshold: !input lux_threshold
+ illuminance_entity: !input illuminance_entity
+ test: !input illumination_test
+
+ current_lux: '{{ (states(illuminance_entity) | float) }}'
+
+# If motion is detected within the delay,
+# we restart the script.
+mode: restart
+max_exceeded: silent
+
+trigger:
+ - platform: state
+ id: "turn_on"
+ entity_id: !input motion_entity
+ from: "off"
+ to: "on"
+ - platform: state
+ id: "turn_off"
+ entity_id: !input motion_entity
+ from: "on"
+ to: "off"
+ for:
+ seconds: !input no_motion_wait
+
+action:
+ - choose:
+ - conditions:
+ - condition: trigger
+ id: "turn_on"
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ test == "sensor" }}'
+ sequence:
+ - if:
+ - condition: template
+ value_template: '{{ (states(illuminance_entity) | float) < lux_threshold }}'
+ then:
+ - choose: []
+ default: !input "on_click"
+ - service: switch.turn_on
+ target:
+ entity_id: !input light_target
+
+ - conditions:
+ - condition: template
+ value_template: '{{ test == "sun" }}'
+ sequence:
+ - if:
+ - condition: numeric_state
+ entity_id: sun.sun
+ attribute: elevation
+ below: !input sun_elevation
+ then:
+ - choose: []
+ default: !input "on_click"
+ - service: switch.turn_on
+ target:
+ entity_id: !input light_target
+ default:
+ - choose: []
+ default: !input "on_click"
+ - service: switch.turn_on
+ target:
+ entity_id: !input light_target
+
+ - conditions:
+ - condition: trigger
+ id: "turn_off"
+ sequence:
+ - choose: []
+ default: !input "off_click"
+ - service: switch.turn_off
+ target:
+ entity_id: !input light_target
+ default: []
diff --git a/blueprints/script/camera/security_camera.yaml b/blueprints/script/camera/security_camera.yaml
new file mode 100644
index 0000000..0430266
--- /dev/null
+++ b/blueprints/script/camera/security_camera.yaml
@@ -0,0 +1,142 @@
+blueprint:
+ name: Security Camera Streamer
+ description: Stream photos from security camera
+ domain: script
+ input:
+ camera:
+ name: Camera
+ description: Camera
+ default: camera.192_168_50_51
+ selector:
+ entity:
+ domain: camera
+ motion_sensor:
+ name: Motion Sensor
+ description: Sensor detecting if there are motions to trigger the camera
+ selector:
+ entity:
+ domain: binary_sensor
+ device_class: motion
+ host:
+ name: Host
+ description: Host running camera server
+ default: http://127.0.0.1:8123
+ caption:
+ name: Caption
+ description: Caption to send in telegram message
+ default: 'Intusion Alert: '
+ lights_on:
+ name: Lights On
+ description: List of lights to turn on
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [light, switch]
+ lights_off:
+ name: Lights Off
+ description: List of lights to turn off
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [light, switch]
+ prepare:
+ name: prepare
+ description: Actions to perform before shooting photos
+ default: []
+ selector:
+ action:
+ delay:
+ name: Delay
+ description: Delay between shots (seconds)
+ default: 5
+ selector:
+ number:
+ min: 1
+ max: 3600
+ unit_of_measurement: s
+ fast_shots:
+ name: Fast Shots
+ description: Number of initial shots with short delay
+ default: 10
+ selector:
+ number:
+ min: 0
+ max: 50
+ fast_delay:
+ name: Fast Delay
+ description: Delay between fast shots (milliseconds)
+ default: 1000
+ selector:
+ number:
+ min: 100
+ max: 10000
+ unit_of_measurement: ms
+
+variables:
+ camera: !input camera
+ smartpi: !input host
+ caption: !input caption
+ delay: !input delay
+ fast_shots: !input fast_shots
+ fast_delay: !input fast_delay
+
+mode: restart
+sequence:
+ - parallel:
+ - service: homeassistant.turn_on
+ target:
+ entity_id: !input lights_on
+ - service: homeassistant.turn_off
+ target:
+ entity_id: !input lights_off
+ - choose: []
+ default: !input "prepare"
+ - sequence:
+ - service: telegram_bot.send_photo
+ data:
+ disable_notification: false
+ caption: '{{ caption }} at {{ states("sensor.date_time_iso")
+ }}'
+ url: '{{ smartpi + state_attr(camera, "entity_picture") }}'
+ - repeat:
+ while:
+ - condition: template
+ value_template: '{{ repeat.index < fast_shots }}'
+ sequence:
+ - service: telegram_bot.send_photo
+ data:
+ disable_notification: true
+ caption: '{{ caption }} {{ repeat.index }} (fast)'
+ url: '{{ smartpi + state_attr(camera, "entity_picture") }}'
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 0
+ milliseconds: '{{ fast_delay }}'
+ - repeat:
+# About 30 seconds delay before occupancy clears (both ways via state or device)
+ until:
+ - condition: state
+ entity_id: !input motion_sensor
+ state: 'off'
+# for:
+# seconds: 2
+# - type: is_no_motion
+# condition: device
+# device_id: 6deb0a6fb7a4a849ba22afc166cf9919
+# device_id: '{{ device_id("binary_sensor.0x00158d0004485e0b_occupancy") }}'
+# entity_id: binary_sensor.0x00158d0004485e0b_occupancy
+# domain: binary_sensor
+ sequence:
+ - service: telegram_bot.send_photo
+ data:
+ disable_notification: true
+ caption: '{{ caption }} {{ repeat.index + fast_shots - 1 }}'
+ url: '{{ smartpi + state_attr(camera, "entity_picture") }}'
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: '{{ delay }}'
+ milliseconds: 0
diff --git a/blueprints/script/camera/send_photo.yaml b/blueprints/script/camera/send_photo.yaml
new file mode 100644
index 0000000..2b14639
--- /dev/null
+++ b/blueprints/script/camera/send_photo.yaml
@@ -0,0 +1,37 @@
+blueprint:
+ name: Send Photo
+ description: Send a single photo from the camera
+ domain: script
+ input:
+ camera:
+ name: Camera
+ description: Camera
+ default: camera.192_168_50_51
+ selector:
+ entity:
+ domain: camera
+ host:
+ name: Host
+ description: Host running camera server
+ default: http://127.0.0.1:8123
+ caption:
+ name: Caption
+ description: Caption to send in telegram message
+ default: ''
+
+variables:
+ camera: !input camera
+ smartpi: !input host
+ caption: !input caption
+# caption: AubergineView
+# delay: 5
+# fast_shots: 15
+# fast_delay: 1000
+
+mode: single
+sequence:
+ - service: telegram_bot.send_photo
+ data:
+ disable_notification: false
+ caption: '{{ caption }} at {{ states("sensor.date_time_iso") }}'
+ url: '{{ smartpi + state_attr(camera, "entity_picture") }}'
diff --git a/blueprints/script/devices/aircon.yaml b/blueprints/script/devices/aircon.yaml
new file mode 100644
index 0000000..b2641be
--- /dev/null
+++ b/blueprints/script/devices/aircon.yaml
@@ -0,0 +1,135 @@
+blueprint:
+ name: AirCon
+ description: Stream photos from security camera
+ domain: script
+ input:
+ power:
+ name: Power
+ description: Aircon Smart Power Plug
+ selector:
+ entity:
+ domain: switch
+ temperature:
+ name: Temperature
+ description: Temperature sensor
+ selector:
+ entity:
+ domain: sensor
+ device_class: temperature
+ cold_temp:
+ name: Cold Temp
+ description: Temperature threshold to turn on heating
+ default: 16
+ selector:
+ number:
+ min: 8
+ max: 20
+ unit_of_measurement: C
+ hot_temp:
+ name: Hot Temp
+ description: Temperature threshold to turn on cooling
+ default: 20
+ selector:
+ number:
+ min: 20
+ max: 36
+ unit_of_measurement: C
+ cool_scene:
+ name: Cool Scene
+ description: Cooling scene of Aircon
+ selector:
+ entity:
+ domain: scene
+ heat_scene:
+ name: Heat Scene
+ description: Warming scene of Aircon
+ selector:
+ entity:
+ domain: scene
+ off_scene:
+ name: Off Scene
+ description: Off scene of Aircon
+ selector:
+ entity:
+ domain: scene
+ confirm:
+ name: Confirm
+ description: Confirmation script
+ default: []
+ selector:
+ action:
+
+variables:
+ temp: !input temperature
+ cold: !input cold_temp
+ hot: !input hot_temp
+
+alias: AirCon
+sequence:
+ - if:
+ - condition: state
+ entity_id: !input power
+ state: 'on'
+ then:
+ - service: scene.turn_on
+ target:
+ entity_id: !input off_scene
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 5
+ milliseconds: 0
+ - service: switch.turn_off
+ target:
+ entity_id: !input power
+ else:
+ - service: switch.turn_on
+ target:
+ entity_id: !input power
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 5
+ milliseconds: 0
+ - choose:
+ - conditions:
+ - "{{ states('sensor.bedroom_temp_temperature') | float < cold }}"
+ sequence:
+ - service: scene.turn_on
+ target:
+ entity_id: !input heat_scene
+ - conditions:
+ - "{{ states('sensor.bedroom_temp_temperature') | float > hot }}"
+ sequence:
+ - service: scene.turn_on
+ target:
+ entity_id: !input cool_scene
+ default:
+ - service: switch.turn_off
+ target:
+ entity_id: !input power
+ - service: switch.turn_on
+ target:
+ entity_id: !input power
+ - choose: []
+ default: !input "confirm"
+
+# - if:
+# - condition: state
+# entity_id: switch.bedroom_aircon
+# state: 'off'
+# then:
+# - service: switch.turn_on
+# data: {}
+# target:
+# entity_id: switch.bedroom_aircon
+# - delay:
+# hours: 0
+# minutes: 0
+# seconds: 5
+# milliseconds: 0
+ - service: scene.turn_on
+ target:
+ entity_id: scene.hyundai_aircon_cool_18
+ metadata: {}
+mode: single
diff --git a/blueprints/script/devices/kodi-alarm.yaml b/blueprints/script/devices/kodi-alarm.yaml
new file mode 100644
index 0000000..48ecd1c
--- /dev/null
+++ b/blueprints/script/devices/kodi-alarm.yaml
@@ -0,0 +1,29 @@
+blueprint:
+ name: Kodi - Play Alarm
+ description: Stream photos from security camera
+ domain: script
+ input:
+ player:
+ name: Player
+ description: KoDi Media Player
+ selector:
+ entity:
+ domain: media_player
+ song:
+ name: Player
+ description: KoDi Media Player
+ selector:
+ media: {}
+
+mode: restart
+sequence:
+ - service: media_player.volume_set
+ data:
+ volume_level: 1
+ target:
+ entity_id: !input player
+ - service: media_player.play_media
+ target:
+ entity_id: !input player
+ data:
+ !input song
diff --git a/blueprints/script/homeassistant/confirmable_notification.yaml b/blueprints/script/homeassistant/confirmable_notification.yaml
new file mode 100644
index 0000000..d52e5a6
--- /dev/null
+++ b/blueprints/script/homeassistant/confirmable_notification.yaml
@@ -0,0 +1,84 @@
+blueprint:
+ name: Confirmable Notification
+ description: >-
+ A script that sends an actionable notification with a confirmation before
+ running the specified action.
+ domain: script
+ source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml
+ input:
+ notify_device:
+ name: Device to notify
+ description: Device needs to run the official Home Assistant app to receive notifications.
+ selector:
+ device:
+ integration: mobile_app
+ title:
+ name: "Title"
+ description: "The title of the button shown in the notification."
+ default: ""
+ selector:
+ text:
+ message:
+ name: "Message"
+ description: "The message body"
+ selector:
+ text:
+ confirm_text:
+ name: "Confirmation Text"
+ description: "Text to show on the confirmation button"
+ default: "Confirm"
+ selector:
+ text:
+ confirm_action:
+ name: "Confirmation Action"
+ description: "Action to run when notification is confirmed"
+ default: []
+ selector:
+ action:
+ dismiss_text:
+ name: "Dismiss Text"
+ description: "Text to show on the dismiss button"
+ default: "Dismiss"
+ selector:
+ text:
+ dismiss_action:
+ name: "Dismiss Action"
+ description: "Action to run when notification is dismissed"
+ default: []
+ selector:
+ action:
+
+mode: restart
+
+sequence:
+ - alias: "Set up variables"
+ variables:
+ action_confirm: "{{ 'CONFIRM_' ~ context.id }}"
+ action_dismiss: "{{ 'DISMISS_' ~ context.id }}"
+ - alias: "Send notification"
+ domain: mobile_app
+ type: notify
+ device_id: !input notify_device
+ title: !input title
+ message: !input message
+ data:
+ actions:
+ - action: "{{ action_confirm }}"
+ title: !input confirm_text
+ - action: "{{ action_dismiss }}"
+ title: !input dismiss_text
+ - alias: "Awaiting response"
+ wait_for_trigger:
+ - platform: event
+ event_type: mobile_app_notification_action
+ event_data:
+ action: "{{ action_confirm }}"
+ - platform: event
+ event_type: mobile_app_notification_action
+ event_data:
+ action: "{{ action_dismiss }}"
+ - choose:
+ - conditions: "{{ wait.trigger.event.data.action == action_confirm }}"
+ sequence: !input confirm_action
+ - conditions: "{{ wait.trigger.event.data.action == action_dismiss }}"
+ sequence: !input dismiss_action
diff --git a/blueprints/script/lights/turn_off_lights.yaml b/blueprints/script/lights/turn_off_lights.yaml
new file mode 100644
index 0000000..e5538b7
--- /dev/null
+++ b/blueprints/script/lights/turn_off_lights.yaml
@@ -0,0 +1,32 @@
+blueprint:
+ name: turn_off_lights
+ description: Turns off a group of lights
+ domain: script
+ input:
+ lights:
+ name: Affected class of lights
+ description: "Which class of lights to turn off: all, bedroom, living, hall"
+ default: "all"
+
+variables:
+ name: !input lights
+ std: "switch.lights_{{ name }}"
+ manual: "switch.lights_{{ name }}_manual"
+
+
+mode: single
+
+sequence:
+ - service: switch.turn_off
+ target:
+ entity_id: "{{ std, manual }}"
+
+ - delay:
+ hours: 0
+ minutes: 0
+ seconds: 3
+ milliseconds: 0
+
+ - service: switch.turn_on
+ target:
+ entity_id: "{{ [ manual ] }}"
diff --git a/configuration.yaml b/configuration.yaml
new file mode 100644
index 0000000..7310d24
--- /dev/null
+++ b/configuration.yaml
@@ -0,0 +1,89 @@
+
+# Loads default set of integrations. Do not remove.
+default_config:
+
+#logger:
+# default: debug
+
+lovelace:
+ mode: yaml
+ resources:
+ - url: "/local/community/lovelace-layout-card/layout-card.js"
+ type: "module"
+ - url: "/local/community/restriction-card/restriction-card.js?hacstag=215633404127"
+ type: "module"
+
+frontend:
+ themes: !include_dir_merge_named themes
+
+
+# Trusted networks should go first or allow_bypass_login will be ignored
+homeassistant:
+ auth_providers:
+ - type: trusted_networks
+ trusted_networks:
+ - 192.168.50.0/23
+ trusted_users:
+ 192.168.50.0/23: 31a296cc30a243089f121cef93b46cc0
+ 192.168.50.234: 31a296cc30a243089f121cef93b46cc0
+ 192.168.51.118: 31a296cc30a243089f121cef93b46cc0
+ allow_bypass_login: true
+# - type: legacy_api_password
+# api_password: !secret api_password
+ - type: homeassistant
+
+# Hass is bad with self-signed certificates. Therefore, we use letsencrypt at darksoft.org and do proxying there
+http:
+# ssl_certificate: /config/ssl/smartpi.suren.me.crt
+# ssl_key: /config/ssl/smartpi.suren.me.key
+ use_x_forwarded_for: true
+ trusted_proxies:
+ - 192.168.21.1
+ - 192.168.24.1
+
+# Text to speech
+tts:
+ - platform: google_translate
+
+telegram_bot:
+ - platform: polling
+ api_key: 5161737507:AAHAZZr_eh8ZOkhdg59XVIciGS2BkVBQU7M
+ allowed_chat_ids:
+ - -1001582338242
+
+notify:
+ - platform: telegram
+ name: SmartPI
+ chat_id: -1001582338242
+
+#python_script:
+
+ffmpeg:
+ ffmpeg_bin: /usr/bin/ffmpeg
+
+wake_on_lan:
+
+sensor:
+ - platform: time_date
+ display_options:
+ - 'time'
+ - 'date'
+ - 'date_time'
+ - 'date_time_utc'
+ - 'date_time_iso'
+ - 'time_date'
+ - 'time_utc'
+ - 'beat'
+
+
+automation ui: !include automations.yaml
+script ui: !include scripts.yaml
+scene ui: !include scenes.yaml
+
+
+group: !include custom/group.yaml
+template: !include custom/template.yaml
+input_number: !include custom/input_number.yaml
+binary_sensor: !include custom/binary_sensor.yaml
+script manual: !include_dir_merge_named custom/scripts/
+automation manual: !include_dir_merge_list custom/automation/
diff --git a/custom/binary_sensor.yaml b/custom/binary_sensor.yaml
new file mode 100644
index 0000000..350a40f
--- /dev/null
+++ b/custom/binary_sensor.yaml
@@ -0,0 +1 @@
+#binary_sensor:
diff --git a/custom/group.yaml b/custom/group.yaml
new file mode 100644
index 0000000..7815cce
--- /dev/null
+++ b/custom/group.yaml
@@ -0,0 +1,10 @@
+ master_phones:
+ name: "master_phones"
+ entities:
+ - device_tracker.legion8
+ - device_tracker.lm_g810
+
+ master_laptops:
+ name: "master_laptops"
+ entities:
+ - device_tracker.nyx
diff --git a/custom/input_number.yaml b/custom/input_number.yaml
new file mode 100644
index 0000000..0fd1307
--- /dev/null
+++ b/custom/input_number.yaml
@@ -0,0 +1,37 @@
+# Parameters for Bulbs
+#- input_number:
+ knob_office_current:
+ min: 0.0
+ max: 10.0
+ step: 1.0
+ initial: 0.0
+ knob_office_brightness0:
+ min: 0.0
+ max: 255.0
+ step: 25.0
+ initial: 255.0
+ knob_office_temperature0:
+ min: 2000.0
+ max: 6500.0
+ step: 500.0
+ initial: 6500.0
+ knob_office_hue0:
+ min: 0.0
+ max: 360.0
+ step: 20.0
+ initial: 0.0
+ knob_office_brightness1:
+ min: 0.0
+ max: 255.0
+ step: 25.0
+ initial: 255.0
+ knob_office_temperature1:
+ min: 2000.0
+ max: 6500.0
+ step: 500.0
+ initial: 6500.0
+ knob_office_hue1:
+ min: 0.0
+ max: 360.0
+ step: 20.0
+ initial: 0.0
diff --git a/custom/scripts/sleep-and-wake.yaml b/custom/scripts/sleep-and-wake.yaml
new file mode 100644
index 0000000..b737e8d
--- /dev/null
+++ b/custom/scripts/sleep-and-wake.yaml
@@ -0,0 +1,129 @@
+sleep_and_wake:
+ alias: "Sleep and Wake"
+ description: "Sleep, Hibernate, and Wake actions for Office and Complete House"
+ fields:
+ mode:
+ name: Mode
+ description: "Operation mode: Sleep is non-intrusive action while Hibernate aimed on maximum power-savings and security"
+ required: true
+ selector:
+ select:
+ options:
+ - hibernate
+ - sleep
+ - wake
+ target:
+ name: Target
+ description: "Area: Office or complete House (more areas might be added in future)"
+ required: true
+ selector:
+ select:
+ options:
+ - office
+ - house
+
+ mode: single
+
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ target == "office" }}'
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "sleep" }}'
+ sequence:
+ - parallel:
+ - service: switch.turn_off
+ target:
+ entity_id: switch.smart_power_strip_pro_socket_1
+ - service: switch.turn_off
+ target:
+ entity_id: switch.living_lights_right
+
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "hibernate" }}'
+ sequence:
+ - parallel:
+ - service: media_player.media_stop
+ target:
+ entity_id: media_player.smartpi
+# Wait until we fix both sleep and WOL on laptop
+# - service: switch.turn_off
+# target:
+# entity_id: switch.plugs_office
+ - service: switch.turn_off
+ target:
+ entity_id: switch.smart_power_strip_pro_socket_1
+ - service: switch.turn_off
+ target:
+ entity_id: switch.living_lights_right
+
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "wake" }}'
+ sequence:
+ - parallel:
+ - service: switch.turn_on
+ target:
+ entity_id: switch.plugs_office
+ - service: wake_on_lan.send_magic_packet
+ data:
+ mac: "e8:6a:64:7b:5d:0a"
+ - delay:
+ seconds: 2
+ - service: wake_on_lan.send_magic_packet
+ data:
+ mac: "e8:6a:64:7b:5d:0a"
+
+ - conditions:
+ - condition: template
+ value_template: '{{ target == "house" }}'
+ sequence:
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "sleep" }}'
+ sequence:
+ - parallel:
+# Wait until we fix both sleep and WOL on laptop
+# - service: switch.turn_off
+# target:
+# entity_id: switch.plugs_office
+ - service: switch.turn_off
+ target:
+ entity_id: switch.smart_power_strip_pro_socket_1
+ - service: switch.turn_off
+ target:
+ entity_id: switch.lights_all
+ # Thats a better way to allow some time for leaving
+ - service: switch.turn_on
+ target:
+ entity_id: switch.hall_lights_right
+
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "hibernate" }}'
+ sequence:
+ - service: switch.turn_off
+ target:
+ entity_id:
+ - switch.lights_all
+ - switch.plugs_manual
+ - switch.plugs_controlled
+ - service: switch.turn_on
+ target:
+ entity_id: switch.hall_lights_right
+
+ - conditions:
+ - condition: template
+ value_template: '{{ mode == "wake" }}'
+ sequence:
+ - service: switch.turn_on
+ target:
+ entity_id:
+ - switch.plugs_kitchen
+ - switch.bedroom_bedsidelampsocket
diff --git a/custom/template.yaml b/custom/template.yaml
new file mode 100644
index 0000000..710b936
--- /dev/null
+++ b/custom/template.yaml
@@ -0,0 +1,54 @@
+# Manual lights
+
+- trigger:
+ - platform: state
+ entity_id: "switch.bedroom_bedsidelampsocket"
+ - platform: state
+ entity_id: "sensor.bedroom_bedsidelampsocket_power"
+ binary_sensor:
+ - name: "Bedroom/BedsideLamp"
+ device_class: light
+ state: >
+ {{ is_state("switch.bedroom_bedsidelampsocket", "on") and ((states("sensor.bedroom_bedsidelampsocket_power") | float) > 1) }}
+
+- sensor:
+ - name: "Power SmartPI"
+ unit_of_measurement: "W"
+ state: >
+ {% set readings = [ states('sensor.living_office_power'),
+ states('sensor.office_shelftop_power') | float(0), states('sensor.office_shelfbottom_power') | float(0),
+ states('sensor.office_table_power') | float(0), states('sensor.office_aircon_power') | float(0) ] %}
+ {{ 'unavailable' if readings[0] == 'unavailable' else readings[0] | float - readings[1] - readings[2] - readings[3] - readings[4] }}
+
+ - name: "Power Office"
+ unit_of_measurement: "W"
+ state: >
+ {{ expand(states.switch.power_office) | selectattr('state') | map(attribute='entity_id')
+ | map('regex_replace','^switch(.*)$','sensor\\1_power') | map('expand') | map(attribute=0) | select("defined")
+ | selectattr('state','is_number') | map(attribute='state') | map('float') | list | sum }}
+
+ - name: "Power Infrastructure"
+ unit_of_measurement: "W"
+ state: >
+ {{ states('sensor.power_smartpi') | float + expand(states.switch.power_infrastructure) | selectattr('state') | map(attribute='entity_id')
+ | map('regex_replace','^switch(.*)$','sensor\\1_power') | map('expand') | map(attribute=0) | select("defined")
+ | selectattr('state','is_number') | map(attribute='state') | map('float') | list | sum }}
+ - name: "Power Kitchen"
+ unit_of_measurement: "W"
+ state: >
+ {{ expand(states.switch.power_kitchen) | selectattr('state') | map(attribute='entity_id')
+ | map('regex_replace','^switch(.*)$','sensor\\1_power') | map('expand') | map(attribute=0) | select("defined")
+ | selectattr('state','is_number') | map(attribute='state') | map('float') | list | sum }}
+ - name: "Power Climate"
+ unit_of_measurement: "W"
+ state: >
+ {{ expand(states.switch.power_climate) | selectattr('state') | map(attribute='entity_id')
+ | map('regex_replace','^switch(.*)$','sensor\\1_power') | map('expand') | map(attribute=0) | select("defined")
+ | selectattr('state','is_number') | map(attribute='state') | map('float') | list | sum }}
+ - name: "Power Lights"
+ unit_of_measurement: "W"
+ state: >
+ {{ expand(states.switch.power_lights) | selectattr('state') | map(attribute='entity_id')
+ | map('regex_replace','^switch(.*)$','sensor\\1_power') | map('expand') | map(attribute=0) | select("defined")
+ | selectattr('state','is_number') | map(attribute='state') | map('float') | list | sum }}
+
diff --git a/python_scripts/set_state.py b/python_scripts/set_state.py
new file mode 100644
index 0000000..fae5c7c
--- /dev/null
+++ b/python_scripts/set_state.py
@@ -0,0 +1,27 @@
+#==================================================================================================
+# python_scripts/set_state.py
+#==================================================================================================
+
+#--------------------------------------------------------------------------------------------------
+# Set the state or other attributes for the entity specified in the Automation Action
+#--------------------------------------------------------------------------------------------------
+
+inputEntity = data.get('entity_id')
+if inputEntity is None:
+ logger.warning("===== entity_id is required if you want to set something.")
+else:
+ inputStateObject = hass.states.get(inputEntity)
+ inputState = inputStateObject.state
+ inputAttributesObject = inputStateObject.attributes.copy()
+
+ for item in data:
+ newAttribute = data.get(item)
+ logger.debug("===== item = {0}; value = {1}".format(item,newAttribute))
+ if item == 'entity_id':
+ continue # already handled
+ elif item == 'state':
+ inputState = newAttribute
+ else:
+ inputAttributesObject[item] = newAttribute
+
+ hass.states.set(inputEntity, inputState, inputAttributesObject)
diff --git a/scenes.yaml b/scenes.yaml
new file mode 100644
index 0000000..9c03dd5
--- /dev/null
+++ b/scenes.yaml
@@ -0,0 +1,9 @@
+- id: '1672945588841'
+ name: Test
+ entities:
+ scene.hyundai_aircon_cool_18:
+ friendly_name: Hyundai AirCon Cool 18
+ state: '2023-01-05T19:02:44.819188+00:00'
+ metadata:
+ scene.hyundai_aircon_cool_18:
+ entity_only: false
diff --git a/scripts.yaml b/scripts.yaml
new file mode 100644
index 0000000..59b3898
--- /dev/null
+++ b/scripts.yaml
@@ -0,0 +1,97 @@
+turn_off_all_lights:
+ alias: turn_off_all_lights
+ use_blueprint:
+ path: lights/turn_off_lights.yaml
+ mode: single
+'1672632854824':
+ alias: Send Photo
+ use_blueprint:
+ path: camera/send_photo.yaml
+ input:
+ host: http://127.0.0.1:8123
+'1672637427937':
+ alias: Security Camera
+ use_blueprint:
+ path: camera/security_camera.yaml
+ input:
+ lights_on:
+ - switch.entrance_lights_center
+ lights_off:
+ - switch.hall_lights_left
+ fast_shots: 10
+ motion_sensor: binary_sensor.hall_motions_occupancy
+turn_off_bedroom_lights:
+ alias: turn_off_bedroom_lights
+ use_blueprint:
+ path: lights/turn_off_lights.yaml
+ input:
+ lights: bedroom
+ mode: single
+bedroom_aircon:
+ alias: Bedroom AirCon
+ use_blueprint:
+ path: devices/aircon.yaml
+ input:
+ power: switch.bedroom_aircon
+ temperature: sensor.bedroom_temp_temperature
+ cool_scene: scene.hyundai_aircon_cool_18
+ heat_scene: scene.hyundai_aircon_warm_28
+ off_scene: scene.hyundai_aircon_off
+ confirm:
+ - service: input_button.press
+ data: {}
+ target:
+ entity_id: input_button.button_confirm
+ mode: single
+'1672883652038':
+ sequence:
+ - service: media_player.volume_set
+ data:
+ volume_level: 1
+ target:
+ entity_id: media_player.smartpi
+ - service: media_player.play_media
+ target:
+ entity_id: media_player.smartpi
+ data:
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1$0$0
+ media_content_type: audio/mpeg
+ metadata:
+ title: Wish I Had An Angel
+ thumbnail:
+ media_class: music
+ children_media_class:
+ navigateIds:
+ - {}
+ - media_content_type: app
+ media_content_id: media-source://dlna_dms
+ - media_content_type: channel
+ media_content_id: media-source://dlna_dms/asgard/:0
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1
+ - media_content_type: object.container.storageFolder
+ media_content_id: media-source://dlna_dms/asgard/:64$0$5$1$0
+ mode: restart
+ alias: Kodi - Play Angel Alarm
+silence:
+ alias: Silence
+ sequence:
+ - service: media_player.media_stop
+ data: {}
+ target:
+ entity_id: media_player.smartpi
+ mode: single
+kodi_sleep:
+ alias: 'Kodi: Sleep'
+ sequence:
+ - service: media_player.media_stop
+ data: {}
+ target:
+ entity_id: media_player.smartpi
+ mode: single
diff --git a/ui-lovelace.yaml b/ui-lovelace.yaml
new file mode 100644
index 0000000..f58afbc
--- /dev/null
+++ b/ui-lovelace.yaml
@@ -0,0 +1,9 @@
+views:
+ - title: Overview (redirect)
+ cards:
+ - type: entities
+ title: Redirect
+ entities:
+ - url: /lovelace-status/0
+ type: weblink
+