From e872659b52f718289bb9cee708a0638a18ea9878 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 10 Aug 2026 19:42:19 +0000 Subject: [PATCH] updating configuration --- appdaemon/settings/apps/climate/cover.yaml | 2 +- .../settings/apps/light/lightcontrol._yaml | 25 - .../settings/apps/light/lightcontrol.yaml | 11 + .../settings/apps/light/lightcontrol_entry.py | 75 + .../apps/light/lightcontrol_entry.yaml | 13 + .../settings/apps/light/lightcontrol_hall.py | 12 - .../apps/light/lightcontrol_hall.yaml | 16 +- .../apps/presence/entities_action.yaml | 2 + .../apps/presence/entities_action.yaml.bak | 82 + docker-compose.yaml | 78 +- .../.device-builder-peer-link-key.bin | 2 + .../settings/.device-builder-preferences.json | 16 + esphome/settings/.device-builder.json | 528 ++++ esphome/settings/.device-builder.json.lock | 0 esphome/settings/coffee-philips-5400.yaml | 138 +- .../saeco_series_6000/CMakeLists.txt | 6 + .../components/saeco_series_6000/__init__.py | 194 +- .../coffee-philips-5400.yaml | 318 ++ .../components/saeco_series_6000/crc.cpp | 43 + .../components/saeco_series_6000/recipe.cpp | 59 + .../saeco_series_6000/saeco_series_6000.cpp | 723 +++-- .../saeco_series_6000/saeco_series_6000.h | 203 +- .../settings/saeco_series_6000/CMakeLists.txt | 6 + .../settings/saeco_series_6000/__init__.py | 98 + esphome/settings/saeco_series_6000/crc.cpp | 43 + esphome/settings/saeco_series_6000/recipe.cpp | 59 + .../saeco_series_6000/saeco_series_6000.cpp | 344 +++ .../saeco_series_6000/saeco_series_6000.h | 106 + hass/settings/.HA_VERSION | 2 +- .../integrations/automation/dark_icon.png | Bin 0 -> 2940 bytes .../integrations/device_tracker/dark_icon.png | Bin 0 -> 2118 bytes .../integrations/device_tracker/icon.png | Bin 0 -> 2118 bytes .../brands/integrations/esphome/dark_logo.png | Bin 0 -> 7348 bytes .../homeconnect_ws/dark_icon@2x.png | Bin 12043 -> 20203 bytes .../integrations/homeconnect_ws/dark_logo.png | Bin 17538 -> 19662 bytes .../.cache/brands/integrations/http/icon.png | Bin 0 -> 2006 bytes .../integrations/sauresha/dark_icon.png | Bin 8128 -> 9980 bytes .../integrations/smartthings/dark_logo.png | Bin 0 -> 29774 bytes .../brands/integrations/tuya/dark_icon@2x.png | Bin 0 -> 6374 bytes .../brands/integrations/tuya/dark_logo.png | Bin 0 -> 17876 bytes .../.cache/brands/integrations/tuya/icon.png | Bin 0 -> 3465 bytes .../integrations/xiaomi_miot/dark_logo.png | Bin 0 -> 13467 bytes .../yandex_smart_home/dark_icon@2x.png | Bin 0 -> 90806 bytes .../yandex_station_intents/dark_icon@2x.png | Bin 0 -> 24615 bytes hass/settings/.ha_run.lock | 2 +- hass/settings/automations.yaml | 15 +- hass/settings/configuration.yaml | 9 +- hass/settings/packages/alice_export.yaml | 170 +- .../settings/packages/alice_export.yaml.bak | 2 +- hass/settings/packages/alice_export.yaml.bak3 | 65 + hass/settings/packages/aqara_lock.yaml | 2 +- hass/settings/packages/base/recorder.yaml | 2 +- hass/settings/packages/heat_counter.yaml | 20 +- .../packages/power/power_cost_templates.yaml | 23 +- hass/settings/packages/watercontrol.yaml | 8 +- .../multiple-entity-row.js | 2 +- .../multiple-entity-row.js.gz | Bin 19518 -> 24201 bytes .../core.entity_registry.json | 2741 ----------------- .../docker-compose.yaml | 233 -- .../lovelace.lovelace.json | 1318 -------- .../scripts.yaml | 71 - .../water_action.yaml | 14 - .../water_leak.py | 63 - .../watercontrol.yaml | 65 - ...-red-contrib-home-assistant-websocket.json | 5 +- .../settings/configuration_backup_v4.yaml | 242 ++ 66 files changed, 3169 insertions(+), 5107 deletions(-) delete mode 100644 appdaemon/settings/apps/light/lightcontrol._yaml create mode 100644 appdaemon/settings/apps/light/lightcontrol.yaml create mode 100644 appdaemon/settings/apps/light/lightcontrol_entry.py create mode 100644 appdaemon/settings/apps/light/lightcontrol_entry.yaml create mode 100644 appdaemon/settings/apps/presence/entities_action.yaml.bak create mode 100644 esphome/settings/.device-builder-peer-link-key.bin create mode 100644 esphome/settings/.device-builder-preferences.json create mode 100644 esphome/settings/.device-builder.json create mode 100644 esphome/settings/.device-builder.json.lock create mode 100644 esphome/settings/components/saeco_series_6000/CMakeLists.txt create mode 100644 esphome/settings/components/saeco_series_6000/coffee-philips-5400.yaml create mode 100644 esphome/settings/components/saeco_series_6000/crc.cpp create mode 100644 esphome/settings/components/saeco_series_6000/recipe.cpp create mode 100644 esphome/settings/saeco_series_6000/CMakeLists.txt create mode 100644 esphome/settings/saeco_series_6000/__init__.py create mode 100644 esphome/settings/saeco_series_6000/crc.cpp create mode 100644 esphome/settings/saeco_series_6000/recipe.cpp create mode 100644 esphome/settings/saeco_series_6000/saeco_series_6000.cpp create mode 100644 esphome/settings/saeco_series_6000/saeco_series_6000.h create mode 100644 hass/settings/.cache/brands/integrations/automation/dark_icon.png create mode 100644 hass/settings/.cache/brands/integrations/device_tracker/dark_icon.png create mode 100644 hass/settings/.cache/brands/integrations/device_tracker/icon.png create mode 100644 hass/settings/.cache/brands/integrations/esphome/dark_logo.png create mode 100644 hass/settings/.cache/brands/integrations/http/icon.png create mode 100644 hass/settings/.cache/brands/integrations/smartthings/dark_logo.png create mode 100644 hass/settings/.cache/brands/integrations/tuya/dark_icon@2x.png create mode 100644 hass/settings/.cache/brands/integrations/tuya/dark_logo.png create mode 100644 hass/settings/.cache/brands/integrations/tuya/icon.png create mode 100644 hass/settings/.cache/brands/integrations/xiaomi_miot/dark_logo.png create mode 100644 hass/settings/.cache/brands/integrations/yandex_smart_home/dark_icon@2x.png create mode 100644 hass/settings/.cache/brands/integrations/yandex_station_intents/dark_icon@2x.png rename neptun-migration-backup-20260714-193157/alice_export.yaml => hass/settings/packages/alice_export.yaml.bak (98%) create mode 100644 hass/settings/packages/alice_export.yaml.bak3 delete mode 100644 neptun-migration-backup-20260714-193157/core.entity_registry.json delete mode 100644 neptun-migration-backup-20260714-193157/docker-compose.yaml delete mode 100644 neptun-migration-backup-20260714-193157/lovelace.lovelace.json delete mode 100644 neptun-migration-backup-20260714-193157/scripts.yaml delete mode 100644 neptun-migration-backup-20260714-193157/water_action.yaml delete mode 100644 neptun-migration-backup-20260714-193157/water_leak.py delete mode 100644 neptun-migration-backup-20260714-193157/watercontrol.yaml create mode 100644 zigbee2mqtt/settings/configuration_backup_v4.yaml diff --git a/appdaemon/settings/apps/climate/cover.yaml b/appdaemon/settings/apps/climate/cover.yaml index 7851d8a..834636e 100644 --- a/appdaemon/settings/apps/climate/cover.yaml +++ b/appdaemon/settings/apps/climate/cover.yaml @@ -23,7 +23,7 @@ cover_action: - cover.curtain_mainroom_bobbinet open_at_sunrise: - cover.curtain_kitchen - - cover.curtain_mainroom + #- cover.curtain_mainroom cover_door_sensors: cover.curtain_bedroom: - binary_sensor.door_bedroom_big_window_contact diff --git a/appdaemon/settings/apps/light/lightcontrol._yaml b/appdaemon/settings/apps/light/lightcontrol._yaml deleted file mode 100644 index 4601a11..0000000 --- a/appdaemon/settings/apps/light/lightcontrol._yaml +++ /dev/null @@ -1,25 +0,0 @@ -light_control_hall: - module: lightcontrol - class: LightControl - sensor: binary_sensor.motion_sensor_hall - control_entity: switch.plug_light_hall - control_night_entity: light.gateway - timeout: 240 - constraint: input_boolean.hall_light_control - ha_panel: alarm_control_panel.ha_alarm - vacuum: vacuum.xiaomi_vacuum_cleaner - global_dependencies: - - globals - -light_control_kitchen: - module: lightcontrol - class: LightControl - sensor: group.kitchen_motion_sensors - control_entity: switch.light_kitchen - timeout: 600 - constraint: input_boolean.kitchen_light_control - ha_panel: alarm_control_panel.ha_alarm - vacuum: vacuum.xiaomi_vacuum_cleaner - global_dependencies: - - globals - \ No newline at end of file diff --git a/appdaemon/settings/apps/light/lightcontrol.yaml b/appdaemon/settings/apps/light/lightcontrol.yaml new file mode 100644 index 0000000..14fd6ac --- /dev/null +++ b/appdaemon/settings/apps/light/lightcontrol.yaml @@ -0,0 +1,11 @@ +################################# +# CLOAKROOM LIGHT # +################################# +light_control_cloakroom: + module: lightcontrol + class: LightControl + sensor: binary_sensor.motion_cloakroom_occupancy + control_entity: light.light_cloakroom + timeout: 300 + global_dependencies: + - globals diff --git a/appdaemon/settings/apps/light/lightcontrol_entry.py b/appdaemon/settings/apps/light/lightcontrol_entry.py new file mode 100644 index 0000000..2390925 --- /dev/null +++ b/appdaemon/settings/apps/light/lightcontrol_entry.py @@ -0,0 +1,75 @@ +import appdaemon.plugins.hass.hassapi as hass +import globals + +# +# Turn on entry light when the lock is opened (coming home). +# Listens for 'door_opened' event, turns on control_entity and keeps it on +# for 'timeout' seconds after the last event. +# +# Args: +# control_entity = entity that will be turned on (example: light.light_hall_long) +# timeout = seconds to keep the light on after the last door opening +# events (optionally) = list of event names to listen to (default: ['door_opened']) +# constraint = you can define constraint (input_boolean), that will turn on and off this app. +# +# Release Notes +# +# Version 1.0: +# Initial Version + +class LightControlEntry(hass.Hass): + timer = None + + def initialize(self): + if not globals.check_args(self, ["control_entity", "timeout"]): + return + self.listen_event_handle_list = [] + for event in self.args.get('events', ['door_opened']): + self.listen_event_handle_list.append(self.listen_event(self.event_trigger, event)) + + def event_trigger(self, event_name, data, kwargs): + if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']): + return + #turn on control entity and keep it on for 'timeout' seconds after last event. + self.control_entity_on() + self.run_timer() + + def terminate(self): + if self.listen_event_handle_list != None: + for listen_event_handle in self.listen_event_handle_list: + self.cancel_listen_event(listen_event_handle) + +############ TIMER ######################## + def run_timer(self): + if self.timer != None: + self.stop_timer() + self.timer = self.run_in(self.control_entity_off, self.args['timeout']) + + def control_entity_on(self): + #if 'constraint' is off - we dont need to do anything + if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']): + return + + entity = self.args['control_entity'] + state = self.get_state(entity) + + self.turn_on(entity) + self.log("Light on ({}).".format(entity)) + + def control_entity_off(self, kwargs): + #if 'constraint' is off - we dont need to do anything + if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']): + return + + entity = self.args['control_entity'] + state = self.get_state(entity) + self.turn_off(entity) + self.log("Light off ({}).".format(entity)) + self.stop_timer() + + def stop_timer(self): + if (self.timer == None): + return + self.log('stopping timer.') + self.cancel_timer(self.timer) + self.timer = None diff --git a/appdaemon/settings/apps/light/lightcontrol_entry.yaml b/appdaemon/settings/apps/light/lightcontrol_entry.yaml new file mode 100644 index 0000000..efa8f94 --- /dev/null +++ b/appdaemon/settings/apps/light/lightcontrol_entry.yaml @@ -0,0 +1,13 @@ +################################# +# ENTRY LIGHT # +################################# +light_control_entry: + module: lightcontrol_entry + class: LightControlEntry + events: + - door_opened + control_entity: light.light_hall_small + timeout: 120 + constraint: input_boolean.locker_light_control + global_dependencies: + - globals diff --git a/appdaemon/settings/apps/light/lightcontrol_hall.py b/appdaemon/settings/apps/light/lightcontrol_hall.py index d38ac41..45e216c 100644 --- a/appdaemon/settings/apps/light/lightcontrol_hall.py +++ b/appdaemon/settings/apps/light/lightcontrol_hall.py @@ -34,9 +34,6 @@ class LightControlHall(hass.Hass): for sensor in self.args['motion_sensors']: self.listen_event_handle_list.append(self.listen_state(self.motion_trigger, sensor)) - for event in self.args['events']: - self.listen_event(self.event_trigger, event) - def motion_trigger(self, entity, attribute, old, new, kwargs): #sensor is off @@ -59,15 +56,6 @@ class LightControlHall(hass.Hass): self.turn_on_by_door = True self.stop_timer() - def event_trigger(self, event_name, data, kwargs): - if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']): - return - #turnin on control entity and wait while sensor will be off, than run timer. - self.control_entity_on() - self.turn_on_by_door = True - self.stop_timer() - self.run_timer() - def terminate(self): if self.listen_event_handle_list != None: for listen_event_handle in self.listen_event_handle_list: diff --git a/appdaemon/settings/apps/light/lightcontrol_hall.yaml b/appdaemon/settings/apps/light/lightcontrol_hall.yaml index b70ba15..f38b57a 100644 --- a/appdaemon/settings/apps/light/lightcontrol_hall.yaml +++ b/appdaemon/settings/apps/light/lightcontrol_hall.yaml @@ -9,10 +9,22 @@ light_control_hall: - binary_sensor.door_locker_hall_left_contact - binary_sensor.door_locker2_hall_left_contact - binary_sensor.door_locker2_hall_right_contact - events: - - door_opened control_entity: light.light_hall_long timeout: 120 constraint: input_boolean.locker_light_control + global_dependencies: + - globals + +light_control_hall_small: + module: lightcontrol_hall + class: LightControlHall + motion_sensors: + - binary_sensor.motion_hall_small_occupancy + door_sensors: + - binary_sensor.door_locker3_hall_left_contact + - binary_sensor.door_locker3_hall_right_contact + control_entity: light.light_hall_small + timeout: 120 + constraint: input_boolean.locker_light_control global_dependencies: - globals \ No newline at end of file diff --git a/appdaemon/settings/apps/presence/entities_action.yaml b/appdaemon/settings/apps/presence/entities_action.yaml index f944ed6..2db9807 100644 --- a/appdaemon/settings/apps/presence/entities_action.yaml +++ b/appdaemon/settings/apps/presence/entities_action.yaml @@ -33,6 +33,8 @@ entities_action: - light.light_shower_shelf_light # hall - light.light_hall_long + - light.light_hall_small + - light.light_cloakroom # childroom - light.light_childroom_main - light.light_childroom_spotlights diff --git a/appdaemon/settings/apps/presence/entities_action.yaml.bak b/appdaemon/settings/apps/presence/entities_action.yaml.bak new file mode 100644 index 0000000..f944ed6 --- /dev/null +++ b/appdaemon/settings/apps/presence/entities_action.yaml.bak @@ -0,0 +1,82 @@ +################################# +# HOME PRESENSE # +################################# +entities_action: + module: entities_action + class: EntitiesByPresence + away_entities: + # air conditioners + - climate.ac_bedroom + - climate.ac_childroom + - climate.ac_kitchen + - climate.ac_mainroom + + # din rail lights + - light.light_mainroom_mainlamp + - light.light_mainroom_spotlights + - light.light_mainroom_pc_spotlight + # balcony + - light.light_balcony_spotlight + # bedroom + - light.light_bedroom_spotlights + - light.light_bedroom_nightlight_left + - light.light_bedroom_nightlight_right + - light.light_bedroom_pc_spotlight + - light.light_bedroom_mainlight + - light.light_bedroom_pc_nightlight + # bath + - light.light_bath + - light.light_bath_shelf + # shower + - light.light_shower_main_spotlights + - light.light_shower_shower_spotlights + - light.light_shower_shelf_light + # hall + - light.light_hall_long + # childroom + - light.light_childroom_main + - light.light_childroom_spotlights + - light.light_childroom_bed + # kitchen + - light.light_kitchen_spotlights + - light.light_kitchen_table_lamp + - light.light_kitchen_bar_lamp + - light.light_kitchen_set + + # ventilation + - fan.ventilation_shower + - fan.ventilation_bath + + # bedside lamps + - light.danil_bedside_lamp_rgbww_light + - light.svetlana_bedside_lamp_rgbww_light + + # mirrors and heaters + - switch.shower_mirror + - switch.switch_mirror_shower_heater + - switch.light_bath_mirror + - switch.switch_mirror_bath_heater + + # media + - media_player.bedroom_tv + - media_player.kitchen_tv + - media_player.mainroom_tv + + # alice + - media_player.yandex_station_m00r46000m53db + - media_player.yandex_station_m00fhe2003seqr + - media_player.yandex_station_ly00000000000008674600007209d3f5 + - media_player.yandex_station_ff98f029ab48468d28c557be + - media_player.yandex_station_u003jc100phn9k + return_entities: + # - light.light_kitchen_set + + thremostats: + - climate.radiator_childroom + - climate.radiator_mainroom + - climate.radiator_kitchen + - climate.radiator_bedroom + - climate.radiator_bedroom_balcony + global_dependencies: + - globals + diff --git a/docker-compose.yaml b/docker-compose.yaml index 53f05e1..86bc437 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,6 +7,17 @@ services: environment: - SUBDOMAIN="home-fnv" restart: always + healthcheck: + # нет HTTP-порта, сервис — вечный цикл run.sh с sleep 5m между обновлениями + test: ["CMD-SHELL", "pgrep -f run.sh || exit 1"] + interval: 1m + timeout: 5s + retries: 3 + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" mosquitto: build: ./mosquitto/docker @@ -15,10 +26,16 @@ services: ports: - "1883:1883" restart: always + healthcheck: + # auth включена (MQTT_USERNAME/PASSWORD из env_file), проверяем publish под теми же кредами + test: ["CMD-SHELL", "mosquitto_pub -h localhost -t healthcheck -m ping -u \"$$MQTT_USERNAME\" -P \"$$MQTT_PASSWORD\" -q 0"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: - max-size: 50m + max-size: 50m postgres: image: postgres:16.1 @@ -26,10 +43,15 @@ services: volumes: - ./postgres/settings/data:/var/lib/postgresql/data env_file: ./postgres/settings/postgres.env + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: - max-size: 50m + max-size: 50m hass: image: "homeassistant/home-assistant:stable" #2026.4.2 @@ -76,6 +98,12 @@ services: restart: always links: - "hass" + healthcheck: + # http: (dashboard) не включён в appdaemon.yaml -> HTTP-порта нет, проверяем процесс + test: ["CMD-SHELL", "pgrep -f 'appdaemon' || exit 1"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: @@ -95,6 +123,16 @@ services: restart: always volumes: - ./node-red/settings/data:/data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:1880/"] + interval: 30s + timeout: 10s + retries: 6 + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" esphome: image: esphome/esphome:latest #2025.6 #esphome-armv7 @@ -107,6 +145,11 @@ services: #devices: # - "/dev/ttyUSB0:/dev/ttyUSB0" #network_mode: host + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:6052/"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: @@ -161,6 +204,13 @@ services: - "80:80" - "443:443" restart: always + healthcheck: + # без -f: бэкенд (hass) может честно вернуть не-2xx (напр. untrusted proxy), + # нас интересует только что nginx сам жив и отвечает на TCP/HTTP + test: ["CMD-SHELL", "curl -s -o /dev/null http://localhost/ || exit 1"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: @@ -181,6 +231,13 @@ services: - "8081:80" #entrypoint: certbot #command: certonly --standalone --agree-tos --non-interactive --email admin@yandex5.ru -d gitea.yandex5.ru + healthcheck: + # standalone-сервер поднимается только на момент renew раз в сутки, + # 8081 в остальное время не слушает -> проверяем сам цикл update_certs.sh + test: ["CMD-SHELL", "pgrep -f update_certs.sh || exit 1"] + interval: 1m + timeout: 5s + retries: 3 logging: driver: json-file options: @@ -217,6 +274,12 @@ services: - ./secrets/hass-fnv/settings/secrets.yaml:/config/secrets.yaml:ro env_file: ./matter-bridge/settings/matter-bridge.env network_mode: host + healthcheck: + # в образе нет curl/wget, только nc — TCP-проверка порта веб-UI + test: ["CMD-SHELL", "nc -z -w2 localhost 8482 || exit 1"] + interval: 30s + timeout: 10s + retries: 6 logging: driver: json-file options: @@ -232,3 +295,14 @@ services: ports: - "8001:8000" env_file: ./keenetic/settings/keenetic.env + healthcheck: + # в образе только python3 (нет curl/wget), используем встроенный /health FastAPI-роут + test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=5)"] + interval: 30s + timeout: 10s + retries: 6 + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" diff --git a/esphome/settings/.device-builder-peer-link-key.bin b/esphome/settings/.device-builder-peer-link-key.bin new file mode 100644 index 0000000..a085a07 --- /dev/null +++ b/esphome/settings/.device-builder-peer-link-key.bin @@ -0,0 +1,2 @@ +Ȩê~Ùþé®üRÓtk5�ÈA-�۽ +¿¿S²}$P \ No newline at end of file diff --git a/esphome/settings/.device-builder-preferences.json b/esphome/settings/.device-builder-preferences.json new file mode 100644 index 0000000..fe50920 --- /dev/null +++ b/esphome/settings/.device-builder-preferences.json @@ -0,0 +1,16 @@ +{ + "dashboard_view": "cards", + "theme": "system", + "navigator_visible": true, + "device_editor_layout": "both", + "secrets_editor_layout": "visual", + "table_page_size": 25, + "table_column_visibility": {}, + "table_sort_column": null, + "table_sort_direction": null, + "experience_level": "expert", + "remote_compute_only": false, + "hide_device_builder": false, + "version_history_enabled": true, + "onboarding_completed_version": 0 +} \ No newline at end of file diff --git a/esphome/settings/.device-builder.json b/esphome/settings/.device-builder.json new file mode 100644 index 0000000..98dbc03 --- /dev/null +++ b/esphome/settings/.device-builder.json @@ -0,0 +1,528 @@ +{ + "_board_id_user_set_migrated": true, + "_dashboard_identity": { + "dashboard_id": "0KZiUm7NlelQU9rd7sQkY0vnPCPsAAwX" + }, + "_firmware_jobs": [ + { + "job_id": "3882d84e20a0", + "configuration": "svetlana_bedside_lamp.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:36:39.124524+00:00", + "started_at": "2026-08-10T19:36:45.031124+00:00", + "completed_at": "2026-08-10T19:36:59.800293+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "c3079a6dedd8", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "c3079a6dedd8", + "configuration": "svetlana_bedside_lamp.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:36:39.124438+00:00", + "started_at": "2026-08-10T19:36:39.128040+00:00", + "completed_at": "2026-08-10T19:36:45.029189+00:00", + "compile_started_at": "2026-08-10T19:36:43.919682+00:00", + "compile_ended_at": "2026-08-10T19:36:44.893943+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 55, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "fcd4c51be9e0", + "configuration": "jkbms-monitor.yml", + "job_type": "upload", + "status": "cancelled", + "created_at": "2026-08-10T19:33:27.879713+00:00", + "started_at": null, + "completed_at": "2026-08-10T19:33:29.542990+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": null, + "error": "prerequisite job did not complete successfully", + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "0d1c14adcd37", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "0d1c14adcd37", + "configuration": "jkbms-monitor.yml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-10T19:33:27.879625+00:00", + "started_at": "2026-08-10T19:33:27.883196+00:00", + "completed_at": "2026-08-10T19:33:29.542874+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "d0161b963d9c", + "configuration": "ac_mainroom.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:30:21.667492+00:00", + "started_at": "2026-08-10T19:31:36.315770+00:00", + "completed_at": "2026-08-10T19:31:48.047345+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "8c84a4bf3d18", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "8c84a4bf3d18", + "configuration": "ac_mainroom.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:30:21.667406+00:00", + "started_at": "2026-08-10T19:30:21.670887+00:00", + "completed_at": "2026-08-10T19:31:36.315107+00:00", + "compile_started_at": "2026-08-10T19:30:26.426848+00:00", + "compile_ended_at": "2026-08-10T19:31:35.083336+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "c616adde2ce9", + "configuration": "ac_kitchen.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:27:40.554431+00:00", + "started_at": "2026-08-10T19:28:55.819303+00:00", + "completed_at": "2026-08-10T19:29:04.946454+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "addc80e89300", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "addc80e89300", + "configuration": "ac_kitchen.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:27:40.554338+00:00", + "started_at": "2026-08-10T19:27:40.558134+00:00", + "completed_at": "2026-08-10T19:28:55.818581+00:00", + "compile_started_at": "2026-08-10T19:27:45.454257+00:00", + "compile_ended_at": "2026-08-10T19:28:54.558070+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "41e7d03c814f", + "configuration": "danil_bedside_lamp.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:23:51.467405+00:00", + "started_at": "2026-08-10T19:23:57.776187+00:00", + "completed_at": "2026-08-10T19:24:11.242268+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "18f12d06f212", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "18f12d06f212", + "configuration": "danil_bedside_lamp.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:23:51.467360+00:00", + "started_at": "2026-08-10T19:23:51.469053+00:00", + "completed_at": "2026-08-10T19:23:57.774440+00:00", + "compile_started_at": "2026-08-10T19:23:56.625355+00:00", + "compile_ended_at": "2026-08-10T19:23:57.647086+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 55, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "e4b09f0c27ff", + "configuration": "ac_childroom.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:04:24.871708+00:00", + "started_at": "2026-08-10T19:05:40.872001+00:00", + "completed_at": "2026-08-10T19:05:49.216717+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "37490cc5a49a", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "37490cc5a49a", + "configuration": "ac_childroom.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:04:24.871671+00:00", + "started_at": "2026-08-10T19:04:24.872470+00:00", + "completed_at": "2026-08-10T19:05:40.870855+00:00", + "compile_started_at": "2026-08-10T19:04:30.508438+00:00", + "compile_ended_at": "2026-08-10T19:05:39.688311+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "464e761cadaa", + "configuration": "ac_bedroom.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-10T19:00:05.400293+00:00", + "started_at": "2026-08-10T19:01:52.249356+00:00", + "completed_at": "2026-08-10T19:02:01.871248+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "6412d321d3e5", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "6412d321d3e5", + "configuration": "ac_bedroom.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-10T19:00:05.400199+00:00", + "started_at": "2026-08-10T19:00:05.403331+00:00", + "completed_at": "2026-08-10T19:01:52.248561+00:00", + "compile_started_at": "2026-08-10T19:00:40.614649+00:00", + "compile_ended_at": "2026-08-10T19:01:51.053257+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "804036526918", + "configuration": "senseair.yaml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-10T18:59:46.036866+00:00", + "started_at": "2026-08-10T18:59:46.037246+00:00", + "completed_at": "2026-08-10T18:59:46.308635+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "a732134af43e", + "configuration": "radar_esphome.yaml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-10T18:59:45.486258+00:00", + "started_at": "2026-08-10T18:59:45.487419+00:00", + "completed_at": "2026-08-10T18:59:45.976409+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + } + ], + "ac_bedroom.yaml": { + "mac_address": "50:02:91:C3:82:8C" + }, + "ac_childroom.yaml": { + "mac_address": "84:F3:EB:DC:DE:94" + }, + "ac_kitchen.yaml": { + "mac_address": "84:F3:EB:DC:DE:F6" + }, + "ac_mainroom.yaml": { + "mac_address": "A0:20:A6:16:7B:1B" + }, + "coffee-philips-5400.yaml": { + "mac_address": "EC:64:C9:90:E3:D8" + }, + "danil_bedside_lamp.yaml": { + "mac_address": "EC:4D:3E:94:FC:A2" + }, + "jkbms-monitor.yml": { + "mac_address": "AC:A7:04:B8:CD:70" + }, + "svetlana_bedside_lamp.yaml": { + "mac_address": "B4:60:ED:36:FC:8B" + } +} \ No newline at end of file diff --git a/esphome/settings/.device-builder.json.lock b/esphome/settings/.device-builder.json.lock new file mode 100644 index 0000000..e69de29 diff --git a/esphome/settings/coffee-philips-5400.yaml b/esphome/settings/coffee-philips-5400.yaml index 8d7e0f3..493b4f1 100644 --- a/esphome/settings/coffee-philips-5400.yaml +++ b/esphome/settings/coffee-philips-5400.yaml @@ -1,12 +1,12 @@ sensor: [] substitutions: board_name: Coffee Philips 5400 - device_name: coffee-philips-5400 + node_name: coffee-philips-5400 esphome: - name: ${device_name} - friendly_name: ${board_name} - comment: ${board_name} + name: ${node_name} + friendly_name: coffee-philips-5400 + comment: ESP32 Coffee Philips 5400 esp32: board: esp32dev @@ -33,7 +33,8 @@ ota: wifi: ssid: "MonsterFNV" password: "7065485qwe" - use_address: ${device_name}.lan + fast_connect: off + reboot_timeout: 15min #Если не будет связи с WiFi, то поднимется точка доступа ap: @@ -172,7 +173,111 @@ text_sensor: icon: mdi:alert-circle-outline update_interval: never +select: + - platform: template + name: "Тип напитка" + id: coffee_type + options: + - "Эспрессо" + - "Американо" + - "Капучино" + - "Латте" + - "Кофе с молоком" + - "Молочная пена" + - "Горячая вода" + initial_option: "Эспрессо" + optimistic: true + + - platform: template + name: "Крепость" + id: coffee_strength + options: + - "Мягкий" + - "Обычный" + - "Крепкий" + - "Молотый" + initial_option: "Обычный" + optimistic: true + + - platform: template + name: "Чашки" + id: coffee_cups + options: + - "1" + - "2" + - "3" + - "4" + initial_option: "1" + optimistic: true + +number: + - platform: template + name: "Объем кофе (мл)" + id: coffee_volume + min_value: 20 + max_value: 250 + step: 10 + initial_value: 100 + unit_of_measurement: "ml" + optimistic: true + + - platform: template + name: "Объем молока (мл)" + id: milk_volume + min_value: 0 + max_value: 250 + step: 10 + initial_value: 0 + unit_of_measurement: "ml" + optimistic: true + +#Тестовый стенд: произвольный hex-пакет(ы) для отправки в материнскую плату. +#Можно указывать несколько пакетов через разделитель ";". +text: + - platform: template + name: "Test Hex" + id: test_hex + mode: TEXT + optimistic: true + max_length: 255 + initial_value: "AA AA AA FE 00 00 C8 87 1B 40 55" + button: + - platform: template + name: "SEND Test" + on_press: + then: + - lambda: |- + { + std::string str = id(test_hex).state; + std::vector pkts; + size_t pos = 0; + while (pos <= str.size()) { + size_t sep = str.find(';', pos); + if (sep == std::string::npos) sep = str.size(); + std::string part = str.substr(pos, sep - pos); + while (!part.empty() && std::isspace(part.front())) part.erase(part.begin()); + while (!part.empty() && std::isspace(part.back())) part.pop_back(); + if (!part.empty()) pkts.push_back(part); + pos = sep + 1; + } + id(saeco_series_6000_component)->send_packets_to_mainboard(pkts, 50); + } + - platform: template + name: "SEND Test RAW" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_raw_to_mainboard(id(test_hex).state, 300); + - platform: template + name: "Включение (FE 00 01)" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_packets_to_mainboard( + std::vector{ + "AA AA AA FE 00 01 5E B7 1C 37 55" + }, 50); - platform: template name: "Американо" on_press: @@ -184,6 +289,29 @@ button: "AA AA AA 90 0F 0A 00 02 00 03 02 00 B4 00 00 00 67 48 E4 4B 55", "AA AA AA 91 10 01 03 56 9A 8C B8 55" }, 50); + - platform: template + name: "Выключение" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_packets_to_mainboard( + std::vector{ + "AA AA AA FE 00 00 C8 87 1B 40 55" + }, 50); + - platform: template + name: "Приготовить напиток" + icon: mdi:coffee + on_press: + - lambda: |- + { + uint8_t type = id(coffee_type).index_of(id(coffee_type).state).value_or(0); // 0..6 + uint8_t bean = id(coffee_strength).index_of(id(coffee_strength).state).value_or(0); // 0..3 + uint8_t cups = id(coffee_cups).index_of(id(coffee_cups).state).value_or(0) + 1; // 1..4 + uint16_t vol = (uint16_t) id(coffee_volume).state; + uint16_t milk = (uint16_t) id(milk_volume).state; + id(saeco_series_6000_component)->coffee_build(type, bean, cups, vol, milk); + } + #[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 93 0A 01 01 57 15 3A ED 55 #[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 90 0B 0A 05 03 00 02 00 00 64 00 00 00 39 BF 5B 74 55 diff --git a/esphome/settings/components/saeco_series_6000/CMakeLists.txt b/esphome/settings/components/saeco_series_6000/CMakeLists.txt new file mode 100644 index 0000000..a1d1475 --- /dev/null +++ b/esphome/settings/components/saeco_series_6000/CMakeLists.txt @@ -0,0 +1,6 @@ +# Добавляем файл генерации рецептов +src_files( + saeco_series_6000.cpp + recipe.cpp + crc.cpp +) \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/__init__.py b/esphome/settings/components/saeco_series_6000/__init__.py index dcb1e69..4ed6d55 100644 --- a/esphome/settings/components/saeco_series_6000/__init__.py +++ b/esphome/settings/components/saeco_series_6000/__init__.py @@ -1,98 +1,98 @@ -DEPENDENCIES = ["uart", "sensor"] - -import esphome.codegen as cg -import esphome.config_validation as cv -from esphome.components import uart, sensor, button -from esphome.const import CONF_ID, CONF_DEBUG -import esphome.automation as automation - -CONF_STATE_SENSOR = "state_sensor" -CONF_B0_STATUS_SENSOR = "b0_status_sensor" -CONF_B5_STATUS_SENSOR = "b5_status_sensor" -CONF_BA_STATUS_SENSOR = "ba_status_sensor" -CONF_S90_STATUS_SENSOR = "s90_status_sensor" -CONF_S91_STATUS_SENSOR = "s91_status_sensor" -CONF_S93_STATUS_SENSOR = "s93_status_sensor" -CONF_WATER_SENSOR = "water_sensor" -CONF_COFFEE_GROUNDS_CONTAINER_SENSOR = "coffee_grounds_container_sensor" -CONF_PALLET_SENSOR = "pallet_sensor" -CONF_ERROR_CODE_SENSOR = "error_code_sensor" -CONF_GRAIN_TRAY_SENSOR = "grain_tray_sensor" -CONF_STATUS_TEXT_SENSOR = "status_text_sensor" -CONF_PACKETS = "packets" -CONF_SAECO_ID = "saeco_id" - -saeco_series_6000_ns = cg.esphome_ns.namespace('saeco_series_6000') -SaecoSeries6000 = saeco_series_6000_ns.class_('SaecoSeries6000', cg.Component) - -CONFIG_SCHEMA = cv.Schema({ - cv.Required(cv.CONF_ID): cv.declare_id(SaecoSeries6000), - cv.Required('uart_display'): cv.use_id(uart.UARTComponent), - cv.Required('uart_mainboard'): cv.use_id(uart.UARTComponent), - cv.Optional(CONF_DEBUG, default=False): cv.boolean, - cv.Optional(CONF_STATE_SENSOR): sensor.sensor_schema(), -}).extend(cv.COMPONENT_SCHEMA) - -def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) - yield cg.register_component(var, config) - - uart_display = yield cg.get_variable(config['uart_display']) - cg.add(var.set_uart_display(uart_display)) - - uart_mainboard = yield cg.get_variable(config['uart_mainboard']) - cg.add(var.set_uart_mainboard(uart_mainboard)) - - if config[CONF_DEBUG]: - cg.add(var.set_debug(True)) - - if CONF_STATE_SENSOR in config: - sens = yield sensor.new_sensor(config[CONF_STATE_SENSOR]) - cg.add(var.set_status_sensor(sens)) - -def validate_packet(value): - if isinstance(value, str): - return [int(x, 16) for x in value.split()] - return [cv.hex_uint8_t(x) for x in value] - -SEND_PACKETS_ACTION_SCHEMA = cv.Schema({ - cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), - cv.Required(CONF_PACKETS): [cv.All(validate_packet)], - cv.Optional("delay_ms", default=10): cv.positive_int, -}) - -SendPacketsAction = saeco_series_6000_ns.class_("SendPacketsAction", automation.Action) - -@automation.register_action( - "saeco_series_6000.send_packets", - SendPacketsAction, - SEND_PACKETS_ACTION_SCHEMA, -) -def send_packets_to_mainboard_action_to_code(config, action_id, template_arg, args): - var = cg.new_Pvariable(action_id) - parent = yield cg.get_variable(config[CONF_ID]) - var.set_parent(parent) - var.set_packets(config[CONF_PACKETS]) - var.set_delay_ms(config.get("delay_ms", 10)) - return var - -SaecoSendPacketsButton = saeco_series_6000_ns.class_("SaecoSendPacketsButton", button.Button, cg.Component) - -SAECO_SEND_PACKETS_BUTTON_SCHEMA = button.BUTTON_SCHEMA.extend({ - cv.GenerateID(): cv.declare_id(SaecoSendPacketsButton), - cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), - cv.Required(CONF_PACKETS): [cv.All(validate_packet)], - cv.Optional("delay_ms", default=10): cv.positive_int, -}).extend(cv.COMPONENT_SCHEMA) - -async def saeco_send_packets_button_to_code(config): - parent = await cg.get_variable(config[CONF_SAECO_ID]) - var = cg.new_Pvariable(config["id"]) - await cg.register_component(var, config) - await button.register_button(var, config) - cg.add(var.set_parent(parent)) - cg.add(var.set_packets(config[CONF_PACKETS])) - cg.add(var.set_delay_ms(config.get("delay_ms", 10))) - return var - +DEPENDENCIES = ["uart", "sensor"] + +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import uart, sensor, button +from esphome.const import CONF_ID, CONF_DEBUG +import esphome.automation as automation + +CONF_STATE_SENSOR = "state_sensor" +CONF_B0_STATUS_SENSOR = "b0_status_sensor" +CONF_B5_STATUS_SENSOR = "b5_status_sensor" +CONF_BA_STATUS_SENSOR = "ba_status_sensor" +CONF_S90_STATUS_SENSOR = "s90_status_sensor" +CONF_S91_STATUS_SENSOR = "s91_status_sensor" +CONF_S93_STATUS_SENSOR = "s93_status_sensor" +CONF_WATER_SENSOR = "water_sensor" +CONF_COFFEE_GROUNDS_CONTAINER_SENSOR = "coffee_grounds_container_sensor" +CONF_PALLET_SENSOR = "pallet_sensor" +CONF_ERROR_CODE_SENSOR = "error_code_sensor" +CONF_GRAIN_TRAY_SENSOR = "grain_tray_sensor" +CONF_STATUS_TEXT_SENSOR = "status_text_sensor" +CONF_PACKETS = "packets" +CONF_SAECO_ID = "saeco_id" + +saeco_series_6000_ns = cg.esphome_ns.namespace('saeco_series_6000') +SaecoSeries6000 = saeco_series_6000_ns.class_('SaecoSeries6000', cg.Component) + +CONFIG_SCHEMA = cv.Schema({ + cv.Required(cv.CONF_ID): cv.declare_id(SaecoSeries6000), + cv.Required('uart_display'): cv.use_id(uart.UARTComponent), + cv.Required('uart_mainboard'): cv.use_id(uart.UARTComponent), + cv.Optional(CONF_DEBUG, default=False): cv.boolean, + cv.Optional(CONF_STATE_SENSOR): sensor.sensor_schema(), +}).extend(cv.COMPONENT_SCHEMA) + +def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + yield cg.register_component(var, config) + + uart_display = yield cg.get_variable(config['uart_display']) + cg.add(var.set_uart_display(uart_display)) + + uart_mainboard = yield cg.get_variable(config['uart_mainboard']) + cg.add(var.set_uart_mainboard(uart_mainboard)) + + if config[CONF_DEBUG]: + cg.add(var.set_debug(True)) + + if CONF_STATE_SENSOR in config: + sens = yield sensor.new_sensor(config[CONF_STATE_SENSOR]) + cg.add(var.set_status_sensor(sens)) + +def validate_packet(value): + if isinstance(value, str): + return [int(x, 16) for x in value.split()] + return [cv.hex_uint8_t(x) for x in value] + +SEND_PACKETS_ACTION_SCHEMA = cv.Schema({ + cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), + cv.Required(CONF_PACKETS): [cv.All(validate_packet)], + cv.Optional("delay_ms", default=10): cv.positive_int, +}) + +SendPacketsAction = saeco_series_6000_ns.class_("SendPacketsAction", automation.Action) + +@automation.register_action( + "saeco_series_6000.send_packets", + SendPacketsAction, + SEND_PACKETS_ACTION_SCHEMA, +) +def send_packets_to_mainboard_action_to_code(config, action_id, template_arg, args): + var = cg.new_Pvariable(action_id) + parent = yield cg.get_variable(config[CONF_ID]) + var.set_parent(parent) + var.set_packets(config[CONF_PACKETS]) + var.set_delay_ms(config.get("delay_ms", 10)) + return var + +SaecoSendPacketsButton = saeco_series_6000_ns.class_("SaecoSendPacketsButton", button.Button, cg.Component) + +SAECO_SEND_PACKETS_BUTTON_SCHEMA = button._BUTTON_SCHEMA.extend({ + cv.GenerateID(): cv.declare_id(SaecoSendPacketsButton), + cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), + cv.Required(CONF_PACKETS): [cv.All(validate_packet)], + cv.Optional("delay_ms", default=10): cv.positive_int, +}).extend(cv.COMPONENT_SCHEMA) + +async def saeco_send_packets_button_to_code(config): + parent = await cg.get_variable(config[CONF_SAECO_ID]) + var = cg.new_Pvariable(config["id"]) + await cg.register_component(var, config) + await button.register_button(var, config) + cg.add(var.set_parent(parent)) + cg.add(var.set_packets(config[CONF_PACKETS])) + cg.add(var.set_delay_ms(config.get("delay_ms", 10))) + return var + button.register_button("saeco_series_6000", saeco_send_packets_button_to_code) \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/coffee-philips-5400.yaml b/esphome/settings/components/saeco_series_6000/coffee-philips-5400.yaml new file mode 100644 index 0000000..6c080d0 --- /dev/null +++ b/esphome/settings/components/saeco_series_6000/coffee-philips-5400.yaml @@ -0,0 +1,318 @@ +sensor: [] +substitutions: + board_name: Coffee Philips 5400 + node_name: coffee-philips-5400 + +esphome: + name: ${node_name} + friendly_name: coffee-philips-5400 + comment: ESP32 Coffee Philips 5400 + +esp32: + board: esp32dev + framework: + type: arduino + +# Enable logging +#Журналирование +logger: + level: INFO #NONE + baud_rate: 0 + +# Enable Home Assistant API +api: + +web_server: + port: 80 + +ota: + platform: esphome + password: "S/6VwLrSJ+vRfPKWYzbg+iasPO6h3sXm3jY9Ko1YCOo=" + +#Учетные данные Wi-Fi для подключения платы к домашней сети +wifi: + ssid: "MonsterFNV" + password: "7065485qwe" + fast_connect: off + reboot_timeout: 15min + +#Если не будет связи с WiFi, то поднимется точка доступа + ap: + ssid: ESP SmartCoffeePhilips + password: ap_esp_password + +uart: +#UART подключение к панели управления. Считываем данные которые приходят от материнской плате в панель управления + - id: uart_display + rx_pin: GPIO16 #Считываем данные с панели управления + tx_pin: GPIO17 #Посылаем данные в панель управления + baud_rate: 115200 + stop_bits: 1 + data_bits: 8 + parity: NONE + rx_buffer_size: 256 + + - id: uart_mainboard + rx_pin: GPIO14 #Считываем данные с материнской платы + tx_pin: GPIO5 #Посылаем данные в материнскую плату + baud_rate: 115200 + stop_bits: 1 + data_bits: 8 + parity: NONE + rx_buffer_size: 256 + +external_components: + - source: + type: local + path: ./components + +saeco_series_6000: + id: saeco_series_6000_component + uart_display: uart_display + uart_mainboard: uart_mainboard + debug: true + state_sensor: + name: Work State + id: idControlSensor + internal: True #Скрыть - True \показать - False + on_value: + then: + - lambda: |- + //Статус состояния кофемашины, включена или выключена + if(x==2){ + id(idPowerStatus).publish_state(false); + } else if(id(idPowerStatus).state==false){ + id(idPowerStatus).publish_state(true); + } + + //AA:AA:AA:B0 "Системные сенсоры" + if(x==21){ + id(idStatus).publish_state("Выберите напиток"); + id(idWater).publish_state("Вода есть"); + id(idPallet).publish_state("Вставлен"); + id(idGrainTray).publish_state("Зерна есть"); + id(idCoffeeGroundsContainer).publish_state("Пустой"); + } + + //AA:AA:AA:B0 "Статусы" + else if(x==1){id(idStatus).publish_state("Что-то (07 01 00)");} + else if(x==2){id(idStatus).publish_state("Выключено");} + else if(x==3){id(idStatus).publish_state("Наливаем молоко");} + else if(x==4){id(idStatus).publish_state("Наливаем кофе");} + else if(x==5){id(idStatus).publish_state("Предварительное дозирование");} + else if(x==6){id(idStatus).publish_state("Создание пара для молока");} + else if(x==7){id(idStatus).publish_state("Заварочный узел в положение заваривания");} + else if(x==8){id(idStatus).publish_state("Наслаждайтесь");} + else if(x==9){id(idStatus).publish_state("Нагрев воды");} + else if(x==10){id(idStatus).publish_state("Перемалываем зерна");} + else if(x==11){id(idStatus).publish_state("Промывка");} + else if(x==12){id(idGrainTray).publish_state("Зерна закончились");} + else if(x==13){id(idStatus).publish_state("Что-то (07 08 14)");} + else if(x==14){id(idStatus).publish_state("Нагревание");} + else if(x==15){id(idStatus).publish_state("Наслаждайтесь");} + else if(x==16){id(idStatus).publish_state("Что-то (07 0C 02)");} + else if(x==17){id(idWater).publish_state("Вода есть");} + else if(x==18){id(idPallet).publish_state("Вставлен");} + else if(x==20){id(idCoffeeGroundsContainer).publish_state("Опорож. контейнер для коф. гущи");} + else if(x==22){id(idWater).publish_state("Воды нет");} + else if(x==23){id(idPallet).publish_state("Извлечен");} + else if(x==24){id(idPallet).publish_state("Очистка от накипи. Шаг 1");} + else if(x==25){id(idPallet).publish_state("Очистка от накипи. Шаг 2");} + + + //AA:AA:AA:B5 "Error Code" + else if(x==30){id(idErrorCode).publish_state("00");} + else if(x==31){id(idErrorCode).publish_state("0B");} + else if(x==32){id(idErrorCode).publish_state("E6");} + else if(x==33){id(idErrorCode).publish_state("80");} + else if(x==34){id(idErrorCode).publish_state("CB");} + else if(x==35){id(idErrorCode).publish_state("FF");} + else if(x==36){id(idErrorCode).publish_state("A0");} + +##################################################################################### +################################## Бинарный сенсор ################################## +#Статус кофемашины: включена или выключена +binary_sensor: + - platform: template + name: "Power Status" + id: idPowerStatus + icon: mdi:power + +##################################################################################### +################################### Текстовый сенсор ################################ + +text_sensor: + - platform: template + name: "Status" + id: idStatus + icon: mdi:coffee-to-go + update_interval: never + - platform: template + name: "Water" + id: idWater + icon: mdi:cup-water + update_interval: never + - platform: template + name: "Coffee Pallet" + id: idPallet + icon: mdi:spirit-level + update_interval: never + - platform: template + name: "Grain Tray" + id: idGrainTray + icon: mdi:grain + update_interval: never + - platform: template + name: "Coffee Grounds Container" + id: idCoffeeGroundsContainer + icon: mdi:train-car-centerbeam-full + update_interval: never + - platform: template + name: "Error Code" + id: idErrorCode + icon: mdi:alert-circle-outline + update_interval: never + +select: + - platform: template + name: "Тип напитка" + id: coffee_type + options: + - "Эспрессо" + - "Американо" + - "Капучино" + - "Латте" + - "Кофе с молоком" + - "Молочная пена" + - "Горячая вода" + initial_option: "Эспрессо" + optimistic: true + + - platform: template + name: "Крепость" + id: coffee_strength + options: + - "Мягкий" + - "Обычный" + - "Крепкий" + - "Молотый" + initial_option: "Обычный" + optimistic: true + + - platform: template + name: "Чашки" + id: coffee_cups + options: + - "1" + - "2" + - "3" + - "4" + initial_option: "1" + optimistic: true + +number: + - platform: template + name: "Объем кофе (мл)" + id: coffee_volume + min_value: 20 + max_value: 250 + step: 10 + initial_value: 100 + unit_of_measurement: "ml" + optimistic: true + + - platform: template + name: "Объем молока (мл)" + id: milk_volume + min_value: 0 + max_value: 250 + step: 10 + initial_value: 0 + unit_of_measurement: "ml" + optimistic: true + +#Тестовый стенд: произвольный hex-пакет(ы) для отправки в материнскую плату. +#Можно указывать несколько пакетов через разделитель ";". +text: + - platform: template + name: "Test Hex" + id: test_hex + mode: TEXT + optimistic: true + max_length: 255 + initial_value: "AA AA AA FE 00 00 C8 87 1B 40 55" + +button: + - platform: template + name: "SEND Test" + on_press: + then: + - lambda: |- + { + std::string str = id(test_hex).state; + std::vector pkts; + size_t pos = 0; + while (pos <= str.size()) { + size_t sep = str.find(';', pos); + if (sep == std::string::npos) sep = str.size(); + std::string part = str.substr(pos, sep - pos); + while (!part.empty() && std::isspace(part.front())) part.erase(part.begin()); + while (!part.empty() && std::isspace(part.back())) part.pop_back(); + if (!part.empty()) pkts.push_back(part); + pos = sep + 1; + } + id(saeco_series_6000_component)->send_packets_to_mainboard(pkts, 50); + } + - platform: template + name: "SEND Test RAW" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_raw_to_mainboard(id(test_hex).state, 50); + - platform: template + name: "Включение (FE 00 01)" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_packets_to_mainboard( + std::vector{ + "AA AA AA FE 00 01 5E B7 1C 37 55" + }, 50); + - platform: template + name: "Американо" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_packets_to_mainboard( + std::vector{ + "AA AA AA 93 0E 01 01 8B BD 33 EA 55", + "AA AA AA 90 0F 0A 00 02 00 03 02 00 B4 00 00 00 67 48 E4 4B 55", + "AA AA AA 91 10 01 03 56 9A 8C B8 55" + }, 50); + - platform: template + name: "Выключение" + on_press: + then: + - lambda: |- + id(saeco_series_6000_component)->send_packets_to_mainboard( + std::vector{ + "AA AA AA FE 00 00 C8 87 1B 40 55" + }, 50); + - platform: template + name: "Приготовить напиток" + icon: mdi:coffee + on_press: + - lambda: |- + { + uint8_t type = id(coffee_type).index_of(id(coffee_type).state).value_or(0); // 0..6 + uint8_t bean = id(coffee_strength).index_of(id(coffee_strength).state).value_or(0); // 0..3 + uint8_t cups = id(coffee_cups).index_of(id(coffee_cups).state).value_or(0) + 1; // 1..4 + uint16_t vol = (uint16_t) id(coffee_volume).state; + uint16_t milk = (uint16_t) id(milk_volume).state; + id(saeco_series_6000_component)->coffee_build(type, bean, cups, vol, milk); + } + + +#[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 93 0A 01 01 57 15 3A ED 55 +#[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 90 0B 0A 05 03 00 02 00 00 64 00 00 00 39 BF 5B 74 55 +#[20:45:35][I][saeco_series_6000:079]: Packet from Display: AA AA AA 91 0C 01 03 42 C0 B0 AD 55" \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/crc.cpp b/esphome/settings/components/saeco_series_6000/crc.cpp new file mode 100644 index 0000000..ba04320 --- /dev/null +++ b/esphome/settings/components/saeco_series_6000/crc.cpp @@ -0,0 +1,43 @@ +#include "saeco_series_6000.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +uint32_t SaecoSeries6000::calc_crc(const std::vector& data, size_t start, size_t end) { + uint32_t crc = 0xFFFFFFFF; + const uint32_t POLY = 0x04C11DB7; + if (start >= end) return 0; + // start + uint8_t val = data[start]; + ((uint8_t*)(&crc))[3] ^= BitReverse[val]; + for (uint8_t j = 0; j < 8; j++) { + if (crc & 0x80000000) { + crc = (crc << 1) ^ POLY; + } else { + crc <<= 1; + } + } + // остальные байты + for (size_t i = start + 1; i < end; i++) { + uint8_t v = data[i]; + ((uint8_t*)(&crc))[3] ^= BitReverse[v]; + for (uint8_t j = 0; j < 8; j++) { + if (crc & 0x80000000) { + crc = (crc << 1) ^ POLY; + } else { + crc <<= 1; + } + } + } + uint32_t t32 = 0; + ((uint8_t*)(&t32))[0] = BitReverse[((uint8_t*)(&crc))[3]]; + ((uint8_t*)(&t32))[1] = BitReverse[((uint8_t*)(&crc))[2]]; + ((uint8_t*)(&t32))[2] = BitReverse[((uint8_t*)(&crc))[1]]; + ((uint8_t*)(&t32))[3] = BitReverse[((uint8_t*)(&crc))[0]]; + crc = t32 ^ 0xFFFFFFFF; + return crc; +} + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/recipe.cpp b/esphome/settings/components/saeco_series_6000/recipe.cpp new file mode 100644 index 0000000..657713f --- /dev/null +++ b/esphome/settings/components/saeco_series_6000/recipe.cpp @@ -0,0 +1,59 @@ +#include "saeco_series_6000.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +std::vector SaecoSeries6000::build_coffee_recipe(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk) { + static const uint8_t CoffeePattern[7][4] = { + {0,1,1,2}, // Espresso + {1,2,3,2}, // Americano + {2,2,1,2}, // Cappuccino + {3,2,2,2}, // Latte + {4,0,0,1}, // Coffee with milk + {5,1,0,1}, // Milk foam + {6,0,0,1} // Hot water + }; + uint8_t rec[10] = {0}; + if (type >= 7) type = 0; + rec[0] = CoffeePattern[type][0]; + if (rec[0] == 5 || rec[0] == 4) { + rec[1] = 3; // всегда молотый для молока и milk foam + } else { + rec[1] = bean; + } + if (cups > CoffeePattern[type][3]) { + rec[2] = CoffeePattern[type][3]; + } else { + rec[2] = cups; + } + rec[3] = CoffeePattern[type][1]; + rec[4] = CoffeePattern[type][2]; + if (rec[0] == 1) { // Americano + rec[6] = 40; + rec[7] = 0; + rec[8] = (uint8_t)vol; + rec[9] = vol / 0x100; + rec[5] = 0; + } else { + rec[6] = (uint8_t)vol; + rec[7] = vol / 0x100; + if (rec[0] == 0 || rec[0] == 1 || rec[0] == 4 || rec[0] == 5) { + if (rec[0] == 5) { + rec[5] = 2; + } else { + rec[5] = 0; + } + rec[8] = 0; + rec[9] = 0; + } else { + rec[5] = 2; + rec[8] = (uint8_t)milk; + rec[9] = milk / 0x100; + } + } + return std::vector(rec, rec + 10); +} + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/saeco_series_6000.cpp b/esphome/settings/components/saeco_series_6000/saeco_series_6000.cpp index de9bfb9..446b6e3 100644 --- a/esphome/settings/components/saeco_series_6000/saeco_series_6000.cpp +++ b/esphome/settings/components/saeco_series_6000/saeco_series_6000.cpp @@ -1,343 +1,382 @@ -#include "saeco_series_6000.h" -#include "esphome/core/log.h" -#include - -namespace esphome { -namespace saeco_series_6000 { - -static const char *TAG = "saeco_series_6000"; -static uint32_t last_activity_time = 0; - -void SaecoSeries6000::loop() { - uint8_t byte; - - // Bridge from uart_display (display) to uart_mainboard (mainboard) - while (uart_display_->available()) { - uart_display_->read_byte(&byte); - uart_mainboard_->write_byte(byte); // Mirror byte immediately - process_display_byte(byte); // Process the "sniffed" byte - } - - // Bridge from uart_mainboard (mainboard) to uart_display (display) - while (uart_mainboard_->available()) { - uart_mainboard_->read_byte(&byte); - uart_display_->write_byte(byte); // Mirror byte immediately - process_mainboard_byte(byte); // Process the "sniffed" byte - } - // Контроль активности UART (выключение через 15 сек) - static uint32_t last_check = 0; - uint32_t now = millis(); - if (now - last_check > 1000) { // проверяем каждую секунду - last_check = now; - if (now - last_activity_time > 15000) { - pub_status(2); // публикуем статус "выключено" - last_activity_time = now; // чтобы не публиковать повторно - } - } -} - -void SaecoSeries6000::process_display_byte(uint8_t byte) { - // Если получили первый 0xAA — начинаем новый пакет - if (byte == 0xAA && display_buffer_pos_ == 0) { - display_buffer_[display_buffer_pos_++] = byte; - return; - } - // Если уже начали собирать пакет - if (display_buffer_pos_ > 0 && display_buffer_pos_ < DISPLAY_BUFFER_SIZE) { - display_buffer_[display_buffer_pos_++] = byte; - if (byte == 0x55) { - parse_display_packet(display_buffer_, display_buffer_pos_); - display_buffer_pos_ = 0; - } - } -} - -void SaecoSeries6000::process_mainboard_byte(uint8_t byte) { - // Если получили первый 0xAA — начинаем новый пакет - if (byte == 0xAA && mainboard_buffer_pos_ == 0) { - mainboard_buffer_[mainboard_buffer_pos_++] = byte; - return; - } - // Если уже начали собирать пакет - if (mainboard_buffer_pos_ > 0 && mainboard_buffer_pos_ < MAINBOARD_BUFFER_SIZE) { - mainboard_buffer_[mainboard_buffer_pos_++] = byte; - if (byte == 0x55) { - parse_mainboard_packet(mainboard_buffer_, mainboard_buffer_pos_); - mainboard_buffer_pos_ = 0; - } - } -} - -void SaecoSeries6000::update_display_counter_from_packet(const uint8_t* buffer, uint16_t size) { - if (size > 4 && buffer[3] != 0xFF) { - last_display_counter_ = buffer[4]; - } -} - -void SaecoSeries6000::parse_display_packet(const uint8_t* buffer, uint16_t size) { - if (debug_) { - std::vector hex_buffer; - hex_buffer.resize(size * 3 + 1); - for (uint16_t i = 0; i < size; i++) { - sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); - } - if (size > 4 && buffer[3] != 0xFF){ - ESP_LOGI(TAG, "Packet from Display: %s", hex_buffer.data()); - } - } - update_display_counter_from_packet(buffer, size); - // Здесь больше не парсим B0-пакеты, только debug -} - -// Разбор пакета B0 (системные статусы кофемашины) -// buffer[6], buffer[7], buffer[9] содержат коды состояния -void SaecoSeries6000::parse_b0_packet(const uint8_t* buffer, uint16_t size) { - if (size < 10) return; - if (buffer[6] == 0x0E) { - if (buffer[9] == 0x00) { - pub_status(20); // 20: "Опорож. контейнер для коф. гущи" - } else { - if ((buffer[9] & 0x40) != 0) { - pub_status(22); // 22: "Воды нет" - } else { - pub_status(17); // 17: "Вода есть" - } - if ((buffer[9] & 0x80) != 0) { - pub_status(23); // 23: "Извлечен контейнер для жмыха" - } else { - pub_status(18); // 18: "Вставлен контейнер для жмыха" - } - } - } else if (buffer[6] == 0x06) { - pub_status(21); // 21: "Готово/Выберите напиток" - } else if (buffer[6] == 0x0C) { - if (buffer[7] == 0x01) { - pub_status(8); // 8: "Наслаждайтесь" - } else if (buffer[7] == 0x02) { - pub_status(15); // 15: "Что-то (07 0C 02)" - } - } else if (buffer[6] == 0x07) { - if (buffer[7] == 0x0E) { - pub_status(9); // 9: "Нагрев воды" - } else if (buffer[7] == 0x0D) { - pub_status(10); // 10: "Перемалываем зерна" - } else if (buffer[7] == 0x10) { - pub_status(3); // 3: "Наливаем молоко" - } else if (buffer[7] == 0x11) { - pub_status(4); // 4: "Наливаем кофе" - } else if (buffer[7] == 0x12) { - pub_status(5); // 5: "Предварительное дозирование" - } else if (buffer[7] == 0x13) { - pub_status(6); // 6: "Создание пара для молока" - } else if (buffer[7] == 0x14) { - pub_status(7); // 7: "Заварочный узел в положение заваривания" - } else if (buffer[7] == 0x15) { - pub_status(15); // 15: "Наслаждайтесь" - } - } else if (buffer[6] == 0x08) { - if (buffer[7] == 0x0E) { - pub_status(14); // 14: "Нагревание" - } else if (buffer[7] == 0x02) { - pub_status(11); // 11: "Промывка" - } else if (buffer[7] == 0x14) { - pub_status(13); // 13: "Что-то (07 08 14)" - } else if (buffer[7] == 0x05) { - pub_status(12); // 12: "Зерна закончились" - } else if (buffer[7] == 0x16) { - pub_status(24); // 24: "Удаление накипи стадия 1" - } else if (buffer[7] == 0x18) { - pub_status(25); // 25: "Удаление накипи стадия 2" - } - } else if (buffer[7] == 0x00) { - if (buffer[6] == 0x01) { - pub_status(1); // 1: "Что-то (07 01 00)" - } else if (buffer[6] == 0x05) { - pub_status(2); // 2: "Выключено" - } - } -} - -// Разбор пакета B5 (коды ошибок кофемашины) -// buffer[10], buffer[11] содержат коды ошибок -void SaecoSeries6000::parse_b5_packet(const uint8_t* buffer, uint16_t size) { - if (size <= 12) return; - if (buffer[10] == 0x00) { - if (buffer[11] == 0x00) pub_status(30); // 30: "Ошибка 0x00" - else if (buffer[11] == 0x0B) pub_status(31); // 31: "Ошибка 0x0B" - else if (buffer[11] == 0xE6) pub_status(32); // 32: "Ошибка 0xE6" - else if (buffer[11] == 0x80) pub_status(33); // 33: "Ошибка 0x80" - else if (buffer[11] == 0xCB) pub_status(34); // 34: "Ошибка 0xCB" - else if (buffer[11] == 0xFF) pub_status(35); // 35: "Ошибка 0xFF" - else if (buffer[11] == 0xA0) pub_status(36); // 36: "Ошибка 0xA0" - } else if (buffer[10] == 0x01) { - pub_status(37); // 37: "Статус2 0x01" - } -} - -void SaecoSeries6000::parse_mainboard_packet(const uint8_t* buffer, uint16_t size) { - last_activity_time = millis(); // сбрасываем таймер активности при любом пакете - if (debug_) { - // std::vector hex_buffer; - // hex_buffer.resize(size * 3 + 1); - // for (uint16_t i = 0; i < size; i++) { - // sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); - // } - //ESP_LOGD(TAG, "Packet from Mainboard: %s", hex_buffer.data()); - //ESP_LOGD(TAG, "parse_mainboard_packet: size=%u", size); - } - // Парсим B0 - if (size > 4 && buffer[3] == 0xB0) { - parse_b0_packet(buffer, size); - } else if (size > 12 && buffer[3] == 0xB5) { - parse_b5_packet(buffer, size); - } -} - -void SaecoSeries6000::pub_status(uint8_t status) { - if (status_sensor_ != nullptr) { - status_sensor_->publish_state(status); - } -} - -void SaecoSeries6000::dump_config() { - ESP_LOGCONFIG(TAG, "Saeco Series 6000 UART Bridge"); - ESP_LOGCONFIG(TAG, " UART Display (uart_display): %p", uart_display_); - ESP_LOGCONFIG(TAG, " UART Mainboard (uart_mainboard): %p", uart_mainboard_); - ESP_LOGCONFIG(TAG, " Debug mode: %s", ONOFF(this->debug_)); -} - -void SaecoSeries6000::send_packet_to_mainboard(const std::vector &data) { - ESP_LOGI(TAG, "Send to Mainboard pressed."); - for (auto b : data) { - uart_mainboard_->write_byte(b); - } -} - -const uint8_t SaecoSeries6000::BitReverse[256] = { - 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, - 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, - 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, - 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, - 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, - 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, - 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, - 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, - 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, - 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, - 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, - 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, - 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, - 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, - 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, - 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF -}; - -uint32_t SaecoSeries6000::calc_crc(const std::vector& data, size_t start, size_t end) { - uint32_t crc = 0xFFFFFFFF; - const uint32_t POLY = 0x04C11DB7; - if (start >= end) return 0; - // start - uint8_t val = data[start]; - ((uint8_t*)(&crc))[3] ^= BitReverse[val]; - for (uint8_t j = 0; j < 8; j++) { - if (crc & 0x80000000) { - crc = (crc << 1) ^ POLY; - } else { - crc <<= 1; - } - } - // остальные байты - for (size_t i = start + 1; i < end; i++) { - uint8_t v = data[i]; - ((uint8_t*)(&crc))[3] ^= BitReverse[v]; - for (uint8_t j = 0; j < 8; j++) { - if (crc & 0x80000000) { - crc = (crc << 1) ^ POLY; - } else { - crc <<= 1; - } - } - } - uint32_t t32 = 0; - ((uint8_t*)(&t32))[0] = BitReverse[((uint8_t*)(&crc))[3]]; - ((uint8_t*)(&t32))[1] = BitReverse[((uint8_t*)(&crc))[2]]; - ((uint8_t*)(&t32))[2] = BitReverse[((uint8_t*)(&crc))[1]]; - ((uint8_t*)(&t32))[3] = BitReverse[((uint8_t*)(&crc))[0]]; - crc = t32 ^ 0xFFFFFFFF; - return crc; -} - -std::vector SaecoSeries6000::parse_hex_string_to_bytes(const std::string& hex_string) { - std::vector pkt; - size_t pos = 0; - while (pos < hex_string.size()) { - while (pos < hex_string.size() && isspace(hex_string[pos])) ++pos; - if (pos >= hex_string.size()) break; - char* endptr = nullptr; - uint8_t byte = static_cast(std::strtoul(hex_string.c_str() + pos, &endptr, 16)); - pkt.push_back(byte); - if (endptr == nullptr || endptr == hex_string.c_str() + pos) break; - pos = endptr - hex_string.c_str(); - } - return pkt; -} - -void SaecoSeries6000::send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms) { - std::vector> pkts = {parse_hex_string_to_bytes(hex_packet)}; - send_packets_to_mainboard(pkts, delay_ms); -} - -void SaecoSeries6000::send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms) { - std::vector> pkts; - for (const auto& s : hex_packets) { - pkts.push_back(parse_hex_string_to_bytes(s)); - } - send_packets_to_mainboard(pkts, delay_ms); -} - -void SaecoSeries6000::send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms) { - uint8_t counter = (last_display_counter_ + 1) & 0xFF; - for (size_t i = 0; i < packets.size(); ++i) { - std::vector pkt = packets[i]; - // Заменяем байт счетчика (4-й байт) - if (pkt.size() > 4) { - pkt[4] = counter; - } - // Пересчёт CRC: ищем преамбулу 0xAA 0xAA 0xAA, считаем CRC по данным между преамбулой и последними 5 байтами - if (pkt.size() > 8) { - size_t preamble = 0; - if (pkt[0] == 0xAA && pkt[1] == 0xAA && pkt[2] == 0xAA) { - preamble = 3; - } - size_t crc_start = preamble; - size_t crc_end = pkt.size() - 5; // не включаем 4 CRC и 0x55 - uint32_t crc = calc_crc(pkt, crc_start, crc_end); - // Заменяем последние 4 байта перед 0x55 на новую CRC - pkt[pkt.size()-2] = (crc >> 24) & 0xFF; - pkt[pkt.size()-3] = (crc >> 16) & 0xFF; - pkt[pkt.size()-4] = (crc >> 8) & 0xFF; - pkt[pkt.size()-5] = crc & 0xFF; - // pkt[pkt.size()-5] = (crc >> 24) & 0xFF; - // pkt[pkt.size()-4] = (crc >> 16) & 0xFF; - // pkt[pkt.size()-3] = (crc >> 8) & 0xFF; - // pkt[pkt.size()-2] = (crc) & 0xFF; - } - // Логируем пакет перед отправкой - std::string log_str; - char buf[8]; - for (auto b : pkt) { - snprintf(buf, sizeof(buf), "%02X ", b); - log_str += buf; - } - ESP_LOGI(TAG, "Send to Mainboard: %s", log_str.c_str()); - send_packet_to_mainboard(pkt); - counter = (counter + 1) & 0xFF; - delay(delay_ms); - } - last_display_counter_ = (counter - 1) & 0xFF; -} - -// Реализация SendPacketsAction полностью в header (saeco_series_6000.h) - -} // namespace saeco_series_6000 +#include "saeco_series_6000.h" +#include "esphome/core/log.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +static const char *TAG = "saeco_series_6000"; +static uint32_t last_activity_time = 0; + +void SaecoSeries6000::loop() { + uint8_t byte; + + // Bridge from uart_display (display) to uart_mainboard (mainboard) + while (uart_display_->available()) { + uart_display_->read_byte(&byte); + if (display_pending_len_ < DISPLAY_BUFFER_SIZE) { + display_pending_[display_pending_len_++] = byte; + } + process_display_byte(byte); // Process the "sniffed" byte + if (byte == 0x55) { + // Пакет дисплея собран полностью — пробрасываем в mainboard, + // кроме idle FE 00 00, если активен режим подавления + bool idle = suppress_display_idle_ && is_idle_packet(display_pending_, display_pending_len_); + if (!idle) { + uart_mainboard_->write_array(display_pending_, display_pending_len_); + } else { + ESP_LOGI(TAG, "Suppressed idle packet from Display"); + } + display_pending_len_ = 0; + } + } + + // Bridge from uart_mainboard (mainboard) to uart_display (display) + while (uart_mainboard_->available()) { + uart_mainboard_->read_byte(&byte); + uart_display_->write_byte(byte); // Mirror byte immediately + process_mainboard_byte(byte); // Process the "sniffed" byte + } + + // Контроль активности UART (выключение через 15 сек) + static uint32_t last_check = 0; + uint32_t now = millis(); + if (now - last_check > 1000) { // проверяем каждую секунду + last_check = now; + if (now - last_activity_time > 15000) { + pub_status(2); // публикуем статус "выключено" + last_activity_time = now; // чтобы не публиковать повторно + } + } +} + +void SaecoSeries6000::process_display_byte(uint8_t byte) { + // Если получили первый 0xAA — начинаем новый пакет + if (byte == 0xAA && display_buffer_pos_ == 0) { + display_buffer_[display_buffer_pos_++] = byte; + return; + } + // Если уже начали собирать пакет + if (display_buffer_pos_ > 0 && display_buffer_pos_ < DISPLAY_BUFFER_SIZE) { + display_buffer_[display_buffer_pos_++] = byte; + if (byte == 0x55) { + parse_display_packet(display_buffer_, display_buffer_pos_); + display_buffer_pos_ = 0; + } + } +} + +void SaecoSeries6000::process_mainboard_byte(uint8_t byte) { + // Если получили первый 0xAA — начинаем новый пакет + if (byte == 0xAA && mainboard_buffer_pos_ == 0) { + mainboard_buffer_[mainboard_buffer_pos_++] = byte; + return; + } + // Если уже начали собирать пакет + if (mainboard_buffer_pos_ > 0 && mainboard_buffer_pos_ < MAINBOARD_BUFFER_SIZE) { + mainboard_buffer_[mainboard_buffer_pos_++] = byte; + if (byte == 0x55) { + parse_mainboard_packet(mainboard_buffer_, mainboard_buffer_pos_); + mainboard_buffer_pos_ = 0; + } + } +} + +void SaecoSeries6000::update_display_counter_from_packet(const uint8_t* buffer, uint16_t size) { + if (size > 4 && buffer[3] != 0xFF) { + last_display_counter_ = buffer[4]; + } +} + +void SaecoSeries6000::parse_display_packet(const uint8_t* buffer, uint16_t size) { + if (debug_) { + std::vector hex_buffer; + hex_buffer.resize(size * 3 + 1); + for (uint16_t i = 0; i < size; i++) { + sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); + } + if (size > 4 && buffer[3] != 0xFF){ + ESP_LOGI(TAG, "Packet from Display: %s", hex_buffer.data()); + } + } + update_display_counter_from_packet(buffer, size); + // Здесь больше не парсим B0-пакеты, только debug +} + +// Разбор пакета B0 (системные статусы кофемашины) +// buffer[6], buffer[7], buffer[9] содержат коды состояния +void SaecoSeries6000::parse_b0_packet(const uint8_t* buffer, uint16_t size) { + if (size < 10) return; + if (buffer[6] == 0x08) { + // Любой статус 0x08 - рабочий режим mainboard: дисплей не должен слать idle FE 00 00 + suppress_display_idle_ = true; + } + if (buffer[6] == 0x0E) { + if (buffer[9] == 0x00) { + pub_status(20); // 20: "Опорож. контейнер для коф. гущи" + } else { + if ((buffer[9] & 0x40) != 0) { + pub_status(22); // 22: "Воды нет" + } else { + pub_status(17); // 17: "Вода есть" + } + if ((buffer[9] & 0x80) != 0) { + pub_status(23); // 23: "Извлечен контейнер для жмыха" + } else { + pub_status(18); // 18: "Вставлен контейнер для жмыха" + } + } + } else if (buffer[6] == 0x06) { + pub_status(21); // 21: "Готово/Выберите напиток" + } else if (buffer[6] == 0x0C) { + if (buffer[7] == 0x01) { + pub_status(8); // 8: "Наслаждайтесь" + } else if (buffer[7] == 0x02) { + pub_status(15); // 15: "Что-то (07 0C 02)" + } + } else if (buffer[6] == 0x07) { + if (buffer[7] == 0x0E) { + pub_status(9); // 9: "Нагрев воды" + } else if (buffer[7] == 0x0D) { + pub_status(10); // 10: "Перемалываем зерна" + } else if (buffer[7] == 0x10) { + pub_status(3); // 3: "Наливаем молоко" + } else if (buffer[7] == 0x11) { + pub_status(4); // 4: "Наливаем кофе" + } else if (buffer[7] == 0x12) { + pub_status(5); // 5: "Предварительное дозирование" + } else if (buffer[7] == 0x13) { + pub_status(6); // 6: "Создание пара для молока" + } else if (buffer[7] == 0x14) { + pub_status(7); // 7: "Заварочный узел в положение заваривания" + } else if (buffer[7] == 0x15) { + pub_status(15); // 15: "Наслаждайтесь" + } + } else if (buffer[6] == 0x08) { + if (buffer[7] == 0x0E) { + pub_status(14); // 14: "Нагревание" + } else if (buffer[7] == 0x02) { + pub_status(11); // 11: "Промывка" + } else if (buffer[7] == 0x14) { + pub_status(13); // 13: "Что-то (07 08 14)" + } else if (buffer[7] == 0x05) { + pub_status(12); // 12: "Зерна закончились" + } else if (buffer[7] == 0x16) { + pub_status(24); // 24: "Удаление накипи стадия 1" + } else if (buffer[7] == 0x18) { + pub_status(25); // 25: "Удаление накипи стадия 2" + } + } else if (buffer[7] == 0x00) { + if (buffer[6] == 0x01) { + pub_status(1); // 1: "Что-то (07 01 00)" + } else if (buffer[6] == 0x05) { + pub_status(2); // 2: "Выключено" + } + } +} + +// Разбор пакета B5 (коды ошибок кофемашины) +// buffer[10], buffer[11] содержат коды ошибок +void SaecoSeries6000::parse_b5_packet(const uint8_t* buffer, uint16_t size) { + if (size <= 12) return; + if (buffer[10] == 0x00) { + if (buffer[11] == 0x00) pub_status(30); // 30: "Ошибка 0x00" + else if (buffer[11] == 0x0B) pub_status(31); // 31: "Ошибка 0x0B" + else if (buffer[11] == 0xE6) pub_status(32); // 32: "Ошибка 0xE6" + else if (buffer[11] == 0x80) pub_status(33); // 33: "Ошибка 0x80" + else if (buffer[11] == 0xCB) pub_status(34); // 34: "Ошибка 0xCB" + else if (buffer[11] == 0xFF) pub_status(35); // 35: "Ошибка 0xFF" + else if (buffer[11] == 0xA0) pub_status(36); // 36: "Ошибка 0xA0" + } else if (buffer[10] == 0x01) { + pub_status(37); // 37: "Статус2 0x01" + } +} + +void SaecoSeries6000::parse_mainboard_packet(const uint8_t* buffer, uint16_t size) { + last_activity_time = millis(); // сбрасываем таймер активности при любом пакете + if (is_mainboard_idle(buffer, size)) { + suppress_display_idle_ = false; // mainboard вернулся в выключенный режим + } + if (debug_) { + std::vector hex_buffer; + hex_buffer.resize(size * 3 + 1); + for (uint16_t i = 0; i < size; i++) { + sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); + } + ESP_LOGI(TAG, "Packet from Mainboard: %s", hex_buffer.data()); + } + // Парсим B0 + if (size > 4 && buffer[3] == 0xB0) { + parse_b0_packet(buffer, size); + } else if (size > 12 && buffer[3] == 0xB5) { + parse_b5_packet(buffer, size); + } +} + +void SaecoSeries6000::pub_status(uint8_t status) { + if (status_sensor_ != nullptr) { + status_sensor_->publish_state(status); + } +} + +void SaecoSeries6000::dump_config() { + ESP_LOGCONFIG(TAG, "Saeco Series 6000 UART Bridge"); + ESP_LOGCONFIG(TAG, " UART Display (uart_display): %p", uart_display_); + ESP_LOGCONFIG(TAG, " UART Mainboard (uart_mainboard): %p", uart_mainboard_); + ESP_LOGCONFIG(TAG, " Debug mode: %s", ONOFF(this->debug_)); +} + +void SaecoSeries6000::send_packet_to_mainboard(const std::vector &data) { + ESP_LOGI(TAG, "Send to Mainboard pressed."); + for (auto b : data) { + uart_mainboard_->write_byte(b); + } +} + +const uint8_t SaecoSeries6000::BitReverse[256] = { + 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, + 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, + 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, + 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, + 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, + 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, + 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, + 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, + 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, + 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, + 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, + 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, + 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, + 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, + 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, + 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + +std::vector SaecoSeries6000::parse_hex_string_to_bytes(const std::string& hex_string) { + std::vector pkt; + size_t pos = 0; + while (pos < hex_string.size()) { + while (pos < hex_string.size() && isspace(hex_string[pos])) ++pos; + if (pos >= hex_string.size()) break; + char* endptr = nullptr; + uint8_t byte = static_cast(std::strtoul(hex_string.c_str() + pos, &endptr, 16)); + pkt.push_back(byte); + if (endptr == nullptr || endptr == hex_string.c_str() + pos) break; + pos = endptr - hex_string.c_str(); + } + return pkt; +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms) { + std::vector> pkts = {parse_hex_string_to_bytes(hex_packet)}; + send_packets_to_mainboard(pkts, delay_ms); +} + +void SaecoSeries6000::send_raw_to_mainboard(const std::string& hex_packet, uint32_t delay_ms) { + std::vector pkts; + size_t pos = 0; + while (pos <= hex_packet.size()) { + size_t sep = hex_packet.find(';', pos); + if (sep == std::string::npos) sep = hex_packet.size(); + std::string part = hex_packet.substr(pos, sep - pos); + while (!part.empty() && std::isspace(part.front())) part.erase(part.begin()); + while (!part.empty() && std::isspace(part.back())) part.pop_back(); + if (!part.empty()) pkts.push_back(part); + pos = sep + 1; + } + for (const auto& p : pkts) { + std::vector pkt = parse_hex_string_to_bytes(p); + if (pkt.empty()) continue; + std::string log_str; + char buf[8]; + for (auto b : pkt) { + snprintf(buf, sizeof(buf), "%02X ", b); + log_str += buf; + } + ESP_LOGI(TAG, "Send RAW to Mainboard: %s", log_str.c_str()); + if (is_power_off_packet(pkt.data(), pkt.size())) { + suppress_display_idle_ = false; // программное выключение: idle снова пропускаем + } + send_packet_to_mainboard(pkt); + delay(delay_ms); + } +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms) { + std::vector> pkts; + for (const auto& s : hex_packets) { + pkts.push_back(parse_hex_string_to_bytes(s)); + } + send_packets_to_mainboard(pkts, delay_ms); +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms) { + uint8_t counter = (last_display_counter_ + 1) & 0xFF; + for (size_t i = 0; i < packets.size(); ++i) { + std::vector pkt = packets[i]; + // Заменяем байт счетчика (4-й байт) + if (pkt.size() > 4) { + pkt[4] = counter; + } + // Пересчёт CRC: ищем преамбулу 0xAA 0xAA 0xAA, считаем CRC по данным между преамбулой и последними 5 байтами + if (pkt.size() > 8) { + size_t preamble = 0; + if (pkt[0] == 0xAA && pkt[1] == 0xAA && pkt[2] == 0xAA) { + preamble = 3; + } + size_t crc_start = preamble; + size_t crc_end = pkt.size() - 5; // не включаем 4 CRC и 0x55 + uint32_t crc = calc_crc(pkt, crc_start, crc_end); + // Заменяем последние 4 байта перед 0x55 на новую CRC + pkt[pkt.size()-2] = (crc >> 24) & 0xFF; + pkt[pkt.size()-3] = (crc >> 16) & 0xFF; + pkt[pkt.size()-4] = (crc >> 8) & 0xFF; + pkt[pkt.size()-5] = crc & 0xFF; + // pkt[pkt.size()-5] = (crc >> 24) & 0xFF; + // pkt[pkt.size()-4] = (crc >> 16) & 0xFF; + // pkt[pkt.size()-3] = (crc >> 8) & 0xFF; + // pkt[pkt.size()-2] = (crc) & 0xFF; + } + // Логируем пакет перед отправкой + std::string log_str; + char buf[8]; + for (auto b : pkt) { + snprintf(buf, sizeof(buf), "%02X ", b); + log_str += buf; + } + ESP_LOGI(TAG, "Send to Mainboard: %s", log_str.c_str()); + if (is_power_off_packet(pkt.data(), pkt.size())) { + suppress_display_idle_ = false; // программное выключение: idle снова пропускаем + } + send_packet_to_mainboard(pkt); + counter = (counter + 1) & 0xFF; + delay(delay_ms); + } + last_display_counter_ = (counter - 1) & 0xFF; +} + +// Реализация SendPacketsAction полностью в header (saeco_series_6000.h) + +void SaecoSeries6000::coffee_build(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk) { + // Формируем пакет для отправки (AA AA AA 90 ... CRC CRC CRC CRC 55) + std::vector pkt = {0xAA, 0xAA, 0xAA, 0x90}; + std::vector rec = build_coffee_recipe(type, bean, cups, vol, milk); + pkt.insert(pkt.end(), rec.begin(), rec.end()); + // Добавляем 4 байта CRC (заполним позже) и 0x55 + pkt.resize(pkt.size() + 4 + 1, 0); + pkt[pkt.size() - 1] = 0x55; + // Пересчёт CRC + size_t preamble = 3; + size_t crc_start = preamble; + size_t crc_end = pkt.size() - 5; + uint32_t crc = calc_crc(pkt, crc_start, crc_end); + pkt[pkt.size()-2] = (crc >> 24) & 0xFF; + pkt[pkt.size()-3] = (crc >> 16) & 0xFF; + pkt[pkt.size()-4] = (crc >> 8) & 0xFF; + pkt[pkt.size()-5] = crc & 0xFF; + // Отправляем пакет + send_packets_to_mainboard(std::vector>{pkt}); +} + +} // namespace saeco_series_6000 } // namespace esphome \ No newline at end of file diff --git a/esphome/settings/components/saeco_series_6000/saeco_series_6000.h b/esphome/settings/components/saeco_series_6000/saeco_series_6000.h index fe73935..e59d980 100644 --- a/esphome/settings/components/saeco_series_6000/saeco_series_6000.h +++ b/esphome/settings/components/saeco_series_6000/saeco_series_6000.h @@ -1,81 +1,124 @@ -#pragma once - -#include "esphome/core/component.h" -#include "esphome/components/uart/uart.h" -#include "esphome/components/sensor/sensor.h" -#include "esphome/core/automation.h" -#include "esphome/components/button/button.h" - -namespace esphome { -namespace saeco_series_6000 { - -// Buffer sizes for packet sniffing -constexpr size_t DISPLAY_BUFFER_SIZE = 128; -constexpr size_t MAINBOARD_BUFFER_SIZE = 128; - -class SaecoSeries6000 : public Component { - public: - void set_uart_display(uart::UARTComponent *uart_display) { uart_display_ = uart_display; } - void set_uart_mainboard(uart::UARTComponent *uart_mainboard) { uart_mainboard_ = uart_mainboard; } - void set_debug(bool debug) { debug_ = debug; } - void set_status_sensor(sensor::Sensor *sensor) { status_sensor_ = sensor; } - void loop() override; - void dump_config() override; - void send_packet_to_mainboard(const std::vector &data); - void send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms = 10); - void send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms = 10); - void send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms = 10); - - protected: - uart::UARTComponent *uart_display_; - uart::UARTComponent *uart_mainboard_; - bool debug_{false}; - sensor::Sensor *status_sensor_{nullptr}; - - private: - uint8_t display_buffer_[DISPLAY_BUFFER_SIZE]; - uint16_t display_buffer_pos_{0}; - - uint8_t mainboard_buffer_[MAINBOARD_BUFFER_SIZE]; - uint16_t mainboard_buffer_pos_{0}; - - uint8_t display_last_bytes_[3] = {0, 0, 0}; - uint8_t mainboard_last_bytes_[3] = {0, 0, 0}; - - uint8_t display_sync_count_{0}; - uint8_t mainboard_sync_count_{0}; - - uint8_t last_display_counter_{0}; - void update_display_counter_from_packet(const uint8_t* buffer, uint16_t size); - - void process_display_byte(uint8_t byte); - void process_mainboard_byte(uint8_t byte); - - void parse_display_packet(const uint8_t* buffer, uint16_t size); - void parse_mainboard_packet(const uint8_t* buffer, uint16_t size); - void parse_b0_packet(const uint8_t* buffer, uint16_t size); - void parse_b5_packet(const uint8_t* buffer, uint16_t size); - void pub_status(uint8_t status); - static const uint8_t BitReverse[256]; - uint32_t calc_crc(const std::vector& data, size_t start, size_t end); - std::vector parse_hex_string_to_bytes(const std::string& hex_string); -}; - -class SaecoSendPacketsButton : public esphome::button::Button, public esphome::Component { - public: - void set_parent(SaecoSeries6000 *parent) { parent_ = parent; } - void set_packets(const std::vector> &packets) { packets_ = packets; } - void set_delay_ms(uint32_t delay_ms) { delay_ms_ = delay_ms; } - void press_action() override { - if (parent_ != nullptr) { - parent_->send_packets_to_mainboard(packets_, delay_ms_); - } - } - private: - SaecoSeries6000 *parent_{nullptr}; - std::vector> packets_; - uint32_t delay_ms_{10}; -}; - -} // namespace saeco_series_6000 +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/uart/uart.h" +#include "esphome/components/sensor/sensor.h" +#include "esphome/core/automation.h" +#include "esphome/components/button/button.h" + +namespace esphome { +namespace saeco_series_6000 { + +// Buffer sizes for packet sniffing +constexpr size_t DISPLAY_BUFFER_SIZE = 128; +constexpr size_t MAINBOARD_BUFFER_SIZE = 128; + +class SaecoSeries6000 : public Component { + public: + void set_uart_display(uart::UARTComponent *uart_display) { uart_display_ = uart_display; } + void set_uart_mainboard(uart::UARTComponent *uart_mainboard) { uart_mainboard_ = uart_mainboard; } + void set_debug(bool debug) { debug_ = debug; } + void set_status_sensor(sensor::Sensor *sensor) { status_sensor_ = sensor; } + void loop() override; + void dump_config() override; + void send_packet_to_mainboard(const std::vector &data); + void send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms = 10); + void send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms = 10); + void send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms = 10); + // Отправка пакета(ов) без пересчёта CRC и счётчика (точный реплей захваченных пакетов) + void send_raw_to_mainboard(const std::string& hex_packet, uint32_t delay_ms = 10); + + // Типы напитков + enum CoffeeType { + ESPRESSO = 0, + AMERICANO = 1, + CAPPUCCINO = 2, + LATTE = 3, + COFFEE_WITH_MILK = 4, + MILK_FOAM = 5, + HOT_WATER = 6 + }; + // Крепость/помол + enum CoffeeStrength { + MILD = 0, + NORMAL = 1, + STRONG = 2, + GROUND = 3 + }; + // Построение и отправка пакета приготовления кофе + void coffee_build(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk); + // Генерация рецепта (только формирование данных) + static std::vector build_coffee_recipe(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk); + + protected: + uart::UARTComponent *uart_display_; + uart::UARTComponent *uart_mainboard_; + bool debug_{false}; + sensor::Sensor *status_sensor_{nullptr}; + + private: + uint8_t display_buffer_[DISPLAY_BUFFER_SIZE]; + uint16_t display_buffer_pos_{0}; + + uint8_t mainboard_buffer_[MAINBOARD_BUFFER_SIZE]; + uint16_t mainboard_buffer_pos_{0}; + + uint8_t display_last_bytes_[3] = {0, 0, 0}; + uint8_t mainboard_last_bytes_[3] = {0, 0, 0}; + + uint8_t display_sync_count_{0}; + uint8_t mainboard_sync_count_{0}; + + uint8_t last_display_counter_{0}; + void update_display_counter_from_packet(const uint8_t* buffer, uint16_t size); + + // Подавление idle-пакета FE 00 00 от дисплея (когда дисплей не знает о программном включении) + bool suppress_display_idle_{false}; + bool is_idle_packet(const uint8_t* buffer, uint16_t size) const { + return size > 5 && buffer[3] == 0xFE && buffer[4] == 0x00 && buffer[5] == 0x00; + } + bool is_mainboard_idle(const uint8_t* buffer, uint16_t size) const { + return size > 6 && buffer[3] == 0xFF && buffer[4] == 0x00 && buffer[5] == 0x01 && buffer[6] == 0x00; + } + bool is_power_button_packet(const uint8_t* buffer, uint16_t size) const { + return size > 5 && buffer[3] == 0x93; + } + bool is_power_off_packet(const uint8_t* buffer, uint16_t size) const { + return size > 5 && buffer[3] == 0xFE && buffer[4] != 0x00; + } + + uint8_t display_pending_[DISPLAY_BUFFER_SIZE]; + uint16_t display_pending_len_{0}; + + void process_display_byte(uint8_t byte); + void process_mainboard_byte(uint8_t byte); + + void parse_display_packet(const uint8_t* buffer, uint16_t size); + void parse_mainboard_packet(const uint8_t* buffer, uint16_t size); + void parse_b0_packet(const uint8_t* buffer, uint16_t size); + void parse_b5_packet(const uint8_t* buffer, uint16_t size); + void pub_status(uint8_t status); + static const uint8_t BitReverse[256]; + // CRC-32 для пакетов кофемашины + static uint32_t calc_crc(const std::vector& data, size_t start, size_t end); + std::vector parse_hex_string_to_bytes(const std::string& hex_string); +}; + +class SaecoSendPacketsButton : public esphome::button::Button, public esphome::Component { + public: + void set_parent(SaecoSeries6000 *parent) { parent_ = parent; } + void set_packets(const std::vector> &packets) { packets_ = packets; } + void set_delay_ms(uint32_t delay_ms) { delay_ms_ = delay_ms; } + void press_action() override { + if (parent_ != nullptr) { + parent_->send_packets_to_mainboard(packets_, delay_ms_); + } + } + private: + SaecoSeries6000 *parent_{nullptr}; + std::vector> packets_; + uint32_t delay_ms_{10}; +}; + +} // namespace saeco_series_6000 } // namespace esphome \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/CMakeLists.txt b/esphome/settings/saeco_series_6000/CMakeLists.txt new file mode 100644 index 0000000..a1d1475 --- /dev/null +++ b/esphome/settings/saeco_series_6000/CMakeLists.txt @@ -0,0 +1,6 @@ +# Добавляем файл генерации рецептов +src_files( + saeco_series_6000.cpp + recipe.cpp + crc.cpp +) \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/__init__.py b/esphome/settings/saeco_series_6000/__init__.py new file mode 100644 index 0000000..4ed6d55 --- /dev/null +++ b/esphome/settings/saeco_series_6000/__init__.py @@ -0,0 +1,98 @@ +DEPENDENCIES = ["uart", "sensor"] + +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import uart, sensor, button +from esphome.const import CONF_ID, CONF_DEBUG +import esphome.automation as automation + +CONF_STATE_SENSOR = "state_sensor" +CONF_B0_STATUS_SENSOR = "b0_status_sensor" +CONF_B5_STATUS_SENSOR = "b5_status_sensor" +CONF_BA_STATUS_SENSOR = "ba_status_sensor" +CONF_S90_STATUS_SENSOR = "s90_status_sensor" +CONF_S91_STATUS_SENSOR = "s91_status_sensor" +CONF_S93_STATUS_SENSOR = "s93_status_sensor" +CONF_WATER_SENSOR = "water_sensor" +CONF_COFFEE_GROUNDS_CONTAINER_SENSOR = "coffee_grounds_container_sensor" +CONF_PALLET_SENSOR = "pallet_sensor" +CONF_ERROR_CODE_SENSOR = "error_code_sensor" +CONF_GRAIN_TRAY_SENSOR = "grain_tray_sensor" +CONF_STATUS_TEXT_SENSOR = "status_text_sensor" +CONF_PACKETS = "packets" +CONF_SAECO_ID = "saeco_id" + +saeco_series_6000_ns = cg.esphome_ns.namespace('saeco_series_6000') +SaecoSeries6000 = saeco_series_6000_ns.class_('SaecoSeries6000', cg.Component) + +CONFIG_SCHEMA = cv.Schema({ + cv.Required(cv.CONF_ID): cv.declare_id(SaecoSeries6000), + cv.Required('uart_display'): cv.use_id(uart.UARTComponent), + cv.Required('uart_mainboard'): cv.use_id(uart.UARTComponent), + cv.Optional(CONF_DEBUG, default=False): cv.boolean, + cv.Optional(CONF_STATE_SENSOR): sensor.sensor_schema(), +}).extend(cv.COMPONENT_SCHEMA) + +def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + yield cg.register_component(var, config) + + uart_display = yield cg.get_variable(config['uart_display']) + cg.add(var.set_uart_display(uart_display)) + + uart_mainboard = yield cg.get_variable(config['uart_mainboard']) + cg.add(var.set_uart_mainboard(uart_mainboard)) + + if config[CONF_DEBUG]: + cg.add(var.set_debug(True)) + + if CONF_STATE_SENSOR in config: + sens = yield sensor.new_sensor(config[CONF_STATE_SENSOR]) + cg.add(var.set_status_sensor(sens)) + +def validate_packet(value): + if isinstance(value, str): + return [int(x, 16) for x in value.split()] + return [cv.hex_uint8_t(x) for x in value] + +SEND_PACKETS_ACTION_SCHEMA = cv.Schema({ + cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), + cv.Required(CONF_PACKETS): [cv.All(validate_packet)], + cv.Optional("delay_ms", default=10): cv.positive_int, +}) + +SendPacketsAction = saeco_series_6000_ns.class_("SendPacketsAction", automation.Action) + +@automation.register_action( + "saeco_series_6000.send_packets", + SendPacketsAction, + SEND_PACKETS_ACTION_SCHEMA, +) +def send_packets_to_mainboard_action_to_code(config, action_id, template_arg, args): + var = cg.new_Pvariable(action_id) + parent = yield cg.get_variable(config[CONF_ID]) + var.set_parent(parent) + var.set_packets(config[CONF_PACKETS]) + var.set_delay_ms(config.get("delay_ms", 10)) + return var + +SaecoSendPacketsButton = saeco_series_6000_ns.class_("SaecoSendPacketsButton", button.Button, cg.Component) + +SAECO_SEND_PACKETS_BUTTON_SCHEMA = button._BUTTON_SCHEMA.extend({ + cv.GenerateID(): cv.declare_id(SaecoSendPacketsButton), + cv.Required(CONF_ID): cv.use_id(SaecoSeries6000), + cv.Required(CONF_PACKETS): [cv.All(validate_packet)], + cv.Optional("delay_ms", default=10): cv.positive_int, +}).extend(cv.COMPONENT_SCHEMA) + +async def saeco_send_packets_button_to_code(config): + parent = await cg.get_variable(config[CONF_SAECO_ID]) + var = cg.new_Pvariable(config["id"]) + await cg.register_component(var, config) + await button.register_button(var, config) + cg.add(var.set_parent(parent)) + cg.add(var.set_packets(config[CONF_PACKETS])) + cg.add(var.set_delay_ms(config.get("delay_ms", 10))) + return var + +button.register_button("saeco_series_6000", saeco_send_packets_button_to_code) \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/crc.cpp b/esphome/settings/saeco_series_6000/crc.cpp new file mode 100644 index 0000000..ba04320 --- /dev/null +++ b/esphome/settings/saeco_series_6000/crc.cpp @@ -0,0 +1,43 @@ +#include "saeco_series_6000.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +uint32_t SaecoSeries6000::calc_crc(const std::vector& data, size_t start, size_t end) { + uint32_t crc = 0xFFFFFFFF; + const uint32_t POLY = 0x04C11DB7; + if (start >= end) return 0; + // start + uint8_t val = data[start]; + ((uint8_t*)(&crc))[3] ^= BitReverse[val]; + for (uint8_t j = 0; j < 8; j++) { + if (crc & 0x80000000) { + crc = (crc << 1) ^ POLY; + } else { + crc <<= 1; + } + } + // остальные байты + for (size_t i = start + 1; i < end; i++) { + uint8_t v = data[i]; + ((uint8_t*)(&crc))[3] ^= BitReverse[v]; + for (uint8_t j = 0; j < 8; j++) { + if (crc & 0x80000000) { + crc = (crc << 1) ^ POLY; + } else { + crc <<= 1; + } + } + } + uint32_t t32 = 0; + ((uint8_t*)(&t32))[0] = BitReverse[((uint8_t*)(&crc))[3]]; + ((uint8_t*)(&t32))[1] = BitReverse[((uint8_t*)(&crc))[2]]; + ((uint8_t*)(&t32))[2] = BitReverse[((uint8_t*)(&crc))[1]]; + ((uint8_t*)(&t32))[3] = BitReverse[((uint8_t*)(&crc))[0]]; + crc = t32 ^ 0xFFFFFFFF; + return crc; +} + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/recipe.cpp b/esphome/settings/saeco_series_6000/recipe.cpp new file mode 100644 index 0000000..657713f --- /dev/null +++ b/esphome/settings/saeco_series_6000/recipe.cpp @@ -0,0 +1,59 @@ +#include "saeco_series_6000.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +std::vector SaecoSeries6000::build_coffee_recipe(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk) { + static const uint8_t CoffeePattern[7][4] = { + {0,1,1,2}, // Espresso + {1,2,3,2}, // Americano + {2,2,1,2}, // Cappuccino + {3,2,2,2}, // Latte + {4,0,0,1}, // Coffee with milk + {5,1,0,1}, // Milk foam + {6,0,0,1} // Hot water + }; + uint8_t rec[10] = {0}; + if (type >= 7) type = 0; + rec[0] = CoffeePattern[type][0]; + if (rec[0] == 5 || rec[0] == 4) { + rec[1] = 3; // всегда молотый для молока и milk foam + } else { + rec[1] = bean; + } + if (cups > CoffeePattern[type][3]) { + rec[2] = CoffeePattern[type][3]; + } else { + rec[2] = cups; + } + rec[3] = CoffeePattern[type][1]; + rec[4] = CoffeePattern[type][2]; + if (rec[0] == 1) { // Americano + rec[6] = 40; + rec[7] = 0; + rec[8] = (uint8_t)vol; + rec[9] = vol / 0x100; + rec[5] = 0; + } else { + rec[6] = (uint8_t)vol; + rec[7] = vol / 0x100; + if (rec[0] == 0 || rec[0] == 1 || rec[0] == 4 || rec[0] == 5) { + if (rec[0] == 5) { + rec[5] = 2; + } else { + rec[5] = 0; + } + rec[8] = 0; + rec[9] = 0; + } else { + rec[5] = 2; + rec[8] = (uint8_t)milk; + rec[9] = milk / 0x100; + } + } + return std::vector(rec, rec + 10); +} + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/saeco_series_6000.cpp b/esphome/settings/saeco_series_6000/saeco_series_6000.cpp new file mode 100644 index 0000000..01bfb70 --- /dev/null +++ b/esphome/settings/saeco_series_6000/saeco_series_6000.cpp @@ -0,0 +1,344 @@ +#include "saeco_series_6000.h" +#include "esphome/core/log.h" +#include + +namespace esphome { +namespace saeco_series_6000 { + +static const char *TAG = "saeco_series_6000"; +static uint32_t last_activity_time = 0; + +void SaecoSeries6000::loop() { + uint8_t byte; + + // Bridge from uart_display (display) to uart_mainboard (mainboard) + while (uart_display_->available()) { + uart_display_->read_byte(&byte); + uart_mainboard_->write_byte(byte); // Mirror byte immediately + process_display_byte(byte); // Process the "sniffed" byte + } + + // Bridge from uart_mainboard (mainboard) to uart_display (display) + while (uart_mainboard_->available()) { + uart_mainboard_->read_byte(&byte); + uart_display_->write_byte(byte); // Mirror byte immediately + process_mainboard_byte(byte); // Process the "sniffed" byte + } + + // Контроль активности UART (выключение через 15 сек) + static uint32_t last_check = 0; + uint32_t now = millis(); + if (now - last_check > 1000) { // проверяем каждую секунду + last_check = now; + if (now - last_activity_time > 15000) { + pub_status(2); // публикуем статус "выключено" + last_activity_time = now; // чтобы не публиковать повторно + } + } +} + +void SaecoSeries6000::process_display_byte(uint8_t byte) { + // Если получили первый 0xAA — начинаем новый пакет + if (byte == 0xAA && display_buffer_pos_ == 0) { + display_buffer_[display_buffer_pos_++] = byte; + return; + } + // Если уже начали собирать пакет + if (display_buffer_pos_ > 0 && display_buffer_pos_ < DISPLAY_BUFFER_SIZE) { + display_buffer_[display_buffer_pos_++] = byte; + if (byte == 0x55) { + parse_display_packet(display_buffer_, display_buffer_pos_); + display_buffer_pos_ = 0; + } + } +} + +void SaecoSeries6000::process_mainboard_byte(uint8_t byte) { + // Если получили первый 0xAA — начинаем новый пакет + if (byte == 0xAA && mainboard_buffer_pos_ == 0) { + mainboard_buffer_[mainboard_buffer_pos_++] = byte; + return; + } + // Если уже начали собирать пакет + if (mainboard_buffer_pos_ > 0 && mainboard_buffer_pos_ < MAINBOARD_BUFFER_SIZE) { + mainboard_buffer_[mainboard_buffer_pos_++] = byte; + if (byte == 0x55) { + parse_mainboard_packet(mainboard_buffer_, mainboard_buffer_pos_); + mainboard_buffer_pos_ = 0; + } + } +} + +void SaecoSeries6000::update_display_counter_from_packet(const uint8_t* buffer, uint16_t size) { + if (size > 4 && buffer[3] != 0xFF) { + last_display_counter_ = buffer[4]; + } +} + +void SaecoSeries6000::parse_display_packet(const uint8_t* buffer, uint16_t size) { + if (debug_) { + std::vector hex_buffer; + hex_buffer.resize(size * 3 + 1); + for (uint16_t i = 0; i < size; i++) { + sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); + } + if (size > 4 && buffer[3] != 0xFF){ + ESP_LOGI(TAG, "Packet from Display: %s", hex_buffer.data()); + } + } + update_display_counter_from_packet(buffer, size); + // Здесь больше не парсим B0-пакеты, только debug +} + +// Разбор пакета B0 (системные статусы кофемашины) +// buffer[6], buffer[7], buffer[9] содержат коды состояния +void SaecoSeries6000::parse_b0_packet(const uint8_t* buffer, uint16_t size) { + if (size < 10) return; + if (buffer[6] == 0x0E) { + if (buffer[9] == 0x00) { + pub_status(20); // 20: "Опорож. контейнер для коф. гущи" + } else { + if ((buffer[9] & 0x40) != 0) { + pub_status(22); // 22: "Воды нет" + } else { + pub_status(17); // 17: "Вода есть" + } + if ((buffer[9] & 0x80) != 0) { + pub_status(23); // 23: "Извлечен контейнер для жмыха" + } else { + pub_status(18); // 18: "Вставлен контейнер для жмыха" + } + } + } else if (buffer[6] == 0x06) { + pub_status(21); // 21: "Готово/Выберите напиток" + } else if (buffer[6] == 0x0C) { + if (buffer[7] == 0x01) { + pub_status(8); // 8: "Наслаждайтесь" + } else if (buffer[7] == 0x02) { + pub_status(15); // 15: "Что-то (07 0C 02)" + } + } else if (buffer[6] == 0x07) { + if (buffer[7] == 0x0E) { + pub_status(9); // 9: "Нагрев воды" + } else if (buffer[7] == 0x0D) { + pub_status(10); // 10: "Перемалываем зерна" + } else if (buffer[7] == 0x10) { + pub_status(3); // 3: "Наливаем молоко" + } else if (buffer[7] == 0x11) { + pub_status(4); // 4: "Наливаем кофе" + } else if (buffer[7] == 0x12) { + pub_status(5); // 5: "Предварительное дозирование" + } else if (buffer[7] == 0x13) { + pub_status(6); // 6: "Создание пара для молока" + } else if (buffer[7] == 0x14) { + pub_status(7); // 7: "Заварочный узел в положение заваривания" + } else if (buffer[7] == 0x15) { + pub_status(15); // 15: "Наслаждайтесь" + } + } else if (buffer[6] == 0x08) { + if (buffer[7] == 0x0E) { + pub_status(14); // 14: "Нагревание" + } else if (buffer[7] == 0x02) { + pub_status(11); // 11: "Промывка" + } else if (buffer[7] == 0x14) { + pub_status(13); // 13: "Что-то (07 08 14)" + } else if (buffer[7] == 0x05) { + pub_status(12); // 12: "Зерна закончились" + } else if (buffer[7] == 0x16) { + pub_status(24); // 24: "Удаление накипи стадия 1" + } else if (buffer[7] == 0x18) { + pub_status(25); // 25: "Удаление накипи стадия 2" + } + } else if (buffer[7] == 0x00) { + if (buffer[6] == 0x01) { + pub_status(1); // 1: "Что-то (07 01 00)" + } else if (buffer[6] == 0x05) { + pub_status(2); // 2: "Выключено" + } + } +} + +// Разбор пакета B5 (коды ошибок кофемашины) +// buffer[10], buffer[11] содержат коды ошибок +void SaecoSeries6000::parse_b5_packet(const uint8_t* buffer, uint16_t size) { + if (size <= 12) return; + if (buffer[10] == 0x00) { + if (buffer[11] == 0x00) pub_status(30); // 30: "Ошибка 0x00" + else if (buffer[11] == 0x0B) pub_status(31); // 31: "Ошибка 0x0B" + else if (buffer[11] == 0xE6) pub_status(32); // 32: "Ошибка 0xE6" + else if (buffer[11] == 0x80) pub_status(33); // 33: "Ошибка 0x80" + else if (buffer[11] == 0xCB) pub_status(34); // 34: "Ошибка 0xCB" + else if (buffer[11] == 0xFF) pub_status(35); // 35: "Ошибка 0xFF" + else if (buffer[11] == 0xA0) pub_status(36); // 36: "Ошибка 0xA0" + } else if (buffer[10] == 0x01) { + pub_status(37); // 37: "Статус2 0x01" + } +} + +void SaecoSeries6000::parse_mainboard_packet(const uint8_t* buffer, uint16_t size) { + last_activity_time = millis(); // сбрасываем таймер активности при любом пакете + if (debug_) { + // std::vector hex_buffer; + // hex_buffer.resize(size * 3 + 1); + // for (uint16_t i = 0; i < size; i++) { + // sprintf(hex_buffer.data() + i * 3, "%02X ", buffer[i]); + // } + //ESP_LOGD(TAG, "Packet from Mainboard: %s", hex_buffer.data()); + //ESP_LOGD(TAG, "parse_mainboard_packet: size=%u", size); + } + // Парсим B0 + if (size > 4 && buffer[3] == 0xB0) { + parse_b0_packet(buffer, size); + } else if (size > 12 && buffer[3] == 0xB5) { + parse_b5_packet(buffer, size); + } +} + +void SaecoSeries6000::pub_status(uint8_t status) { + if (status_sensor_ != nullptr) { + status_sensor_->publish_state(status); + } +} + +void SaecoSeries6000::dump_config() { + ESP_LOGCONFIG(TAG, "Saeco Series 6000 UART Bridge"); + ESP_LOGCONFIG(TAG, " UART Display (uart_display): %p", uart_display_); + ESP_LOGCONFIG(TAG, " UART Mainboard (uart_mainboard): %p", uart_mainboard_); + ESP_LOGCONFIG(TAG, " Debug mode: %s", ONOFF(this->debug_)); +} + +void SaecoSeries6000::send_packet_to_mainboard(const std::vector &data) { + ESP_LOGI(TAG, "Send to Mainboard pressed."); + for (auto b : data) { + uart_mainboard_->write_byte(b); + } +} + +const uint8_t SaecoSeries6000::BitReverse[256] = { + 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, + 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, + 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, + 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, + 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, + 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, + 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, + 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, + 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, + 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, + 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, + 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, + 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, + 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, + 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, + 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + +std::vector SaecoSeries6000::parse_hex_string_to_bytes(const std::string& hex_string) { + std::vector pkt; + size_t pos = 0; + while (pos < hex_string.size()) { + while (pos < hex_string.size() && isspace(hex_string[pos])) ++pos; + if (pos >= hex_string.size()) break; + char* endptr = nullptr; + uint8_t byte = static_cast(std::strtoul(hex_string.c_str() + pos, &endptr, 16)); + pkt.push_back(byte); + if (endptr == nullptr || endptr == hex_string.c_str() + pos) break; + pos = endptr - hex_string.c_str(); + } + return pkt; +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms) { + std::vector> pkts = {parse_hex_string_to_bytes(hex_packet)}; + send_packets_to_mainboard(pkts, delay_ms); +} + +void SaecoSeries6000::send_raw_to_mainboard(const std::string& hex_packet, uint32_t delay_ms) { + std::vector pkt = parse_hex_string_to_bytes(hex_packet); + if (pkt.empty()) return; + std::string log_str; + char buf[8]; + for (auto b : pkt) { + snprintf(buf, sizeof(buf), "%02X ", b); + log_str += buf; + } + ESP_LOGI(TAG, "Send RAW to Mainboard: %s", log_str.c_str()); + send_packet_to_mainboard(pkt); + delay(delay_ms); +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms) { + std::vector> pkts; + for (const auto& s : hex_packets) { + pkts.push_back(parse_hex_string_to_bytes(s)); + } + send_packets_to_mainboard(pkts, delay_ms); +} + +void SaecoSeries6000::send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms) { + uint8_t counter = (last_display_counter_ + 1) & 0xFF; + for (size_t i = 0; i < packets.size(); ++i) { + std::vector pkt = packets[i]; + // Заменяем байт счетчика (4-й байт) + if (pkt.size() > 4) { + pkt[4] = counter; + } + // Пересчёт CRC: ищем преамбулу 0xAA 0xAA 0xAA, считаем CRC по данным между преамбулой и последними 5 байтами + if (pkt.size() > 8) { + size_t preamble = 0; + if (pkt[0] == 0xAA && pkt[1] == 0xAA && pkt[2] == 0xAA) { + preamble = 3; + } + size_t crc_start = preamble; + size_t crc_end = pkt.size() - 5; // не включаем 4 CRC и 0x55 + uint32_t crc = calc_crc(pkt, crc_start, crc_end); + // Заменяем последние 4 байта перед 0x55 на новую CRC + pkt[pkt.size()-2] = (crc >> 24) & 0xFF; + pkt[pkt.size()-3] = (crc >> 16) & 0xFF; + pkt[pkt.size()-4] = (crc >> 8) & 0xFF; + pkt[pkt.size()-5] = crc & 0xFF; + // pkt[pkt.size()-5] = (crc >> 24) & 0xFF; + // pkt[pkt.size()-4] = (crc >> 16) & 0xFF; + // pkt[pkt.size()-3] = (crc >> 8) & 0xFF; + // pkt[pkt.size()-2] = (crc) & 0xFF; + } + // Логируем пакет перед отправкой + std::string log_str; + char buf[8]; + for (auto b : pkt) { + snprintf(buf, sizeof(buf), "%02X ", b); + log_str += buf; + } + ESP_LOGI(TAG, "Send to Mainboard: %s", log_str.c_str()); + send_packet_to_mainboard(pkt); + counter = (counter + 1) & 0xFF; + delay(delay_ms); + } + last_display_counter_ = (counter - 1) & 0xFF; +} + +// Реализация SendPacketsAction полностью в header (saeco_series_6000.h) + +void SaecoSeries6000::coffee_build(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk) { + // Формируем пакет для отправки (AA AA AA 90 ... CRC CRC CRC CRC 55) + std::vector pkt = {0xAA, 0xAA, 0xAA, 0x90}; + std::vector rec = build_coffee_recipe(type, bean, cups, vol, milk); + pkt.insert(pkt.end(), rec.begin(), rec.end()); + // Добавляем 4 байта CRC (заполним позже) и 0x55 + pkt.resize(pkt.size() + 4 + 1, 0); + pkt[pkt.size() - 1] = 0x55; + // Пересчёт CRC + size_t preamble = 3; + size_t crc_start = preamble; + size_t crc_end = pkt.size() - 5; + uint32_t crc = calc_crc(pkt, crc_start, crc_end); + pkt[pkt.size()-2] = (crc >> 24) & 0xFF; + pkt[pkt.size()-3] = (crc >> 16) & 0xFF; + pkt[pkt.size()-4] = (crc >> 8) & 0xFF; + pkt[pkt.size()-5] = crc & 0xFF; + // Отправляем пакет + send_packets_to_mainboard(std::vector>{pkt}); +} + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/esphome/settings/saeco_series_6000/saeco_series_6000.h b/esphome/settings/saeco_series_6000/saeco_series_6000.h new file mode 100644 index 0000000..37ef8c0 --- /dev/null +++ b/esphome/settings/saeco_series_6000/saeco_series_6000.h @@ -0,0 +1,106 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/uart/uart.h" +#include "esphome/components/sensor/sensor.h" +#include "esphome/core/automation.h" +#include "esphome/components/button/button.h" + +namespace esphome { +namespace saeco_series_6000 { + +// Buffer sizes for packet sniffing +constexpr size_t DISPLAY_BUFFER_SIZE = 128; +constexpr size_t MAINBOARD_BUFFER_SIZE = 128; + +class SaecoSeries6000 : public Component { + public: + void set_uart_display(uart::UARTComponent *uart_display) { uart_display_ = uart_display; } + void set_uart_mainboard(uart::UARTComponent *uart_mainboard) { uart_mainboard_ = uart_mainboard; } + void set_debug(bool debug) { debug_ = debug; } + void set_status_sensor(sensor::Sensor *sensor) { status_sensor_ = sensor; } + void loop() override; + void dump_config() override; + void send_packet_to_mainboard(const std::vector &data); + void send_packets_to_mainboard(const std::vector> &packets, uint32_t delay_ms = 10); + void send_packets_to_mainboard(const std::vector& hex_packets, uint32_t delay_ms = 10); + void send_packets_to_mainboard(const std::string& hex_packet, uint32_t delay_ms = 10); + // Отправка пакета(ов) без пересчёта CRC и счётчика (точный реплей захваченных пакетов) + void send_raw_to_mainboard(const std::string& hex_packet, uint32_t delay_ms = 10); + + // Типы напитков + enum CoffeeType { + ESPRESSO = 0, + AMERICANO = 1, + CAPPUCCINO = 2, + LATTE = 3, + COFFEE_WITH_MILK = 4, + MILK_FOAM = 5, + HOT_WATER = 6 + }; + // Крепость/помол + enum CoffeeStrength { + MILD = 0, + NORMAL = 1, + STRONG = 2, + GROUND = 3 + }; + // Построение и отправка пакета приготовления кофе + void coffee_build(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk); + // Генерация рецепта (только формирование данных) + static std::vector build_coffee_recipe(uint8_t type, uint8_t bean, uint8_t cups, uint16_t vol, uint16_t milk); + + protected: + uart::UARTComponent *uart_display_; + uart::UARTComponent *uart_mainboard_; + bool debug_{false}; + sensor::Sensor *status_sensor_{nullptr}; + + private: + uint8_t display_buffer_[DISPLAY_BUFFER_SIZE]; + uint16_t display_buffer_pos_{0}; + + uint8_t mainboard_buffer_[MAINBOARD_BUFFER_SIZE]; + uint16_t mainboard_buffer_pos_{0}; + + uint8_t display_last_bytes_[3] = {0, 0, 0}; + uint8_t mainboard_last_bytes_[3] = {0, 0, 0}; + + uint8_t display_sync_count_{0}; + uint8_t mainboard_sync_count_{0}; + + uint8_t last_display_counter_{0}; + void update_display_counter_from_packet(const uint8_t* buffer, uint16_t size); + + void process_display_byte(uint8_t byte); + void process_mainboard_byte(uint8_t byte); + + void parse_display_packet(const uint8_t* buffer, uint16_t size); + void parse_mainboard_packet(const uint8_t* buffer, uint16_t size); + void parse_b0_packet(const uint8_t* buffer, uint16_t size); + void parse_b5_packet(const uint8_t* buffer, uint16_t size); + void pub_status(uint8_t status); + static const uint8_t BitReverse[256]; + // CRC-32 для пакетов кофемашины + static uint32_t calc_crc(const std::vector& data, size_t start, size_t end); + std::vector parse_hex_string_to_bytes(const std::string& hex_string); +}; + +class SaecoSendPacketsButton : public esphome::button::Button, public esphome::Component { + public: + void set_parent(SaecoSeries6000 *parent) { parent_ = parent; } + void set_packets(const std::vector> &packets) { packets_ = packets; } + void set_delay_ms(uint32_t delay_ms) { delay_ms_ = delay_ms; } + void press_action() override { + if (parent_ != nullptr) { + parent_->send_packets_to_mainboard(packets_, delay_ms_); + } + } + private: + SaecoSeries6000 *parent_{nullptr}; + std::vector> packets_; + uint32_t delay_ms_{10}; +}; + +} // namespace saeco_series_6000 +} // namespace esphome \ No newline at end of file diff --git a/hass/settings/.HA_VERSION b/hass/settings/.HA_VERSION index 2398eb2..3b954dd 100644 --- a/hass/settings/.HA_VERSION +++ b/hass/settings/.HA_VERSION @@ -1 +1 @@ -2026.7.2 \ No newline at end of file +2026.8.0 \ No newline at end of file diff --git a/hass/settings/.cache/brands/integrations/automation/dark_icon.png b/hass/settings/.cache/brands/integrations/automation/dark_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae1679366c1fb8e40c232dd899b3ba626f25cfe GIT binary patch literal 2940 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 literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/device_tracker/icon.png b/hass/settings/.cache/brands/integrations/device_tracker/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..04611f3487dd4d9c18db110bd64614357e210b44 GIT binary patch literal 2118 zcmaJ@X;f3!7QW0w!XO|-j37fGQW^vSQH+IvmO+pq2vi2m!%BgQ2n7ozDi|foV+f#+ zV8bL5$sigjSVU$O9#4^oAQVd)R0KpBBqV6llN)69N7p;+taJC-XYX%+-#+KZr3Uza zt)*$K2|LgIz zXAesRd!%pxutAD=^^~&=Nn!t5upH{zJahy0b3_n#0jiV2fC~^CfWv6=x>u!8E${$9 z5d4!&9fP=b31 zS}p7Lk_-eu$<%#j1%$5_1#IQzD>9%E0BSFmMIqn*3(j`93TKcxNa%*3rq>* zvc;6c{Q=;yJxU4k4~9adrJw#RM6Ya1>=VD8MSh4%OYI-_RA}@aOaAvA16`r1q0-j% z+dW2R7PL3*KkUAFK>2#B1*PdKeXhNidGukiAoNzj-k0l~rXPgw-r@E0*Y-HR?F9Ds z@67K$W{;NXY?$iwx$JoIncb_J-_FtkPn<7$z9%=MgZOmv3F{_-9OmM>GvZRimv!Z} zSGd8>Z!qK4^ENG8vZ*;5Juv}anBD(RzDhc3kaWmxXvxH1lG zU%PnUzJKvfqNx5+PgU)7bCrH&{2T-+w|INH6Hku39UDAw#T!Ktj71}6bqQyoBvH&C z$Aq(B7?(CRXQ*o!s?Uy$i5!n6J8VOyg#IA?{V^FQz+Z2O65Y(+l5lv(}G|#S^Mc;gQF$f6SM- zVScMyjwnGAp1-R(UXAGC#}ph>UJ>jp&$RI<*uG(Q!1Vop`%kWnn|F(P3uo84AhgtiHOCWK`K> zW{*?$yLKTdqr&S(SU&ID{7;bUyZ8nb8UBA$Ogoa8*^hOv}zsPcq&IwE;l+pItV|mI`%6%_X zCW{Je?h``@mC2;OxY(y#Ly+EO>LmHKzfOJ1rTOngo(wmP1rQ|X=F@WrnV`~U2}}$>eTpfvt!=r48Qc< zA*#iav13i6O=nb9f@#(y6qeC&s`_K6zJOJO+HGiz z8y^uVG1Z=sbX723KTDiEuh+sjUKUpHd>~yT?{dJ(k^C?|FChhkW{>h|*h^yLgNdD` zG{s(|Z=2K8p47)rY4{aaZ3_%~VKU+j94RX^j@>OxOcVjG8AYBwh7C!~9!A0sZB%u$76+M)ek1}KeqnkVI8 zJ;v6C*hU-Wdr~B$^+M~wj_UE(x+T^EgFthg185Od@7}TD`jDqCS{uo_PTcl$rB(O+ whR4@A?LxLe|7QmJzGoJ;m8z~?>E8?qB4zY|xaTENBKslm-sA7dB^=873%XkN`v3p{ literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/esphome/dark_logo.png b/hass/settings/.cache/brands/integrations/esphome/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..132987f7238e21efa9716e351bc39c6eb2b184e2 GIT binary patch literal 7348 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

>Gs~Q1 z17@k!*aP{pl&qZ%AdLf(A>wy0n3{f7*bg`&v1pdZl4{3EnAhCCWh6g_l9i20{c;rY z%1ihSvW0XS#2!WlS-STRYq!dMZZ&<}tgCpvzRd-|tM89R(NS%jEU>uQTt_@bkT%5a z{&=ju`zQ{TpK9#233HUjqtU7lRo zmgy;Fy9)2x^Dige_0Z@Hpt{DMZa{$z!EL0;%|%CK@n=cx!H5b>X+H&@cMSbbUHR$E zSgqi4yisxImHX8yhEs$qS=HQrGM0}SS<9*n${Nq1%s1DQX5E|KzMs6q<@mT;u77tk zqGhymtvRk%QU`svzImF9CqhbePEm0lLLok;PC(GX9y*+GRxF1RS`%*M^<|NYC zA+d<7h19x)m)fE_XQaE4poIlEoHr@|ntG0`dzi075uOYYKdw{!;8Fj=hVSEJI*~{| z$+Ns<0Wpqj^l;TVB0UI2hakNBF(`-);g~0=ZXX>c${^i^^hlzp8yr`%LXnKQHq>K| ztM;b;899QGKF`No+@4bUGv^k$yOO-1j5vHg4u#~7bq*sTLIfB20OBO_sJL{H+ZKyJ zq5<8Gxjmv!|LYL4dJ)i+fc~sZh;g=Ba_RRQTNX=Id>-N+O#jYBFmdL4|7JV=Qdqmz zv|8+k40qb8ehCf0bYHaNBiM0Y^uNo{I->N!AJ@vOm#De$#|nzTM9I^~+cI)MH^@}l;ALt|dUS4vX&QFRYVmCe m`Owo+9OtqR`5S5vzXV)ehGgPS$XclE6^-@H_1@^*2>UPEl5vgz literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/homeconnect_ws/dark_icon@2x.png b/hass/settings/.cache/brands/integrations/homeconnect_ws/dark_icon@2x.png index 953fa27f6f18eb4a59edacb0b0a92002379912c0..0e210ae6554752966a61f5567dbaea22277ad293 100644 GIT binary patch literal 20203 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 UrUO^t*XzKFWowtFE_M(5KW?`$YXATM literal 12043 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 EKT*lx9{>OV diff --git a/hass/settings/.cache/brands/integrations/homeconnect_ws/dark_logo.png b/hass/settings/.cache/brands/integrations/homeconnect_ws/dark_logo.png index fd4165b2c1c68643e68d2e84d627faef7d8799f6..84b589aefff10e372220113c3850bb047c67e732 100644 GIT binary patch literal 19662 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 literal 17538 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 Q@e1T5Pgg&ebxsLQ0FBh$0RR91 diff --git a/hass/settings/.cache/brands/integrations/http/icon.png b/hass/settings/.cache/brands/integrations/http/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9ab041b24998cdd2cb2088d6d50c986354d4fc GIT binary patch literal 2006 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 literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/tuya/dark_icon@2x.png b/hass/settings/.cache/brands/integrations/tuya/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4dac3ddb38f47906a4dcbac4dc34ddb9c478c7d1 GIT binary patch literal 6374 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 literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/tuya/dark_logo.png b/hass/settings/.cache/brands/integrations/tuya/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d9049b3ba5dbf99147653e7b853694c979435b0a GIT binary patch literal 17876 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 literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/xiaomi_miot/dark_logo.png b/hass/settings/.cache/brands/integrations/xiaomi_miot/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..edd397c060fcdc5fcc0e08f20cf304d04878df90 GIT binary patch literal 13467 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 literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/yandex_smart_home/dark_icon@2x.png b/hass/settings/.cache/brands/integrations/yandex_smart_home/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f2dbcda1bf8be1814ef1abb66987e11f06721ed0 GIT binary patch literal 90806 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 FV1iuZz)k=F literal 0 HcmV?d00001 diff --git a/hass/settings/.cache/brands/integrations/yandex_station_intents/dark_icon@2x.png b/hass/settings/.cache/brands/integrations/yandex_station_intents/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..82e532f1821c1fde3808561a83320545c8fc2b8a GIT binary patch literal 24615 zcmY&-BnF<9?hT=<8`yk+YBk06=y5l7=Awz`=jQ0VE0dW5c&+ z5Bz~}RK2PS040eO2e!oE?_74546g!!KR*EAA^-qdf|~&VZ!`eRVF5rs6#y7L(yI*= z0l?<&8;qr8yS3iA==35Qg>=q zhqZ&_9nZm+FGpXx7Lqfll$mKz-pthB<36L-o5K}xPP3jV`888#)LRL@+c8uPZ)cBJ zm6ROsJ>}-78s!hzJtnkxIygSNvGsFZ!LhyFKO(8>%Ie*^x;rUjH}tT#iwG2lBzgP9 z*S0Jdg)MJgA)}P9d@34jB{{G-(k(EsJf%AQ=rJKD?Re>;Ec<|?hw|FZj2se@mbxW7 zrL6Zv0pUfoY~C%}BkQCAi2WL>E!q3`YnFQ#Kfm`ZZs8erDbLehxs}*3M{sNvD88`s zJUnBRHv*-0N!RpQ@auHEQhPR0m^jtLLeJ8oa|6~43-^}h8QFX|7G-3wOUo`#O@1_H z_oCjPy04ekE@F$N%~rxm6n=(13!7Y;T7@;pZI5Jg=UHqT&tH~#Nv~otXX5=$j!BLyck_H55GQ_Yen6@_VS29-m_Q?=LljripV`hLJ}?E9$-ITlwa zgc^U)-uT?dQr89nF(tgHsp7h_k(8+{xbq#?r9z2JsF|Qpe{HdD-17K$e#B2D>yt2I!pB177mkl&i!cWSTmJkYazS^d^am=ru#E(N5JZ9cKdrOSaej zLw*4@iuxNx`HJ<-0_O$U-&2vatfIS}xkd87tk=%4i0>Uw z@I1ibZ@!n}ZHU^^ysNJll}Hg5>(^lE7f$4^oI$@qFZ$Vhr6fX}52c2DelaX!l=4Y2OCFZ+=65RZDr&k8>OH2b>14w0vAnrtPGK^;e)+Nz@c5UklE7ONnE~2)cS6 zIoK67YklErj7VW;fRY-L`){~@sjriU*JyE98-2J^Q&@G3)t*E$AF{4XuZg z8;Zo1azmg=RuCyRO{Mo~cRn9$Y2r1?A0Az!XwAnJk)(NTMSiWgp@}|x`BRnW7s7T^ zSfz_e`Ew(;o!m|4pTRrMlJF@F#9swbEd$gSj1aSyT00?sJ#)Rv3eIY1!Z}%oh(LY3 z#ANwy+cZ8nk7vN-qAX#m%D-%-C9v0`ctz9uZPRaz7QXf&?l}V((5mtNV_UXcRAb+n z*}jqc{H62F72IP^1Tk;SOvkfdj1>?jp_j2KL?+yS_1kn(_(}$CF@c8*&B&tFkivyb zEDgKfUS}Te-1XL7^6hKGCU9n0 z9L^=R(g0OfM9q}m%3PaXI@3<^6q1HJySkRC(U}=$`dUN!+R+VTf$;1*#x7kS6YUXb zxVtF)V`$f1?uVgED|7g&T5M5TkU7OXts1gQ=-Ku&W8ykHh9VQHqxGX-_Y=%}t8@As z%%FV^+@P0vL`uOuF5lH5Go6_wd-R!*f;AbF9-{_$~IV6f1OxT9zw>% z-^?7o&u`o%M*1Em^6s`u9}9Nm4r>LHN$SdxR&VQZ2My%`<2SvAo<%X5+1Er0r36rt->@4#63+GQH7SXznL@xS1z!R=c z$1-=_@dZ`IBq-oLL8Map=$X@wZfl zV2Mx$qi100MVKT|ShR+0%|>XG5)#%|Gw41~jJ#YeY32n*rm>>ZpJr0SkJxV} zUUqvRzTN^I9EaP!dOtOOiT)chseH$6$k`NZ6kxqhs?wQM9qGMr>8cr<`)+P`@bn)D z6ed`IJTBoG>6$I&fsnoaj78SAe*{X>G$$YLC~$@;9d*EGwwLzussVdF4=)aMeV zrcIV2*vVq0GCA{TK~i)TOnnoHCA-Vl(HFUW?SA$$sGO`!jYP(%b1_C>BxRdRlDpc* zEwg?qg1R&B5#@M+($ynRaHC?VH-4E~wE%JoXyNm{)-i*uIgVQM_YmQZ6KQ>%?mrKDc2hJ9iT8!hoRJ60O=d*U!ewZ@=y&e_dVdVh*X@ zI6bo9A+8_;GG`SN0M99Rvd?s$2@ylYDkX76kE*lk3HGO{k`Bt%&v3}W73jiZSKjXzSkBd63?(wUBc1a2T1%m4$ zaeHO4je)dcKiBf*6H^A|Qv|Njc2bAdO1Z7R2&iobm+3Xr?aU>A6@Opg?9r#fm;2-q z9T+&kiyhO#STrKP4G<)@+);rLT_q`(beU^qZ+qMgkhC~(I}Il+2Iqr3`#3iZvHXrQ zxcV;N84m7Ss|I?6gr`_13y*t_zTq~tEB~yG!{N)Q)VcU%C-YUxHB=^P)fh<6hnIJU zH7Nx47MOVJ44vxbD+-pD&Ybt+8VOy9uH`{uUBLdM(!vSZqZ&MsQ$&n}stLpW>D|Lu zLV~os1`j0owQ`$Tv(*&dFN)n0VIqhB@v13(KiJf|;B&>2{7)n)VwX|W;><++7liuF zi?6w~&VTLJd=MDCB-PQXXel~-+u=U-^8K|o>kG4s+ZXG{rPc!nQ3l6biKb*U>UtS3%lv&R?vB`$wZULq00M_Yz*fsK^9AAc--wSq zqhkDvX08T33Ef&QH}vYSuPonD1&{!Yi_nU^R7m{idT4rYLtthe744>00MX*ev{#_= z;^F7`jJP!tBq->&?7oB@(6B4b@gpyb>2KNxu%t|<0un6_s^ON zF0SWy8C5uwO8p;q1Fz4!3U{_Y?v9;oet-0R4+IK;V=(VgN$DhK)2)BV+f&lIS%0Oi z3lZ+*-K+_ICVF%kS^*$uWZ{pyaigoZ@!OJFg_0UQgAYxHujqA%zpKk|K7WEGfE;i| zd^rx*mfy=`lnniRD<Es59`pp9-gz_R*?t*oi^>Q_!i^zxRn4e5+6f0f`4i z8RQ3Dk!9Q6g;fWq2xSJK^qp$01eZ6~T{BrJX>VBZyll#0KA$S_Pq#c zai}zX!98Z?K!kd>E*qo$dg4fqaeRBZ6k-iPb&evx6?B+Qz(6{9tMpA-c;qW}-c;Wm zntgVq>rwq?aIW${3l)&xhMQAxy+x8HoH80-eal;n4*7bb5v&X<5VHVcgA0D|J5gAX zeE~lu?P16j_3E-)#xL)WY14@Z`~y-D;zALET#wYpb$wY{{q2rjF>&1iSE0H_Dxmac#@|Rwe z``58aGb;b%h6;SHA7)ZCU9cpr5pJ|995SezNfc`vIIeQTX5%y%v@DXzbCoE}FRw|F z5kq9qwd?Y}AlTw^fQn09Mj_4VL6jVDiwFNebOfp?W_oM;&AQt6r}@Yqc!U%Gmq)AISismL5(XA5G+`mzN=NbVj|$r7eEv zr{l|4IiRdu&Ig^s3cwuIF`rihV19WSXQK}3qjF4ziL3qF_uiDp|NKV`7`!=clI|K+ z=&;tNs(R1j)%Rs?V{`rGJ1)WhzzQHgaUpag#-?As>PVRJSMMpf8b5d4{yk%!t>qS>Es+HA55X-c!XHL5`}`%ehGlPA z?`UlM{;mIP%v^vsTPd24@n5p+a?MogdUSmAe+~?YBF;S6xJMvQSMRfKu(`!AMXTQ|H|IaGkgqQ2duVn5y!dgb|tBQZ}3_y6bUB>m6 zaXa6)fB${x_J4R{WVo?BTKG6_XH!p;uPNx@p?a%-en8iiL#LHWUd zly|lv2iR5UR+6}@JEw>i<%0ef7d>KyUbQ-N>iVA6X4&LF8so~GM&T2QyLOGJ56r$^ zPU&0wH9RsL*l^>9mx>}^rYkPXcL zXqvf?7r3YNie=}^q6ltBwaM*Uqur|0(tM3FC4i=k>q7#_Br(eKzRSl zD-tr;E(th&_fdjZJIr=|6{X?j_z=GnmX$p7xX;~x$tjZ zlF-8<_lk(;;;nuxqkHPxh^s$1d*3VnA3T)uaGw^W?DNaBbWwXn7CP$mdE*6;&GVzj`$rH%FSzE^A7Ck=MyK&y zO$jY<+P?s>Y5KPBY~nH6l$*hm$xHGme;e=k|A+?==RBM5ko?VGlI*E5PIosikuU#c zarAEp7<}54?l@(!dXw@7a26jrrgx~nz;K@ zSg(b;clq!?l>qQ|8W>&teUg!?&(|q8wSJo9b*&ZkJ^NP(0LtSC`AvX^cuA(`@I3L4 zqR6p+E4%;70RUr+!G*;Z5q%8hl}Nxh5U#3!ZJCPjti|EU@5a?FUhs+l6aG3DHOO1B&1 z>|4wE#PU9$yf^+ws22+M{Yv<&I`2!*ScYEYnoQ1&)jRwjpycCmf45;Dg;J>8f>R7e zKTd5l2Q&VkK(Xs6eUGl0`25KrSlW9_^JLDC0w5oKd6zJc#Im!-<& zdh)f|B zkc5dh$Mh7CYXA%+!;1z^E~ZTOjpPTbvrTz&lnK$HoZSEMpc)DLZj2Xso*YG4{@x;! zQ|akeaQWw%|LJ{619K?MmCeagy3&=q>8omQW5;QN zSI~C|$9`hzwD1U=F)!D#F`i7@JjDM-Dc|IC2~NOghXSUCLls*f&RHo8@D3BKLT?D% zS6dHuQb4e`NGeggrE~@YFML$(P;=y2%D70?=O``&5+;{+ER4GsIHd0VY$idN|AlMfj!ad>*qoxUJUnwMK6n09gwFAFgr8~X2H_e#pOR7%u`!nf%vtqTdUyoDjeS1#nH>4N>`lJXjlvJL4AK;{3tjamHg{RXBfpu%FsSa^ zGF@sMCS9?6=#byU zVTGAUfE$A}D_rH$Am=ux4k}-91{~^FJJwwoqB8IWQb{9r*N9nkKtC|ZZ_zl5eFlQ2 zx5GQRA9KHEpHuYT$NX3q0i##L8zR0O)*J$53*kqyarIO6_V*AZ!4^4J1{D_*IM<`aq+ejB5U@i#$ zb9PU};drZ;an&jtUx>W=NY(27ZE@%kZk(U-HLPao8vbv9^woFGzuhUUM%>1c7pg%H zxe%i3Tq_lC{_5qnvMo}xK51V%Ith1$b(lI{v(u9JO~+u_t}JEHdoDxDP0iCSN79(9 z12)ID%kANL)zpfKQa*cTw$6i}Lq301d@yX4uh2I*Fvh!)>X}^DOxnMf7 znTt%RZgIOnKHKQgTK)8TyHA^n`P_J=V1Hn6iruRsswUx(*NmWsHni|%Jc1n&HT6_A z(vL3G?Vv~2m6)EuCL>RL)}TR*Eu~K1IV4^8yAo8LQXy27h)J1%VL$=?VujIH=|88j z6ei3BKQ4R{ZM$!k$`*E4?%$o%URSHKl@DJY3lG=U_wl73fDmzArA5~ve@J0hRT_UL zKH8|;q7yE`5lH^xWZPn}k z*q*K{_QB$CYif`u*AU4X2duE+0xH`iuSml#Lr091V<7cs=u@_(CeNquyib zm&-WPg8HBvt4ykr_i%S|aS043fu#0n7EuY%fn>2}0>VA}TG6njX45 z?6ZuU?Z*$ep2nRV@q4;rcX9hzlF?$ePp6;q15J~2$S;Vz3#vG(CsMZG?-Q6?3qkfEyxUppP?k^QT_`+i0;!`tMdJJfOCAuM{dF}D#U zQLStu^m*-4gDz~InSH0K`VfozA!@eAE?Z3M9m&2&C%RQcMh;WMIP+pJ2^YbQh8;|< zBXZgAfOQ1p%!Ab-F&afiZ@u=<;oY~LEcnNt_?>>ZqxlD;ppcKb?CaKUOu6j;`19nr zdYCX1ki)U`g*)en83sR*!d1lCnxl9e5z+n=`)r*&H;3SZ`4e<$VD!xT`*b0%4J8ip zJ=(C)DQ<{ltw2O;v0>Il>SMQZw=Lp&s6ugVqR@OqEWzXgDwwaIx?8d;G$4K$VP9>T zoYI2A)u)6-1})vv9<*^D?m-gkQN!4iTo|K%PyNRKgOos~dkzFMKfG4r!XMtu5uK@8 znPXFhsm&;K{#~dRm!tHV57wr8XpO}0PrWsPPSC_$UXdrbTt1A)IkzNV(8Ly;)(=Bc zSPHZLHr@ICmQtET^)@c1pcHpfBpE(-?N$-k9fr*iyZNTNd~ij4n+Dq4hY8_v6O z25)mfK}}+EtZRyh#Pz6S0HAcgqP{iTK4M`Zkrd+1$g{rHwyFK07Q4QUQsc?4Jlv^ zO_(VIk>|N$lH+F6sR=BMeXZFG!Ey?aCe<-o?u_If&&tCG<2aT1*?lp9t2(gYL{~(244k ze}^q_OX#iQ03bN4XwkehOLH`L6vK5MZz+>@*Te0r(1T$6#{Jd89Y5k4W@B}|?!@Qs z;wB~XZ|WF=sUyWXb+)lyDMII?^%%46&cr%&+Ab|x6drCRHLUaZh5A&z$*{v6k3C32 zj~QX56j&`A-$JUCw~N&@{2SqGa5s>P@A0_D1V2Juc4XjpogQbl_0o6fo*lZ+pa{+h zz^51**v(h|k{dm)^gJKe7Wx2cbV(yfra5lBM5X0}A&X(fA(m5sFUR1jq;)%R?AHy1 zepL*j<>~k%A)owc^;z@?BB2*;3vW!PdU}iXoWProT;V_7{OYlEL0D5hgqlTLlan0E z$-f%75WY@{>8P_W=JPf3nk9Y?^XO0bszX80!0z8tZM*6}u0pTiO=&U$x08e%`xQYEs#PjPP084j~ObXhg%K9=w<&f8MqacKgx*YPs+d+ z4fXT9e2ovy5`5=v&8DyILEALIZ9d8)lZ|QB^BHS(RTRQSQLBE?lXRpYRa2(Mo(?wN zjl+eCPIu>YeX1q0bgz*j&EWR0_2D=DMCI%te4OwoVpBM0si?B!*BX|Vz^XoJ$N9s_ z6QOe;T1$Voi~0si2)Frr(Z_ucyUY!FC5E89Yg_ErerO-~_2K>Ugy)sY@OieAGPA}- zNT3{$B#%?gwsoV!CWlBtJ^C>Ptm$x>DAmtIaX8gQ*~Tu-H0|K<#Ksv=CA<`Uhkzct zR`zX9j&OUKrc}{?tWZ_JwvrvzZSsAMCth$$M`g8V>_Aw`q0lwrqE*z?ORCv^q~kbq zo9Meo(cuu0;G=UGK;?ehRg+o^$F!-$r^nC^G8DR!iz(oUQ)jnsO~Zo$tEN%_R{rnd zxZku)x6&L$IE?9E#Ca#k4a_vkL&o4!{!^r1QP94S0Z2G-ip z(EsK4Rh-4}LG9+7Q>+3JBhO*m@qJk;-m87jv@<9eAemq=x0#~8Oc1HgyOz2IA)MKB zpqxQy!#M#1fiVrwg=dgZhGb{=+KX-y|mvOca!G~9aSQXRiaAFA+rNW z!Mi~K8|Ta~@vZ%1ZmB?ZkG+i3C{W<0pW$Eo@eQW>xt8p{><(5G6Z?&)u`|M&n)F@M zY)$g>JX^P@XlVfGv{dA$Jml2h#^udO74OK!F&Nz%_U0p~rhn1Iuf)`oui)r^_C@Ks z7c@QMXPje$w4;k?-Pk&OpJkL-=H}qRk=Y1chQ4Uv>Zu4GZ_nMjS72t$D5*ZwsK0#e z1Snr*>PxC}6o+$Qiv2N$60`jU zXfaa$Xh^TCD0I&ztT;r2BgAggtDJj1+<}qh;DI&72L-HDlJJ=pH@0gkk#DcNp$Luq z;7JdO5a=(`G8RfV!d;%aKE%`!Z9=v&$kb;P#^Vuo`v$`A*cFiLMbWEO&;ws26YXjT zOti%R}Irq*KmEQfA%Cv#eNfwSHu;JV)%#{r61`cl2*-@A6{e;RV$`pY>72E3ZE0&+l{xkF@ z59`WrGyp}-1eU=H*qF%Douj_$Uo33v*V@D`$aNARQ6JEvWmqlTBR$_62p7IoATm}7 zEjbbih0Y5>BqRD^LO!kA1tJAw66-RWVc+XjK|21#;UW*QcM)6jCHswTeH)v1n3zCF`Ot@kd2$+71~xaw(`8a4<;+9stWT@ zeAUO$O=MLKN98H?`#HT}O6Q@o_kU|2(JmKN)eP?+$0zvRv}0m{hQJt3_>`midYi|R zda}+;`^(UjN-a(#)cNgD_Lhw+O*N^xU>PpzH=YRH02-CW~pwqu9;VQQDJJCmA$*`4-o{j zKO>A{zj3apspL>FrH5S!SSP_pd_LVJNJR~QCGOqkZQ|(iQE2pRlmqDtNES0n2+@zW zs?-O;L^|0THPTHxY^ko$sJP6F)nL+TO!k>1#v5DmHvAnw2U1oShQp4e5HG3_d2(bM z^4MWVGYQWLLeNcPLkzA3B~e~M``;kN%t49cUmQ{VP-gqnz+%a<4=DC+FdvfVMpf`V zNL^tlQ>`^I#c)EZqx`0A=1@{q?sw_s%Bs%45J$`0ghEQ+o60)bw`fL*?4*O#E)CQ{PWP8=zM*ulUsK|mA21q>GJm&9RlylgvK*COj z&UZ*;bC~FWBq~nzLvlOd&DTW)C1|Gz5=jk@YP~oAYqiQ@Sg~Tz1_s47z>B>L6YXtK zNztm?H{8HL?RtY6t`%vUJr0czWpiJ+Kh686c0xDK zn+dp?tGLpy3A-OR%`etW^=*R1=?OHPenG*cMO(v0+XPdd9?p{p{){4rF2y%valZ)l zmoI-C@&7=N`%yp}Mh1<)HzA&161mB!w=gH`{FHBR%(cuEC4C1?q9{v5T*A&YAY9Oq z`&GL96d@m^nFV5ds)<#>K)4__Skm|2Bgp6(7!1&Hy}tka8c-=a^}Ws3=_E98bt>7g z_UmN0MYDzt@+^cIH&$a{-{sZD)L!fu;8fC9!+PVS>7rN>qCzM{&lN;pC`L_h^jDGsMu)w#kh z8$<~%2YdO_q4kE#iE`GFO!GFxw?e&b&nKAI_mV=jW&;g({Uk$bJrZL$cjnNCPWM}= z5Y(PF6yePpnO`L43$FDAvxfBkNp(D}a5Lrz(I24|X_*rjbUs}1TB6L~F~H$;PI8U` z_9iS3*D>O-YHCvEUATKQ)^6^krv&! z30rAD*B{vRuwpFRCeKdK^|aF}MdJeQVY`n**VzTLxEwP#I|iJ{@s&E>qkrE; zkJ5A2QPbsK8;+sH>mNRp!f}(_W{+tCGB85DUj@PhCe<}BfdccV1eM|1Ezxt4DBr1o z+w&(0W0*J$s)rq550Q3djWEn*?WJ$p5zX;}Jkv&@4nnMsg$d_5iSW{ID!~hIAXL6! z2vPB{Y~qzZDZ%XOF3ya|?~(cjP^D4|#SzAvBfyN)3R$Dg+#TlaoP$b82Nz*X)Hf56 z-9z7FMs9y3e1beByje4|M`FFe$t~eS02ka1s%Tbn@TZIoA9;MIWdySeGi5?3=rzZn z{C=g1ABfq$^KJ~pNJ60^@&r|U3NO}x-<31UFqhPsgUtT9{w!z@`cxOxwNKy~pu_#N zQkh2K=rxOLQQ$0!Fc-mUX#H=I1d*a<&S#ex(S zG@3&6PfAY~+9R1}_W<9z4U3~8=j9GY3wF<((Gv-Ial%9%V$ET-1y7E3Hl2!8DCm#k zp=S6=5)rooVAIsqYx{x92wnFyJ3aSPW=FO0e_TI>Aay=48QDLs}Cl z8lRD@8l%FAR}Q}81t6%rXka4h#iE>B$`1^MNf!Oi@J}}-CqWNbVO{jNgqtmagU%&w zo2)mG05qYEs^cHKep)^blS?!djv7a%5{lpu58Eg-Pc=D8qCcPr7%Totgd>`V`uvPM z+$0KnTda1A3-l*M$m6D%Q4}PAd1MS6>s3td5nf5WGErbVK!8C#uR0XR7lfTS4od(9 zaMP^C+-#ROb%6ApJQTx4ga!;PP1*FYHL-w-Tgo>e0=ou{DTO@vC_cFrLj|1=)=vHW zsYygBP@aLI+0!y{NUGP;<38H#oJhNn7kk^rX;&;=Dbz5RQQi|wVKLpg`BU3*H~>fx zD(#DIO~(?ScoPG#KE2gg*ejUrU((W#-_cEVhMH+VEm{oT#3t1;M0kF*F4P+fwrkIN1}lp66O}$gq0(W+S5wNzq|cue*i09s*<-S6ZK^`_(G?w` ztIX(L=pIqX4XP^~cY75m_D&0-fP9co#HB>)k8)BkLTjmON$zh%KZM@Xe!_ZD1KZ}T zuIoPw3P~YR%qYS^Z`I%E>wGQglR!Aapo!oU)`}Xa@cS}ENDZm#I8_xj%$VEk6-|gg zTecBfz~%!28^#{WV$ha^SX^;i_ZT^Nu?srs(bK5nS{m1C=JpJAA^Mi~jBw*))*pw_ zp%96lNTx+_dU3x)OxV1t47JuwI%Ki!ZRy&9FhgOOe+3o)ttKO=pvp(%3}AqD>5yw_ z{i(FAIA9|CsuO^$H!|A@?zM($J$Bg8f$BT>gqH|dD3uR3Fw1y$Z>+W23(zW4Zb zJ|LX;7iMgsmj8(j9#-GP?%6psliGA*oFMro7n$oSTg(ccxVc4vZVUav1K~2lizh&SGrIwJ_v5=NL3^s4 zwN#~rp+dyyHb{`y;;xOuWgW^DrdAwCPq5Q$UK928mDTxhF4s>s*|FgQ)SkqYqZFoy zKpAv!07KCEYCr_mp3~P`1Y9?F-!j}2xULR{;PD%I6cllMw%BcJ{{%P+lzs}$)xDKO z!^{2OX$Xa|E*TgY0|5^HuLoeu&k`uQb2sY-WC4R;)7|O4m27x+)gw(7= zGuYs&!5Y$N!g+!n8EDyR!F3=`EGM?i1v>3A zq$`6;B~$Re;LGBxqpW)$GTsd^*{8j)lLG2TrcNetWeyR^->X6(hM&$~&r}QtAWJC9 z=BlHMcpHC9z>*WGUITH>DSm7^*^ri)nXL22+W*`DNh$+$r%9yMXV`)j_YU1kd&+() z)rraDDcIgxhT-?I4^72bj2A1Uf-ni?1yy{R8S9Pfo3Uuudk~#WpzSWnWJ96OW=Zhx zShG+oL)e9p0>k+qrR5yj!%q$boL$X&Po+xi?=Gb~N7U^Gstwuv1sQj*&Gim3c7&I9 z;4fIH03$}sgz4`cW$4J?LFnl`eRH52D%QBmw9DhV&wDu}!#USZ#;;;wRt~nfz2k*Z zKaU%|wk@kyERSY%pXN){{eg(Q4&;OXRg{CFJ$?Ky|dX1V(1 z*5~_2D?8)sUFJ*1Ke8CCDSMl;#!h{PB~?5_yrgA3{}b~JR3`ALqC!VkZIj$MdGq zfm_FUYoddeSIBBAFLIbQFJbE5r)joK1B~s^~ka=ZZt|J*ufGvGLRs@)+ zj$0Jx$-ItSVS&j!#S?Yw>&Th8%Nsqz)X~BNweS&ti;j;(w1?}-s=F)ly9Y)GnLxD^ zA)P3GPe~5s&xh#9nXk%Y-2&P5k>EFA>0bZoUivKW_A@NoZYNL7u5y}pMiN?|nh_Rh z6H)m}TWAt{N0H{dO~kB_6Z+(d83N-}X>(@qdKeWfr0e#AXXL4gPxj|-)sy+C=m?Q2 zbkeMUCM)O7YCyt1^I#1>60eM8Psqs$_T66Sc#?;M&iV8K!QreWH0e>-rf&?V(n7A# z!=6Za7!N6*`N9X7RVb3+Py}B1*y!;xv?{GStAcV)of~h8FtUGmtwxk7=jT9zu>^=R zCoNiqnBC5HA8gue?(+^#910%P7~~2qEZUl=)&mVVj9QZ201eQ>DxWs}DpIRoIu@Dq zTHOaelVAS{`KZj3$q&Qls{mYOrUl-rfC@IZBp;x6Mj+|2e^nMsiKu5)FH!aA)N zD>q&MQ5GNd^?ic^cw1S^l(C6=9-`oZ0;wZ|(LJdIma1R>N+2isp}CdpZf7I(1uQLr zYWM=)tm(j+@o2*z;d}dp=Jm`%HkNo4fey|u0QlPLte(daov({gS(e=TJ-Moifvk)u zp6$Da5t=mE*2TTB?R1I&GQiR(bW}le!^@+chNRzq;YOZt)-VVaH+Br=d*GjJ$WgxK zpThx<2Z1GntO_1)Zg6|{LvGZnVvy@Uv7Q1tLWz6hdZ`v9R9TPUWkl$^)=j3!j4M&4az2HHGE}JG^E-GzISfpP3Y=szA!!aVA zSczXcHXSK}1m)hLIoQas9TNO!N3!nGexcs5M8m%2i$9)9S);#L!HT;AgHHoqfGb_EGxnsY+6h9RUjBaE_T`(kuP+d>RTln6oKrOsMYsT$|J7*#6EDydnzZf6 zkBlOBx}^Su7H*}5|BK|0s3;m5xZ7a+@DALIPX;z4p@#d3oVnESI?fvYHo53hQ+?3t^wp=d~UlTPV5Q*SR3sT zJ-2QG`Fw=8gz&k`!>o_P!3qF=rx8x5xLZ8o2TEyccp5t;o0ABJ{wWSut&{5E;ZCER z|LU7{g)osh7-t+Vq06IXw%CONOq}6W;Z`~JIqg&5F|}~i;Lk9cJglsU%R=Z5S0;)e z3V#TE@>En7)R30+tVa68zR+D){wD+|k>hDoLmUj@4frkJLBUH~y ziF1H{!Oi^z2wQpGK9^P+_=*tiEc+`ze8C>+K@WrD41>3=!Qr$JEE?AXhoWOW16B;c z6ns~nl5`O=;mZgNgJK>CfTDQ_MRRt@uR;4f;}B>54@^6>lS>)lOR_Nb5cF^?oFx+`U1ZTw(*i#*USd(9J7>WF-hI<0xv~_o7D;A=7m;$|C1_P~&@ni}M^We9x z#VtIC&K|t(9~X4nj}nAi6XEq1``v7ykP#*{X>a)|jM*+rg1Ai!=|Ky-NUM8cD_iK1 z65o!jef;8$m!bI}{~Gw$XGQz+a4BmQw~B8EN&O2`RgA?|ho%8GgZrID4|} zf~amokttY=ir<^6PdGX0sF$AX-}nn)=LKMRnWvgbGHSS3q}f@ueGlI$YKYvKMYNl2 zSw!c}2%sOOZ;#bM7(Y7PYazv7Qcz_5_$CIIk0P9dPtk-5xPvvwmen0M#NB!Gp*qro z3U>Vu5pE&%X-QL9A}dV5KE5u*o8;a}DC<{#XUT)do8*Ll$cD~lq(xsOdZNB0(mvTB zAjCN2(r>H=q75PygvdXj9v}h%{K0`s2nnCHKV9$PbbLHScw%yCnBuASKYq)SKMiKy z^Ld@TmQ%Nk_qK_OGWf^wmsYS_zZ&EecitA{7W0;7jaG?wlO$j`{D&l>^@i=lfW0Y^~9U@oz5qqA1={j_R9&~70z*o^Z6x~&$N^1 z;OXih?<2}2V}T^u$)t5hl&!j3$G1TZyC7q>kK;$>X9*+hY!B{bwH17abPFLVs8|kw zi~L}!?ECo z`$JDBDHTjKk{IFXnixwmMYCALAE9gI=sJYMi$5svXiV+Foq@Y3z`mhN)X~+}t(NMf zD1D_b_BdPni7mUw@zeXK>g$531~4gbNDziopFd^{dvk;Pqly*X9nj%+9>~?-GI0@<< z&4xa(ftr{1_qAh%ayvnq1pD1i2T;q<_{x=8aJJ8ivOa)4yN9f&(9NTtuTx*r7ku?& zrH!%U>xqzNWt%5&K5BV^^alZ?f;axv#T>a5AKp$j6u?+!L{)@b=06_fZcPyI=f-;@ z&T0pJgs)^YloTr1Us-GZTp|g1Mg@Op*WmGK-OIO-HM{5T0;AujB}yljr@9Bs1~764UP9^1j93A@MGZhnZ0Ri0cU)*)9_W?AZ@F( z8txj>DK}!MQ;aOZwCY>1oiWK%aN1BnoV!E$w(cw_+Pv*I$?_z1J6vTiN#nE8c{f+U zH_ba?xDVfdhUCOA^oLLMHra29uV;<2g>YR$uAG5gp%i6$ge5%UAE=|x?lExcXDzN~ zb}+@Pd!*WtM4)8L}T+!e2Tz6fMC-bw2R+ zJbCHSt)hCJtW}3f_u%A;k{iKd=SbXAL*JY*f3f0@-?@{k(hSq{d}RKPbnQLpy?Pe~ z>+ghR%)EyayPPlhSHeI|%nd|&^Hy)vRvAGf2Q}n9{|8KZ@HY9CyNo7W^NnrOWbtN* zzD`h_^&n!@6u)q`j51t~yY=GNlbhH(%AP16H;>mw=&gNCV1otR$;C_*jfigibHVk~ z8S4=6T|4Q<+C)+Y(6800cwulk!v&0!3y}oi2bM_%bcmZ6$+Lpoj1k1(R#{5K(}?fU zk=8*NM?^Bq2n7wMW74A_^r>O$6Bfna(91i?xhIpy{VynOka};)o5zZ?&VZ`nLf{{( zNHFlBumL70de6iZfom#2QeM;Q7%ZL@SeX(x_z_#7M8SH@I+Z~srHz?Kr&>z*{()Xu zs({~0&Dj~=x)uu#4-d@lIQ17Mc0eyu@xN)&JH>>s@lsEjqRTCJftEvxIqAw&yASn6 z7M&Lry=Sn|$T_PP!5NxwH@}qK+reo>bB#_F353PO3w>kKVwWCpGAheN3JYsV%yq^n zy$v3JWOIr6Y^jw~;Mj^P?Q%x{au+ePz{m(y_QXmxF#q$?uaMq7Q(uFK)$2)PL1Rh0cS>WviBHQ1bvz#{QLRU8*~9Vt5< zU7S7s%BOU+tDRnyT|$P49FBms@n+t2rHR{Mp|o08Jwmk#*xqFkcDZC|X=EL_O=CNC zW<(Z#Im3Lf#5yK`>%-g={V+fkvyO~G5aP1mB>3D>n|(=~U9Y=`fQ8}eweeb%x2n0O zLraLz3do|h;*SyM4!cd1n|=xjQZ+gu4H>M^S27~Z_o#RwfaKsLf#s9+Y!w~~@>yZO zsz_mif}pRN-bl0^fF2<=t-%fuS8g}fJtT9Xsw+ z>ZWzemD%T3Vo5KGY8^QG1N=$(o02G0<$)587;p90oR6(9eQ2gdAmJ9VIM{gN@vP23 zQFwx0?$M=8keK3&$YPmiU6a@g|1sHN+5Z#Mj@^6u+v&4o23n?CJ7*vJK6 zWb(h3us##iweuw$ywCDHsQlLBg`)MjT~qL^V7?DVcXv#`FaB@^`%+xW!Nfj>Vh%JMaH!fOWk8h z2!_`vWNw?AdD2`k!q43_drsQRr#~N=lqK1cCq)b*6B`KxEgx6S9`x0Jf0x(lkF^A< zuYy<;Le%hIC@%$Y8^hbgE={Qq;rbaG`?LuYsK8#LCiQ#6SpK#u1KEp+jBR{0x9>dd zr7^@KNi(2P4Nx$6 zK2==dVF%@<{mkBi`=l?{H`cxT8!hiQZna=dk)M4{$K{z)5{26Lb{FHuey9vk5XE=a zot0mT94ObHj(WD9S&ecY)t_dySrK4>Y#liwjApkFm#K5hdmhCCgrk&UAg6)*i zDd$Ap=ZxIoi7~-^Bg$LDdMo#|{!)oPL`k$z9H)ScdkE2HW{A_^CCj7aKYCYK+1+?0 zksoeX13=MT(8TX%8@mNNZ8{^*QDl9;J%Qo0383;CBUg(39j-Hw7FJY=e{i@mPga%U zQBt`SB1bm97~ODw<*rC=J=>T$++`W}#mWhtRl#H;m-P-cr^CGv8N)eu^~T>YNY=B_ zxJ>H<((p;E-`}QYr3(c1;hk42}iH-rYjNk$=%{lAa>N=P;q+26p_VVTtuhr9IaQzAQSGU)*)&Nr}bqZ;grLr?Eq+QX$|0GW`%KMfjAPH3j zX@Gf)bTy(POWYjIP3-qcZ#1aA*=+%GFEP7_z!Mw(((>Nju5}OjHFP>4J$B73J zX7ptJP{GP1yze&)qCDRW2GsoCF7?;G<;4`d#}F)wjK1H9rCC_Sy)>Ayfz@64z4*2G z$la-q_Kas{15RJUNFl44*gF#SikMcWC%`y(pDkr~yEhH;#s|D!qAPYdZ%kFDCs?J5 zh39@AOp<`|fK3B`t~}Q;>Idn0>q|#u5jQWL#k3L|2z;T)9Hjand8s4x;=1i~iUp`@&Y)3Y zN5TVJ7rf4g%5dN|@2mQApPN?gW{XKt4QFj6)}M$NQp^#-dC+R;WR6i$S*KjH$GnmA zqp~9drCt?@d*+~?eVdrQO7i)=HK}*rt}YmeBsrwhA!+skrPHeVulH;JuZb&{`SaTg+Gn z;~mT7_3t_7o^!tEd+)jP@jJI%g9l_%l9WmNM>zJR_7H8nsr^|2#|vz7528ZbLQxDa zyj`mhgd1oLbO_q7zfJpl}fc2YuPC--`FrkDx)*BFT9wW!}F=+*xdBxxcElDG5^A3gviE z2fn{dj(l2LcIOfM)e|a|!c%r>xQ_Of@cE@baMjI(8`&n&4Ta(EoO^)nne45ngJ8Kf zf+W{{mkQrqXuaxuGGPJugnr*}Q`pY#Tn<%6skwr&!k(^PrCe znL0Ln;Z?pM_NMVHv6lld+d`C$tDaYZxFbm8y9P^~Ou>+mULl8cKsJme;z?4!n=553 z&13eg=#o^+Wj#l>Uy}=qtD+f(i|0GY-m8mDl)*{h#Q^B8fq(8pak+&F$np!E<&4hZ zv>gJ$C!GJJb$wTr=t34~?Ef_77-B$`(Xb`Sf%GRca^@(cOnv1>d*|7@uS}aP7l=Az z+YJHciU;pj1TYRduh`6fY>2k1x=x**6%-Vpzwd7Kp>j^dtooS-XArx1%&`ZDGu$+Q zVS|pv0t<>E-%Enz7KDJnyyUo>HW*@!Q0~~YkFIPI6ZtOk<6bGWs9TvGqMlD`7#Q;C${pG>ceje!q6F2(X>Z0%IEU&Z5dTDrXhN}vV_~Ns#mHusfOCx zL69p9g;uAy)Hbx?=&ud`pY0_fp!kiD*)MJ{%|@B|TUDWbR(d4a9QwdMy960%pWGo=#*RE-D(-FR0YJfa2uVYn^%sEw3@D-Pnx~k-$oX+C9M`By5wpbqqsPIgApAPgzjZ z;0tUuBAP^jJ1s@TJG+m4FRIQi>->cp?!lJCOn%vh4tHnrt`AFV8L}d(sqr4+g1(?_ zc4-njuz1Nn0n@Hqx!xn@Y;|OwM!D`v+i!5tE3O)_#&&weR1Ps~m zpZk()y+-PE1OlmRS4so@MR65vlRH{#8V2#!3XK`YftqLk&v%-Rw$~2#E@=my44W(a zS1Je?x9D{r<~Z5c7k21!{);K&3(=`4JcbW z^8cSL2Vke^7V;%afLASZ!qZZ9^^;bpgdQjrR_zW7Bi2Mi(aCp({nXsr24`q{K$;f+ z9LXOF<*O98BMsUIKdSAT*ehT@aIn{%{tL|%H(QNNCQ;1U+JN-B=r?jIO)Fcm;{K6* zNl0*XGEK2X4U<`farI91D7!Cn%Bbhlk%vj0j_TsJzTHlKIgFONTMmowTy{D33&jol zUurHFS7|AX^5AF2`TeVlFcob02plQ(nCfwwL!bpm{XumT`7w>}NLmI}b_y6fH=RT* zwFvc^z@W(CwR~tJ?dW_NQR*GZcc^|VRk z#T%g$;oauJO5rbauKgjsze&x`BL?w6G}PhMw8}6pVFc-2tSB|XG53Xu=CF4C9Q0h> zCA-M3#Y-+~Zj+v7^)G)Aiz2D1+nxfn)Qap1tb^J{ow_#VMW-CxlmH%U zC*r4CIQ>Y6(*`q@T043W|y0 z8+dq)p0shpQJMJ=>3kd;MJ7dl6%;xM(Hu2OKCe!l+s}W&R->`8et)Y~L~WSyWm^pm z)#mh`jTN~u&>k0S+F;>sT|%EpWods6{j44AhYE(npg!U&04q&BdtJ3bPLu6W1w64C z1E~T7Gg)W=d*LJA>uQI?mrIq(=KaJt!3XNvw*>RU@AQQm^rI788>HToe%x?;uePsG z!&VbUZ*yupxV3FQ7E|t6`58|S@6tX1%EkvYZ+mL{mi_lwOr!hDeA^@&<-^8~VF9%0 zfe|o{%>qAZJLPZqf$LO&;0+MUfdWhPa0zs9i(*WkxVB3A83F_zzz3(C>`BG#B{9Kj zzAr@Fo-pcU7zb;BnDFm@UNRJIGS=wow2vi8;4KE>3db zPbQR^OTGVOg$lbbLG3J4mJs>u;=F-GQY3j4q7?L>jf+`eFMnT_6_p(tmqAXW_hduS zjt-@L|LXTzs19bK^LKDrh!@l#rrxn7h5CER?(mLdzTR|EEp*0Xde>M_A~jbZUS|d! zw73pMVR(Q%?9xQ#X;NoIpf*a3T;r2u^b!Nh+qytK8==Ufgu4PZZdaeZyldQlT0 zfQaIU$@%E}IxZ{?u1di+n?#?nOB`GhwNnM*5}6AoJ>ZDwx-G0*_r;Ou$t?Hs8SLlQ;}K?XiqCJ?gS zu6QvbHV-SwLkAEs1S52i3p<>1Oa}T=4kcGJh9VZLwJy_u_OZe+1BPclc;lv!dGm2Z zO12fFmNBp^@k+{e?b?UeQViwWyYJu9ht|EmWw{oK6gE`w;RkW~TP(kOBo7d+0n>Bc zP@5BAYz|Mvw(vo!%%(5ppl!D5>h=+#>{SZn49=UP{~<-rYdI7n=h^mV^0CAy*Fjv2uAD|rmV5=G zX@L8D_&mCTBl|iS#5mf&T+-Nr8t7MjKD1%&;5C^iKKn*CL6LxEV^wQ5VBH9R+DE<4O1tZe+J7TrYFKa3PN)t$^dJBP^ zbhN*c;5W7LGkX8$1f`Amh6^k3{)1~{)YIWq6)tSA=E22Zg-sek z;QO$F6fGs8D{IZQPjm!>-|zp-qudaeGmh;hw_=r;w)N|uk3$G=jQTSqVeL0ArOR@F z02ELwfxz1JHL(wLxskQ~|80?@lTW#x@?wHTF4-51GV*U|%{ydqm)%Glr_&p>hXF4{P zr(yB&LcLKlpr<8u=+d?ETv97cbp=i zs}OT_>jZ+A7?L&pRvPq{rdmd(3DkM7Ydqxx{5;>1vYReCj?G)6?KQn0x*U`~Cnik# z%<^t6MYlga0-IRTIlsXVqNI410XVqs#pL|zS1tBmWN>w2mCGAEA*elK;G+fFiUEB+O+GGtJz0tY?-MH;lUiRhL^XQq)={Ri zWW#Q3X=yHLE_EPuWEXq!#LdpUnVWst-#bvt+kIOsE=+@Oqda1yFETzVl=!s$ue;1O zKj!nZ$4M4Qvy)k7EKb^D+G6krV)>#kY<@RSVg;05n~M`zx#zcKJ4PZ3B_7o-7pLdp z*(VktDG8nEpPsh`38NrMfFxj56mTo0n|UWmwJ(NDRM7Q$QiH10b15x+0Ro=6r z9{Skm;_LobJ(Dp#ri?*@E_+t%rvcT-jglSbOx9iY@2_g7-`{+@bQyEv#0B#wT?Wlh ztqDvM-N2A6?(J`4W2)1QjJoYs`Rw`Z@_gZ*=rd*~R-Z5g7=g76cbwyDnl5hp>X@In z5P09U@+UO-!bB2x$e7sKtC0@P>6=6SbK2HoQ^_d^o$@d_Er!)L;|-KL|S^KyUhV7?5B!FyixhhHQYko|oMkqD5h|_W)dqV@Use)ug_vHA8lxTqs zC3Pq;{2Ei3#PPNilK+3pty=;T6xR|)9~?zR+)bI!FR|NNgfFsr@)IY8?lq_+0n-q4 z(tvfAE&uMZCp-}64@|OF(g~LI!QX|9uiQ0iH=Ls}u^r!Wh$$>4E!gET^;*DuE(kG%7Ob2RGi;1_>)S^BG{Y;RhZ0u5(3 z>KFRUJB3paq-7T-<~996*)yeKug#*Xza*mR!#_l|7sD!fj4#LEjb68AP?=O-8$rYQWurGJ-F_~ojn`=td7~-Cn8}i@*Ec5wc;+7VYDtNYrS%Na zTZ_(!xrm|8X&cV9Nq!gkh;fUJS9*K5kmj>rx71!y+cmmple%iJA<|6Vklw*>jl)w3 zcH;D-JW=+&G{H~7bjKf;8M=PPUuBL|^q$Wq%s`oB4P`&y4L{55c}eRkbc~0-<8|jk z6ZTi;ui7sqHhuii>{POG&b=Fh)pq(XDgTnE37(6x_YSc${`O;W1P|sdaS-^}(0tb) f3%hdS_P`3O)o^JJ0*?DmL-{kjV5(oO3y=68G>boN literal 0 HcmV?d00001 diff --git a/hass/settings/.ha_run.lock b/hass/settings/.ha_run.lock index 75c7868..744d6e5 100644 --- a/hass/settings/.ha_run.lock +++ b/hass/settings/.ha_run.lock @@ -1 +1 @@ -{"pid": 71, "version": 1, "ha_version": "2026.7.2", "start_ts": 1784057808.5709116} \ No newline at end of file +{"pid": 71, "version": 1, "ha_version": "2026.8.0", "start_ts": 1786366403.9299605} \ No newline at end of file diff --git a/hass/settings/automations.yaml b/hass/settings/automations.yaml index 43ec25c..3d88936 100644 --- a/hass/settings/automations.yaml +++ b/hass/settings/automations.yaml @@ -24,8 +24,9 @@ - 37e299b4ee90a2e39ae7e04328439ff4 - 8883de9fc71bef0b663c61faa4fbefb4 - f6dbda8398f290149bc8cb48a858452c - - service: notify.telegram + - service: telegram_bot.send_message data: + entity_id: notify.home_assistant_fonvizina_fonvizina_18_1001567589226 message: Звонок в дверь! mode: single - id: '1694942205257' @@ -35,11 +36,11 @@ path: gmlupatelli/unavailable_entities_notification.yaml input: actions: - - service: notify.telegram + - service: telegram_bot.send_message data: + entity_id: notify.home_assistant_fonvizina_fonvizina_18_1001567589226 message: 'У вас есть недоступные устройства: {{entities}}' - data: - parse_mode: html + parse_mode: html exclude: device_id: - fd4ed129390c68716ee6b5ca4ee6abe5 @@ -272,14 +273,14 @@ include_persistent_notification: disabled_persistent_notification include_custom_actions: enable_custom_actions custom_actions: - - action: notify.telegram_monster + - action: telegram_bot.send_message data: + entity_id: notify.home_assistant_fonvizina_monster_123622180 message: 'Садится батарея в датчиках: {{all_sensors}}' - data: - parse_mode: html + parse_mode: html - id: '1767036452762' alias: Дверь в гостиную - закрыта description: '' diff --git a/hass/settings/configuration.yaml b/hass/settings/configuration.yaml index b203400..f68d5a5 100644 --- a/hass/settings/configuration.yaml +++ b/hass/settings/configuration.yaml @@ -6,14 +6,7 @@ homeassistant: external_url: "https://home-fnv.yandex5.ru" internal_url: "http://192.168.1.6:8123" -http: - use_x_forwarded_for: true - ip_ban_enabled: true - login_attempts_threshold: 15 - trusted_proxies: - - 172.19.0.0/24 - - 172.18.0.0/24 - - 192.168.1.0/24 +# http config moved to .storage/http (UI-managed) in HA 2026.x: trusted_proxies, use_x_forwarded_for etc. # Text to speech tts: diff --git a/hass/settings/packages/alice_export.yaml b/hass/settings/packages/alice_export.yaml index 66a6eb8..c765269 100644 --- a/hass/settings/packages/alice_export.yaml +++ b/hass/settings/packages/alice_export.yaml @@ -34,7 +34,9 @@ yandex_smart_home: - light.light_childroom_bed - light.light_childroom_main - light.light_childroom_spotlights + - light.light_cloakroom - light.light_hall_long + - light.light_hall_small - light.light_kitchen_bar_lamp - light.light_kitchen_set - light.light_kitchen_spotlights @@ -60,4 +62,170 @@ yandex_smart_home: #exclude_entities: # - light.highlight #exclude_entity_globs: - # - sensor.weather_* \ No newline at end of file + # - sensor.weather_* + entity_config: + light.light_balcony_spotlight: + name: 'Светильники' + room: 'Балкон' + sensor.temperature_balcony_temperature: + room: 'Балкон' + fan.ventilation_bath: + name: 'Вытяжка' + room: 'Ванная' + light.light_bath: + room: 'Ванная' + light.light_bath_shelf: + name: 'Подсветка' + room: 'Ванная' + sensor.temperature_bath_temperature: + room: 'Ванная' + switch.light_bath_mirror: + name: 'Зеркало' + room: 'Ванная' + climate.ac_mainroom: + name: 'Кондиционер' + room: 'Гостиная' + climate.radiator_mainroom: + room: 'Гостиная' + cover.curtain_mainroom: + room: 'Гостиная' + cover.curtain_mainroom_bobbinet: + name: 'Тюль' + room: 'Гостиная' + light.light_mainroom_pc_spotlight: + name: 'Над столом' + room: 'Гостиная' + light.plug_yolka: + room: 'Гостиная' + media_player.mainroom_tv: + room: 'Гостиная' + sensor.temperature_mainroom_temperature: + room: 'Гостиная' + switch.light_mainroom_mainlamp: + name: 'Люстра' + room: 'Гостиная' + switch.light_mainroom_spotlights: + name: 'Светильники' + room: 'Гостиная' + climate.ac_childroom: + name: 'Кондиционер' + room: 'Детская' + climate.radiator_childroom: + room: 'Детская' + light.light_childroom_bed: + name: 'Кровать' + room: 'Детская' + light.light_childroom_main: + name: 'Люстра' + room: 'Детская' + light.light_childroom_spotlights: + name: 'Над Столом' + room: 'Детская' + sensor.temperature_childroom_temperature: + room: 'Детская' + script.away_mode: + name: 'Сценарий я ушел' + room: 'Дом' + switch.water_valve: + room: 'Дом' + fan.ventilation_shower: + name: 'Вытяжка' + room: 'Душевая' + light.light_shower_main_spotlights: + name: 'Светильники' + room: 'Душевая' + light.light_shower_shelf_light: + name: 'Подсветка' + room: 'Душевая' + light.light_shower_shower_spotlights: + name: 'Светильники Душ' + room: 'Душевая' + sensor.temperature_shower_temperature: + name: 'Температура' + room: 'Душевая' + switch.shower_mirror: + name: 'Зеркало' + room: 'Душевая' + light.light_cloakroom: + room: 'Кладовка' + light.light_hall_long: + name: 'Светильники' + room: 'Коридор' + light.light_hall_small: + name: 'Светильники Маленькие' + room: 'Коридор' + vacuum.dreame_p2027_6b1e_robot_cleaner: + room: 'Коридор' + climate.ac_kitchen: + name: 'Кондиционер' + room: 'Кухня' + climate.radiator_kitchen: + room: 'Кухня' + cover.curtain_kitchen: + room: 'Кухня' + cover.curtain_kitchen_bobbinet: + name: 'Тюль' + room: 'Кухня' + light.light_kitchen_bar_lamp: + room: 'Кухня' + light.light_kitchen_set: + name: 'Подсветка' + room: 'Кухня' + light.light_kitchen_spotlights: + name: 'Светильники' + room: 'Кухня' + light.light_kitchen_table_lamp: + name: 'Люстра' + room: 'Кухня' + media_player.kitchen_tv: + room: 'Кухня' + sensor.temperature_kitchen_temperature: + room: 'Кухня' + sensor.temperature_winecooler_temperature: + room: 'Кухня' + climate.ac_bedroom: + name: 'Кондиционер' + room: 'Спальня' + climate.radiator_bedroom: + room: 'Спальня' + climate.radiator_bedroom_balcony: + room: 'Спальня' + cover.curtain_bedroom: + room: 'Спальня' + cover.curtain_bedroom_balcony: + room: 'Спальня' + cover.curtain_bedroom_bobbinet_balcony: + name: 'Тюль' + room: 'Спальня' + fan.ventiliatsionnaia_sistema: + room: 'Спальня' + light.danil_bedside_lamp_rgbww_light: + name: 'Ночник Данил' + room: 'Спальня' + light.light_bedroom_mainlight: + name: 'Люстра' + room: 'Спальня' + light.light_bedroom_nightlight_left: + name: 'Бра левый' + room: 'Спальня' + light.light_bedroom_nightlight_right: + name: 'Бра правый' + room: 'Спальня' + light.light_bedroom_pc_nightlight: + name: 'Над столом бра' + room: 'Спальня' + light.light_bedroom_pc_spotlight: + name: 'Над столом' + room: 'Спальня' + light.light_bedroom_spotlights: + name: 'Светильники' + room: 'Спальня' + light.svetlana_bedside_lamp_rgbww_light: + name: 'Ночник Света' + room: 'Спальня' + media_player.bedroom_tv: + room: 'Спальня' + sensor.temperature_bedroom_temperature: + room: 'Спальня' + sensor.temperature_outside_bedroom_temperature: + room: 'Спальня' diff --git a/neptun-migration-backup-20260714-193157/alice_export.yaml b/hass/settings/packages/alice_export.yaml.bak similarity index 98% rename from neptun-migration-backup-20260714-193157/alice_export.yaml rename to hass/settings/packages/alice_export.yaml.bak index 8da4815..66a6eb8 100644 --- a/neptun-migration-backup-20260714-193157/alice_export.yaml +++ b/hass/settings/packages/alice_export.yaml.bak @@ -52,7 +52,7 @@ yandex_smart_home: - switch.light_mainroom_mainlamp - switch.light_mainroom_spotlights - switch.shower_mirror - - switch.watercontrol_valves + - switch.water_valve - vacuum.dreame_p2027_6b1e_robot_cleaner - light.plug_yolka include_entity_globs: diff --git a/hass/settings/packages/alice_export.yaml.bak3 b/hass/settings/packages/alice_export.yaml.bak3 new file mode 100644 index 0000000..f55ee1b --- /dev/null +++ b/hass/settings/packages/alice_export.yaml.bak3 @@ -0,0 +1,65 @@ +yandex_smart_home: + filter: + include_domains: + - cover + - fan + - vacuum + include_entities: + # радиаторы + - climate.radiator_bedroom + - climate.radiator_bedroom_balcony + - climate.radiator_childroom + - climate.radiator_kitchen + - climate.radiator_mainroom + # кондиционеры + - climate.ac_mainroom + - climate.ac_kitchen + - climate.ac_childroom + - climate.ac_bedroom + # вентиляторы + - fan.ventilation_bath + - fan.ventilation_shower + - fan.ventiliatsionnaia_sistema + # свет + - light.danil_bedside_lamp_rgbww_light + - light.light_balcony_spotlight + - light.light_bath + - light.light_bath_shelf + - light.light_bedroom_mainlight + - light.light_bedroom_nightlight_left + - light.light_bedroom_nightlight_right + - light.light_bedroom_pc_nightlight + - light.light_bedroom_pc_spotlight + - light.light_bedroom_spotlights + - light.light_childroom_bed + - light.light_childroom_main + - light.light_childroom_spotlights + - light.light_cloakroom + - light.light_hall_long + - light.light_hall_small + - light.light_kitchen_bar_lamp + - light.light_kitchen_set + - light.light_kitchen_spotlights + - light.light_kitchen_table_lamp + - light.light_mainroom_pc_spotlight + - light.light_shower_main_spotlights + - light.light_shower_shelf_light + - light.light_shower_shower_spotlights + - light.svetlana_bedside_lamp_rgbww_light + - media_player.bedroom_tv + - media_player.kitchen_tv + - media_player.mainroom_tv + - script.away_mode + - switch.light_bath_mirror + - switch.light_mainroom_mainlamp + - switch.light_mainroom_spotlights + - switch.shower_mirror + - switch.water_valve + - vacuum.dreame_p2027_6b1e_robot_cleaner + - light.plug_yolka + include_entity_globs: + - sensor.temperature_*_temperature + #exclude_entities: + # - light.highlight + #exclude_entity_globs: + # - sensor.weather_* \ No newline at end of file diff --git a/hass/settings/packages/aqara_lock.yaml b/hass/settings/packages/aqara_lock.yaml index 364fb1b..af69246 100644 --- a/hass/settings/packages/aqara_lock.yaml +++ b/hass/settings/packages/aqara_lock.yaml @@ -3,5 +3,5 @@ mqtt: - name: door_lock_mqtt_action unique_id: door_lock_mqtt_action state_topic: "z2m-tcp/lock_door" - value_template: "{{ value_json.action }}" + value_template: "{{ value_json.get('action', '') }}" json_attributes_topic: "z2m-tcp/lock_door" diff --git a/hass/settings/packages/base/recorder.yaml b/hass/settings/packages/base/recorder.yaml index 8bc0646..c552c75 100644 --- a/hass/settings/packages/base/recorder.yaml +++ b/hass/settings/packages/base/recorder.yaml @@ -1,6 +1,6 @@ recorder: db_url: !secret recorder_db_url - purge_keep_days: 365 + purge_keep_days: 180 include: domains: - alarm_control_panel diff --git a/hass/settings/packages/heat_counter.yaml b/hass/settings/packages/heat_counter.yaml index d739b91..d546b1b 100644 --- a/hass/settings/packages/heat_counter.yaml +++ b/hass/settings/packages/heat_counter.yaml @@ -3,16 +3,24 @@ template: - name: heat_total unit_of_measurement: gKal default_entity_id: sensor.heat_total - state: '{{ states(''sensor.saures_teploschetchik_fonvizina'') | float + 32.7600 | round(4) }}' + state: >- + {% set v = states('sensor.saures_teploschetchik_fonvizina') %} + {{ ((v | float + 32.7600) | round(4)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} - name: heat_hourly_cost unit_of_measurement: '₽' - state: "{{ states('sensor.heat_hourly') | float * 3035 | round(2) }}" + state: >- + {% set v = states('sensor.heat_hourly') %} + {{ ((v | float * 3035) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} - name: heat_daily_cost unit_of_measurement: '₽' - state: "{{ states('sensor.heat_daily') | float * 3035 | round(2) }}" + state: >- + {% set v = states('sensor.heat_daily') %} + {{ ((v | float * 3035) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} - name: heat_monthly_cost unit_of_measurement: '₽' - state: "{{ states('sensor.heat_monthly') | float * 3035 | round(2) }}" + state: >- + {% set v = states('sensor.heat_monthly') %} + {{ ((v | float * 3035) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} utility_meter: heat_hourly: @@ -29,7 +37,7 @@ homeassistant: customize: sensor.heat_hourly: friendly_name: Тепло в час - sensor.heat_hourly: + sensor.heat_daily: friendly_name: Тепло в день - sensor.heat_hourly: + sensor.heat_monthly: friendly_name: Тепло в месяц diff --git a/hass/settings/packages/power/power_cost_templates.yaml b/hass/settings/packages/power/power_cost_templates.yaml index b3a73c7..49ab8b9 100644 --- a/hass/settings/packages/power/power_cost_templates.yaml +++ b/hass/settings/packages/power/power_cost_templates.yaml @@ -1,22 +1,35 @@ template: - sensor: - unit_of_measurement: kWh - state: "{{ states('sensor.power_total') | float - 7072.7 | round(2) }}" + state: >- + {% set v = states('sensor.power_total') %} + {{ ((v | float - 7072.7) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} name: power_main_total # 7072.7 - разница показаний. - unit_of_measurement: ₽ - state: "{{ states('sensor.power_monthly_t1') | float * 8.23 | round(2) }}" + state: >- + {% set v = states('sensor.power_monthly_t1') %} + {{ ((v | float * 8.23) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} name: power_monthly_cost_t1 - unit_of_measurement: ₽ - state: "{{ states('sensor.power_monthly_t2') | float * 2.62 | round(2) }}" + state: >- + {% set v = states('sensor.power_monthly_t2') %} + {{ ((v | float * 2.62) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} name: power_monthly_cost_t2 - unit_of_measurement: ₽ - state: "{{ states('sensor.power_monthly_t3') | float * 5.66 | round(2) }}" + state: >- + {% set v = states('sensor.power_monthly_t3') %} + {{ ((v | float * 5.66) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} name: power_monthly_cost_t3 - unit_of_measurement: ₽ - state: "{{ (states('sensor.power_monthly_cost_t1') | float) + (states('sensor.power_monthly_cost_t2') | float) + (states('sensor.power_monthly_cost_t3') | float) | round(2) }}" + state: >- + {% set t1 = states('sensor.power_monthly_cost_t1') %} + {% set t2 = states('sensor.power_monthly_cost_t2') %} + {% set t3 = states('sensor.power_monthly_cost_t3') %} + {% set bad = ['unavailable', 'unknown', ''] %} + {{ ((t1 | float + t2 | float + t3 | float) | round(2)) if not (t1 in bad or t2 in bad or t3 in bad) else 'unavailable' }} name: power_monthly_cost_total diff --git a/hass/settings/packages/watercontrol.yaml b/hass/settings/packages/watercontrol.yaml index c74ef19..eaa4f17 100644 --- a/hass/settings/packages/watercontrol.yaml +++ b/hass/settings/packages/watercontrol.yaml @@ -11,12 +11,16 @@ template: device_class: water state_class: total_increasing unit_of_measurement: 'm³' - state: "{{ states('sensor.counter_hot') | float + 88.97 | round(2) }}" + state: >- + {% set v = states('sensor.counter_hot') %} + {{ ((v | float + 88.97) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} - name: counter_cold_outer device_class: water state_class: total_increasing unit_of_measurement: 'm³' - state: "{{ states('sensor.counter_cold') | float + 144.7 | round(2) }}" + state: >- + {% set v = states('sensor.counter_cold') %} + {{ ((v | float + 144.7) | round(2)) if v not in ['unavailable', 'unknown', ''] else 'unavailable' }} binary_sensor: - name: dryer_running diff --git a/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js b/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js index 6a5e343..dc19b2d 100644 --- a/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js +++ b/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js @@ -1,2 +1,2 @@ /*! For license information please see multiple-entity-row.js.LICENSE.txt */ -(()=>{"use strict";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,n=Symbol(),i=new WeakMap;class o{constructor(t,e,i){if(this._$cssResult$=!0,i!==n)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const n=this.t;if(e&&void 0===t){const e=void 0!==n&&1===n.length;e&&(t=i.get(n)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&i.set(n,t))}return t}toString(){return this.cssText}}const r=(t,...e)=>{const i=1===t.length?t[0]:e.reduce((e,n,i)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[i+1],t[0]);return new o(i,t,n)},a=(n,i)=>{if(e)n.adoptedStyleSheets=i.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of i){const i=document.createElement("style"),o=t.litNonce;void 0!==o&&i.setAttribute("nonce",o),i.textContent=e.cssText,n.appendChild(i)}},s=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const n of t.cssRules)e+=n.cssText;return(t=>new o("string"==typeof t?t:t+"",void 0,n))(e)})(t):t,{is:c,defineProperty:l,getOwnPropertyDescriptor:u,getOwnPropertyNames:d,getOwnPropertySymbols:f,getPrototypeOf:h}=Object,p=globalThis,m=p.trustedTypes,v=m?m.emptyScript:"",y=p.reactiveElementPolyfillSupport,b=(t,e)=>t,_={toAttribute(t,e){switch(e){case Boolean:t=t?v:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let n=t;switch(e){case Boolean:n=null!==t;break;case Number:n=null===t?null:Number(t);break;case Object:case Array:try{n=JSON.parse(t)}catch(t){n=null}}return n}},g=(t,e)=>!c(t,e),w={attribute:!0,type:String,converter:_,reflect:!1,useDefault:!1,hasChanged:g};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;class A extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=w){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const n=Symbol(),i=this.getPropertyDescriptor(t,n,e);void 0!==i&&l(this.prototype,t,i)}}static getPropertyDescriptor(t,e,n){const{get:i,set:o}=u(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:i,set(e){const r=i?.call(this);o?.call(this,e),this.requestUpdate(t,r,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??w}static _$Ei(){if(this.hasOwnProperty(b("elementProperties")))return;const t=h(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(b("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(b("properties"))){const t=this.properties,e=[...d(t),...f(t)];for(const n of e)this.createProperty(n,t[n])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,n]of e)this.elementProperties.set(t,n)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const n=this._$Eu(t,e);void 0!==n&&this._$Eh.set(n,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const n=new Set(t.flat(1/0).reverse());for(const t of n)e.unshift(s(t))}else void 0!==t&&e.push(s(t));return e}static _$Eu(t,e){const n=e.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const n of e.keys())this.hasOwnProperty(n)&&(t.set(n,this[n]),delete this[n]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return a(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,n){this._$AK(t,n)}_$ET(t,e){const n=this.constructor.elementProperties.get(t),i=this.constructor._$Eu(t,n);if(void 0!==i&&!0===n.reflect){const o=(void 0!==n.converter?.toAttribute?n.converter:_).toAttribute(e,n.type);this._$Em=t,null==o?this.removeAttribute(i):this.setAttribute(i,o),this._$Em=null}}_$AK(t,e){const n=this.constructor,i=n._$Eh.get(t);if(void 0!==i&&this._$Em!==i){const t=n.getPropertyOptions(i),o="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:_;this._$Em=i;const r=o.fromAttribute(e,t.type);this[i]=r??this._$Ej?.get(i)??r,this._$Em=null}}requestUpdate(t,e,n,i=!1,o){if(void 0!==t){const r=this.constructor;if(!1===i&&(o=this[t]),n??=r.getPropertyOptions(t),!((n.hasChanged??g)(o,e)||n.useDefault&&n.reflect&&o===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,n))))return;this.C(t,e,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:n,reflect:i,wrapped:o},r){n&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??e??this[t]),!0!==o||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||n||(e=void 0),this._$AL.set(t,e)),!0===i&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,n]of t){const{wrapped:t}=n,i=this[e];!0!==t||this._$AL.has(e)||void 0===i||this.C(e,void 0,n,i)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}A.elementStyles=[],A.shadowRootOptions={mode:"open"},A[b("elementProperties")]=new Map,A[b("finalized")]=new Map,y?.({ReactiveElement:A}),(p.reactiveElementVersions??=[]).push("2.1.2");const $=globalThis,S=t=>t,O=$.trustedTypes,x=O?O.createPolicy("lit-html",{createHTML:t=>t}):void 0,E="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,j="?"+C,k=`<${j}>`,P=document,T=()=>P.createComment(""),M=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,H=t=>I(t)||"function"==typeof t?.[Symbol.iterator],F="[ \t\n\f\r]",D=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,R=/-->/g,N=/>/g,U=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),L=/'/g,V=/"/g,z=/^(?:script|style|textarea|title)$/i,B=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),W=B(1),Z=(B(2),B(3),Symbol.for("lit-noChange")),q=Symbol.for("lit-nothing"),J=new WeakMap,G=P.createTreeWalker(P,129);function K(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==x?x.createHTML(e):e}const Y=(t,e)=>{const n=t.length-1,i=[];let o,r=2===e?"":3===e?"":"",a=D;for(let e=0;e"===c[0]?(a=o??D,l=-1):void 0===c[1]?l=-2:(l=a.lastIndex-c[2].length,s=c[1],a=void 0===c[3]?U:'"'===c[3]?V:L):a===V||a===L?a=U:a===R||a===N?a=D:(a=U,o=void 0);const d=a===U&&t[e+1].startsWith("/>")?" ":"";r+=a===D?n+k:l>=0?(i.push(s),n.slice(0,l)+E+n.slice(l)+C+d):n+C+(-2===l?e:d)}return[K(t,r+(t[n]||"")+(2===e?"":3===e?"":"")),i]};class Q{constructor({strings:t,_$litType$:e},n){let i;this.parts=[];let o=0,r=0;const a=t.length-1,s=this.parts,[c,l]=Y(t,e);if(this.el=Q.createElement(c,n),G.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(i=G.nextNode())&&s.length0){i.textContent=O?O.emptyScript:"";for(let n=0;n2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=q}_$AI(t,e=this,n,i){const o=this.strings;let r=!1;if(void 0===o)t=X(this,t,e,0),r=!M(t)||t!==this._$AH&&t!==Z,r&&(this._$AH=t);else{const i=t;let a,s;for(t=o[0],a=0;a{const i=n?.renderBefore??e;let o=i._$litPart$;if(void 0===o){const t=n?.renderBefore??null;i._$litPart$=o=new et(e.insertBefore(T(),t),t,void 0,n??{})}return o._$AI(t),o})(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Z}}ut._$litElement$=!0,ut.finalized=!0,lt.litElementHydrateSupport?.({LitElement:ut});const dt=lt.litElementPolyfillSupport;dt?.({LitElement:ut}),(lt.litElementVersions??=[]).push("4.2.2");var ft=["unavailable","unknown"],ht="last-changed",pt="last-updated",mt=["relative","total","date","time","datetime"],vt=["entity-id","last-changed","last-updated","last-triggered","position","tilt-position","brightness"],yt=function(t){return t<10?"0".concat(t):t};function bt(t){var e=Math.floor(t/3600),n=Math.floor(t%3600/60),i=Math.floor(t%3600%60);return e>0?"".concat(e,":").concat(yt(n),":").concat(yt(i)):n>0?"".concat(n,":").concat(yt(i)):i>0?""+i:null}function _t(t){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_t(t)}function gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function wt(t,e,n){return(e=function(t){var e=function(t){if("object"!=_t(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=_t(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==_t(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var At=function(t,e,n){var i=e?function(t){switch(t.number_format){case"comma_decimal":return["en-US","en"];case"decimal_comma":return["de","es","it"];case"space_comma":return["fr","sv","cs"];case"system":return;default:return t.language}}(e):void 0;if(Number.isNaN=Number.isNaN||function t(e){return"number"==typeof e&&t(e)},"none"!==(null==e?void 0:e.number_format)&&!Number.isNaN(Number(t))&&Intl)try{return new Intl.NumberFormat(i,$t(t,n)).format(Number(t))}catch(e){return console.error(e),new Intl.NumberFormat(void 0,$t(t,n)).format(Number(t))}return"string"==typeof t?t:"".concat(function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Math.round(t*Math.pow(10,e))/Math.pow(10,e)}(t,null==n?void 0:n.maximumFractionDigits).toString()).concat("currency"===(null==n?void 0:n.style)?" ".concat(n.currency):"")},$t=function(t,e){var n=function(t){for(var e=1;e-1?t.split(".")[1].length:0;n.minimumFractionDigits=i,n.maximumFractionDigits=i}return n};function St(t){return St="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},St(t)}var Ot=function(t){return"object"===St(t)&&!Array.isArray(t)&&!!t},xt=function(t,e,n){var i=new Event(e,{bubbles:!0,composed:!0});i.detail=n,t.dispatchEvent(i)},Et=function(t){return!t||ft.includes(t.state)},Ct=function(t,e,n){if(function(t,e){return e.hide_unavailable&&(Et(t)||e.attribute&&![ht,pt].includes(e.attribute)&&void 0===t.attributes[e.attribute])}(t,e))return!0;if(void 0===e.hide_if)return!1;var i;if(Ot(e.hide_if)&&(e.hide_if.entity||e.hide_if.attribute)){var o=e.hide_if.entity?null==n?void 0:n.states[e.hide_if.entity]:t;i=e.hide_if.attribute?null==o?void 0:o.attributes[e.hide_if.attribute]:null==o?void 0:o.state}else i=e.attribute?t.attributes[e.attribute]:t.state;var r=[];if(Ot(e.hide_if)){if(e.hide_if.below&&ie.hide_if.above)return!0;e.hide_if.value&&(r=r.concat(e.hide_if.value))}else r=r.concat(e.hide_if);return r.some(function(t){return"number"==typeof t?t===+i:t===i})},jt=["formatEntityName","formatEntityState","formatEntityAttributeValue"];function kt(t){return kt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kt(t)}function Pt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function Tt(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,i=Array(e);n1&&a.every(function(t){return Vt.test(t)})){var s=o??0;return!isNaN(parseFloat(s))&&isFinite(s)?function(t,e,n,i){var o,r,a=parseFloat(e),s=Rt(e),c=!1,l=function(t){c||(s=void 0,o=t)},u=function(t){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=It(t))){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,r=!0,a=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return r=t.done,t},e:function(t){a=!0,o=t},f:function(){try{r||null==e.return||e.return()}finally{if(a)throw o}}}}(t);try{for(u.s();!(r=u.n()).done;){var d=r.value,f=Ut.exec(d);if(f&&"precision"===f[1])s=parseInt(f[2],10),o=void 0,c=!0;else if(f)a/={kilo:1e3,mega:1e6,milli:.001}[f[1]],void 0!==f[2]?(s=parseInt(f[2],10),o=void 0,c=!0):l(2);else switch(d){case"brightness":a=Math.round(a/255*100),n="%",l(0);break;case"percent":a*=100,n="%",l(2);break;case"invert":a=-a;break;case"position":a=100-a;break;case"celsius_to_fahrenheit":a=1.8*a+32,l(0);break;case"fahrenheit_to_celsius":a=5*(a-32)/9,l(1)}}}catch(t){u.e(t)}finally{u.f()}return"".concat(At(a,i,void 0!==s?{minimumFractionDigits:s,maximumFractionDigits:s}:void 0!==o?{maximumFractionDigits:o}:void 0)).concat(n?" ".concat(n):"")}(a,s,r,t.locale):"".concat(s).concat(r?" ".concat(r):"")}if(n.format&&!function(t){return Nt.some(function(e){return null==t?void 0:t.startsWith(e)})&&!Lt(t)}(n.format)){if(null==o&&(o=zt.includes(n.format)?"":0),zt.includes(n.format))return"".concat(function(t,e){switch(t){case"upper":return e.toUpperCase();case"lower":return e.toLowerCase();case"capitalize":return e.charAt(0).toUpperCase()+e.slice(1);case"title":return e.split(/(\s+)/).map(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}).join("")}}(n.format,String(o))).concat(r?" ".concat(r):"");if(isNaN(parseFloat(o))||!isFinite(o));else if("brightness"===n.format)o=Math.round(o/255*100),r="%";else if("percent"===n.format)o=At(100*o,t.locale,{maximumFractionDigits:2}),r="%";else if("duration"===n.format){var c;o=null!==(c=bt(o))&&void 0!==c?c:"0",r=void 0}else if("duration-m"===n.format){var l;o=null!==(l=bt(o/1e3))&&void 0!==l?l:"0",r=void 0}else if("duration-h"===n.format){var u;o=null!==(u=bt(3600*o))&&void 0!==u?u:"0",r=void 0}else if(Lt(n.format)){var d=function(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,o,r,a,s=[],c=!0,l=!1;try{if(r=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(i=r.call(n)).done)&&(s.push(i.value),s.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(t,e)||It(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(Lt(n.format),3),f=d[1],h=d[2];if("precision"===f){var p=parseInt(h,10);o=At(parseFloat(o),t.locale,{minimumFractionDigits:p,maximumFractionDigits:p})}else o=function(t,e,n,i){if(void 0===n)return At(t/e,i,{maximumFractionDigits:2});var o=parseInt(n,10);return At(t/e,i,{minimumFractionDigits:o,maximumFractionDigits:o})}(o,{kilo:1e3,mega:1e6,milli:.001}[f],h,t.locale)}else if("invert"===n.format){var m=Rt(o);o=At(o-2*o,t.locale,void 0!==m?{minimumFractionDigits:m,maximumFractionDigits:m}:void 0)}else if("position"===n.format){var v=Rt(o);o=At(100-o,t.locale,void 0!==v?{minimumFractionDigits:v,maximumFractionDigits:v}:void 0)}else"celsius_to_fahrenheit"===n.format?o=At(1.8*o+32,t.locale,{maximumFractionDigits:0}):"fahrenheit_to_celsius"===n.format&&(o=At(5*(o-32)/9,t.locale,{maximumFractionDigits:1}));return"".concat(o).concat(r?" ".concat(r):"")}var y=Tt(Tt({},e),{},{attributes:Tt(Tt({},e.attributes),{},{unit_of_measurement:r})});return n.attribute?t.formatEntityAttributeValue(y,n.attribute):t.formatEntityState(y)},Jt=function(t){return Ot(null==t?void 0:t.styles)?Object.keys(t.styles).map(function(e){return"".concat(e,": ").concat(t.styles[e],";")}).join(""):""};class Gt{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,n){this._$Ct=t,this._$AM=e,this._$Ci=n}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}const{I:Kt}=st,Yt={},Qt=(t=>(...e)=>({_$litDirective$:t,values:e}))(class extends Gt{constructor(){super(...arguments),this.key=q}render(t,e){return this.key=t,e}update(t,[e,n]){return e!==this.key&&(((t,e=Yt)=>{t._$AH=e})(t),this.key=e),n}});var Xt,te,ee,ne,ie,oe,re,ae,se,ce,le,ue,de,fe,he,pe,me,ve="__custom__",ye=[{value:"",label:"No format"},{value:"brightness",label:"Brightness (0-255 → %)"},{value:"percent",label:"Percent (value × 100 → x %)"},{value:"duration",label:"Duration (seconds → h:mm:ss)"},{value:"duration-m",label:"Duration (milliseconds)"},{value:"duration-h",label:"Duration (hours)"},{value:"precision0",label:"Precision 0 decimals"},{value:"precision1",label:"Precision 1 decimal"},{value:"precision2",label:"Precision 2 decimals"},{value:"precision3",label:"Precision 3 decimals"},{value:"kilo",label:"Kilo (value / 1,000)"},{value:"mega",label:"Mega (value / 1,000,000)"},{value:"milli",label:"Milli (value × 1,000)"},{value:"invert",label:"Invert (value × -1)"},{value:"position",label:"Position (100 - value)"},{value:"celsius_to_fahrenheit",label:"°C → °F"},{value:"fahrenheit_to_celsius",label:"°F → °C"},{value:"upper",label:"Text: UPPERCASE"},{value:"lower",label:"Text: lowercase"},{value:"capitalize",label:"Text: Capitalize first letter"},{value:"title",label:"Text: Title Case"},{value:"relative",label:"Timestamp: relative"},{value:"total",label:"Timestamp: total"},{value:"date",label:"Timestamp: date"},{value:"time",label:"Timestamp: time"},{value:"datetime",label:"Timestamp: date + time"},{value:ve,label:"Custom…"}],be=new Set(ye.map(function(t){return t.value}).filter(function(t){return t&&t!==ve})),_e=[{name:"entity",required:!0,selector:{entity:{}}},{type:"grid",schema:[{name:"name",selector:{text:{}}},{name:"attribute",selector:{text:{}}}]},{type:"grid",schema:[{name:"unit",selector:{text:{}}},{name:"icon",selector:{icon:{}}}]},{name:"icon_color",selector:{text:{}}},{type:"grid",schema:[{name:"show_state",default:!0,selector:{boolean:{}}},{name:"state_color",selector:{boolean:{}}}]},{type:"grid",schema:[{name:"toggle",selector:{boolean:{}}},{name:"column",selector:{boolean:{}}}]},{type:"grid",schema:[{name:"show_state_first",selector:{boolean:{}}},{name:"hide_unavailable",selector:{boolean:{}}}]},{name:"state_header",selector:{text:{}}},{name:"image",selector:{text:{}}},{name:"format",selector:{select:{mode:"dropdown",options:ye}}}],ge=[{name:"tap_action",selector:{ui_action:{default_action:"more-info"}}},{name:"hold_action",selector:{ui_action:{default_action:"none"}}},{name:"double_tap_action",selector:{ui_action:{default_action:"none"}}}],we=[{name:"entity",selector:{entity:{}}},{type:"grid",schema:[{name:"name",selector:{text:{}}},{name:"attribute",selector:{text:{}}}]},{type:"grid",schema:[{name:"unit",selector:{text:{}}},{name:"icon",selector:{icon:{}}}]},{name:"icon_color",selector:{text:{}}},{type:"grid",schema:[{name:"state_color",selector:{boolean:{}}},{name:"toggle",selector:{boolean:{}}}]},{name:"hide_unavailable",selector:{boolean:{}}},{name:"format",selector:{select:{mode:"dropdown",options:ye}}}],Ae={entity:"Entity",attribute:"Attribute",name:"Name override",unit:"Unit",icon:"Icon",icon_color:"Icon color (CSS value, e.g. red, #ff0000, var(--my-color))",image:"Image URL",format:"Format",show_state:"Show main entity state",show_state_first:"State before entities",state_header:"State header label",state_color:"State color",column:"Column layout",toggle:"Show as toggle",hide_unavailable:"Hide if unavailable",tap_action:"Tap action",hold_action:"Hold action",double_tap_action:"Double-tap action"};function $e(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}function Se(t){return function(t){if(Array.isArray(t))return Fe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||He(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Oe(t,e){for(var n=0;n=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,r=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw r}}}}function Ie(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,o,r,a,s=[],c=!0,l=!1;try{if(r=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(i=r.call(n)).done)&&(s.push(i.value),s.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(t,e)||He(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function He(t,e){if(t){if("string"==typeof t)return Fe(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Fe(t,e):void 0}}function Fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);ni.length&&(t._selectedTab=i.length),t._keys.clear(),t._updateConfig({entities:i.length?i:void 0})}}),Pe(t,"_moveAdditional",function(e,n){var i;if(t._config){var o=Se(null!==(i=t._config.entities)&&void 0!==i?i:[]),r=e+n;if(!(r<0||r>=o.length)){var a=[o[r],o[e]];o[e]=a[0],o[r]=a[1],t._selectedTab=r+1,t._keys.clear(),t._updateConfig({entities:o})}}}),Pe(t,"_copyAdditional",function(e){var n,i=null===(n=t._config)||void 0===n||null===(n=n.entities)||void 0===n?void 0:n[e];null!=i&&t._writeClipboard("string"==typeof i?{entity:i}:ke({},i))}),Pe(t,"_cutAdditional",function(e){t._copyAdditional(e),t._deleteAdditional(e)}),Pe(t,"_copyMainAsTemplate",function(){if(t._config){var e,n={},i=Me(pn);try{for(i.s();!(e=i.n()).done;){var o=e.value,r=t._config[o];void 0!==r&&(n[o]=r)}}catch(t){i.e(t)}finally{i.f()}t._writeClipboard(n)}}),Pe(t,"_pasteEntity",function(){var e;if(t._config){var n=t._readClipboard();if(n){var i=[].concat(Se(null!==(e=t._config.entities)&&void 0!==e?e:[]),[n]);t._selectedTab=i.length,t._keys.clear(),t._updateConfig({entities:i})}}}),Pe(t,"_secondaryModeChanged",function(e){if(t._config){var n=e.detail.value.mode;if(n!==t._secondaryInfoMode()){var i;switch(n){case"none":i=void 0;break;case"text":i="";break;case"generic":i="last-changed";break;case"entity":i={entity:t._config.entity}}t._updateConfig({secondary_info:i})}}}),Pe(t,"_secondaryTextChanged",function(e){t._updateConfig({secondary_info:e.detail.value.text})}),Pe(t,"_secondaryTokenChanged",function(e){t._updateConfig({secondary_info:e.detail.value.token})}),Pe(t,"_secondaryEntityChanged",function(e){var n,i=Ot(null===(n=t._config)||void 0===n?void 0:n.secondary_info)?t._config.secondary_info.format:void 0;t._updateConfig({secondary_info:t._formatFromForm("secondary",fn(e.detail.value),i)})}),t._selectedTab=0,t._entitiesExpanded=!0,t._stateIconRowsMain=[],t._stateIconRowsAdditional=new Map,t._customFormatScopes=new Set,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Ce(t,e)}(e,t),function(t,e,n){return e&&Oe(t.prototype,e),n&&Oe(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}(e,[{key:"setConfig",value:function(t){var e,n,i,o=this;this._config=t;var r,a=null!==(e=null===(n=t.entities)||void 0===n?void 0:n.length)&&void 0!==e?e:0;this._selectedTab>a&&(this._selectedTab=a),this._clipboardEntity=this._readClipboard(),this._stateIconRowsMatch(this._stateIconRowsMain,t.state_icon)||(this._stateIconRowsMain=Object.entries(null!==(r=t.state_icon)&&void 0!==r?r:{}));var s=new Map;null===(i=t.entities)||void 0===i||i.forEach(function(t,e){var n=Ot(t)?t.state_icon:void 0,i=o._stateIconRowsAdditional.get(e);i&&o._stateIconRowsMatch(i,n)?s.set(e,i):n&&s.set(e,Object.entries(n))}),this._stateIconRowsAdditional=s}},{key:"_stateIconRowsMatch",value:function(t,e){var n,i={},o=Me(t);try{for(o.s();!(n=o.n()).done;){var r=Ie(n.value,2),a=r[0],s=r[1];a.trim()&&s.trim()&&(i[a.trim()]=s.trim())}}catch(t){o.e(t)}finally{o.f()}var c=null!=e?e:{},l=Object.keys(i);return l.length===Object.keys(c).length&&l.every(function(t){return i[t]===c[t]})}},{key:"_readClipboard",value:function(){try{var t=sessionStorage.getItem(hn);if(!t)return;var e=JSON.parse(t);if(e&&"object"===De(e))return e}catch(t){}}},{key:"_writeClipboard",value:function(t){try{sessionStorage.setItem(hn,JSON.stringify(t)),this._clipboardEntity=t}catch(t){}}},{key:"_hasNativeTabs",get:function(){return!!customElements.get("ha-tab-group")&&!!customElements.get("ha-tab-group-tab")}},{key:"render",value:function(){return this.hass&&this._config?W(Xt||(Xt=$e(["\n \n ",'\n \n\n \n "])),"Entities",this._entitiesExpanded,this._onEntitiesExpandedChanged,this._renderEntitiesPanel(),"4.7.0","2026-07-08T23:41:43.781Z"):q}},{key:"_isCustomFormat",value:function(t,e){return this._customFormatScopes.has(t)||!!e&&!be.has(e)}},{key:"_setCustomFormatScope",value:function(t,e){if(e!==this._customFormatScopes.has(t)){var n=new Set(this._customFormatScopes);e?n.add(t):n.delete(t),this._customFormatScopes=n}}},{key:"_formatToForm",value:function(t,e){return this._isCustomFormat(t,e.format)?ke(ke({},e),{},{format:ve}):e}},{key:"_formatFromForm",value:function(t,e,n){if(e.format===ve){this._setCustomFormatScope(t,!0);var i=ke({},e);return void 0!==n?i.format=n:delete i.format,i}return this._setCustomFormatScope(t,!1),e}},{key:"_renderCustomFormatField",value:function(t,e,n){return this._isCustomFormat(t,e)?W(te||(te=$e(["\n \n "])),this.hass,{custom_format:null!=e?e:""},[{name:"custom_format",selector:{text:{}}}],function(){return"Custom format (e.g. invert, precision3)"},function(t){var e,i=(null!==(e=t.detail.value.custom_format)&&void 0!==e?e:"").trim();n(i||void 0)}):q}},{key:"_keyFor",value:function(t){return this._keys.has(t)||this._keys.set(t,"".concat(t,"-").concat(Math.random().toString(36).slice(2,10))),this._keys.get(t)}},{key:"_renderEntitiesPanel",value:function(){var t,e,n=this,i=null!==(t=null===(e=this._config)||void 0===e?void 0:e.entities)&&void 0!==t?t:[],o=Math.min(this._selectedTab,i.length);return W(ee||(ee=$e(['\n
\n
\n ','\n \n
\n\n
\n ',"\n
\n
\n "])),this._hasNativeTabs?W(ne||(ne=$e(['\n \n \n \n \n \n
\n
\n \n \n ','\n \n ','\n \n ',"\n \n "])),"Copy main as template",nn,this._copyMainAsTemplate,"Paste as new entity",on,!this._clipboardEntity,this._pasteEntity,this.hass,this._mainFormData(),_e,this._computeLabel,this._mainValueChanged,this._renderCustomFormatField("main",null===(t=this._config)||void 0===t?void 0:t.format,function(t){return n._updateConfig({format:t})}),this.hass,this._mainFormData(),ge,this._computeLabel,this._mainValueChanged,this._renderSecondaryInfoBlock(),this._renderStateIconRows("main"),this._renderStylesBlock(null===(e=this._config)||void 0===e?void 0:e.styles,function(t){return n._mainStylesChanged(t)}))}},{key:"_renderStylesBlock",value:function(t,e){return W(se||(se=$e(['\n \n ','\n \n \n \n \n
\n
\n \n \n ','\n \n ',"\n \n "])),"Move before","M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",0===t,function(){return i._moveAdditional(t,-1)},"Move after","M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",t===a,function(){return i._moveAdditional(t,1)},"Copy entity",nn,function(){return i._copyAdditional(t)},"Cut entity","M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z",function(){return i._cutAdditional(t)},"Paste from clipboard",on,!this._clipboardEntity,this._pasteEntity,"Delete entity",en,function(){return i._deleteAdditional(t)},this.hass,this._formatToForm("sub-".concat(t),dn(r)),we,this._computeLabel,function(e){return i._additionalValueChanged(e,t)},this._renderCustomFormatField("sub-".concat(t),r.format,function(e){return i._setAdditionalFormat(t,e)}),this.hass,this._formatToForm("sub-".concat(t),dn(r)),ge,this._computeLabel,function(e){return i._additionalValueChanged(e,t)},this._renderStateIconRows(t),this._renderStylesBlock(r.styles,function(e){return i._additionalStylesChanged(e,t)}))}},{key:"_mainFormData",value:function(){return this._formatToForm("main",dn(ke({show_state:!0},this._config)))}},{key:"_setAdditionalFormat",value:function(t,e){var n;if(this._config){var i=Se(null!==(n=this._config.entities)&&void 0!==n?n:[]),o=i[t],r="string"==typeof o?{entity:o}:ke({},o);e?r.format=e:delete r.format,i[t]=r,this._updateConfig({entities:i})}}},{key:"_secondaryInfoMode",value:function(){var t,e=null===(t=this._config)||void 0===t?void 0:t.secondary_info;return null==e?"none":"object"===De(e)?"entity":vt.includes(e)?"generic":"text"}},{key:"_renderSecondaryInfoBlock",value:function(){var t,e=this,n=this._secondaryInfoMode(),i=null===(t=this._config)||void 0===t?void 0:t.secondary_info;return W(de||(de=$e(["\n
\n \n ","\n ","\n ","\n
\n "])),this.hass,{mode:n},rn,function(){return"Mode"},this._secondaryModeChanged,"text"===n?W(fe||(fe=$e(['
\n \n \n \n
\n ',"\n
\n "])),Bt(this.config.icon_color),this._hass,n,this.renderSecondaryInfo(),!0,this.config.column?"entities-column":"entities-row",this.config.show_state_first?W(Ue||(Ue=yn(["","",""])),this.renderMainEntity(),this.entities.map(function(e,n){return t.renderEntity(e.stateObj,e,n)})):W(Le||(Le=yn(["","",""])),this.entities.map(function(e,n){return t.renderEntity(e.stateObj,e,n)}),this.renderMainEntity()))}},{key:"renderSecondaryInfo",value:function(){if(!this.config.secondary_info||"string"==typeof(t=this.config.secondary_info)&&vt.includes(t)||Ct(this.info,this.config.secondary_info,this._hass))return null;var t;if("string"==typeof this.config.secondary_info)return W(Ve||(Ve=yn(["",""])),this.config.secondary_info);var e=Zt(this.info,this.config.secondary_info);return W(ze||(ze=yn([""," ",""])),e,this.renderValue(this.info,this.config.secondary_info))}},{key:"renderMainEntity",value:function(){if(!1===this.config.show_state)return null;if(Ct(this.stateObj,this.config,this._hass))return this.config.default?W(Be||(Be=yn(['
\n ',"\n
","
\n
"])),Jt(this.config),this.config.state_header&&W(We||(We=yn(["",""])),this.config.state_header),this.config.default):null;var t=this.getGestureHandlers("main",this.config.entity,this.config);return W(Ze||(Ze=yn(['\n ',"\n
","
\n
"])),Jt(this.config),null==t?void 0:t.onDown,null==t?void 0:t.onUp,null==t?void 0:t.onCancel,xn,xn,xn,xn,xn,xn,this.config.state_header&&W(qe||(qe=yn(["",""])),this.config.state_header),this.renderValue(this.stateObj,this.config))}},{key:"renderEntity",value:function(t,e,n){if(!t||Ct(t,e,this._hass))return e.default?W(Je||(Je=yn(['
\n ',"\n
","
\n
"])),Jt(e),e.name,e.default):null;var i=this.getGestureHandlers("sub-".concat(n),t.entity_id,e);return W(Ge||(Ge=yn(['\n ',"\n
\n ","\n
\n "])),Jt(e),null==i?void 0:i.onDown,null==i?void 0:i.onUp,null==i?void 0:i.onCancel,xn,xn,xn,xn,xn,xn,Zt(t,e),e.icon||Ot(e.state_icon)?this.renderIcon(t,e):this.renderValue(t,e))}},{key:"renderValue",value:function(t,e){if(!0===e.toggle)return W(Ke||(Ke=yn([''])),t,this._hass);var n;if(e.attribute&&[ht,pt].includes(e.attribute))return W(Ye||(Ye=yn([""])),this._hass,t[null===(n=e.attribute)||void 0===n?void 0:n.replace("-","_")]);if(e.format&&mt.includes(e.format)){var i,o=e.attribute?null!==(i=t.attributes[e.attribute])&&void 0!==i?i:t[e.attribute]:t.state,r=new Date(o);return r instanceof Date&&!isNaN(r.getTime())?W(Qe||(Qe=yn([""])),this._hass,r,e.format):o}return qt(this._hass,t,e)}},{key:"renderIcon",value:function(t,e){var n,i=null!==(n=Wt(t,e))&&void 0!==n?n:!0===e.icon?t.attributes.icon||null:e.icon;return W(Xe||(Xe=yn([''])),Bt(e.icon_color),this._hass,t,i,e.state_color)}},{key:"renderWarning",value:function(){return W(tn||(tn=yn(["\n ","\n "])),this._hass.localize("ui.panel.lovelace.warning.entity_not_found","entity",this.config.entity))}},{key:"getGestureHandlers",value:function(t,e,n){var i,o,r,a,s,c,l,u=this;return!0===n.toggle?null:(this._actionHandlers.has(t)||this._actionHandlers.set(t,(i=function(t,i){return u.dispatchAction(e,n,t,i)},o={hasHold:!!n.hold_action,hasDoubleTap:!!n.double_tap_action},s=o.hasHold,c=o.hasDoubleTap,l=!1,{onDown:function(){l=!1,s&&(r=setTimeout(function(){l=!0},500))},onUp:function(){if(clearTimeout(r),l)return l=!1,void i(!0,!1);c?a?(clearTimeout(a),a=void 0,i(!1,!0)):a=setTimeout(function(){a=void 0,i(!1,!1)},250):i(!1,!1)},onCancel:function(){clearTimeout(r)}})),this._actionHandlers.get(t))}},{key:"dispatchAction",value:function(t,e,n,i){var o,r=i?e.double_tap_action:n?e.hold_action:null!==(o=e.tap_action)&&void 0!==o?o:{action:"more-info"};if(r&&"none"!==r.action){var a=i?"double_tap":n?"hold":"tap";xt(this,"hass-action",{config:gn({entity:r.entity||t},"".concat(a,"_action"),r),action:a})}}}],[{key:"getConfigElement",value:function(){return document.createElement("multiple-entity-row-editor")}},{key:"getStubConfig",value:function(t,e){var n,i,o=null!==(n=null!==(i=null==e?void 0:e.find(function(t){return t.startsWith("sensor.")}))&&void 0!==i?i:null==e?void 0:e[0])&&void 0!==n?n:"";return{entity:o}}},{key:"properties",get:function(){return{_hass:Object,config:Object,stateObj:Object}}},{key:"styles",get:function(){return r(Ft||(Ft=function(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}(["\n .icon-small {\n width: auto;\n }\n .entity {\n text-align: center;\n cursor: pointer;\n }\n .entity span {\n font-size: 10px;\n color: var(--multiple-entity-row-header-color, var(--secondary-text-color));\n }\n .entities-row {\n flex-direction: row;\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n }\n .entities-row .entity {\n margin-right: 16px;\n }\n .entities-row .entity:last-of-type {\n margin-right: 0;\n }\n .entities-column {\n flex-direction: column;\n display: flex;\n align-items: flex-end;\n justify-content: space-evenly;\n }\n .entities-column .entity div {\n display: inline-block;\n vertical-align: middle;\n }\n"])))}}])}(ut);customElements.define("multiple-entity-row",En),window.customCards=window.customCards||[],window.customCards.push({type:"multiple-entity-row",name:"Multiple Entity Row",description:"Show multiple entity states and attributes on a single entity row"})})(); \ No newline at end of file +(()=>{"use strict";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,n=Symbol(),i=new WeakMap;class r{constructor(t,e,i){if(this._$cssResult$=!0,i!==n)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const n=this.t;if(e&&void 0===t){const e=void 0!==n&&1===n.length;e&&(t=i.get(n)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&i.set(n,t))}return t}toString(){return this.cssText}}const o=(t,...e)=>{const i=1===t.length?t[0]:e.reduce((e,n,i)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[i+1],t[0]);return new r(i,t,n)},a=(n,i)=>{if(e)n.adoptedStyleSheets=i.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of i){const i=document.createElement("style"),r=t.litNonce;void 0!==r&&i.setAttribute("nonce",r),i.textContent=e.cssText,n.appendChild(i)}},s=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const n of t.cssRules)e+=n.cssText;return(t=>new r("string"==typeof t?t:t+"",void 0,n))(e)})(t):t,{is:c,defineProperty:l,getOwnPropertyDescriptor:u,getOwnPropertyNames:f,getOwnPropertySymbols:d,getPrototypeOf:h}=Object,p=globalThis,m=p.trustedTypes,v=m?m.emptyScript:"",y=p.reactiveElementPolyfillSupport,b=(t,e)=>t,_={toAttribute(t,e){switch(e){case Boolean:t=t?v:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let n=t;switch(e){case Boolean:n=null!==t;break;case Number:n=null===t?null:Number(t);break;case Object:case Array:try{n=JSON.parse(t)}catch(t){n=null}}return n}},g=(t,e)=>!c(t,e),w={attribute:!0,type:String,converter:_,reflect:!1,useDefault:!1,hasChanged:g};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;class O extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=w){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const n=Symbol(),i=this.getPropertyDescriptor(t,n,e);void 0!==i&&l(this.prototype,t,i)}}static getPropertyDescriptor(t,e,n){const{get:i,set:r}=u(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:i,set(e){const o=i?.call(this);r?.call(this,e),this.requestUpdate(t,o,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??w}static _$Ei(){if(this.hasOwnProperty(b("elementProperties")))return;const t=h(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(b("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(b("properties"))){const t=this.properties,e=[...f(t),...d(t)];for(const n of e)this.createProperty(n,t[n])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,n]of e)this.elementProperties.set(t,n)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const n=this._$Eu(t,e);void 0!==n&&this._$Eh.set(n,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const n=new Set(t.flat(1/0).reverse());for(const t of n)e.unshift(s(t))}else void 0!==t&&e.push(s(t));return e}static _$Eu(t,e){const n=e.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const n of e.keys())this.hasOwnProperty(n)&&(t.set(n,this[n]),delete this[n]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return a(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,n){this._$AK(t,n)}_$ET(t,e){const n=this.constructor.elementProperties.get(t),i=this.constructor._$Eu(t,n);if(void 0!==i&&!0===n.reflect){const r=(void 0!==n.converter?.toAttribute?n.converter:_).toAttribute(e,n.type);this._$Em=t,null==r?this.removeAttribute(i):this.setAttribute(i,r),this._$Em=null}}_$AK(t,e){const n=this.constructor,i=n._$Eh.get(t);if(void 0!==i&&this._$Em!==i){const t=n.getPropertyOptions(i),r="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:_;this._$Em=i;const o=r.fromAttribute(e,t.type);this[i]=o??this._$Ej?.get(i)??o,this._$Em=null}}requestUpdate(t,e,n,i=!1,r){if(void 0!==t){const o=this.constructor;if(!1===i&&(r=this[t]),n??=o.getPropertyOptions(t),!((n.hasChanged??g)(r,e)||n.useDefault&&n.reflect&&r===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,n))))return;this.C(t,e,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:n,reflect:i,wrapped:r},o){n&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==r||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||n||(e=void 0),this._$AL.set(t,e)),!0===i&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,n]of t){const{wrapped:t}=n,i=this[e];!0!==t||this._$AL.has(e)||void 0===i||this.C(e,void 0,n,i)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}O.elementStyles=[],O.shadowRootOptions={mode:"open"},O[b("elementProperties")]=new Map,O[b("finalized")]=new Map,y?.({ReactiveElement:O}),(p.reactiveElementVersions??=[]).push("2.1.2");const A=globalThis,S=t=>t,$=A.trustedTypes,j=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,x="$lit$",E=`lit$${Math.random().toFixed(9).slice(2)}$`,k="?"+E,C=`<${k}>`,P=document,T=()=>P.createComment(""),M=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,H=t=>I(t)||"function"==typeof t?.[Symbol.iterator],R="[ \t\n\f\r]",D=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,F=/-->/g,N=/>/g,U=RegExp(`>|${R}(?:([^\\s"'>=/]+)(${R}*=${R}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),L=/'/g,V=/"/g,z=/^(?:script|style|textarea|title)$/i,B=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),W=B(1),q=(B(2),B(3),Symbol.for("lit-noChange")),Z=Symbol.for("lit-nothing"),J=new WeakMap,G=P.createTreeWalker(P,129);function K(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==j?j.createHTML(e):e}const Y=(t,e)=>{const n=t.length-1,i=[];let r,o=2===e?"":3===e?"":"",a=D;for(let e=0;e"===c[0]?(a=r??D,l=-1):void 0===c[1]?l=-2:(l=a.lastIndex-c[2].length,s=c[1],a=void 0===c[3]?U:'"'===c[3]?V:L):a===V||a===L?a=U:a===F||a===N?a=D:(a=U,r=void 0);const f=a===U&&t[e+1].startsWith("/>")?" ":"";o+=a===D?n+C:l>=0?(i.push(s),n.slice(0,l)+x+n.slice(l)+E+f):n+E+(-2===l?e:f)}return[K(t,o+(t[n]||"")+(2===e?"":3===e?"":"")),i]};class Q{constructor({strings:t,_$litType$:e},n){let i;this.parts=[];let r=0,o=0;const a=t.length-1,s=this.parts,[c,l]=Y(t,e);if(this.el=Q.createElement(c,n),G.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(i=G.nextNode())&&s.length0){i.textContent=$?$.emptyScript:"";for(let n=0;n2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=Z}_$AI(t,e=this,n,i){const r=this.strings;let o=!1;if(void 0===r)t=X(this,t,e,0),o=!M(t)||t!==this._$AH&&t!==q,o&&(this._$AH=t);else{const i=t;let a,s;for(t=r[0],a=0;a{const i=n?.renderBefore??e;let r=i._$litPart$;if(void 0===r){const t=n?.renderBefore??null;i._$litPart$=r=new et(e.insertBefore(T(),t),t,void 0,n??{})}return r._$AI(t),r})(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return q}}ut._$litElement$=!0,ut.finalized=!0,lt.litElementHydrateSupport?.({LitElement:ut});const ft=lt.litElementPolyfillSupport;ft?.({LitElement:ut}),(lt.litElementVersions??=[]).push("4.2.2");var dt=["unavailable","unknown"],ht="last-changed",pt="last-updated",mt=["relative","total","date","time","datetime"],vt=["entity-id","last-changed","last-updated","last-triggered","position","tilt-position","brightness"],yt=new Set(["primary","accent","red","pink","purple","deep-purple","indigo","blue","light-blue","cyan","teal","green","light-green","lime","yellow","amber","orange","deep-orange","brown","light-grey","grey","dark-grey","blue-grey","black","white","primary-text","secondary-text","disabled"]),bt=function(t){return yt.has(t)?"var(--".concat(t,"-color)"):t},_t=function(t){var e,n=null!==(e=t.color)&&void 0!==e?e:void 0===t.state_color?void 0:t.state_color?"state":"none";return void 0===n?t.icon_color?{stateColor:!1}:{stateColor:!0}:"state"===n?{stateColor:!0}:"none"===n?{stateColor:!1}:{cssColor:bt(n)}},gt=function(t){return t<10?"0".concat(t):t};function wt(t){var e=Math.floor(t/3600),n=Math.floor(t%3600/60),i=Math.floor(t%3600%60);return e>0?"".concat(e,":").concat(gt(n),":").concat(gt(i)):n>0?"".concat(n,":").concat(gt(i)):i>0?""+i:null}function Ot(t){return Ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ot(t)}function At(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function St(t,e,n){return(e=function(t){var e=function(t){if("object"!=Ot(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=Ot(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Ot(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var $t=function(t,e,n){var i=e?function(t){switch(t.number_format){case"comma_decimal":return["en-US","en"];case"decimal_comma":return["de","es","it"];case"space_comma":return["fr","sv","cs"];case"system":return;default:return t.language}}(e):void 0;if(Number.isNaN=Number.isNaN||function t(e){return"number"==typeof e&&t(e)},"none"!==(null==e?void 0:e.number_format)&&!Number.isNaN(Number(t))&&Intl)try{return new Intl.NumberFormat(i,jt(t,n)).format(Number(t))}catch(e){return console.error(e),new Intl.NumberFormat(void 0,jt(t,n)).format(Number(t))}return"string"==typeof t?t:"".concat(function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Math.round(t*Math.pow(10,e))/Math.pow(10,e)}(t,null==n?void 0:n.maximumFractionDigits).toString()).concat("currency"===(null==n?void 0:n.style)?" ".concat(n.currency):"")},jt=function(t,e){var n=function(t){for(var e=1;e-1?t.split(".")[1].length:0;n.minimumFractionDigits=i,n.maximumFractionDigits=i}return n};function xt(t){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xt(t)}var Et=function(t){return"object"===xt(t)&&!Array.isArray(t)&&!!t},kt=function(t,e,n){var i=new Event(e,{bubbles:!0,composed:!0});i.detail=n,t.dispatchEvent(i)},Ct=function(t){return!t||dt.includes(t.state)},Pt=function(t,e,n){if(function(t,e){return e.hide_unavailable&&(Ct(t)||e.attribute&&![ht,pt].includes(e.attribute)&&void 0===t.attributes[e.attribute])}(t,e))return!0;if(void 0===e.hide_if)return!1;if("boolean"==typeof e.hide_if)return e.hide_if;var i;if(Et(e.hide_if)&&(e.hide_if.entity||e.hide_if.attribute)){var r=e.hide_if.entity?null==n?void 0:n.states[e.hide_if.entity]:t;i=e.hide_if.attribute?null==r?void 0:r.attributes[e.hide_if.attribute]:null==r?void 0:r.state}else i=e.attribute?t.attributes[e.attribute]:t.state;var o=[];if(Et(e.hide_if)){if(e.hide_if.below&&ie.hide_if.above)return!0;e.hide_if.value&&(o=o.concat(e.hide_if.value))}else o=o.concat(e.hide_if);return o.some(function(t){return"number"==typeof t?t===+i:t===i})},Tt=["formatEntityName","formatEntityState","formatEntityAttributeValue"];function Mt(t){return Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mt(t)}function It(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function Ht(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,i=Array(e);n1&&a.every(function(t){return Bt.test(t)})){var s=r??0;return!isNaN(parseFloat(s))&&isFinite(s)?function(t,e,n,i){var r,o,a=parseFloat(e),s=Ut(e),c=!1,l=function(t){c||(s=void 0,r=t)},u=function(t){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=Dt(t))){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,a=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return o=t.done,t},e:function(t){a=!0,r=t},f:function(){try{o||null==e.return||e.return()}finally{if(a)throw r}}}}(t);try{for(u.s();!(o=u.n()).done;){var f=o.value,d=Vt.exec(f);if(d&&"precision"===d[1])s=parseInt(d[2],10),r=void 0,c=!0;else if(d)a/={kilo:1e3,mega:1e6,milli:.001}[d[1]],void 0!==d[2]?(s=parseInt(d[2],10),r=void 0,c=!0):l(2);else switch(f){case"brightness":a=Math.round(a/255*100),n="%",l(0);break;case"percent":a*=100,n="%",l(2);break;case"invert":a=-a;break;case"position":a=100-a;break;case"celsius_to_fahrenheit":a=1.8*a+32,l(0);break;case"fahrenheit_to_celsius":a=5*(a-32)/9,l(1)}}}catch(t){u.e(t)}finally{u.f()}return"".concat($t(a,i,void 0!==s?{minimumFractionDigits:s,maximumFractionDigits:s}:void 0!==r?{maximumFractionDigits:r}:void 0)).concat(n?" ".concat(n):"")}(a,s,o,t.locale):"".concat(s).concat(o?" ".concat(o):"")}if(n.format&&!function(t){return Lt.some(function(e){return null==t?void 0:t.startsWith(e)})&&!zt(t)}(n.format)){if(null==r&&(r=Wt.includes(n.format)?"":0),Wt.includes(n.format))return"".concat(function(t,e){switch(t){case"upper":return e.toUpperCase();case"lower":return e.toLowerCase();case"capitalize":return e.charAt(0).toUpperCase()+e.slice(1);case"title":return e.split(/(\s+)/).map(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}).join("")}}(n.format,String(r))).concat(o?" ".concat(o):"");if(isNaN(parseFloat(r))||!isFinite(r));else if("brightness"===n.format)r=Math.round(r/255*100),o="%";else if("percent"===n.format)r=$t(100*r,t.locale,{maximumFractionDigits:2}),o="%";else if("duration"===n.format){var c;r=null!==(c=wt(r))&&void 0!==c?c:"0",o=void 0}else if("duration-m"===n.format){var l;r=null!==(l=wt(r/1e3))&&void 0!==l?l:"0",o=void 0}else if("duration-h"===n.format){var u;r=null!==(u=wt(3600*r))&&void 0!==u?u:"0",o=void 0}else if(zt(n.format)){var f=function(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,r,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(i=o.call(n)).done)&&(s.push(i.value),s.length!==e);c=!0);}catch(t){l=!0,r=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw r}}return s}}(t,e)||Dt(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(zt(n.format),3),d=f[1],h=f[2];if("precision"===d){var p=parseInt(h,10);r=$t(parseFloat(r),t.locale,{minimumFractionDigits:p,maximumFractionDigits:p})}else r=function(t,e,n,i){if(void 0===n)return $t(t/e,i,{maximumFractionDigits:2});var r=parseInt(n,10);return $t(t/e,i,{minimumFractionDigits:r,maximumFractionDigits:r})}(r,{kilo:1e3,mega:1e6,milli:.001}[d],h,t.locale)}else if("invert"===n.format){var m=Ut(r);r=$t(r-2*r,t.locale,void 0!==m?{minimumFractionDigits:m,maximumFractionDigits:m}:void 0)}else if("position"===n.format){var v=Ut(r);r=$t(100-r,t.locale,void 0!==v?{minimumFractionDigits:v,maximumFractionDigits:v}:void 0)}else"celsius_to_fahrenheit"===n.format?r=$t(1.8*r+32,t.locale,{maximumFractionDigits:0}):"fahrenheit_to_celsius"===n.format&&(r=$t(5*(r-32)/9,t.locale,{maximumFractionDigits:1}));return"".concat(r).concat(o?" ".concat(o):"")}var y=Ht(Ht({},e),{},{attributes:Ht(Ht({},e.attributes),{},{unit_of_measurement:o})});if(void 0!==n.unit&&!n.attribute){if(!isNaN(parseFloat(r))&&isFinite(r)){var b,_=null===(b=t.entities)||void 0===b||null===(b=b[e.entity_id])||void 0===b?void 0:b.display_precision,g=$t(r,t.locale,null!=_?{minimumFractionDigits:_,maximumFractionDigits:_}:void 0);return"".concat(g).concat(o?" ".concat(o):"")}return"".concat(t.formatEntityState(e)).concat(o?" ".concat(o):"")}if(n.attribute){if(void 0!==n.unit){var w=null==r?"":isNaN(r)?r:$t(r,t.locale);return"".concat(w).concat(o?" ".concat(o):"")}return Gt(t.formatEntityAttributeValue(y,n.attribute))}return Gt(t.formatEntityState(y))},Yt=function(t){return Et(null==t?void 0:t.styles)?Object.keys(t.styles).map(function(e){return"".concat(e,": ").concat(t.styles[e],";")}).join(""):""};function Qt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=oe(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Xt(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=Array(e);n2&&void 0!==arguments[2]?arguments[2]:"";le(t)&&n.push({template:i+t,entity:e})},r=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";i(t.name,e,n),i(t.icon,e,n),i(t.icon_color,e,n),i(t.color,e,n),i(t.template,e,n),i(fe(t),e,n),ye.forEach(function(r){return be(t[r],function(t){return i(t,e,n)})})},o=t.entity;if(r(t,o,ve(_e(t))),"string"==typeof t.secondary_info)i(t.secondary_info,o,ve(_e(t)));else if(Et(t.secondary_info)){var a,s=t.secondary_info;r(s,null!==(a=s.entity)&&void 0!==a?a:o,ve(_e(t,s)))}return null===(e=t.entities)||void 0===e||e.forEach(function(e){if(Et(e)){var n,i=e;r(i,null!==(n=i.entity)&&void 0!==n?n:o,ve(_e(t,i)))}}),n}(t).map(function(t){return[pe(t.template,t.entity),t]})),this.sync()}},{key:"setHass",value:function(t){var e,n=!(null===(e=this.hass)||void 0===e||!e.connection);this.hass=t,!n&&null!=t&&t.connection&&this.sync()}},{key:"connect",value:function(){this.connected=!0,this.sync()}},{key:"disconnect",value:function(){this.connected=!1,this.sync()}},{key:"sync",value:function(){var t,e,n=Qt(this.unsubs);try{for(n.s();!(e=n.n()).done;){var i=re(e.value,2),r=i[0],o=i[1];this.connected&&this.requests.has(r)||(this.unsubs.delete(r),this.requests.has(r)||(this.results.delete(r),this.errors.delete(r)),o.then(function(t){return null==t?void 0:t()}).catch(function(){}))}}catch(t){n.e(t)}finally{n.f()}if(this.connected&&null!==(t=this.hass)&&void 0!==t&&t.connection){var a,s=Qt(this.requests);try{for(s.s();!(a=s.n()).done;){var c=re(a.value,2),l=c[0],u=c[1];this.unsubs.has(l)||this.unsubs.set(l,this.subscribe(l,u))}}catch(t){s.e(t)}finally{s.f()}}}},{key:"subscribe",value:function(t,e){var n=this;return this.hass.connection.subscribeMessage(function(e){return n.onMessage(t,e)},{type:"render_template",template:e.template,variables:{entity:e.entity},report_errors:!0}).catch(function(t){return console.warn("multiple-entity-row: template subscription failed:",e.template,t),null})}},{key:"onMessage",value:function(t,e){this.unsubs.has(t)&&(void 0!==e.error?(this.errors.get(t)!==e.error&&(this.errors.set(t,e.error),console.warn("multiple-entity-row: template error:",e.error)),this.results.set(t,"")):(this.errors.delete(t),this.results.set(t,e.result)),this.notify(new Map(this.results)))}}])}();class Oe{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,n){this._$Ct=t,this._$AM=e,this._$Ci=n}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}const{I:Ae}=st,Se={},$e=(t=>(...e)=>({_$litDirective$:t,values:e}))(class extends Oe{constructor(){super(...arguments),this.key=Z}render(t,e){return this.key=t,e}update(t,[e,n]){return e!==this.key&&(((t,e=Se)=>{t._$AH=e})(t),this.key=e),n}});var je,xe,Ee,ke,Ce,Pe,Te,Me,Ie,He,Re,De,Fe,Ne,Ue,Le,Ve,ze="__custom__",Be=[{value:"",label:"No format"},{value:"brightness",label:"Brightness (0-255 → %)"},{value:"percent",label:"Percent (value × 100 → x %)"},{value:"duration",label:"Duration (seconds → h:mm:ss)"},{value:"duration-m",label:"Duration (milliseconds)"},{value:"duration-h",label:"Duration (hours)"},{value:"precision0",label:"Precision 0 decimals"},{value:"precision1",label:"Precision 1 decimal"},{value:"precision2",label:"Precision 2 decimals"},{value:"precision3",label:"Precision 3 decimals"},{value:"kilo",label:"Kilo (value / 1,000)"},{value:"mega",label:"Mega (value / 1,000,000)"},{value:"milli",label:"Milli (value × 1,000)"},{value:"invert",label:"Invert (value × -1)"},{value:"position",label:"Position (100 - value)"},{value:"celsius_to_fahrenheit",label:"°C → °F"},{value:"fahrenheit_to_celsius",label:"°F → °C"},{value:"upper",label:"Text: UPPERCASE"},{value:"lower",label:"Text: lowercase"},{value:"capitalize",label:"Text: Capitalize first letter"},{value:"title",label:"Text: Title Case"},{value:"relative",label:"Timestamp: relative"},{value:"total",label:"Timestamp: total"},{value:"date",label:"Timestamp: date"},{value:"time",label:"Timestamp: time"},{value:"datetime",label:"Timestamp: date + time"},{value:ze,label:"Custom…"}],We=new Set(Be.map(function(t){return t.value}).filter(function(t){return t&&t!==ze})),qe=[{name:"entity",required:!0,selector:{entity:{}}},{type:"grid",schema:[{name:"name",selector:{text:{}}},{name:"attribute",selector:{text:{}}}]},{type:"grid",schema:[{name:"unit",selector:{text:{}}},{name:"icon",selector:{icon:{}}}]},{name:"icon_color",selector:{text:{}}},{type:"grid",schema:[{name:"show_state",default:!0,selector:{boolean:{}}},{name:"color",selector:{ui_color:{include_state:!0,include_none:!0}}}]},{type:"grid",schema:[{name:"toggle",selector:{boolean:{}}},{name:"column",selector:{boolean:{}}}]},{type:"grid",schema:[{name:"show_state_first",selector:{boolean:{}}},{name:"hide_unavailable",selector:{boolean:{}}},{name:"wrap",selector:{boolean:{}}}]},{name:"state_header",selector:{text:{}}},{name:"image",selector:{text:{}}},{name:"format",selector:{select:{mode:"dropdown",options:Be}}}],Ze=[{name:"tap_action",selector:{ui_action:{default_action:"more-info"}}},{name:"hold_action",selector:{ui_action:{default_action:"none"}}},{name:"double_tap_action",selector:{ui_action:{default_action:"none"}}}],Je=[{name:"entity",selector:{entity:{}}},{type:"grid",schema:[{name:"name",selector:{text:{}}},{name:"attribute",selector:{text:{}}}]},{type:"grid",schema:[{name:"unit",selector:{text:{}}},{name:"icon",selector:{icon:{}}}]},{name:"icon_color",selector:{text:{}}},{type:"grid",schema:[{name:"color",selector:{ui_color:{include_state:!0,include_none:!0}}},{name:"toggle",selector:{boolean:{}}}]},{name:"hide_unavailable",selector:{boolean:{}}},{name:"format",selector:{select:{mode:"dropdown",options:Be}}}],Ge={entity:"Entity",attribute:"Attribute",name:"Name override (or false to hide)",unit:"Unit (or false to hide)",icon:"Icon",icon_color:"Icon color (CSS value, e.g. red, #ff0000, var(--my-color))",image:"Image URL",format:"Format",show_state:"Show main entity state",show_state_first:"State before entities",state_header:"State header label",color:"Icon color",state_color:"State color",column:"Column layout",wrap:"Wrap instead of overflowing",toggle:"Show as toggle",hide_unavailable:"Hide if unavailable",tap_action:"Tap action",hold_action:"Hold action",double_tap_action:"Double-tap action"};function Ke(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}function Ye(t){return function(t){if(Array.isArray(t))return un(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||ln(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qe(t,e){for(var n=0;n=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function cn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,r,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(i=o.call(n)).done)&&(s.push(i.value),s.length!==e);c=!0);}catch(t){l=!0,r=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw r}}return s}}(t,e)||ln(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ln(t,e){if(t){if("string"==typeof t)return un(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?un(t,e):void 0}}function un(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);ni.length&&(t._selectedTab=i.length),t._keys.clear(),t._updateConfig({entities:i.length?i:void 0})}}),on(t,"_moveAdditional",function(e,n){var i;if(t._config){var r=Ye(null!==(i=t._config.entities)&&void 0!==i?i:[]),o=e+n;if(!(o<0||o>=r.length)){var a=[r[o],r[e]];r[e]=a[0],r[o]=a[1],t._selectedTab=o+1,t._keys.clear(),t._updateConfig({entities:r})}}}),on(t,"_copyAdditional",function(e){var n,i=null===(n=t._config)||void 0===n||null===(n=n.entities)||void 0===n?void 0:n[e];null!=i&&t._writeClipboard("string"==typeof i?{entity:i}:rn({},i))}),on(t,"_cutAdditional",function(e){t._copyAdditional(e),t._deleteAdditional(e)}),on(t,"_copyMainAsTemplate",function(){if(t._config){var e,n={},i=sn($n);try{for(i.s();!(e=i.n()).done;){var r=e.value,o=t._config[r];void 0!==o&&(n[r]=o)}}catch(t){i.e(t)}finally{i.f()}t._writeClipboard(n)}}),on(t,"_pasteEntity",function(){var e;if(t._config){var n=t._readClipboard();if(n){var i=[].concat(Ye(null!==(e=t._config.entities)&&void 0!==e?e:[]),[n]);t._selectedTab=i.length,t._keys.clear(),t._updateConfig({entities:i})}}}),on(t,"_secondaryModeChanged",function(e){if(t._config){var n=e.detail.value.mode;if(n!==t._secondaryInfoMode()){var i;switch(n){case"none":i=void 0;break;case"text":i="";break;case"generic":i="last-changed";break;case"entity":i={entity:t._config.entity}}t._updateConfig({secondary_info:i})}}}),on(t,"_secondaryTextChanged",function(e){t._updateConfig({secondary_info:e.detail.value.text})}),on(t,"_secondaryTokenChanged",function(e){t._updateConfig({secondary_info:e.detail.value.token})}),on(t,"_secondaryEntityChanged",function(e){var n,i=Et(null===(n=t._config)||void 0===n?void 0:n.secondary_info)?t._config.secondary_info.format:void 0;t._updateConfig({secondary_info:t._formatFromForm("secondary",An(e.detail.value),i)})}),t._selectedTab=0,t._entitiesExpanded=!0,t._stateIconRowsMain=[],t._stateIconRowsAdditional=new Map,t._customFormatScopes=new Set,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&en(t,e)}(e,t),function(t,e,n){return e&&Qe(t.prototype,e),n&&Qe(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}(e,[{key:"setConfig",value:function(t){var e,n,i,r=this;if(ue(t))throw new Error("This row uses templates - edit it in the code (YAML) editor.");this._config=t;var o,a=null!==(e=null===(n=t.entities)||void 0===n?void 0:n.length)&&void 0!==e?e:0;this._selectedTab>a&&(this._selectedTab=a),this._clipboardEntity=this._readClipboard(),this._stateIconRowsMatch(this._stateIconRowsMain,t.state_icon)||(this._stateIconRowsMain=Object.entries(null!==(o=t.state_icon)&&void 0!==o?o:{}));var s=new Map;null===(i=t.entities)||void 0===i||i.forEach(function(t,e){var n=Et(t)?t.state_icon:void 0,i=r._stateIconRowsAdditional.get(e);i&&r._stateIconRowsMatch(i,n)?s.set(e,i):n&&s.set(e,Object.entries(n))}),this._stateIconRowsAdditional=s}},{key:"_stateIconRowsMatch",value:function(t,e){var n,i={},r=sn(t);try{for(r.s();!(n=r.n()).done;){var o=cn(n.value,2),a=o[0],s=o[1];a.trim()&&s.trim()&&(i[a.trim()]=s.trim())}}catch(t){r.e(t)}finally{r.f()}var c=null!=e?e:{},l=Object.keys(i);return l.length===Object.keys(c).length&&l.every(function(t){return i[t]===c[t]})}},{key:"_readClipboard",value:function(){try{var t=sessionStorage.getItem(Sn);if(!t)return;var e=JSON.parse(t);if(e&&"object"===fn(e))return e}catch(t){}}},{key:"_writeClipboard",value:function(t){try{sessionStorage.setItem(Sn,JSON.stringify(t)),this._clipboardEntity=t}catch(t){}}},{key:"_hasNativeTabs",get:function(){return!!customElements.get("ha-tab-group")&&!!customElements.get("ha-tab-group-tab")}},{key:"render",value:function(){return this.hass&&this._config?W(je||(je=Ke(["\n \n ",'\n \n\n \n "])),"Entities",this._entitiesExpanded,this._onEntitiesExpandedChanged,this._renderEntitiesPanel(),"4.10.0","2026-08-09T15:16:44.393Z"):Z}},{key:"_isCustomFormat",value:function(t,e){return this._customFormatScopes.has(t)||!!e&&!We.has(e)}},{key:"_setCustomFormatScope",value:function(t,e){if(e!==this._customFormatScopes.has(t)){var n=new Set(this._customFormatScopes);e?n.add(t):n.delete(t),this._customFormatScopes=n}}},{key:"_formatToForm",value:function(t,e){return this._isCustomFormat(t,e.format)?rn(rn({},e),{},{format:ze}):e}},{key:"_formatFromForm",value:function(t,e,n){if(e.format===ze){this._setCustomFormatScope(t,!0);var i=rn({},e);return void 0!==n?i.format=n:delete i.format,i}return this._setCustomFormatScope(t,!1),e}},{key:"_renderCustomFormatField",value:function(t,e,n){return this._isCustomFormat(t,e)?W(xe||(xe=Ke(["\n \n "])),this.hass,{custom_format:null!=e?e:""},[{name:"custom_format",selector:{text:{}}}],function(){return"Custom format (e.g. invert, precision3)"},function(t){var e,i=(null!==(e=t.detail.value.custom_format)&&void 0!==e?e:"").trim();n(i||void 0)}):Z}},{key:"_keyFor",value:function(t){return this._keys.has(t)||this._keys.set(t,"".concat(t,"-").concat(Math.random().toString(36).slice(2,10))),this._keys.get(t)}},{key:"_renderEntitiesPanel",value:function(){var t,e,n=this,i=null!==(t=null===(e=this._config)||void 0===e?void 0:e.entities)&&void 0!==t?t:[],r=Math.min(this._selectedTab,i.length);return W(Ee||(Ee=Ke(['\n
\n
\n ','\n \n
\n\n
\n ',"\n
\n
\n "])),this._hasNativeTabs?W(ke||(ke=Ke(['\n \n \n \n \n \n
\n
\n \n \n ','\n \n ','\n \n ',"\n \n "])),"Copy main as template",hn,this._copyMainAsTemplate,"Paste as new entity",pn,!this._clipboardEntity,this._pasteEntity,this.hass,this._mainFormData(),qe,this._computeLabel,this._mainValueChanged,this._renderCustomFormatField("main",null===(t=this._config)||void 0===t?void 0:t.format,function(t){return n._updateConfig({format:t})}),this.hass,this._mainFormData(),Ze,this._computeLabel,this._mainValueChanged,this._renderSecondaryInfoBlock(),this._renderStateIconRows("main"),this._renderStylesBlock(null===(e=this._config)||void 0===e?void 0:e.styles,function(t){return n._mainStylesChanged(t)}))}},{key:"_renderStylesBlock",value:function(t,e){return W(Ie||(Ie=Ke(['\n \n ','\n \n \n \n \n
\n
\n \n \n ','\n \n ',"\n \n "])),"Move before","M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",0===t,function(){return i._moveAdditional(t,-1)},"Move after","M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",t===a,function(){return i._moveAdditional(t,1)},"Copy entity",hn,function(){return i._copyAdditional(t)},"Cut entity","M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z",function(){return i._cutAdditional(t)},"Paste from clipboard",pn,!this._clipboardEntity,this._pasteEntity,"Delete entity",dn,function(){return i._deleteAdditional(t)},this.hass,this._formatToForm("sub-".concat(t),On(o)),Je,this._computeLabel,function(e){return i._additionalValueChanged(e,t)},this._renderCustomFormatField("sub-".concat(t),o.format,function(e){return i._setAdditionalFormat(t,e)}),this.hass,this._formatToForm("sub-".concat(t),On(o)),Ze,this._computeLabel,function(e){return i._additionalValueChanged(e,t)},this._renderStateIconRows(t),this._renderStylesBlock(o.styles,function(e){return i._additionalStylesChanged(e,t)}))}},{key:"_mainFormData",value:function(){return this._formatToForm("main",On(rn({show_state:!0},this._config)))}},{key:"_setAdditionalFormat",value:function(t,e){var n;if(this._config){var i=Ye(null!==(n=this._config.entities)&&void 0!==n?n:[]),r=i[t],o="string"==typeof r?{entity:r}:rn({},r);e?o.format=e:delete o.format,i[t]=o,this._updateConfig({entities:i})}}},{key:"_secondaryInfoMode",value:function(){var t,e=null===(t=this._config)||void 0===t?void 0:t.secondary_info;return null==e?"none":"object"===fn(e)?"entity":vt.includes(e)?"generic":"text"}},{key:"_renderSecondaryInfoBlock",value:function(){var t,e=this,n=this._secondaryInfoMode(),i=null===(t=this._config)||void 0===t?void 0:t.secondary_info;return W(Fe||(Fe=Ke(["\n
\n \n ","\n ","\n ","\n
\n "])),this.hass,{mode:n},mn,function(){return"Mode"},this._secondaryModeChanged,"text"===n?W(Ne||(Ne=Ke(['
\n \n \n \n \n ',"\n
\n "])),qt(i.icon_color),this._hass,o,this.renderSecondaryInfo(),a,!1,[this.config.column?"entities-column":"entities-row",!this.config.column&&this.config.wrap?"wrap":"",null!==(t=bi[this.config.align])&&void 0!==t?t:"",a?"no-name":""].filter(Boolean).join(" "),this.config.show_state_first?W(Ln||(Ln=oi(["","",""])),this.renderMainEntity(),this.entities.map(function(t,n){return e.renderEntity(t.stateObj,t,n)})):W(Vn||(Vn=oi(["","",""])),this.entities.map(function(t,n){return e.renderEntity(t.stateObj,t,n)}),this.renderMainEntity()))}},{key:"renderSecondaryInfo",value:function(){var t=this.config.secondary_info;if(!t||function(t){return"string"==typeof t&&vt.includes(t)}(t))return null;if("string"==typeof t)return W(zn||(zn=oi(["",""])),le(t)?ge(this._templateResults,t,this.config.entity,_e(this.config)):t);var e=this._resolved(t);if(Pt(this.info,e,this._hass))return null;var n=Jt(this.info,e);return W(Bn||(Bn=oi([""," ",""])),n,this.renderValue(this.info,e))}},{key:"renderMainEntity",value:function(){if(!1===this.config.show_state)return null;var t=this._resolved(this.config);if(Pt(this.stateObj,t,this._hass))return this.config.default?W(Wn||(Wn=oi(['
\n ',"\n
","
\n
"])),Yt(this.config),this.renderMainHeader(),this.config.default):null;var e=this.getGestureHandlers("main",this.config.entity,this.config);return W(qn||(qn=oi(['\n ',"\n
","
\n "])),Yt(this.config),null==e?void 0:e.onDown,null==e?void 0:e.onUp,null==e?void 0:e.onCancel,vi,vi,vi,vi,vi,vi,this.renderMainHeader(),this.renderValue(this.stateObj,t))}},{key:"renderEntity",value:function(t,e,n){var i,r,o;if(e=this._resolved(e),!t||Pt(t,e,this._hass))return e.default?W(Zn||(Zn=oi(['
\n ',"\n
","
\n
"])),Yt(e),null!==(r=yi(t?Jt(t,e):e.name))&&void 0!==r?r:this.headerPlaceholder(),e.default):t||e.hide_unavailable?null:W(Jn||(Jn=oi(['\n ','\n
\n '])),Yt(e),this._hass.localize("ui.panel.lovelace.warning.entity_not_found","entity",null!==(o=e.entity)&&void 0!==o?o:""),yi(e.name));var a=this.getGestureHandlers("sub-".concat(n),t.entity_id,e);return W(Gn||(Gn=oi(['\n ',"\n
\n ","\n
\n "])),Yt(e),null==a?void 0:a.onDown,null==a?void 0:a.onUp,null==a?void 0:a.onCancel,vi,vi,vi,vi,vi,vi,null!==(i=yi(Jt(t,e)))&&void 0!==i?i:function(t){return!0===t.toggle||!!t.icon||Et(t.state_icon)}(e)?null:this.headerPlaceholder(),e.icon||Et(e.state_icon)?this.renderIcon(t,e):this.renderValue(t,e))}},{key:"renderMainHeader",value:function(){var t,e=null!==(t=yi(this.config.state_header))&&void 0!==t?t:!0===this.config.toggle?null:this.headerPlaceholder();return e?W(Kn||(Kn=oi(["",""])),e):null}},{key:"headerPlaceholder",value:function(){return null!=yi(this.config.state_header)||this.entities.some(function(t){return!1!==(e=t).name&&null!==yi(e.name)&&!(!e.name&&!e.entity);var e})?" ":null}},{key:"renderValue",value:function(t,e){var n;if(!0===e.toggle)return this.renderToggle(t,e);if(void 0!==e.template){var i=le(e.template)?"":e.template;return"".concat(i).concat(e.unit?" ".concat(e.unit):"")}if(!e.attribute&&null!==(n=t.entity_id)&&void 0!==n&&n.startsWith("timer."))return W(Yn||(Yn=oi([""])),this._hass,t);var r=e.attribute&&[ht,pt].includes(e.attribute);if(e.format&&mt.includes(e.format)){var o,a=r?t[e.attribute.replace("-","_")]:e.attribute?null!==(o=t.attributes[e.attribute])&&void 0!==o?o:t[e.attribute]:t.state,s=new Date(a);return s instanceof Date&&!isNaN(s.getTime())?W(Qn||(Qn=oi([""])),this._hass,s,e.format):a}return r?W(Xn||(Xn=oi([""])),this._hass,t[e.attribute.replace("-","_")]):Kt(this._hass,t,e)}},{key:"renderToggle",value:function(t,e){var n,i=this,r=null===(n=e.tap_action)||void 0===n?void 0:n.confirmation,o=r?{handleEvent:function(n){var o,a,s;n.stopPropagation(),n.preventDefault();var c=Et(r)&&(null===(o=r.exemptions)||void 0===o?void 0:o.some(function(t){var e;return t.user===(null===(e=i._hass.user)||void 0===e?void 0:e.id)})),l=Et(r)&&r.text,u=le(l)?ge(i._templateResults,l,null!==(a=e.entity)&&void 0!==a?a:i.config.entity,_e(i.config,e)):l||"Are you sure you want to toggle ".concat(null!==(s=Jt(t,e))&&void 0!==s?s:t.entity_id,"?");(c||confirm(u))&&i._hass.callService("homeassistant","toggle",{entity_id:t.entity_id})},capture:!0}:void 0;return W(ti||(ti=oi(["\n '])),vi,vi,vi,o,t,this._hass)}},{key:"renderIcon",value:function(t,e){var n,i,r=null!==(n=Zt(t,e))&&void 0!==n?n:!0===e.icon?t.attributes.icon||null:e.icon,o="cssColor"in(i=_t(e))?{color:i.cssColor}:{stateColor:i.stateColor},a=o.stateColor,s=o.color,c=!(r||!t.attributes.entity_picture&&!t.attributes.entity_picture_local);return W(ei||(ei=oi([''])),c?" has-picture":"",qt(e.icon_color),this._hass,t,r,a,s)}},{key:"renderWarning",value:function(){return W(ni||(ni=oi(["\n ","\n "])),this._hass.localize("ui.panel.lovelace.warning.entity_not_found","entity",this.config.entity))}},{key:"getGestureHandlers",value:function(t,e,n){var i,r,o,a,s,c,l,u=this;return this._actionHandlers.has(t)||this._actionHandlers.set(t,(i=function(t,i){return u.dispatchAction(e,n,t,i)},r={hasHold:!!n.hold_action,hasDoubleTap:!!n.double_tap_action},s=r.hasHold,c=r.hasDoubleTap,l=!1,{onDown:function(){l=!1,s&&(o=setTimeout(function(){l=!0},500))},onUp:function(){if(clearTimeout(o),l)return l=!1,void i(!0,!1);c?a?(clearTimeout(a),a=void 0,i(!1,!0)):a=setTimeout(function(){a=void 0,i(!1,!1)},250):i(!1,!1)},onCancel:function(){clearTimeout(o)}})),this._actionHandlers.get(t)}},{key:"dispatchAction",value:function(t,e,n,i){var r,o,a=i?e.double_tap_action:n?e.hold_action:null!==(r=e.tap_action)&&void 0!==r?r:{action:"more-info"};if(a&&"none"!==a.action){var s,c,l,u,f,d,h=(s=a,c=this._templateResults,l=null!==(o=e.entity)&&void 0!==o?o:this.config.entity,u=_e(this.config,e),f=ve(u),d=function(t){if(le(t)){var e=c.get(pe(f+t,l));return void 0===e?"":e}return Array.isArray(t)?t.map(d):Et(t)?Object.fromEntries(Object.entries(t).map(function(t){var e=re(t,2),n=e[0],i=e[1];return[n,d(i)]})):t},d(s)),p=i?"double_tap":n?"hold":"tap";kt(this,"hass-action",{config:ci({entity:h.entity||t},"".concat(p,"_action"),h),action:p})}}}],[{key:"getConfigElement",value:function(){return document.createElement("multiple-entity-row-editor")}},{key:"getStubConfig",value:function(t,e){var n,i,r=null!==(n=null!==(i=null==e?void 0:e.find(function(t){return t.startsWith("sensor.")}))&&void 0!==i?i:null==e?void 0:e[0])&&void 0!==n?n:"";return{entity:r}}},{key:"properties",get:function(){return{_hass:Object,config:Object,stateObj:Object,_templateResults:Object}}},{key:"styles",get:function(){return o(ce||(ce=function(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}(["\n /* state-badge is a fixed 40px box, which leaves an odd gap under a headered icon - let it\n shrink to the icon's natural size instead (see #425). */\n .icon-small {\n width: auto;\n height: auto;\n }\n /* ...except when it is showing a picture: state-badge then hides the icon and paints the\n image as a background, so the host has no in-flow content and would collapse to nothing.\n The class is set in renderIcon rather than reusing state-badge's own has-image. */\n .icon-small.has-picture {\n width: 40px;\n height: 40px;\n }\n .entity {\n text-align: center;\n cursor: pointer;\n }\n /* Marker for an entity id that resolves to nothing (see #364). */\n .entity .missing {\n color: var(--error-color, #db4437);\n }\n .entity span {\n font-size: 10px;\n color: var(--multiple-entity-row-header-color, var(--secondary-text-color));\n }\n .entities-row {\n flex-direction: row;\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n }\n /* HA's name box is what pushes the entities to the right: it grows at flex: 1 1 30%. Hiding\n it removes that push too, leaving them against the icon, so take over the job here - the\n point of hiding the name is more room, not a different alignment (see #341, #365). */\n .entities-row.no-name,\n .entities-column.no-name {\n margin-left: auto;\n }\n /* The 'styles' option reaches one entity's div, which is a flex item - so vertical-align\n there does nothing and alignment has to be set on the container instead (see #261). */\n .entities-row.align-top,\n .entities-column.align-top {\n align-items: flex-start;\n }\n .entities-row.align-bottom,\n .entities-column.align-bottom {\n align-items: flex-end;\n }\n .entities-row .entity {\n margin-right: 16px;\n }\n .entities-row .entity:last-of-type {\n margin-right: 0;\n }\n /* Opt-in, because it trades a taller row for not overflowing: nothing between HA's .row and\n our entities can shrink, so a row needing more width than the card has just spills past\n the edge (worst on narrow phone screens - see #411). Wrapping reflows instead. */\n .entities-row.wrap {\n flex-wrap: wrap;\n justify-content: flex-end;\n row-gap: 4px;\n }\n .entities-column {\n flex-direction: column;\n display: flex;\n align-items: flex-end;\n justify-content: space-evenly;\n }\n .entities-column .entity div {\n display: inline-block;\n vertical-align: middle;\n }\n"])))}}])}(ut);customElements.define("multiple-entity-row",_i),window.customCards=window.customCards||[],window.customCards.push({type:"multiple-entity-row",name:"Multiple Entity Row",description:"Show multiple entity states and attributes on a single entity row"})})(); \ No newline at end of file diff --git a/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js.gz b/hass/settings/www/community/lovelace-multiple-entity-row/multiple-entity-row.js.gz index 76682c2b8411bdcf1f68d40691c36220303cff47..157b073ca1a737a6beadb64408ab0ffa35678a74 100644 GIT binary patch literal 24201 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 literal 19518 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 hi#bqKe~_bXUI~<