Панель GUISTAR ESP32-S3 можно приобрести тут: https://alii.pub/6vz2z4?erid=2SDnjdGJPya
Как резерв еще тут: https://alii.pub/6vz2zp?erid=2SDnjdYcG5N
Панели по первым двум ссылка разобрали в первый же день выхода видео. Оставлю еще пару магазинов:
Можно найти еще тут: https://alii.pub/6wclk1?erid=2SDnjcEYNaC
И тут: https://alii.pub/6wclkm?erid=2SDnjcPSJGG
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Так-же давайте сразу оставлю тут видео с демонстрацией работы панели. Первая половина видео какраз показывает функции работы:
Давайте сначала разберемся, что это за дисплей такой.
Вообще конечно, это изначально задуманное устройство под Панель умного дома. Почему я так решил? Все просто. Помимо хорошего ips экрана с разрешением 480×480. И ёмкостного сенсора на нем. Имеем контроллер ESP32 S3.
Помимо этого Все это дело сделано в форм факторе NSPanel, то есть все это сделано для встраивания в подрозетник, хоть и квадратный. Имеет еще на борту 3 реле для управления нагрузкой – тут подразумевается управление светом как обычный выключатель. Ну и питается от 220 вольт сразу, не надо городить никакие дополнительные блоки питания.
Помимо этого, есть порт Type-c на корпусе, для программирования устройства и так-же питается он от него не плохо. Еще есть слот для microsd карточки.
Казалось бы это все? но нет. Есть еще скрытые функции. Если открутить основную часть от силовой, то там еще есть разъёмы для подключения аккумулятора. И есть контакты для подключения динамиков.
Просто отвал башки… и все это за смешные 2500 рублей на момент написания статьи. NSPanel которая стоит порядка 5000 и выше, нервно курит в сторонке.
Для Дисплеев с ESP32 S3 разных размеров и Вариаций, существует проект под названием Openhasp https://openhasp.haswitchplate.com/ который позволяет такие дисплеи “дружить” с Home Assistant и управлять умным домом.
Корпус для установки панели на стол:
Еще есть корпус для 3д печати, чтоб данную панель можно поставить на стол. Файл в stl формате можно скачать отсюда: https://disk.yandex.ru/d/PDFhkkO13s1qRA
Для более хорошей печати, лучше отключить автоматические поддержки и нарисовать их в ручную как показано ниже.
Еще видел как Евгений взял готовую такую подстваку под NSPanel https://alii.pub/6wa4cz?erid=2SDnjco7kFS чуть ее разобрал, кое где что-то отломал, немного поработал напильником и панель поместилась и в эту подставку. По этому у кого нет 3д принтера, то можно брать на заметку.
Собственно далее речь пойдёт о том, как перепрошить этот дисплей и подружить его с Home Assitant.
Для начала нужно скачать архив с проектом. Спасибо Евгению Краснову за этот проект. Сделал его он, я только поменял под себя чуток. Архив можно скачать отсюда: https://disk.yandex.ru/d/E37AqN7wps-I0w либо отсюда, если Евгений не против, то с его диска: https://disk.yandex.ru/d/2gQBsOKATcoSVA
Установка OpenHasp:
В архиве из Яндекс диска есть программа flash_download_tool, ей нужно загрузить прошивку esp32-s3-4848S040_full_16MB_v0.7.0-rc9.bin в панель.
Для этого подключаемся по usb к компьютеру и запускаем программу flash_download_tool. В ней Выбираем так как показано на скрине и собственно загружаем прошивку:
После того как прошьете панель, перезагружаем ее. Создастся точка доступа Wi-fi с названием openhasp-что-то там. Подключаемся к ней. В браузере вводим ip адрес 192.168.4.1 . Далее идем в Настройки -> wi-fi и подключаемся к своей wi-fi сети.
Как только подключитесь к Wi-fi сети, перегрузите устройство и на экране отобразится его новый ip адрес по которому можно подключиться для дальнейшей настройки.
Настройка Openhasp на самой панели:
Теперь давайте определим наши 3 встроенных реле. Не пропадать же добру, может под управление нагрузкой пригодится.
Для этого идем Configuration -> GPIO Settings
Там настроить выходы реле (Add New Pin Output)
Где первое реле = 40 pin, Второе = 2 pin, Третье = 1 pin
Настроить MQTT Settings в Config->MQTT Settings
Здесь в настройках MQTT важный момент – это Hostname. Он уникальный, если его указываем, то и потом весь конфиг строится на этом имени. ПО этому лучше его не менять и указать, тот который указан “plate04”, Вам так будет проще. А когда уже разберетесь как работает панель, сможете отредактировать под себя.
Так-же тут указываем ip адрес в поле “Broker”. Этот ip адрес, самого сервера Home Assitant с установленным аддоном Mosquitto Broker (он устанавливается, когда Zigbee2mqtt устанавливаете). Ну и так-же порт по умолчанию 1883 и учетные данные от mosquitto broker – которые вы указывали при установке. В моих примерах я всегда указываю mqtt/mqtt.
Далее переходим к загрузке файлов в файловую систему ESP32.
Для этого в меню File editor загрузить картинки и файлы команд с папки “Загрузить в FILE EDITOR” из скаченного архива ранее. Загружать файлы нужно нажав кнопку (upload)
Далее открыть в File Editor файл {}pages.jsonl и заменить весь код на содержимое файла “pages_480x480.jsonl” из архива скаченного ранее. Должен получиться код из примерно из 169 строчек, если не чего после написания статьи не добавляли и не удаляли.
В этом коде в файле {}pages.jsonl описаны все кнопки, все картинки для отображения на рабочем столе панели. Тут указываются координаты кнопки, иконка, подпись. Давайте для примера разберем одну строчку:
{“page”:1,”id”:11,”obj”:”obj”,”x”:15,”y”:90,”w”:65,”h”:65,”radius”:35,”bg_color”:”#FFF”,”click”:true, “border_color”: “#FFF”, “bg_opa”: 0, “value_str”:”23°C”, “value_color”:”#FFF”}
Это строчка показаний температуры на первой странице.
“page”:1,”id”:11,”obj”:”obj” – тут указывается, что объект на странице под номером 1. id имеет 11 – это нужно для того, чтоб понимать к какому объекту обращаться.
“x”:15,”y”:90,”w”:65,”h”:65,”radius”:35 – x и y – это координаты того, где находится данный кружок. Координаты задаются попиксельно. w-h это размер объекта. radius – это тип объекта, в данном случае это круг.
“bg_color”:”#FFF”,”click”:true, “border_color”: “#FFF”, “bg_opa”: 0, – тут указывается цвет данного круга. Разрешено кликать по нему.
“value_str”:”23°C”, “value_color”:”#FFF” – тут указан текст, который будет внутри круга. В данном случае это “23°C” и каким цветом будет отображаться. В данном случае “#FFF” – это белый цвет.
Еще бы хотелось отметить тут места где указаны иконки. Вот например строчка описывающая кнопку светильника на второй странице:
{“page”:2,”id”:62,”obj”:”label”,”x”:15,”y”:235,”h”:45,”w”:150,”text”:”\uE769″, “text_color”:”#fb9b06″,”text_font”: 32, “click”:false}
Иконка здесь описана в виде: “text”:”\uE769″
Коды иконок для себя можно найти вот на этом сайте:https://openhasp.haswitchplate.com/0.6/design/fonts/#built-in-icons и редактировать иконки под свои объекты.
Настройка Openhasp в Home Assistant.
Первым делом нам в Home Assistant нужно установить аддон openHASP-custom-component. Его можно установить из HACS. Но и сам HACS не установлен по умолчанию в Home Assistant. По этому для начала установите HACS. Как это сделать можно посмотреть тут:
Установка HACS в Home Assistant core версии 2022.10.1 и выше.
Далее установить в интеграции HACS -> openHASP-custom-component. Но обратите внимание, когда будете устанавливать, нужно выбрать специальную версию аддона. А именно версию 0.7.0
После установки интеграции, она появится в Home Assistant в Настройки->Интеграции и там нужно нажать кнопку “Настроить”
В OpenHASP MQTT base topic* прописать “hasp/plate04” – где plate04 помните это hostname панели который мы указывали выше.
А в Name of the plate* укажем тоже hostname “plate04”
После этого нажимаем кнопку “Настроить” и у нас интеграция openHASP настроится.
Там сразу появится управление панелью:
Где Light 1 , Light 2 и Light 40 – это встроенные реле в панели, которые мы настраивали и собственно теперь из Home Assistant ими можем управлять.
Backlight – это подсветка дисплея. Которой так же можем управлять из Home Assistant.
В Настройках тут можем перелистывать странички и перезагрузить устройство. А перезагружать придётся частенько. Это надо делать каждый раз, когда Вы изменяете конфигурацию.
Следующим шагом, давайте создадим файл в файловой системе Home Assistant. Он нужен для того, чтоб настроить взаимодействие объектов, служб, сценариев умного дома Home Assistant с панелью openHASP.
Ну а точнее мы его не создадим, а загрузим. В общем нужно зайти в File Editor, там нажать кнопку Upload File и загрузить файл из архива под названием openhasp_homekit.yaml и нужно его положить в ту же папку, где у Вас находится файл Configuration.yaml
а в сам файл configuration.yaml добавить:
homeassistant:
packages:
openhasp_homekit: !include openhasp_homekit.yaml
Далее давайте расскажу немного про код файла openhasp_homekit.yaml чтоб, было понятно, что там изменить, чтоб управлять именно Вашим устройством.
# Helpers used in popups
input_number:
plate04_timer_minute: # Требуется для всплывающего окна таймера
name: "plate04_timer_minute"
initial: 0
min: 0
max: 59
step: 1
plate04_timer_hour:
name: "plate04_timer_hour"
initial: 0
min: 0
max: 12
step: 1
Тут задаются настройки для таймера, который можно задавать на объекты вентилятор и кондиционер. Собственно тут задаётся число минут и число часов в таймере. Часов максимальное количество 12. Минут 59.
openhasp:
plate04:
objects:
# Все страницы
- obj: "p0b1" # верх: время
properties:
"text": '{{ as_timestamp(now())|timestamp_custom("%H:%M") }}'
- obj: "p0b10" # низ: первая страница
properties:
"text_color": '{{ "#ff9e00" if is_state("number.plate04_page_number", "1") else "#FFF" }}'
- obj: "p0b11" # низ: вторая страница
properties:
"text_color": '{{ "#ff9e00" if is_state("number.plate04_page_number", "2") else "#FFF" }}'
- obj: "p0b12" # низ: птретья страница
properties:
"text_color": '{{ "#ff9e00" if is_state("number.plate04_page_number", "3") else "#FFF" }}'
- obj: "p0b13" # низ: четвертая страница
properties:
"text_color": '{{ "#ff9e00" if is_state("number.plate04_page_number", "4") else "#FFF" }}'
В этом блоке кода описываются объекты которые поверх всех страниц. А именно объект времени и 4 кнопки внизу. Причем, из Home Assistant к объекту запрос делается следующим образом: p0b13
– где p0 – это page 0 ну или страница 0 далее b13 – это равносильно id 13 из конфига панели.
Ну а #ff9e00
– это цвет в 16тиричном формате
И вот собственно страницы 0 на панели не существует. Она как-бы подразумевает тот факт, что она поверх всех страниц.
Далее код первой страницы:
# Страница 1
- obj: "p1b11" # Tемпеоаьуоа
properties:
"value_str": '{{ states("sensor.ble_temperature_a4c138d94ccb") | round(1) }}°C' # тут указывается ваш сенсор температуры из Home Assistant. У меня это sensor.ble_temperature_a4c138d94ccb
event:
"up": # здесь указывается, что если нажать на кружок температуры, у Вас откроется управление термостатом.
- service: script.plate04_thermostat_popup
data:
entity_name: "Термостат"
entity_id: "climate.bht_002_thermostat_c" # Тут указывается объект термостат из Home Assistant. У меня это climate.bht_002_thermostat_c
entity_icon: "\uE156"
- obj: "p1b21" # Влажность
properties:
"value_str": '{{ states("sensor.ble_humidity_a4c138d94ccb") | round(0) }}%' # тут указывается объект влажности. У меня это sensor.ble_humidity_a4c138d94ccb
- obj: "p1b31" # Светильники (icon state)
properties:
"value_color": "{{ '#ff9e00' if (states.light|selectattr('state','equalto','on') | list | count() > 0) else '#FFF' }}"
"bg_opa": "{{ '255' if (states.light|selectattr('state','equalto','on') | list | count() > 0) else '0' }}"
- obj: "p1b32" # Lights (count on)# тут подсчитывается колличество включенных светильников во всем доме Home Assistant.
properties:
"text": "{{ states.light|selectattr('state','equalto','on') | list | count() }} on"
- obj: "p1b41" # Вентилятры (icon state)
properties:
"value_color": "{{ '#4caf50' if (states.switch|selectattr('state','equalto','on') | list | count() > 0) else '#FFF' }}"
"bg_opa": "{{ '255' if (states.switch|selectattr('state','equalto','on') | list | count() > 0) else '0' }}"
- obj: "p1b42" # Fans (count on)# тут подсчитывается колличество включенных объектов switch во всем доме Home Assistant
properties:
"text": "{{ states.switch|selectattr('state','equalto','on') | list | count() }} on"
#Сцены. Тут перечислены сцены которыми можно управлять. Для управления сценой достаточно вставить ее entity_id
- obj: "p1b61" # Rock Playlist
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.rock_playlist #scene.rock_playlist меняете на свое. Например у меня была только одна сцена scene.tv_vkl ее я вставил в последнюю кнопку
- obj: "p1b71" # Downstairs Bright
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.downstairs_bright
- obj: "p1b81" # Morning Routine
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.morning_routine
- obj: "p1b91" # Bedtime Routine
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.bedtime_routine
- obj: "p1b101" # Meditation
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.meditation
- obj: "p1b111" # Movie Time
event:
"down":
- service: scene.turn_on
target:
entity_id: scene.tv_vkl
Код первой страницы решил описать в комментариях после знака # в самом коде.
# Страница 2
- obj: "p2b11" # Температура
properties:
"value_str": '{{ states("sensor.ble_temperature_zal") | round(1) }}°C' # тут указывается ваш сенсор температуры из Home Assistant. У меня это sensor.ble_temperature_zal
event:
"up":# тут так-же нажатием на иконку температуры должен запускаться термостат, чтоб он запускался нужно input_number.test_number заменить на своё.
- service: script.plate04_thermostat_popup
data:
entity_name: "Thermostat"
entity_id: "input_number.test_number"
entity_icon: "\uE156"
- obj: "p2b21" # Влажность
properties:
"value_str": '{{ states("sensor.ble_humidity_zal") | round(0) }}%' # тут задаётся объект влажности. у меня это sensor.ble_humidity_zal
# тут задаётся датчик присутствия. Объект меняется в двух местах. У меня это binary_sensor.0x00158d0002ae7edb_occupancy
- obj: "p2b31" # Датчик присутствия
properties:
"value_color": '{{ "#00bade" if is_state("binary_sensor.0x00158d0002ae7edb_occupancy", "on") else "#FFF" }}'
"bg_opa": '{{ "255" if is_state("binary_sensor.0x00158d0002ae7edb_occupancy", "on") else "0" }}'
# тут задаётся датчик открытия двери. В трех местах. У меня это датчик binary_sensor.0xa4c138c8e7086507_contact
- obj: "p2b41" # Датчик открытия двери
properties:
"value_color": '{{ "#00bade" if is_state("binary_sensor.0xa4c138c8e7086507_contact", "on") else "#FFF" }}'
"bg_opa": '{{ "255" if is_state("binary_sensor.0xa4c138c8e7086507_contact", "on") else "0" }}'
"value_str": '{{ "\uE81C" if is_state("binary_sensor.0xa4c138c8e7086507_contact", "on") else "\uE81B" }}'
# тут задаётся первая кнопка управления светом. Объект light.desk_lamp нужно заменить во всех местах на свой. Тут всплывающее окно управляет яркостью освещения
- obj: "p2b61" # Включение и выключение лампы
properties:
"bg_color": '{{ "#FFF" if is_state("light.desk_lamp", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: light.desk_lamp
"hold":
- service: script.plate04_light_popup
data:
entity_name: "Ceiling Lamp"
entity_id: "light.desk_lamp"
entity_icon: "\uE769"
- obj: "p2b62" # Ceiling Lamp icon
properties:
"text_color": '{{ "#fb9b06" if is_state("light.desk_lamp", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
- obj: "p2b63" # Ceiling Lamp primary label
properties:
"text_color": '{{ "#000" if is_state("light.desk_lamp", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
- obj: "p2b64" # Ceiling Lamp secondary label
properties:
"text": '{{ "On" if is_state("light.desk_lamp", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("light.desk_lamp", "on") else "#FFF" }}'
#Тут задаётся вторая кнопка управления освещением на второй странице. Заменить объект switch.sonoff_1001f888c1_1 на свой.
- obj: "p2b71" # Bedside Lamp on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("switch.sonoff_1001f888c1_1", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("switch.sonoff_1001f888c1_1", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: switch.sonoff_1001f888c1_1
"hold":
- service: script.plate04_light_popup
data:
entity_name: "Bedside Lamp"
entity_id: "switch.sonoff_1001f888c1_1"
entity_icon: "\uE6B5"
- obj: "p2b72" # Beside Lamp icon
properties:
"text_color": '{{ "#fb9b06" if is_state("switch.sonoff_1001f888c1_1", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("switch.sonoff_1001f888c1_1", "on") else "128" }}'
- obj: "p2b73" # Beside Lamp primary label
properties:
"text_color": '{{ "#000" if is_state("switch.sonoff_1001f888c1_1", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("switch.sonoff_1001f888c1_1", "on") else "128" }}'
- obj: "p2b74" # Beside Lamp secondary label
properties:
"text": '{{ "On" if is_state("switch.sonoff_1001f888c1_1", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("switch.sonoff_1001f888c1_1", "on") else "#FFF" }}'
#Третья кнопка управления wled светодиодами. Заменить light.wled_master на свой объект.
- obj: "p2b81" # Chromatic Neopixel on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("light.wled_master", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("light.wled_master", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: light.wled_master
# "hold":
# - service: script.plate04_wled_popup
# data:
# entity_name: "Neopixel"
# entity_icon: "\uE335"
# wled_entity: "light.wled_master"
# intensity_entity: "number.wled_intensity"
# speed_entity: "number.wled_speed"
# preset_entity: "select.wled_preset"
# - obj: "p2b82" # Chromatic Neopixel icon
# properties:
# "text_color": '{{ "#fb9b06" if is_state("light.wled_master", "on") else "#FFF" }}'
# "opacity": '{{ "255" if is_state("light.wled_master", "on") else "128" }}'
# - obj: "p2b83" # Chromatic Neopixel primary label
# properties:
# "text_color": '{{ "#000" if is_state("light.wled_master", "on") else "#FFF" }}'
# "opacity": '{{ "255" if is_state("light.wled_master", "on") else "128" }}'
# - obj: "p2b84" # Chromatic Neopixel secondary label
# properties:
# "text": '{{ "On" if is_state("light.wled_master", "on") else "Off" }}'
# "text_color": '{{ "#000" if is_state("light.wled_master", "on") else "#FFF" }}'
#Кнопка управлением вентилятором. light.desk_lamp заменить на свой объект. Так-же тут всплывающее окно, вызывает таймер
- obj: "p2b91" # Window Fan on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("light.desk_lamp", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: light.desk_lamp
"hold":
- service: script.plate04_timer_popup
data:
entity_name: "Window Fan"
entity_id: "light.desk_lamp"
entity_icon: "\uE210"
- obj: "p2b92" # Window Fan icon
properties:
"text_color": '{{ "#4caf50" if is_state("light.desk_lamp", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
- obj: "p2b93" # Window Fan primary label
properties:
"text_color": '{{ "#000" if is_state("light.desk_lamp", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("light.desk_lamp", "on") else "128" }}'
- obj: "p2b94" # Window Fan secondary label
properties:
"text": '{{ "On" if is_state("light.desk_lamp", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("light.desk_lamp", "on") else "#FFF" }}'
#Кнопка управления кондиционером.Так-же тут вызывается тоже таймер долгим нажатием и во всех местах изменить объект switch.s31_03 на свой.
- obj: "p2b101" # A/C Fan on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("switch.s31_03", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("switch.s31_03", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: switch.s31_03
"hold":
- service: script.plate04_timer_popup
data:
entity_name: "A/C Fan"
entity_id: "switch.s31_03"
entity_icon: "\uE01B"
- obj: "p2b102" # A/C Fan icon
properties:
"text_color": '{{ "#4caf50" if is_state("switch.s31_03", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("switch.s31_03", "on") else "128" }}'
- obj: "p2b103" # A/C Fan primary label
properties:
"text_color": '{{ "#000" if is_state("switch.s31_03", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("switch.s31_03", "on") else "128" }}'
- obj: "p2b104" # A/C Fan secondary label
properties:
"text": '{{ "On" if is_state("switch.s31_03", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("switch.s31_03", "on") else "#FFF" }}'
# это Кнопка управления телевизором, тоже заменить на свой объект media_player.bedroom_tv
- obj: "p2b111" # Television on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("media_player.bedroom_tv", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("media_player.bedroom_tv", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: media_player.bedroom_tv
"hold":
- service: script.plate04_media_popup
data:
entity_name: "Television"
entity_id: "media_player.bedroom_tv"
entity_icon: "\uE502"
- obj: "p2b112" # Television icon
properties:
"text_color": '{{ "#2196f3" if is_state("media_player.bedroom_tv", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("media_player.bedroom_tv", "on") else "128" }}'
- obj: "p2b113" # Television primary label
properties:
"text_color": '{{ "#000" if is_state("media_player.bedroom_tv", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("media_player.bedroom_tv", "on") else "128" }}'
- obj: "p2b114" # Television secondary label
properties:
"text": '{{ "On" if is_state("media_player.bedroom_tv", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("media_player.bedroom_tv", "on") else "#FFF" }}'
В комментариях в коде выше так, же описан каждый объект находящийся на 2рой странице. И что там заменить, чтоб Ваш объект заработал.
Код 3 страницы:
# 3 страница
#Тут задаётся температура для отображения. Объект sensor.tasmota_dht11_temperature поменять на свой.
- obj: "p3b11" # Температура
properties:
"value_str": '{{ states("sensor.tasmota_dht11_temperature") | round(0) }}°C'
event:
# при долгом нажатии на кнопку, запускается термостат. input_number.test_number - поменять на свой.
"up":
- service: script.plate04_thermostat_popup
data:
entity_name: "Thermostat"
entity_id: "input_number.test_number"
entity_icon: "\uE156"
# тут задаётся влажность. sensor.tasmota_dht11_humidity поменять на свой.
- obj: "p3b21" # Влажность
properties:
"value_str": '{{ states("sensor.tasmota_dht11_humidity") | round(0) }}%'
#Здесь задаётся датчик движения. Объекты binary_sensor.zbpir_05_occupancy заменить на свои.
- obj: "p3b31" # Датчик движения
properties:
"value_color": '{{ "#7b3cb5" if is_state("binary_sensor.zbpir_05_occupancy", "on") else "#FFF" }}'
"bg_opa": '{{ "255" if is_state("binary_sensor.zbpir_05_occupancy", "on") else "0" }}'
event:
"up":
- service: script.plate04_binary_popup
data:
entity_name: "Presence"
entity_state: "{{ 'Presence Detected' if is_state('binary_sensor.zbpir_05_occupancy', 'on') else 'No Presence' }}"
entity_icon: "\uE70E"
entity_last_updated: "{{ states.binary_sensor.zbpir_05_occupancy.last_changed }}"
# Тут задаётся кнопка управления телевизором. Объекты media_player.lg_webos_tv_uj6300 заменить на свои.
- obj: "p3b61" # Television on/off button
properties:
"bg_color": '{{ "#FFF" if is_state("media_player.lg_webos_tv_uj6300", "on") else "#000" }}'
"bg_opa": '{{ "255" if is_state("media_player.lg_webos_tv_uj6300", "on") else "128" }}'
event:
"up":
- service: homeassistant.toggle
target:
entity_id: media_player.lg_webos_tv_uj6300
- obj: "p3b62" # Television icon
properties:
"text_color": '{{ "#2196f3" if is_state("media_player.lg_webos_tv_uj6300", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("media_player.lg_webos_tv_uj6300", "on") else "128" }}'
- obj: "p3b63" # Television primary label
properties:
"text_color": '{{ "#000" if is_state("media_player.lg_webos_tv_uj6300", "on") else "#FFF" }}'
"opacity": '{{ "255" if is_state("media_player.lg_webos_tv_uj6300", "on") else "128" }}'
- obj: "p3b64" # Television secondary label
properties:
"text": '{{ "On" if is_state("media_player.lg_webos_tv_uj6300", "on") else "Off" }}'
"text_color": '{{ "#000" if is_state("media_player.lg_webos_tv_uj6300", "on") else "#FFF" }}'
# Здесь задаётся управление роботом пылесосом. Объект vacuum.vasilii нужно заменить на свой.
- obj: "p3b71" # Робот-пылесос
properties:
"bg_color": '{{ "#FFF" if is_state("vacuum.vasilii", "cleaning") else "#000" }}'
"bg_opa": '{{ "255" if is_state("vacuum.vasilii", "cleaning") else "128" }}'
event:
"up":
- service: >
{% if is_state("vacuum.vasilii", "cleaning") %}
vacuum.return_to_base
{% else %}
vacuum.start
{% endif %}
target:
entity_id: vacuum.vasilii
"hold":
- service: script.plate04_vacuum_popup
data:
battery_state: >-
{% set battery_level = state_attr('vacuum.vasilii', 'battery_level') | int %}
{{ '\uF2A3' if battery_level > 75 else '\uF2A2' if 40 <= battery_level <= 75
else '\uF2A1' if 10 <= battery_level < 40 else '\uE08E' }}
suction_power:
'{{ state_attr("vacuum.vasilii", "fan_speed_list").index(state_attr("vacuum.vasilii", "fan_speed"))
if state_attr("vacuum.vasilii", "fan_speed") in state_attr("vacuum.vasilii", "fan_speed_list") else None }}'
suction_list: '{{ state_attr("vacuum.vasilii", "fan_speed_list") | join("\n") }}'
entity_status: "{{ states.vacuum.vasilii.state }}"
- obj: "p3b72" # Vacuum icon
properties:
"text_color": '{{ "#2196f3" if is_state("vacuum.vasilii", "cleaning") else "#FFF" }}'
"opacity": '{{ "255" if is_state("vacuum.vasilii", "cleaning") else "128" }}'
- obj: "p3b73" # Vacuum primary label
properties:
"text_color": '{{ "#000" if is_state("vacuum.vasilii", "cleaning") else "#FFF" }}'
"opacity": '{{ "255" if is_state("vacuum.vasilii", "cleaning") else "128" }}'
- obj: "p3b74" # Vacuum secondary label
properties:
"text": '{{ "On" if is_state("vacuum.vasilii", "cleaning") else "Off" }}'
"text_color": '{{ "#000" if is_state("vacuum.vasilii", "cleaning") else "#FFF" }}'
И тут маленький лайфхак. Объект для робота пылесоса, нужно поменять в очень многих местах. У меня это vacuum.vasilii
Так вот для простоты и ускорения замены этого объекта на свой. можно воспользоваться аддоном Studio code Server.
Этот аддон можно скачать с магазина addoнов home assistant. И в этом аддоне откроем файл openhasp_homekit.yaml . Выделим объект например vacuum.vasilii
и нажимаем кнопку ctrl+F2 и у Вас тогда выделятся все объекты и просто вставляете свой и он вставится везде.
После всех правок кода. необходимо перезагрузить Home Assistant, достаточно быстрой перезагрузки. И Интеграцию openHASP и саму панель.
Весь этот код, я еще разобрал в видео и собственно рассказал там как загрузить прошивку наглядно: