Додаємо Gyver Lamp в Home Assistant та Google Home
Вітаю. Сьогоднішній огляд буде, скоріше, про елемент декору, аніж елемент розумного будинку. Хоча, керувати цим девайсом можна і з «хабів» розумного будинку, і навіть за допомогою розумних колонок. Керування з колонок буде трошки обмежене, але про це в тексті нижче. В статті сьогодні розглянемо DIY-проект, що має назву «Лампа Гайвера», або «Gyver Lamp». Думаю, робити її огляд тут немає сенсу, багато хто знає, що це за проект, а хто не знає перейдіть за посиланням для перегляду відео.

Існує декілька популярних прошивок мікроконтролера ESP8266 NodeMCU, що є мозком пристрою, але для того, щоб наша лампа мала можливість керування з “Home Assistant”, потрібна підтримка протоколу MQTT. Розглянемо дві прошивки з його підтримкою.
Прошивка від Palpalych (на основі Gunner47)
Для початку створимо “органи керування” лампою в Home Assistant:
input_number: !include includes/input_number.yaml
input_select: !include includes/input_select.yaml
input_boolean: !include includes/input_boolean.yaml
light: !include includes/light.yaml
automation: !include_dir_merge_list automations
brightness:
name: Brightness
initial: 10
min: 1
max: 255
step: 1
icon: mdi:brightness-6
speed:
name: Speed
initial: 30
min: 0
max: 255
step: 1
icon: mdi:speedometer
scale:
name: Scale
initial: 30
min: 1
max: 100
step: 1
icon: mdi:ruler
ledlamp_mode:
name: LedLamp Mode
options:
- "0"
- "1"
- "2"
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "10"
- "11"
- "12"
- "13"
- "14"
- "15"
- "16"
- "17"
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
icon: mdi:star-box-multiple-outline
Створимо віртуальний вимикач, при його спрацюванні буде виконуватись певна послідовність команд, що будуть, в тому числі, відправлятися і на лампу (ввімкнеться нічний режим ). Пізніше цей вимикач знадобиться для прокидання в Google assistant
virt_sleepingmode:
name: Sleeping Mode
initial: off
icon: mdi:sleep
Також створимо mqtt лампу в файлі /config/includes/light.yaml
- platform: mqtt
schema: template
#Слово bulb дасть змогу “Google Home app” розпізнати пристрій як лампу
name: "Gyver bulb"
command_topic: "LedLamp/LedLamp_006B956E/cmnd"
state_topic: "LedLamp/LedLamp_006B956E/state"
command_on_template: "P_ON"
command_off_template: "P_OFF"
state_template: "{% if value.split(' ')[5] == '0' %}off{% else %}on{% endif %}" # must return `on` or `off`
qos: 1
retain: true
optimistic: false
Після перезавантаження маємо можливість створити картку:

type: entities
show_header_toggle: false
entities:
- entity: light.gyver_bulb
- entity: input_number.brightness
- entity: input_number.speed
- entity: input_number.scale
- entity: input_select.ledlamp_mode
Але, покищо органи керування ніяк не діють (окрім вмикання\вимикання), тому створимо окремий файл, що буде містити в собі правила, що стосуються управління лампою
- alias: Gyver Brightness
id: SET_Gyver_Brightness
trigger:
platform: state
entity_id: input_number.brightness
action:
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: BRI{{trigger.to_state.state | int }} # Задаємо яскравість
- alias: Gyver Speed
id: SET_Gyver_Speed
trigger:
platform: state
entity_id: input_number.speed
action:
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: SPD{{trigger.to_state.state | int }} # Задаємо швидкість ефекту
- alias: Gyver Scale
id: SET_Gyver_Scale
trigger:
platform: state
entity_id: input_number.scale
action:
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: SCA{{trigger.to_state.state | int }} # Задаємо розмір ефекту
- alias: Set Gyver Mode
id: Set_Gyver_Mode
trigger:
platform: state
entity_id: input_select.ledlamp_mode
action:
- service: mqtt.publish
data_template:
retain: true
topic: LedLamp/LedLamp_006B956E/cmnd
payload: EFF{{states('input_select.ledlamp_mode') }} # Задаємо ефект
- alias: Gyver_on_at_sleepingmode
id: Gyver_on_at_sleepingmode
initial_state: true
trigger:
platform: state
entity_id: input_boolean.virt_sleepingmode
to: 'on'
action:
# нижче послідовність команд, що виконуються після спрацювання віртуального вимикача input_boolean.virt_sleepingmode
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: P_ON # Вмикаємо лампу
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: EFF21 # Задаємо ефект
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: BRI4 # Задаємо яскравість
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: SPD200 # Задаємо швидкість ефекту
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: SCA10 # Задаємо розмір ефекту
- delay:
milliseconds: 1000
- service: mqtt.publish
data_template:
topic: LedLamp/LedLamp_006B956E/cmnd
payload_template: TMR_SET 1 3 3600 # вмикаємо таймер на вимкнення на 3600 секунд (1 година)
Як видно з mqtt топіків в автоматизації, і це підтверджує документація, в цій прошивці формат повідомлення наступний:
P_ON - включить матрицу
P_OFF - выключить матрицу
EFF0 - сделать активным эффект №0 (нумерация с нуля)
BRI44 - установить яркость 44; диапазон [1..255]
SPD3 - установить скорость 3; диапазон [1..255]
SCA1 - установить масштаб 1; диапазон [1..100]
…...
"TMR 1 3 300"
TMR - идентификатор команды, TMR - таймер
1 - признак "таймер взведен"
3 - опция "выключить лампу через ...", цифра указывает на номер значения в выпадающем списке: 1 - не выключать, 2 - 1 минута... (см. в приложении)
300 - количество секунд, через которое выключится лампа (0 - не выключать)
Такий формат повідомлень дозволяє керувати кожним параметром пристрою окремо, крім того, лампа має власний таймер вимикання, який не залежить від таймерів Home Assistant.
Після перезавантаження автоматизацій ви можете керувати лампою з інтерфейсу Home Assistant. Якщо до вашого Google Home app вже додано інтеграцію Hassio (Home Assistant), після оновлення списку пристроїв у додатку (Hey google, sync my devices) у вас з’явиться два нових девайси – лампа і вимикач.

В останньому розділі статті, маєте змогу дізнатися про особливості керування ”Лампою Гайвера” за допомогою Google Home app і смарт-спікерів.
Прошивка від Whilser
Ця прошивка має інший формат mqtt повідомлень, і саме з цією прошивкою вам не треба “паритись” про їхній формат. Є можливість керувати пристроєм за допомогою веб-інтерфейсу, що дуже зручно, там також є змога вмикати і вимикати підтримку mqtt, та змінювати адресу mqtt брокера. Прошивка має функцію “mqtt discovery”, тобто вже після підключення, пристрій автоматично з’явиться в системі, в списку девайсів mqtt інтеграції. Але якщо ви хочете керувати лампою Гайвера з графічного інтерфейсу Lovelace, звичайно треба створити органи керування в картці lovelace. Як створити “органи керування лампою” можна почитати на сторінці прошивки на Github, але для себе я додав ще керування яскравістю лампи і input_select для вибору режиму, хоча обидва параметри можна змінювати в спливаючому вікні лампи, але мені зручніше напряму, з lovelace картки. Отже, як і в попередній прошивці додаємо input_number:
brightness:
name: brightness
initial: 30
min: 0
max: 255
step: 1
icon: mdi:brightness-6
та, в залежності від мови, input_select (нижче англійський варіант)
ledlamp_mode:
name: LedLamp Mode
options:
- Confetti
- Fire
- Rainbow vert
- Rainbow Horiz
- Color change
- 3D Madness
- 3D clouds
- 3D lava
- 3D plasma
- 3D rainbow
- 3D peacock
- 3D zebra
- 3D forest
- 3D ocean
- Color
- Snowfall
- Matrix
- Fireflies
- Aquarium
- Starfall
- Paintball
- Spiral
- Warm Light
- Pendulum
- Twinkles
- Police Strobo
- Incremental Drift Rose
- Pride
- Butterflys
- Demo
icon: mdi:star-box-multiple-outline
До вже описаних на Github автоматизацій додаємо ще дві:
- alias: Gyver brightness
trigger:
platform: state
entity_id: input_number.brightness
action:
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/effect/brightness/set
payload_template: "{{ trigger.to_state.state | int }}"
id: SET_Gyver_brightness
- alias: Set Gyver Mode
trigger:
platform: state
entity_id: input_select.ledlamp_mode
action:
service: mqtt.publish
data_template:
retain: true
topic: homeassistant/light/ESP-6b956e/effect/set
payload_template: "{{ states('input_select.ledlamp_mode') }}"
id: Set_Gyver_Mode
Оскільки прошивка не має вбудованого таймера, додаємо свій, наприклад таймер на 1 годину. Це на той випадок, коли лампу увімкнули за допомогою раніше створеного віртуального вимикача «virt_sleepingmode» (як в першій прошивці), наприклад за допомогою смарт-спікеру.
В configuration.yaml
timer: !include includes/timer.yaml
в /config/includes/timer.yaml
gyverlamp_1h_off:
duration: '01:00:00'
Також додаємо правило автоматизації, яке буде вимикати лампу після «закінчення» таймера
# Вимикаємо gyverlamp після спрацювання таймера на годину
- alias: Gyverlamp_off_1h_timer
initial_state: true
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.gyverlamp_1h_off
condition:
- condition: state
entity_id: light.gyver_bulb
state: 'on'
action:
- service: light.turn_off
data:
entity_id: light.gyver_bulb
- service: timer.cancel
entity_id: timer.gyverlamp_1h_off
Створимо правило, яке передасть пристрою певну послідовність команд при увімкненні віртуального вимикача «virt_sleepingmode»
- alias: Gyver_on_at_sleepingmode
id: Gyver_on_at_sleepingmode
initial_state: true
trigger:
platform: state
entity_id: input_boolean.virt_sleepingmode
to: 'on'
action:
# нижче послідовність команд, що виконуються після спрацювання віртуального вимикача input_boolean.virt_sleepingmode
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/switch
payload_template: ON # Вмикаємо лампу
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/effect/set
payload_template: ‘Fire’ # Задаємо ефект
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/effect/brightness/set
payload_template: 4 # Задаємо яскравість
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/effect/speed/set
payload_template: 200 # Задаємо швидкість ефекту
- delay:
milliseconds: 500
- service: mqtt.publish
data_template:
topic: homeassistant/light/ESP-6b956e/effect/scale/set
payload_template: 10 # Задаємо розмір ефекту
- delay:
milliseconds: 1000
- service: timer.start
entity_id: timer.gyverlamp_1h_off # вмикаємо таймер який вимкне лампу через 1 годину
Звичайно, в цьому правилі ви можете обрати інший ефект, та задати йому відповідні параметри
Керування «Лампою Гайвера» за допомогою Google Home app та розумною колонкою
Позаяк прошивки на основі Gunner47 не мають «mqtt discovery», то ми вимушені створювати лампу вручну, крім того, лампу, що прийде в «Google Home app» з HA, ми можемо лише вмикати та вимикати, є можливість додати керування яскравістю за допомогою шаблонів в HA, але не більше, тобто кольором керувати ми не можемо, причина в форматі повідомлень mqtt. Прошивка від Whilser автоматично «створює» лампу в системі, і коли вона «прилетить» до Google Home app, ми можемо керувати і яскравістю лампи, і кольором


Створений перед цим віртуальний вимикач дозволить напряму, зі спікера вмикати раніше налаштований ефект, наприклад «палаюче полум’я». Цю можливість можна використати під час, наприклад, вечірнього сну, коли ви кажете смарт-спікеру «hey, google, goodnight!». В такому разі google assistant увімкне (на одну годину) звуки палаючого каміну та «клікне» по virt_sleepingmode, який увімкне «палаюче полум’я» на Лампі Гайвера. Звичайно, до цього вам необхідно вибрати мелодію для сну, і додати необхідний вимикач в «Routines»

На жаль, перемикання ефектів та зміна їх параметрів в смарт-спікерах не передбачена, в документації до прошивки від Whilser описано про можливість додавання компонента «телевізор» в Apple Home Kit, та керування ефектами за його допомогою, але перевірити як це працює у мене можливості немає. Можливо подібний варіант існує і для «google home», проте інформації я не знайшов.
PS: Хочу зазначити, що, з невідомих мені причин, лампа з прошивкою “Whilser” іноді втрачає зв’язок з mqtt брокером, в такому випадку вона може зависнути на декілька секунд, а іноді й перезавантажується увімкнувшись білим яскравим світлом, така поведінка девайсу заважає спокійному сну. Ця проблема в парі з відсутністю власного таймера на борту схилила мій вибір на користь прошивок на основі Gunner47

Подача материала отличная, спасибо за ваш труд.
Ниже “После перезагрузки имеем возможность создать карточку” в заголовке спойлера: файл /config/includes/light.yaml (повторно), так и должно быть?
Вы правы, второй спойлер – это код карточки. Исправил тайтл.
Спасибо!