diff options
26 files changed, 1707 insertions, 624 deletions
@@ -2,7 +2,6 @@ secrets.yaml keys backups -custom_components *\.log *\.log\.* *\.db @@ -10,6 +9,7 @@ custom_components themes tts www +ha_token .cloud/ .storage/auth @@ -37,3 +37,9 @@ www .storage/core.config_entries .storage/core.device_registry .storage/sonoff/ + +# Standard custom components (unpatched) +custom_components/ble_monitor +custom_components/hacs +custom_components/remote_homeassistant +custom_components/sonoff diff --git a/.storage/core.area_registry b/.storage/core.area_registry index a7348bb..f70174f 100644 --- a/.storage/core.area_registry +++ b/.storage/core.area_registry @@ -5,85 +5,94 @@ "data": { "areas": [ { - "name": "Living Room", - "id": "living_room", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "living_room", + "labels": [], + "name": "Living Room", + "picture": null }, { - "name": "Kitchen", - "id": "kitchen", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "kitchen", + "labels": [], + "name": "Kitchen", + "picture": null }, { - "name": "Bedroom", - "id": "bedroom", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "bedroom", + "labels": [], + "name": "Bedroom", + "picture": null }, { - "name": "Hall", - "id": "hall", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "hall", + "labels": [], + "name": "Hall", + "picture": null }, { - "name": "Virtual", - "id": "virtual", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "virtual", + "labels": [], + "name": "Virtual", + "picture": null }, { - "name": "Bathroom", - "id": "bathroom", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "bathroom", + "labels": [], + "name": "Bathroom", + "picture": null }, { - "name": "Portable", - "id": "portable", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "portable", + "labels": [], + "name": "Portable", + "picture": null }, { - "name": "Guestroom", - "id": "guestroom", - "picture": null, "aliases": [], - "icon": null, "floor_id": null, - "labels": [] + "icon": null, + "id": "guestroom", + "labels": [], + "name": "Guestroom", + "picture": null }, { - "name": "KIT", - "id": "kit", - "picture": null, "aliases": [], + "floor_id": null, "icon": null, + "id": "kit", + "labels": [], + "name": "KIT", + "picture": null + }, + { + "aliases": [], "floor_id": null, - "labels": [] + "icon": null, + "id": "waldstadt", + "labels": [], + "name": "Waldstadt", + "picture": null } ] } diff --git a/.storage/homeassistant.exposed_entities b/.storage/homeassistant.exposed_entities index 521fdf3..a49a648 100644 --- a/.storage/homeassistant.exposed_entities +++ b/.storage/homeassistant.exposed_entities @@ -626,6 +626,195 @@ "should_expose": false } } + }, + "switch.0xa4c13895a5fc1187": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "select.0xa4c13895a5fc1187_power_outage_memory": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "select.0xa4c13895a5fc1187_indicator_mode": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.0xa4c13895a5fc1187_power": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.0xa4c13895a5fc1187_energy": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "lock.0xa4c13895a5fc1187_child_lock": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "update.0xa4c13895a5fc1187": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.0x00158d0009465217_battery": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "binary_sensor.0x00158d0009465217_contact": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "sensor.0x00158d0009465217_device_temperature": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "sensor.0x00158d0009465217_power_outage_count": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "event.backup_automatic_backup": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.backup_backup_manager_state": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.backup_next_scheduled_automatic_backup": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.backup_last_successful_automatic_backup": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.backup_last_attempted_automatic_backup": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "binary_sensor.zigbee2mqtt_bridge_connection_state": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "button.zigbee2mqtt_bridge_restart": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "select.zigbee2mqtt_bridge_log_level": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.zigbee2mqtt_bridge_version": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "switch.zigbee2mqtt_bridge_permit_join": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "sensor.0xa4c138f102389c3b_temperature": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "sensor.0xa4c138f102389c3b_humidity": { + "assistants": { + "conversation": { + "should_expose": true + } + } + }, + "select.0xa4c138f102389c3b_temperature_unit": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "number.0xa4c138f102389c3b_temperature_calibration": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "number.0xa4c138f102389c3b_humidity_calibration": { + "assistants": { + "conversation": { + "should_expose": false + } + } + }, + "sensor.0xa4c138f102389c3b_battery": { + "assistants": { + "conversation": { + "should_expose": false + } + } } } } diff --git a/.storage/input_number b/.storage/input_number index b5a1496..99a7d57 100644 --- a/.storage/input_number +++ b/.storage/input_number @@ -1,8 +1,8 @@ { - "version": 1, - "minor_version": 1, - "key": "input_number", - "data": { - "items": [] - } + "version": 1, + "minor_version": 1, + "key": "input_number", + "data": { + "items": [] + } }
\ No newline at end of file diff --git a/.storage/lovelace.lovelace_control b/.storage/lovelace.lovelace_control index ad27fd3..9f9abc9 100644 --- a/.storage/lovelace.lovelace_control +++ b/.storage/lovelace.lovelace_control @@ -102,7 +102,11 @@ }, { "entity": "switch.hall_camera", - "name": "Camera" + "name": "Hall Camera" + }, + { + "entity": "switch.living_livingviewswitch_living_livingviewswitch", + "name": "Living Camera" } ], "title": "Infrastructure" @@ -150,13 +154,13 @@ "cards": [ { "type": "light", - "entity": "light.yeelight_color_0x7caaf86", - "name": "Office Bulb" + "entity": "light.bedroom_bulb", + "name": "Bedroom Bulb" }, { "type": "light", - "entity": "light.smart_light", - "name": "Bedroom Bulb" + "entity": "light.office_bulb_office_bulb", + "name": "Office Bulb" } ] }, @@ -181,8 +185,20 @@ "name": "Lustre-2" }, { - "entity": "light.yeelight_color_0x7caaf86", - "name": "Bulb" + "entity": "light.living_led", + "name": "LED" + }, + { + "entity": "light.office_led_office_led", + "name": "Office LED" + }, + { + "entity": "light.office_bulb_office_bulb", + "name": "Office Bulb" + }, + { + "entity": "light.office_chair_led_office_chair_led", + "name": "Chair LED" }, { "entity": "switch.living_tablelampsocket", @@ -280,7 +296,7 @@ "name": "Lustre-2" }, { - "entity": "light.smart_light", + "entity": "light.bedroom_bulb", "name": "Bulb" }, { diff --git a/.storage/lovelace.lovelace_power b/.storage/lovelace.lovelace_power index 2046dad..89a53dd 100644 --- a/.storage/lovelace.lovelace_power +++ b/.storage/lovelace.lovelace_power @@ -117,6 +117,10 @@ { "entity": "sensor.hall_camera_power", "name": "AubergineView" + }, + { + "entity": "sensor.living_livingviewswitch_living_livingviewswitch_power", + "name": "LivingView" } ] }, diff --git a/.storage/lovelace.lovelace_research b/.storage/lovelace.lovelace_research index c3178a7..40b4df3 100644 --- a/.storage/lovelace.lovelace_research +++ b/.storage/lovelace.lovelace_research @@ -1,234 +1,263 @@ { - "version": 1, - "minor_version": 1, - "key": "lovelace.lovelace_research", - "data": { - "config": { - "views": [ + "version": 1, + "minor_version": 1, + "key": "lovelace.lovelace_research", + "data": { + "config": { + "views": [ + { + "title": "Home", + "cards": [ + { + "type": "vertical-stack", + "cards": [ { - "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.balcony_doors" - }, - { - "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" - } - ], - "title": "Safety" - }, - { - "type": "entities", - "entities": [ - { - "entity": "binary_sensor.living_balcony_contact", - "name": "Living" - }, - { - "entity": "binary_sensor.kitchen_balcony_contact", - "name": "Kitchen" - }, - { - "entity": "binary_sensor.bedroom_balcony_contact", - "name": "Bedroom" - }, - { - "entity": "binary_sensor.guestroom_balcony_contact", - "name": "Guestroom" - } - ], - "title": "Balcony" - } - ] - }, - { - "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.balcony_doors" - }, - { - "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.presence_presence", - "name": "Living" - }, - { - "entity": "binary_sensor.bedroom_motions_occupancy", - "name": "Bedroom" - }, - { - "entity": "binary_sensor.guestroom_motions_occupancy", - "name": "Guestroom" - }, - { - "entity": "binary_sensor.kitchen_motions_occupancy", - "name": "Kitchen" - } - ], - "hours_to_show": 48, - "title": "Motions (Last 48 hours)" - } - ] - }, - { - "type": "vertical-stack", - "cards": [ - { - "type": "entities", - "title": "Doors", - "entities": [ - { - "entity": "switch.hall_speakerphone", - "name": "Building Door" - } - ] - }, - { - "show_state": true, - "show_name": true, - "camera_view": "auto", - "type": "picture-entity", - "entity": "camera.192_168_50_132" - }, - { - "show_state": true, - "show_name": true, - "camera_view": "auto", - "type": "picture-entity", - "entity": "camera.192_168_50_51" - }, - { - "show_state": true, - "show_name": true, - "camera_view": "auto", - "type": "picture-entity", - "entity": "camera.ovenview" - }, - { - "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" - } - ] - } - ] + "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": "custom:restriction-card", + "restrictions": { + "confirm": { + "exemptions": null + } + }, + "card": { + "type": "entities", + "entities": [ + { + "entity": "switch.hall_camera", + "name": "Hall" + }, + { + "entity": "switch.living_livingviewswitch_living_livingviewswitch", + "name": "Living" + } + ], + "title": "Security Cameras" + } + }, + { + "type": "entities", + "entities": [ + { + "entity": "binary_sensor.entrance_door_contact" + }, + { + "entity": "sensor.entrance_vibrations_action" + }, + { + "entity": "binary_sensor.balcony_doors" + }, + { + "entity": "binary_sensor.motions_all" + }, + { + "entity": "switch.lights_all" + } + ], + "title": "Intrusion" + }, + { + "type": "entities", + "entities": [ + { + "entity": "binary_sensor.hall_smoke_smoke", + "name": "Hall/Smoke" + }, + { + "entity": "binary_sensor.kitchen_gas_kitchen_gas_gas", + "name": "Kitchen/Gas" + }, + { + "entity": "sensor.kitchen_gas_carbon_monoxide", + "name": "Kitchen/Gas WiFi" + }, + { + "entity": "binary_sensor.bathroom_leak_water_leak", + "name": "Bathroom Leak" + } + ], + "title": "Safety" + }, + { + "type": "entities", + "entities": [ + { + "entity": "binary_sensor.living_balcony_contact", + "name": "Living" + }, + { + "entity": "binary_sensor.kitchen_balcony_contact", + "name": "Kitchen" + }, + { + "entity": "binary_sensor.bedroom_balcony_contact", + "name": "Bedroom" + }, + { + "entity": "binary_sensor.guestroom_balcony_contact", + "name": "Guestroom" + } + ], + "title": "Balcony" + } + ] + }, + { + "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.balcony_doors" + }, + { + "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.presence_presence", + "name": "Living" + }, + { + "entity": "binary_sensor.bedroom_motions_occupancy", + "name": "Bedroom" + }, + { + "entity": "binary_sensor.guestroom_motions_occupancy", + "name": "Guestroom" + }, + { + "entity": "binary_sensor.kitchen_motions_occupancy", + "name": "Kitchen" + } + ], + "hours_to_show": 48, + "title": "Motions (Last 48 hours)" + } + ] + }, + { + "type": "vertical-stack", + "cards": [ + { + "type": "entities", + "title": "Doors", + "entities": [ + { + "entity": "switch.hall_speakerphone", + "name": "Building Door" + } + ] + }, + { + "show_state": true, + "show_name": true, + "camera_view": "auto", + "type": "picture-entity", + "entity": "camera.192_168_50_132" + }, + { + "show_state": true, + "show_name": true, + "camera_view": "auto", + "type": "picture-entity", + "entity": "camera.192_168_50_51" + }, + { + "show_state": true, + "show_name": true, + "camera_view": "auto", + "type": "picture-entity", + "entity": "camera.ovenview" + }, + { + "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 index 202ad33..f91ec45 100644 --- a/.storage/lovelace.lovelace_status +++ b/.storage/lovelace.lovelace_status @@ -285,16 +285,19 @@ "name": "Asgard clients" }, { - "entity": "device_tracker.legion8", - "name": "Legion8/Asgard" + "entity": "device_tracker.samsa", + "name": "Samsa/Asgard" }, { - "entity": "device_tracker.lm_g810", - "name": "Legion8/Hass" + "entity": "device_tracker.sm_s926b", + "name": "Samsa/Hass" }, { - "entity": "device_tracker.nyx", - "name": "Nyx/Asgard" + "entity": "device_tracker.tir", + "name": "Tir/Asgard" + }, + { + "entity": "device_tracker.xiaomi12" } ] } diff --git a/.storage/lovelace.lovelace_test b/.storage/lovelace.lovelace_test index 13e6952..2627383 100644 --- a/.storage/lovelace.lovelace_test +++ b/.storage/lovelace.lovelace_test @@ -49,6 +49,14 @@ "type": "divider" }, { + "entity": "device_tracker.samsa", + "name": "Samsa/Asgard" + }, + { + "entity": "device_tracker.sm_s926b", + "name": "Samsa/Hass" + }, + { "entity": "device_tracker.legion8", "name": "Legion8/Asgard" }, @@ -57,6 +65,10 @@ "name": "Legion8/Hass" }, { + "entity": "device_tracker.tir", + "name": "Tir/Asgard" + }, + { "entity": "device_tracker.nyx", "name": "Nyx/Asgard" } @@ -74,16 +86,16 @@ "name": "Laptops" }, { - "entity": "device_tracker.legion8", - "name": "Legion8/Asgard" + "entity": "device_tracker.samsa", + "name": "Samsa/Asgard" }, { - "entity": "device_tracker.lm_g810", - "name": "Legion8/Hass" + "entity": "device_tracker.sm_s926b", + "name": "Samsa/Hass" }, { - "entity": "device_tracker.nyx", - "name": "Nyx/Asgard" + "entity": "device_tracker.tir", + "name": "Tir/Asgard" }, { "entity": "sensor.192_168_50_1_devices_connected", diff --git a/.storage/person b/.storage/person index 4913fd8..0ee0680 100644 --- a/.storage/person +++ b/.storage/person @@ -9,9 +9,18 @@ "user_id": "31a296cc30a243089f121cef93b46cc0", "device_trackers": [ "device_tracker.lm_g810", - "device_tracker.control" + "device_tracker.control", + "device_tracker.sm_s926b", + "device_tracker.xiaomi12" ], "id": "suren_a_chilingaryan" + }, + { + "id": "tatyana_sinenko", + "name": "Tatyana Sinenko", + "device_trackers": [], + "user_id": "78e6e3c228634732a0ed530e3f87f0da", + "picture": null } ] } diff --git a/automations.yaml b/automations.yaml index 97244a2..f2fa359 100644 --- a/automations.yaml +++ b/automations.yaml @@ -119,13 +119,13 @@ default: [] mode: single - id: '1654901560778' - alias: 'Living: Office Light' + alias: 'Living: LED' description: '' use_blueprint: path: lights/light_switch.yaml input: switch: switch.living_lights_right - light: light.yeelight_color_0x7caaf86 + light: light.living_led dblclick: - parallel: - service: script.sleep_and_wake @@ -136,14 +136,11 @@ 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 + - service: light.turn_off + metadata: {} + data: {} + target: + entity_id: light.lights_office - id: '1654986378177' alias: 'Bedroom: Bulb' description: '' @@ -494,7 +491,7 @@ sequence: - type: toggle device_id: 95931a9049849e575f2de543adf111eb - entity_id: light.yeelight_color_0x7caaf86 + entity_id: light.office_bulb_office_bulb domain: light - conditions: - condition: template @@ -642,14 +639,6 @@ message: 'Unsupported command: {{ trigger.event.data.command }} with params: {{ trigger.event.data.args }}' mode: single -- id: '1672608894803' - alias: 'Hall: 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: '' @@ -791,7 +780,7 @@ use_blueprint: path: lights/knob-bulb-control.yaml input: - light: light.yeelight_color_0x7caaf86 + light: light.office_bulb_office_bulb knob: sensor.office_knob_action toggle: - if: @@ -819,7 +808,7 @@ input: knob: sensor.office_knob_action lights: - - light.yeelight_color_0x7caaf86 + - light.office_bulb_office_bulb - light.smart_light - id: '1672987670623' alias: 'Office: Dimming Button' @@ -828,7 +817,7 @@ path: lights/light_button.yaml input: button: sensor.office_button_action - light: light.yeelight_color_0x7caaf86 + light: light.office_bulb_office_bulb on_click: - service: homeassistant.turn_off data: {} @@ -852,7 +841,7 @@ hold: - device_id: 95931a9049849e575f2de543adf111eb domain: light - entity_id: light.yeelight_color_0x7caaf86 + entity_id: light.office_bulb_office_bulb type: brightness_decrease - id: '1672989606410' alias: 'Office: Button' @@ -861,23 +850,22 @@ path: lights/light_button.yaml input: button: sensor.office_button_action - light: light.yeelight_color_0x7caaf86 + light: light.office_led_office_led on_click: - - if: + if: - condition: state - entity_id: switch.living_tablelampsocket + entity_id: light.office_chair_led_office_chair_led state: 'on' then: - - service: switch.turn_off - data: {} + - service: light.turn_off target: - entity_id: switch.living_tablelampsocket + entity_id: light.office_chair_led_office_chair_led else: - - if: + if: - condition: or conditions: - condition: state - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 state: 'off' - condition: state entity_id: switch.office_table @@ -902,10 +890,17 @@ data: temperature: 4000 off_click: - - service: switch.turn_on - data: {} - target: - entity_id: switch.living_tablelampsocket + - parallel: + - service: homeassistant.turn_on + target: + entity_id: + - light.office_chair_led_office_chair_led + data: {} + - service: homeassistant.turn_off + target: + entity_id: + - light.office_bulb_office_bulb + data: {} dblclick: - if: - condition: state @@ -927,7 +922,7 @@ - condition: or conditions: - condition: state - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 state: 'off' - condition: state entity_id: switch.office_table @@ -1012,9 +1007,6 @@ 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: @@ -1045,168 +1037,6 @@ domain: light door_entity: - binary_sensor.entrance_door_contact -- id: '1673153262822' - alias: 'Motions: Global v1' - 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_alone - 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: switch.turn_off - data: {} - target: - entity_id: switch.hall_lights_right - - 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: '' @@ -1237,7 +1067,7 @@ - condition: trigger id: sleep - condition: state - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 state: 'on' sequence: - service: script.sleep_and_wake @@ -1278,7 +1108,7 @@ trigger: - platform: state entity_id: - - switch.smart_power_strip_pro_socket_4 + - switch.office_power_strip_socket_4 from: 'off' to: 'on' for: @@ -1309,23 +1139,6 @@ domain: switch reentry_wait: 10 reentry_timeout: 45 -- id: '1673331563280' - alias: 'Motions: Bathroom' - description: '' - use_blueprint: - path: motion/occupancy_tracking.yaml - input: - entrance: binary_sensor.bathroom_motions_occupancy - inside: binary_sensor.bathroom_motions_occupancy - light: switch.bathroom_lights_left - occupancy: input_boolean.occupancy_bathroom - on_action: - - type: turn_on - device_id: ad2aac96e3377b6e1f336d194b7ba792 - entity_id: switch.bathroom_lights_left - domain: switch - reentry_wait: 5 - reentry_timeout: 45 - id: '1674140368136' alias: 'Office: Sven Scene Switch' description: '' @@ -1349,7 +1162,7 @@ input: knob: sensor.office_knob_action lights: - - light.yeelight_color_0x7caaf86 + - light.office_bulb_office_bulb media_player: media_player.smartpi toggle_actions: - choose: @@ -1379,39 +1192,14 @@ trigger: - platform: state entity_id: - - binary_sensor.network_route_vivacell - to: 'on' + - binary_sensor.network_route_crd + to: 'off' condition: [] action: - service: notify.notify data: - message: Connected via Vivacell + message: CRD net failure mode: single -- id: '1680824553612' - alias: 'Motions: Bedroom' - description: '' - use_blueprint: - path: motion/motion_switch.yaml - input: - light_target: - - switch.bedroom_lights_left - - switch.bedroom_lights_center - motion_entity: binary_sensor.bedroom_motions_occupancy - illumination_test: sun - illuminance_entity: sensor.kitchen_motions_illuminance_lux - lux_threshold: 60 - no_motion_wait: 60 - on_cond_should_be_off: - - switch.lights_bedroom - on_cond_should_be_on: - - binary_sensor.hall_motions_occupancy - off_cond_should_be_off: - - switch.lights_bedroom - on_click: - - service: automation.turn_on - data: {} - target: - entity_id: automation.motions_bedroom_from_hall - id: '1680827972411' alias: 'Motions: Guestroom' description: '' @@ -1554,49 +1342,6 @@ target: entity_id: - automation.motions_bedroom_v2 -- id: '1680923844207' - alias: 'Motions: Bedroom from Hall' - 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: 30 - condition: - - condition: state - entity_id: input_boolean.mode_alone - state: 'on' - - condition: state - entity_id: - - binary_sensor.bedroom_bedsidelamp - - switch.bedroom_tablelamp - - switch.bedroom_lights_right - state: 'off' - - condition: state - entity_id: - - binary_sensor.bedroom_motions_occupancy - - binary_sensor.bedroom_presence_presence - state: 'off' - for: - hours: 0 - minutes: 0 - seconds: 20 - action: - - service: homeassistant.turn_off - data: {} - target: - entity_id: switch.lights_bedroom - - service: automation.turn_off - data: - stop_actions: false - target: - entity_id: automation.motions_bedroom_from_hall - mode: single - id: '1681005500468' alias: 'Bedroom: Switch3' description: '' @@ -1946,7 +1691,7 @@ metadata: {} mode: single - id: '1687227285061' - alias: 'Hall: Hall Camera ' + alias: 'Hall: Security Cameras' description: '' trigger: - platform: state @@ -1961,20 +1706,18 @@ state: 'on' sequence: - parallel: - - type: turn_on - device_id: 26d4f61d01f392350cd4375fcc3dbf50 - entity_id: switch.hall_camera - domain: switch + - service: switch.turn_on + target: + entity_id: switch.security_cameras - conditions: - condition: state entity_id: input_boolean.mode_away state: 'off' sequence: - parallel: - - type: turn_off - device_id: 26d4f61d01f392350cd4375fcc3dbf50 - entity_id: switch.hall_camera - domain: switch + - service: switch.turn_off + target: + entity_id: switch.security_cameras mode: single - id: '1687256985181' alias: Power Outtage @@ -1991,7 +1734,7 @@ seconds: 0 - platform: state entity_id: - - light.yeelight_color_0x7caaf86 + - light.office_bulb_office_bulb from: unavailable id: office_bulb for: @@ -2015,7 +1758,7 @@ entity_id: switch.plugs_infrastructure - type: turn_off device_id: 95931a9049849e575f2de543adf111eb - entity_id: light.yeelight_color_0x7caaf86 + entity_id: light.office_bulb_office_bulb domain: light - type: turn_off device_id: bf45f1d630db6e2aa1307866603f548a @@ -2086,7 +1829,7 @@ trigger: - platform: state entity_id: - - switch.smart_power_strip_pro_socket_1 + - switch.office_power_strip_socket_1 to: unavailable for: hours: 0 @@ -2094,7 +1837,7 @@ seconds: 0 - platform: state entity_id: - - switch.smart_power_strip_pro_socket_1 + - switch.office_power_strip_socket_1 to: 'off' for: hours: 0 @@ -2110,10 +1853,18 @@ seconds: 0 condition: [] action: - - service: notify.mobile_app_lm_g810 + - service: notify.mobile_app_sm_s926b data: message: SmartPI out of power - service: notify.smartpi data: message: SmartPI out of power mode: single +- id: '1757282812187' + alias: 'Guestroom: Lights sync' + description: '' + use_blueprint: + path: lights/light_sync.yaml + input: + master: switch.guestroom_lights_left + slave: switch.guestroom_lights_center diff --git a/blueprints/automation/lights/light_switch.yaml b/blueprints/automation/lights/light_switch.yaml index b3a4f81..c50e603 100644 --- a/blueprints/automation/lights/light_switch.yaml +++ b/blueprints/automation/lights/light_switch.yaml @@ -106,9 +106,9 @@ action: - "{{ trigger.entity_id == light_entity }}" sequence: - service: > - {% if trigger.to_state.state == "on" %} + {% if trigger.from_state.state == "off" and trigger.to_state.state == "on" %} switch.turn_on - {% else %} + {% elif trigger.from_state.state == "on" and trigger.to_state.state == "off" %} switch.turn_off {% endif %} target: diff --git a/blueprints/automation/motion/halabyan24.yaml b/blueprints/automation/motion/halabyan24.yaml index 03f4ff3..f665303 100644 --- a/blueprints/automation/motion/halabyan24.yaml +++ b/blueprints/automation/motion/halabyan24.yaml @@ -32,7 +32,7 @@ trigger: - platform: state id: around_home entity_id: - - device_tracker.lm_g810 + - device_tracker.sm_s926b from: not_home to: HomeHalabyanExtended for: @@ -43,7 +43,7 @@ trigger: - platform: state id: around_home2 entity_id: - - device_tracker.lm_g810 + - device_tracker.sm_s926b from: not_home to: home for: @@ -55,7 +55,7 @@ trigger: - platform: state id: away_from_home entity_id: - - device_tracker.lm_g810 + - device_tracker.sm_s926b from: HomeHalabyanExtended to: not_home for: @@ -66,7 +66,7 @@ trigger: - platform: state id: away_from_home2 entity_id: - - device_tracker.lm_g810 + - device_tracker.sm_s926b from: home to: not_home for: diff --git a/configuration.yaml b/configuration.yaml index fb53037..cec4586 100644 --- a/configuration.yaml +++ b/configuration.yaml @@ -28,10 +28,10 @@ recorder: influxdb: api_version: 2 - host: suren.me + host: 192.168.15.25 port: 8086 ssl: true - verify_ssl: true + verify_ssl: false ssl_ca_cert: /config/certs/ca.crt token: ldzUdZynt3sPfCC4YetZzD5Z9D3J-WlqKOYeTK9nooMf51ly5wbSzozhyYDII8ROhCLH-eeJuFlPWs83DS_xQg== organization: SmartPI @@ -124,6 +124,8 @@ ffmpeg: wake_on_lan: +patch_asyncssh: + sensor: - platform: time_date display_options: diff --git a/custom/group.yaml b/custom/group.yaml index 7815cce..cdd954b 100644 --- a/custom/group.yaml +++ b/custom/group.yaml @@ -1,10 +1,14 @@ master_phones: name: "master_phones" entities: - - device_tracker.legion8 - - device_tracker.lm_g810 + - device_tracker.samsa + - device_tracker.sm_s926b + - device_tracker.xiaomi12 +# - device_tracker.legion8 +# - device_tracker.lm_g810 master_laptops: name: "master_laptops" entities: - - device_tracker.nyx + - device_tracker.tir +# - device_tracker.nyx diff --git a/custom/input_number.yaml b/custom/input_number.yaml index 2d7ec1c..9054fe0 100644 --- a/custom/input_number.yaml +++ b/custom/input_number.yaml @@ -40,3 +40,8 @@ max: 10.0 step: 1.0 initial: 0.0 + living_lighting: + min: 1.0 + max: 5.0 + step: 1.0 + initial: 1.0 diff --git a/custom/scripts/sleep-and-wake.yaml b/custom/scripts/sleep-and-wake.yaml index a430515..a5782c1 100644 --- a/custom/scripts/sleep-and-wake.yaml +++ b/custom/scripts/sleep-and-wake.yaml @@ -41,7 +41,7 @@ sleep_and_wake: entity_id: scene.lg_aircon_power_off - service: switch.turn_off target: - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 - service: switch.turn_off target: entity_id: switch.living_lights_right @@ -66,7 +66,7 @@ sleep_and_wake: entity_id: scene.lg_aircon_power_off - service: switch.turn_off target: - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 - service: switch.turn_off target: entity_id: switch.living_lights_right @@ -86,7 +86,7 @@ sleep_and_wake: target: entity_id: - switch.plugs_office - - switch.smart_power_strip_pro_socket_2 + - switch.office_power_strip_socket_2 - service: wake_on_lan.send_magic_packet data: mac: "e8:6a:64:7b:5d:0a" @@ -128,7 +128,7 @@ sleep_and_wake: entity_id: media_player.smartpi - service: switch.turn_off target: - entity_id: switch.smart_power_strip_pro_socket_2 + entity_id: switch.office_power_strip_socket_2 - service: switch.turn_off target: entity_id: switch.lights_all diff --git a/custom/scripts/turn-on-office-lights.yaml b/custom/scripts/turn-on-office-lights.yaml index f9615a0..9520db0 100644 --- a/custom/scripts/turn-on-office-lights.yaml +++ b/custom/scripts/turn-on-office-lights.yaml @@ -23,8 +23,15 @@ turn_on_office_lights: brightness_pct: 100 kelvin: "{{ temp }}" target: - entity_id: light.yeelight_color_0x7caaf86 + entity_id: + - light.office_bulb_office_bulb + - light.office_led_office_led - service: homeassistant.turn_off data: {} target: - entity_id: switch.lights_living_lustre + entity_id: + - switch.lights_living_lustre + - light.office_chair_led_office_chair_led + - switch.living_tablelampsocket + + diff --git a/custom_components/patch_asyncssh/__init__.py b/custom_components/patch_asyncssh/__init__.py new file mode 100644 index 0000000..cdcb095 --- /dev/null +++ b/custom_components/patch_asyncssh/__init__.py @@ -0,0 +1,49 @@ +# /config/custom_components/patch_asyncssh/__init__.py +from __future__ import annotations +import logging + +_LOGGER = logging.getLogger(__name__) + +async def async_setup(hass, config): + """Patch asyncssh at HA startup, then return True to finish setup.""" + try: + import asyncssh + + # Re-expose ReadHostKeysPolicy at top-level for libs that expect it + try: + from asyncssh.hostkeys import ReadHostKeysPolicy + asyncssh.ReadHostKeysPolicy = ReadHostKeysPolicy # type: ignore[attr-defined] + except Exception: + pass + + # Patch only once + if not getattr(asyncssh, "_ha_patched_connect", False): + _real_connect = asyncssh.connect + + def _patched_connect(*args, **kwargs): + # Expand allowed *server* host key algorithms to match Dropbear + algs = list( + kwargs.get("server_host_key_algs") + or kwargs.get("host_key_algs") + or [] + ) + wanted = ["ssh-ed25519", "ecdsa-sha2-nistp256", "rsa-sha2-256"] + for a in wanted: + if a not in algs: + algs.append(a) + kwargs["server_host_key_algs"] = algs or wanted + + return _real_connect(*args, **kwargs) + + asyncssh.connect = _patched_connect # type: ignore[assignment] + asyncssh._ha_patched_connect = True # type: ignore[attr-defined] + _LOGGER.info( + "patch_asyncssh: asyncssh.connect patched (added algs %s)", + ["ssh-ed25519", "ecdsa-sha2-nistp256", "rsa-sha2-256"], + ) + else: + _LOGGER.debug("patch_asyncssh: asyncssh.connect already patched") + except Exception: + _LOGGER.exception("patch_asyncssh: failed to patch asyncssh") + + return True diff --git a/custom_components/patch_asyncssh/__pycache__/__init__.cpython-312.pyc b/custom_components/patch_asyncssh/__pycache__/__init__.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..1788a71 --- /dev/null +++ b/custom_components/patch_asyncssh/__pycache__/__init__.cpython-312.pyc diff --git a/custom_components/patch_asyncssh/manifest.json b/custom_components/patch_asyncssh/manifest.json new file mode 100644 index 0000000..7017f14 --- /dev/null +++ b/custom_components/patch_asyncssh/manifest.json @@ -0,0 +1,9 @@ +{ + "domain": "patch_asyncssh", + "name": "Patch AsyncSSH (host key algs)", + "version": "0.0.1", + "documentation": "", + "requirements": [], + "codeowners": [], + "iot_class": "local_push" +} diff --git a/export/automation_states.json b/export/automation_states.json new file mode 100644 index 0000000..32f51a2 --- /dev/null +++ b/export/automation_states.json @@ -0,0 +1,194 @@ +[ + { + "entity_id": "automation.alarm_power", + "state": "on" + }, + { + "entity_id": "automation.alarms_2", + "state": "on" + }, + { + "entity_id": "automation.alarms_doorbell", + "state": "on" + }, + { + "entity_id": "automation.alarms_safety", + "state": "on" + }, + { + "entity_id": "automation.alarms_wine_notification", + "state": "on" + }, + { + "entity_id": "automation.bedroom", + "state": "on" + }, + { + "entity_id": "automation.bedroom_light_sync", + "state": "on" + }, + { + "entity_id": "automation.bedroom_switch3", + "state": "on" + }, + { + "entity_id": "automation.guestroom_lights_sync", + "state": "on" + }, + { + "entity_id": "automation.guestroom_mode_switch", + "state": "on" + }, + { + "entity_id": "automation.hall_entrance_combo3", + "state": "on" + }, + { + "entity_id": "automation.hall_hall_camera", + "state": "on" + }, + { + "entity_id": "automation.hall_kitchen_combo", + "state": "on" + }, + { + "entity_id": "automation.hall_kitchen_music", + "state": "on" + }, + { + "entity_id": "automation.hall_kitchen_sync", + "state": "on" + }, + { + "entity_id": "automation.hall_manual_mode_switch", + "state": "on" + }, + { + "entity_id": "automation.infrastructure", + "state": "on" + }, + { + "entity_id": "automation.kitchen_motions", + "state": "on" + }, + { + "entity_id": "automation.knob_bulb_control", + "state": "off" + }, + { + "entity_id": "automation.knob_multi_bulb_control", + "state": "off" + }, + { + "entity_id": "automation.light_switch", + "state": "on" + }, + { + "entity_id": "automation.living_light_sync", + "state": "on" + }, + { + "entity_id": "automation.modes", + "state": "on" + }, + { + "entity_id": "automation.motions_bathroom_v2", + "state": "on" + }, + { + "entity_id": "automation.motions_bedroom_aircon", + "state": "on" + }, + { + "entity_id": "automation.motions_bedroom_v2", + "state": "on" + }, + { + "entity_id": "automation.motions_global_v2", + "state": "on" + }, + { + "entity_id": "automation.motions_guestroom", + "state": "on" + }, + { + "entity_id": "automation.motions_kitchen_music", + "state": "on" + }, + { + "entity_id": "automation.motions_living", + "state": "on" + }, + { + "entity_id": "automation.motions_living_office_wakeup", + "state": "on" + }, + { + "entity_id": "automation.motions_night_light", + "state": "on" + }, + { + "entity_id": "automation.motions_office", + "state": "on" + }, + { + "entity_id": "automation.network_backup", + "state": "off" + }, + { + "entity_id": "automation.new_automation", + "state": "on" + }, + { + "entity_id": "automation.new_automation_3", + "state": "on" + }, + { + "entity_id": "automation.night_light_off", + "state": "on" + }, + { + "entity_id": "automation.occupancy_tracking", + "state": "on" + }, + { + "entity_id": "automation.office_button", + "state": "on" + }, + { + "entity_id": "automation.office_dimming_button", + "state": "off" + }, + { + "entity_id": "automation.office_knob_sound_bulb_control", + "state": "on" + }, + { + "entity_id": "automation.office_sven", + "state": "on" + }, + { + "entity_id": "automation.power_outtage", + "state": "on" + }, + { + "entity_id": "automation.security_camera", + "state": "on" + }, + { + "entity_id": "automation.speakerphone", + "state": "on" + }, + { + "entity_id": "automation.sven_scene_switch", + "state": "on" + }, + { + "entity_id": "automation.telegram", + "state": "on" + }, + { + "entity_id": "automation.time", + "state": "on" + } +] diff --git a/export/extract.sh b/export/extract.sh new file mode 100644 index 0000000..b59fc69 --- /dev/null +++ b/export/extract.sh @@ -0,0 +1,2 @@ +HA_TOKEN=$(cat ha_token) +curl -s -H "Authorization: Bearer $HA_TOKEN" http://localhost:8123/api/states | jq '[ .[] | select(.entity_id | startswith("automation.")) | {entity_id, state} ] | sort_by(.entity_id)' > automation_states.json diff --git a/hacs-install.sh b/hacs-install.sh new file mode 100644 index 0000000..baf94d0 --- /dev/null +++ b/hacs-install.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# wget -O - https://get.hacs.xyz | bash - +set -e + +RED_COLOR='\033[0;31m' +GREEN_COLOR='\033[0;32m' +GREEN_YELLOW='\033[1;33m' +NO_COLOR='\033[0m' + +declare haPath +declare -a paths=( + "$PWD" + "$PWD/config" + "/config" + "$HOME/.homeassistant" + "/usr/share/hassio/homeassistant" +) +declare currentVersion +declare currentYear +declare currentMonth +declare currentPatch +declare targetVersion +declare targetYear +declare targetMonth +declare targetPatch + +function info () { echo -e "${GREEN_COLOR}INFO: $1${NO_COLOR}";} +function warn () { echo -e "${GREEN_YELLOW}WARN: $1${NO_COLOR}";} +function error () { echo -e "${RED_COLOR}ERROR: $1${NO_COLOR}"; if [ "$2" != "false" ]; then exit 1;fi; } + +function checkRequirement () { + if [ -z "$(command -v "$1")" ]; then + error "'$1' is not installed" + fi +} + +checkRequirement "wget" +checkRequirement "unzip" + +info "Trying to find the correct directory..." +for path in "${paths[@]}"; do + if [ -n "$haPath" ]; then + break + fi + + if [ -f "$path/.HA_VERSION" ]; then + haPath="$path" + fi +done + +if [ -n "$haPath" ]; then + info "Found Home Assistant configuration directory at '$haPath'" + cd "$haPath" || error "Could not change path to $haPath" + if [ ! -d "$haPath/custom_components" ]; then + info "Creating custom_components directory..." + mkdir "$haPath/custom_components" + fi + + info "Changing to the custom_components directory..." + cd "$haPath/custom_components" || error "Could not change path to $haPath/custom_components" + + info "Downloading HACS" + wget "https://github.com/hacs/integration/releases/latest/download/hacs.zip" + + if [ -d "$haPath/custom_components/hacs" ]; then + warn "HACS directory already exist, cleaning up..." + rm -R "$haPath/custom_components/hacs" + fi + + info "Creating HACS directory..." + mkdir "$haPath/custom_components/hacs" + + info "Unpacking HACS..." + unzip "$haPath/custom_components/hacs.zip" -d "$haPath/custom_components/hacs" >/dev/null 2>&1 + + + echo + info "Verifying versions" + targetVersion=$(sed -n -e '/^MINIMUM_HA_VERSION/p' "$haPath/custom_components/hacs/const.py" | cut -d '"' -f 2) + currentVersion=$(cat "$haPath/.HA_VERSION") + + info "Current version is ${currentVersion}, minimum version is ${targetVersion}" + + targetYear=$(echo "${targetVersion}" | cut -d "." -f 1) + currentYear=$(echo "${currentVersion}" | cut -d "." -f 1) + + if [ "${currentYear}" -lt "${targetYear}" ]; then + rm -R "$haPath/custom_components/hacs" + error "Version ${currentVersion} is not new enough, needs at least ${targetVersion}" + fi + + if [ "${currentYear}" == "${targetYear}" ]; then + targetMonth=$(echo "${targetVersion}" | cut -d "." -f 2) + currentMonth=$(echo "${currentVersion}" | cut -d "." -f 2) + + if [ "${currentMonth}" -lt "${targetMonth}" ]; then + rm -R "$haPath/custom_components/hacs" + error "Version ${currentVersion} is not new enough, needs at least ${targetVersion}" + fi + + if [ "${currentMonth}" == "${targetMonth}" ]; then + targetPatch=$(echo "${targetVersion}" | cut -d "." -f 3) + currentPatch=$(echo "${currentVersion}" | cut -d "." -f 3) + + if [ "${currentPatch}" -lt "${targetPatch}" ]; then + rm -R "$haPath/custom_components/hacs" + error "Version ${currentVersion} is not new enough, needs at least ${targetVersion}" + fi + fi + fi + + echo + info "Removing HACS zip file..." + rm "$haPath/custom_components/hacs.zip" + info "Installation complete." + echo + info "Remember to restart Home Assistant before you configure it" + +else + echo + error "Could not find the directory for Home Assistant" false + echo "Manually change the directory to the root of your Home Assistant configuration" + echo "With the user that is running Home Assistant" + echo "and run the script again" + exit 1 +fi diff --git a/scenes.yaml b/scenes.yaml index 9c03dd5..f29302c 100644 --- a/scenes.yaml +++ b/scenes.yaml @@ -7,3 +7,660 @@ metadata: scene.hyundai_aircon_cool_18: entity_only: false +- id: '1757157111272' + name: Living Lights/Office + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: color_temp + brightness: 255 + color_temp_kelvin: 6024 + color_temp: 166 + hs_color: + - 31.007 + - 6.862 + rgb_color: + - 255 + - 246 + - 237 + xy_color: + - 0.339 + - 0.338 + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'on' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: color_temp + brightness: 255 + color_temp_kelvin: 5025 + color_temp: 199 + hs_color: + - 27.028 + - 18.905 + rgb_color: + - 255 + - 228 + - 206 + xy_color: + - 0.371 + - 0.349 + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'on' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'off' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'off' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'off' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'off' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true +- id: '1757157480085' + name: Living Lights/Coffee + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'off' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'off' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: color_temp + brightness: 255 + color_temp_kelvin: 6329 + color_temp: 158 + hs_color: + - 37.231 + - 3.66 + rgb_color: + - 255 + - 251 + - 245 + xy_color: + - 0.331 + - 0.335 + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'on' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'off' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'off' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'off' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true +- id: '1757286334895' + name: Living Lights/TV + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'off' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'off' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'off' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'off' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'on' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'off' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true +- id: '1757329040789' + name: Living Lights/Lights + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'off' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'off' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'off' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'on' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'off' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'off' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true +- id: '1757329097076' + name: Living Lights/Lustre + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'off' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'off' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'off' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'on' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'off' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'off' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true +- id: '1757329178356' + name: Living Lights/Romantic + entities: + light.office_led_office_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/LED Office/LED + supported_features: 44 + state: 'off' + light.office_bulb_office_bulb: + min_color_temp_kelvin: 2000 + max_color_temp_kelvin: 6535 + min_mireds: 153 + max_mireds: 500 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Bulb Office/Bulb + supported_features: 44 + state: 'off' + light.office_chair_led_office_chair_led: + min_color_temp_kelvin: 2020 + max_color_temp_kelvin: 6329 + min_mireds: 158 + max_mireds: 495 + effect_list: + - blink + - breathe + - okay + - channel_change + - finish_effect + - stop_effect + supported_color_modes: + - color_temp + - xy + effect: + color_mode: + brightness: + color_temp_kelvin: + color_temp: + hs_color: + rgb_color: + xy_color: + friendly_name: Office/Chair LED Office/Chair LED + supported_features: 44 + state: 'off' + switch.lights_living_lustre: + entity_id: + - switch.living_lights_left + - switch.living_lights_center + friendly_name: Lights Living Lustre + state: 'off' + switch.living_tablelampsocket: + friendly_name: Living/TableLampSocket Living/TableLampSocket + state: 'off' + switch.living_led_power_switch: + friendly_name: Living/LED Power Switch + state: 'on' + metadata: + light.office_led_office_led: + entity_only: true + light.office_bulb_office_bulb: + entity_only: true + light.office_chair_led_office_chair_led: + entity_only: true + switch.lights_living_lustre: + entity_only: true + switch.living_tablelampsocket: + entity_only: true + switch.living_led_power_switch: + entity_only: true diff --git a/scripts.yaml b/scripts.yaml index 8011f96..e8be6cf 100644 --- a/scripts.yaml +++ b/scripts.yaml @@ -104,7 +104,7 @@ turn_on_office_lights_v1: brightness_pct: 100 kelvin: 4500 target: - entity_id: light.yeelight_color_0x7caaf86 + entity_id: light.office_bulb_office_bulb - service: homeassistant.turn_off data: {} target: |
