Pull to refresh

Кондиционер айтишника. Часть II

Reading time 8 min
Views 25K
В этой части расскажу вариант «простой» интеграции кондиционера (а вообще, практически любого устройства, управляемого через ИК) с помощью WiFi<=>IR-шлюза.

Для того, чтобы было интереснее — выбрал популярный шлюз (кстати, Яндекс для своей Алисы как раз его и использует). Купить такой можно на Али, цена что-то около 1200 рублей (у Яндекса — дороже).

Устройство довольно компактное (легко умещается в ладони), из видимых органов есть один маленький ненаваязчивый синий светодиод и кнопка для сопряжения. Все остальное скрыто за черным ИК-прозрачным корпусом. В качестве источника питания можно использовать любой доступный USB-порт (БП, комп и т.п.). Шлюз подключается к нему с помощью microUSB-кабеля (из комплекта поставки или любым удобным).

Особенность этого устройства — он построен на «хорошо известном в узких кругах» esp8266, а это значит, что достаточно несложно его можно «приручить».

Вариант «для самых маленьких»


Прежде чем перешивать устройство, попробовал использовать его в штатном режиме: установил приложение TuyaSmart на телефон (есть версии как под Android, так и под iPhone), а дальше все просто:

  • регистрируемся в приложении,
  • проходим небольшого мастера по подключению нового устройства (для этого шлюз надо подключить к питанию и ввести его в режим «сопряжения» с помощью единственной кнопки на нем,
  • после появления шлюза в приложении, создаем новый «пульт управления» — еще один небольшой мастер, где выбирается тип устройства (в моем случае — Кондиционер), дальше выбирается производитель (Electrolux-а в приложении нет, но замечательно заработало при выборе Midea). Тут же придумываем «имя» нового пульта (я выбрал «Mr.White»).

Вот и все. После этого на телефоне появляется примерно такой пульт управления:

С его помощью можно управлять основными базовыми функциями:

  • включение/выключение,
  • установка температуры,
  • выбор режима работы («Авто», «Охлаждение», «Обогрев», «Вентилятор»),
  • выбор скорости вентилятора («Авто», «Низкий», «Средний», «Высокий»).

В общем, уже можно пользоваться для удаленного управления, но где же тут «умный дом» и интеграция?

Поскольку это простой путь — с умным домом тут плохо, а вот с интеграцией — несколько лучше.

Сначала «ложка дегтя» — интеграции с Apple HomeKit нет, так что Siri — пока «недоступна», а вот с другими конкурирующими платформами все гораздо веселее:

  • Для Amazon Alexa — есть скилл Tuya Smart. Достаточно его активировать и указать в нем свой аккаунт, который завели при регистрации в приложении — появляется возможность голосового управления кондиционером.
  • Аналогичным образом можно подключить Tuya Smart и к Google Ассистенту.

В обоих случаях русский язык не поддерживается, но голосом управляется легко и просто. Я нашел следующие команды:
— Alexa, turn on Mr.White
— Hey, Google, set Mr.White to 24 degrees
— Alexa, turn off Mr.White

Напомню, голосовое управление у меня реализовано с помощью Amazon Echo Dot и Google Home Mini — оба устройства идентично отрабатывают команды.

Кстати, какими голосовыми командами можно управлять режимом работы и скоростью воздушного потока — я не нашел. Если кто-то подскажет — буду благодарен.

А дальше была сделана «полу-автоматическая» интеграция с УД: при повышении температуры в комнате выше пороговой — контроллер УД отправляет сообщение с требованием включить кондиционер, а я, удаленно, с помощью приложения TuyaSmart — включал кондиционер в нужном режиме.

Решение «так себе», конечно, но уже хоть как-то можно пользоваться.

Но ведь это не наш путь — двигаемся дальше:

Путь джедая


Вскрытие и подготовка


Есть вариант прошить устройство и без вскрытия, способ описан вот тут.

Мне этот способ показался излишне сложным (столько телодвижений, когда для прошивки требуется всего-то 4 проводка подпаять), да и интересно было заглянуть внутрь.

К сожалению, я в процессе увлекся и забыл сфотографировать, поэтому покажу чужие фотографии:


Больше фото можно посмотреть тут.

На фото хорошо видно, что используется модуль TYWE3S (даташит на который находится очень просто в Google).

Теперь надо прошить модуль. Оригинальная прошивка затирается и восстановить ее невозможно.

Прошивка делается очень просто: берем среду Arduino (или Atom, или что-то еще — выбирайте на свой вкус). Загружаем в среду разработки скетч с прошивкой Tasmota. Дальше подключаем на модуле TYWE3S RX, TX, GND, VCC от любого usb-serial (не перепутайте — нужно 3.3В питания и соответствующие уровни сигналов, если будет 5В — придется заказывать новый шлюз). Перед подачей питания не забываем замкнуть (любым удобным способом) GPIO0 модуля на землю, тем самым переводя модуль в режим прошивки. Прошиваем.

Конфигурировать прошивку не требуется — все можно оставить в коде «как есть», нам просто нужно «приручить» модуль.

Если все сделано верно (после отключения проводов для прошивки, конечно), включаем шлюз. На телефоне или компьютере включаем поиск WiFi-сетей — должна появиться новая сеть с именем sonoff-xxxx (где xxxx — цифры), которую поднимает наше устройство.

Подключаемся к этой сети и заходим по адресу: 192.168.4.1 — это уже веб-интерфейс нашего шлюза.

Для начала в настройках шлюза укажем домашнюю WiFi-сеть и пароль к ней (устройство перезагрузится и подключится к домашней сети). Дальше уже все действия проще делать в ней. Естественно, надо любым удобным образом узнать, какой адрес получил шлюз в домашней сети.

Заходим на страницу с релизами прошивки Tasmota. Скачиваем два файла — sonoff-minimal.bin и sonoff-ir.bin

Теперь с помощью веб-интерфейса шлюза делаем обновление прошивки в два этапа — сначала шьем «минимальную» версию, а вторым шагом — sonoff-ir.

После всех этих нехитрых действий у нас в руках уже будет модуль с актуальной версией прошивки, осталось его только сконфигурировать следующим образом:



Собственно, это минимальная необходимая конфигурация — в описываемом примере будем взаимодействовать с модулем с помощью GET-запросов (хотя можно и через MQTT).

Проверить работу модуля, а заодно и узнать кое-что полезное можно в его консоли (ссылка на нее доступна с заглавной страницы веб-интерфейса). Открываем консоль и смотрим, как «живет» модуль.

Теперь уже можно начать изучать интерфейс управления кондиционером. Для этого берем в руки штатный пульт от кондиционера и нажимаем кнопку включения. Если все хорошо, то в консоли появится строчка типа:

19:24:09 MQT: tele/IRbridge/RESULT = {"IrReceived":{"Protocol":"COOLIX","Bits":24,"Data":"0xB29F70","DataLSB":"0x4DF90E","Repeat":0,"IRHVAC":{"Vendor":"COOLIX","Model":-1,"Power":"on","Mode":"cool","Celsius":"on","Temp":22,"FanSpeed":"min","SwingV":"off","SwingH":"off","Quiet":"off","Turbo":"off","Econo":"off","Light":"on","Filter":"off","Clean":"on","Beep":"off","Sleep":-1}}}

Модуль принял и «разобрал» ИК-команду от пульта ДУ. Т.е. по консоли сразу понятно, какой протокол (в моем случае это COOLIX) используется штатным пультом кондиционера и какие параметры закодированы в посылке.

Отлично, теперь можно уже управлять кондиционером. Чтобы это сделать осмысленно, лучше ознакомиться с вот этим описанием команд.

Для проверки через консоль шлюза отправим, например, вот такую команду (все команды привожу для своего кондиционера, у вас может быть другой протокол управления):

IRhvac{"Protocol":"COOLIX","Power":"On","Mode":"Cool","FanSpeed":"min","Temp":22}

Чудесным образом при этом кондиционер включается и сразу в требуемом режиме. Miracle!

Выключаем кондиционер следующей командой:

IRhvac{"Protocol":"COOLIX","Power":"Off"}

В общем, модуль подготовлен и проверен.

Вперед к интеграции!

Кондиционер + Domoticz = дружба навсегда!


В качестве основной системы автоматизации у меня используется Domoticz, поэтому «дружить» будем именно эту систему.

План работ следующий:

  1. Создать несколько виртуальных устройств: выключатель, два селектора (для выбора режимов и скорости воздушного потока) и термостат.
  2. Добавить несколько скриптов, которые по действиям с виртуальными устройствами будут отправлять команды шлюзу.
  3. Проверить, что все управляется как надо.

Виртуальные устройства


При создании устройств требуется задать их имена. Я привожу свои, вы можете выбрать любые другие, только не забудьте потом скрипты поправить под них.

Создаем обычный выключатель (тип «Switch») с именем «HVAC». Этот выключатель будет использоваться для включения/выключения по одной кнопке.

Для выбора режимов работы кондиционера добавим виртуальный переключатель «HVAC-Mode» (тип «Selector Switch») со следующими характеристиками:


Обратите внимание, что тут я создал всего два режима — «обогрев» и «охлаждение». Хотя кондиционер еще имеет режим «Авто» и «Вентилятор», для меня они бесполезны — первый работает как-то странно и для домочадцев некомфортен, а второй — вообще никогда не был нужен. Если вы используете эти режимы — можете их просто добавить в селектор.

Аналогично создаем селектор «HVAC-FanSpeed»:


Теперь остается создать только термостат «HVAC-Temp» (тип устройства — «Thermostat Setpoint»).

Скрипты


Мне как-то ближе в Domoticz скрипты на Lua (Devices), поэтому делаю на том, что мне удобнее.

Для определенности — IP-адрес ИК-шлюза в моей домашней сети 10.40.20.254 и именно этот адрес фигурирует в одном из скриптов, вам надо будет исправить его на адрес своего шлюза.

Создадим три следующих скрипта.

HVACauto:

commandArray = {}

for deviceName,deviceValue in pairs(devicechanged) do
    if (deviceName=='HVAC-Temp') then
        if (tonumber(deviceValue) < tonumber(otherdevices_temperature['Комната'])) then
            commandArray['HVAC-Mode'] = 'Set Level: 10' --"Cool"
        else
            commandArray['HVAC-Mode'] = 'Set Level: 20' --"Heat"
        end
            commandArray['HVAC'] = "On"
    end
end

return commandArray

Этот скрипт в сравнивает заданную температуру кондиционера и температуру с датчика «Комната» для того, чтобы выбрать правильный режим — «охлаждение» или «нагрев».

HVACpower:

commandArray = {}

for deviceName,deviceValue in pairs(devicechanged) do
    if (deviceName == 'HVAC') then
        if deviceValue == "Off" then
            print('надо выключить кондиционер')
            commandArray['HVAC-Mode'] = 'Set Level: 0' --"Off"
        else
            if (tonumber(otherdevices['HVAC-Temp']) < tonumber(otherdevices_temperature['Комната'])) then
                commandArray['HVAC-Mode'] = 'Set Level: 10' --"Cool"
            else
                commandArray['HVAC-Mode'] = 'Set Level: 20' --"Heat"
            end
        end
    end
end

return commandArray

Этот скрипт следит за состоянием «общего» выключателя кондиционера и выбирает нужный режим работы при включении или отключает кондиционер.

И последний скрипт HVACmain:

commandArray = {}

local cmnd

for deviceName,deviceValue in pairs(devicechanged) do
    if (deviceName=='HVAC-Mode' or deviceName=='HVAC-FanSpeed' or deviceName=='HVAC-Temp') then
        if (otherdevices['HVAC-Mode']=='Off') then
            cmnd = 'http://10.40.20.254/cm?cmnd=IRhvac{"Protocol":"COOLIX","Power":"Off"}'
        else
            cmnd = 'http://10.40.20.254/cm?cmnd=IRhvac{"Protocol":"COOLIX","Power":"On","Mode":"'..otherdevices['HVAC-Mode']..'","FanSpeed":"'..otherdevices['HVAC-FanSpeed']..'","Temp":'..otherdevices['HVAC-Temp']..'}'
        end
        print(cmnd)
        os.execute("wget '"..cmnd.."'")
    end
end

return commandArray

А вот этот скрипт — самый главный. Он формирует правильные команды с нужными параметрами и реализует GET-запрос к шлюзу. Не забудьте поправить в нем IP-адрес своего шлюза.

Собственно, на этом все. Можно переходить интерфейсе Domoticz на соответствующие вкладки и «нажимать кнопочки» управления кондиционером. Если все сделано правильно — климатическая установка будет управляться так, как вам требуется.


Особенности


У такого варианта управления через ИК-шлюз есть один недостаток — отсутствие обратной связи. Т.е. если кто-то воспользуется штатным пультом, то статусы в Domoticz не изменятся и будут отображать уже неактуальную информацию.

В целом, это не очень мешает (особенно, если не пользоваться ИК-пультом, а использовать только возможности УД).

Можно, конечно, отслеживать с помощью ИК-шлюза, какие команды отправляются через ИК (эту информацию шлюз передает через MQTT) и еще немного попрограммировать, чтобы даже при использовании штатного пульта в системе УД устанавливались актуальные статусы и параметры.

Но пока на это у меня нет времени, да и особой необходимости тоже нет (проще «заглянуть» в систему видеонаблюдения и посмотреть, включен ли кондиционер).

А дальше?


Естественно, на этом мы не останавливаемся.

Как минимум, текущая реализация управления — уже гораздо функциональнее, чем вариант «для самых маленьких».

После «проброса» кондиционера в Domoticz — сделал и управление с помощью Siri:

После того, как появилась возможность управлять из системы УД (и особенно, голосом через Siri), необходимость в использовании штатного ИК-пульта пропала.

В ближайших планах написать «зимний» скрипт, который будет в отсутствие хозяев и при температуре «на улице» не ниже -10 для отопления дома использовать ресурсы кондиционера (он более энергоэффективен в этом режиме, чем электрические теплые полы, но менее комфортен), а при возвращении хозяев — снова переход на обогрев теплым полом.

Конечно же, будет и «летний» скрипт, который будет автоматически включать режим охлаждения и поддерживать заданную температуру дома.

Естественно, все возможные сценарии использования ограничиваются только фантазией. Не сдерживайте себя ;)

Часть III?


На текущий момент анонсированный WiFi-модуль для управления кондиционером так и не появился в продаже.

Если будет время (долгими зимними вечерами) — сделаю еще один подход к интерфейсному модулю кондиционера и постараюсь все-таки «отловить» внутренние команды кондиционера.

Так что… stay tuned!
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+10
Comments 11
Comments Comments 11

Articles