Привет, дорогой друг! Сегодня я расскажу о своем кондиционере в спальне, который будет выступать в роли соломенного пугала подопытного и в последствии получит “мозги”. Подопытный это - кондиционер Gree без возможности подключения к умному дому или подключения к какому либу wifi и т.п.
введение
Присказка. Возможно кому то покажется это обычным делом, все то, что я тут делаю, но как говорится, в каждом деле есть свои нюансы. И я уверен, что мне такая статья очень бы помогла сэкономить время.
Управление осуществляется с ИК пульта серии YAP1F
В чем заключается задача? управлять кондиционером с помощью голосовго помошника Алисы, ну или Сири (на крайний случай), соответсвенно чтобы управление было и с мобильного телефона. Для решения этой задачи я приобрел специальную побрекушку на всеми известном сайте с поднебесной под названием универсальный пульт с инфокрасным портом и устройством zigbee на борту.
Эта штуковина и будет управлять моим кондиционером, кстати, она же может управлять и телевизором, все у чего есть ик порт. Работает она от батареек типа ААА.
Подключение буду рассказывать последовательно.
Подключение к Home Assistant
Мозгом умного дома у меня выступает тв приставка работающая на linux debian c установленным home assistant. Подразумевается что у вас тоже есть Home Assistant (далее HA, ХА или хоум ассистант) Zigbee cтик у меня SONOFF Zigbee Dongle Plus EZSP, соответсвенно подключение ИК-чудокоробочки я осуществлял через zigbee2MQTT.
Хоум асистанс определил ее как Moes UFO-R11 (https://www.zigbee2mqtt.io/devices/UFO-R11.html)
Пользовательское название я ему дал IRport
Не забудьте поставить галочку обновить идентификатор объекта. Наше устройство будет иметь идентификатор IRport в Home Assistant, и обращаться мы к нему будем как раз под этим именем.
А дальше что?
Подносишь пульт ставишь на запись сигнал (turn IRport on), нажимаешь кнопку на пульте (например кнопку включения телевизора), которую хочешь запомнить. Сенсор sensor.irport_learned_ir_code покажет длинный код, который этот сигнал записал.
Теперь будем думать как этот сигнал воспроизвести. Открываем панель разработчика, далее службы. Вставляем код приведенный ниже в окно службы, но вместо моего сигнала используйте свой записанный. Нажимаем на кнопку вызвать службу.
service: mqtt.publish
data:
topic: zigbee2mqtt/IRport/set
payload: >-
{ "ir_code_to_send":
"C20jahGUAnQaA8AaAdAA+ATK8Ab4BMnwBvAB0AzwAsDRU6UAkAP4CsDQENAA+ArO0AzwDsBlpy"
}
Если телевизор включился (это мы для теста использовали пульт от телевизора), значит наше устройство считало сигнал верно и также верно его воспроизвело.
Для создания кнопки можно спользовать такой код в configuration.yaml
- alias: Включение телевизора
trigger:
platform: state
entity_id: input_button.tv_on_off_button
action:
- service: mqtt.publish
data:
topic: zigbee2mqtt/IRport/set
payload: >-
{ "ir_code_to_send": "BWsjoBE5AsABA6oGOQLgCwFAF0ADQAFAB+AHA+ADAUAb4AcBQBPAA0ABwAvABw/FnGsj3Ag5Av//ayPcCDkC"
}
Осталось записать все кнопки… ага, если бы всё так было просто с этим пультом от кондиционера.
Немного погуглив, выяснилось, что кондиционер gree принимает от пульта код не конкретной кнопки, например включения/отключения, а код комбинации всех настроек на пульте. т.е. пульт сообщает: Эй, брат, вот тебе сообщение о включении, 16 градусов поставь и на охлаждение, а не на осушение и все это в одном зашифрованном письме. Представляете сколько таких комбинаций нужно записать. Нет, это путь самурая у которого нет цели, у меня цель конкретная. Кстати многие устройства домашние работают по такому принципу, не только кондиционер.
Порывшись в этих тырнетах ваших набрел на касмтоную интеграцию SmartIR для HA.
Интеграция включает в себя настройки ИК-устройства и три платформы для HA:
- Fan platform для управления вентиляторами или увлажнителями
- Media Player platform для управления плеерами, телевизорами и различными медиа устройства
А еще интеграция уже содержить в себе готовую базу записанных кодов с ИК пультов различных устройств. Уже все сделали за тебя. Мой пульт кондиционера YAP1F2 нашелся в базе в строке под номером 1185. Запомним эту цифру.
Скачиваем все файлы с этой ссылки и помещаем в хоум ассистант по адресу
/homeassistant/custom_components/smartir
В главном файле конфигурации configuration.yaml заполняем следующее…
smartir:
climate:
- platform: smartir
name: bedroom AC
unique_id: bedroom_ac
device_code: 1185
controller_data: "zigbee2mqtt/IRport/set/ir_code_to_send"
где unique_id название устройство по которому мы будем обращаться в ХА, а также device_code номер нашего пульта. После перезагрузки ХА интеграция автоматически подтянет в /homeassistant/custom_components/smartir/codes/climate/ файл 1185.json с набором кодов для нашего пульта.
Вот как отображается карточка lovelace.
Пытаюсь запустить иии….. ничего не работает.
Дело в том что ИК-коды в базе не являются кросс-совместимыми с ИК передатчиками другой фирмы, поэтому, когда вы выбираете device_code: 1185, он будет нацелен на конкретный ИК, то есть конкретно на устройство фирмы Broadlink.
А у нас что? а у нас устройство MOES Tuya. В кратце Broadlink использует несжатую последовательность ИК-импульсов (NEC), упакованных в base64. MOES Tuya же в свою очередь использует некоторую форму сжатия FastLZ. Если хотите подробнее об этом почитать, то вот ссылка.
Не все потеряно. конвертация
На гитхабе есть юзер, спасибо ему большое за код, который написал на python конвертер ИК-сигналов Broadlink в ИК-сигналы MOES Tuya.
Я лишь дописал в конце этого скрипта.
FILE_PATH = '1185.json'
print(process_commands(FILE_PATH))
output_filename = FILE_PATH.replace(".json", "_converted.json")
with open(output_filename, 'w') as output_file:
output_file.write(process_commands(FILE_PATH))
Скачиваем наш файл 1185.json с базой кодов из /homeassistant/custom_components/smartir/codes/climate/ и помещаем в одну папку со скриптом. FILE_PATH - это путь к файлу, где записаны сигналы нашего пульта для MOES Tuya. Если скрипт и файл лежит в одной папке, то FILE_PATH не меняйте. Запускаем скрипт и он создаст нам новый файл 1185_converted.json
Теперь этот конвертированный файл 1185_converted.json помещаем в /homeassistant/custom_components/smartir/codes/climate/ и меняем 1185_converted.json на 1185.json. Перезагружаем ХА и запускаем интеграцию. Все должно успешно работать. По крайней мере у меня работает отлично.
Интеграция с HomeKIT
Теперь приведу пример, как работает это с помощью управления с apple устройств. В ха есть интеграция HomeKIT, а его настройки лежат по адресу /homeassistant/includes/HomeKit.yaml
- name: Home Assistant Bridge
filter:
include_entities:
- ...
- climate.bedroom_ac
- ...
entity_config:
climate.bedroom_ac:
name: Кондиционер
sensor....
name: ....
Кусок кода касательно только кондиционера.
А вот мое видео, как это работает с iPhone.
По другим интересным фишкам home assistant можно посмотреть в моем телеграм канале.