В современных системах домашней автоматизации управление климатом чаще всего в списке решаемых задач стоит на втором месте после работы с осветительными приборами. Спектр применяемого оборудования в данном сценарии очень широк. Верхние строки занимает профессиональные устройства для HVAC (Heating, Ventilation, & Air Conditioning – отопление, вентиляция и кондиционирование), включая теплые полы, системы рециркуляции воздуха и холодные потолки. В доступном сегменте мы видим традиционные бытовые кондиционеры и многочисленные электронагревательные приборы и газовые котлы, а задачи вентиляции чаще всего решаются «ручным» методом открытия окон.

Наиболее удобным способом управления кондиционером является подключение к нему по специализированному интерфейсу, обеспечивающему не только отправку команд, но и контроль статуса, а также информирование о состоянии и возможных неисправностях. Однако этот вариант доступен только в определенных моделях, может требовать приобретения дополнительных блоков и его сложно назвать доступным. Впрочем, сегодня, с распространением таких стандартов как AllJoyn, HomeKit и SmartThings, подобные модели начинают появляться и в более массовом сегменте.

К счастью, есть и другой способ управления кондиционером – использование ИК-канала. В плюсы этого подхода стоит отнести универсальность (один ИК-передатчик может одновременно обслуживать различное оборудование в комнате) и невысокую стоимость. Минусом является полное отсутствие обратной связи от управляемого устройства. Кроме того, это решение не гарантирует даже доставку команд. Насколько такой способ подойдет – решать вам, однако, на наш взгляд, наличие такого варианта лучше, чем полное отсутствие управления.


Выбираем оборудование


Посмотрим, какие есть варианты оборудования для отправки ИК-команд. Одними из наиболее популярных и универсальных сегодня можно назвать устройства производства компании Global Cache. Линейка продуктов включает в себя полтора десятка моделей, обеспечивающих контроль и управление по интерфейсам ИК, RS-232 и сухих контактов. Этв надежные решения мы рекомендуем для данной задачи в рамках профессиональной инсталляции, за которую придется нести ответственность.



Для работы со всеми передатчиками используется сетевой интерфейс (проводной или беспроводной) и основанный на TCP/IP протокол. Наличие подробной документации позволяет легко интегрировать данные решения в вашу систему автоматизации. Отметим, что программный комплекс iRidium имеет встроенную базу конфигураций для оборудования Global Cache, что еще больше упрощает работу с ними.



Минусом устройств этого производителя является их достаточно высокая стоимость. В качестве более доступной альтернативы, особенно для тех, кто любит делать все своими руками, можно назвать изготовление передатчика на базе микроконтроллера. Для тренировки и макетной сборки хорошо подойдёт известная платформа Arduino. Вам понадобится любая плата (требования ко входам и выходам в данном проекте минимальные), соответствующий сетевой интерфейс или модуль для обеспечения удаленного доступа, ИК-светодиод и буквально пара дополнительных деталей. Примеры подобных устройств в сети можно легко найти и адаптировать для своих задач (см. например вариант от SparkFun).



Желательно также приобрести и модуль ИК-приемника, который потребуется для изучения протокола вашего кондиционера. Отметим, что одним из основных параметров физического ИК-протокола является частота модуляции (наиболее частые значения – 38 и 36 кГц). «Научить» одно устройство передавать данные на разных частотах можно, а вот приемники настроены на фиксированное значение, так что возможно их потребуется несколько.

Изучаем протокол


Следующим шагом является расшифровка протокола управления вашего кондиционера. На пульте обычно присутствует базовый набор кнопок – увеличение и уменьшение температуры, выбор режима, управление вентилятором, выбор направления выхода воздуха, выключение.



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

В нашем случае для начала нужно сделать записи, в которых изменяется только один параметр, например температура. Потом фиксировать ее и попробовать менять другой параметр, записав данные во вторую группу. Отметим, что если вы используете Arduino, то, скорее всего, потребуется поправить файлы штатной библиотеки для увеличения максимальной длительности записываемой команды в режиме RAW.



Не вдаваясь в подробности, покажем несколько примеров. Вывод с Global Cache в фирменной утилите iLearn может выглядеть так:

sendir,1:1,24,37914,1,1,116,115,116,168,22,62,21,20,22,62,21,20,22,20,21,62,22,20,21,62,21,20,21,63,21,62,21,21,21,20,21,21,21,62,21,62,21,20,22,20,21,62,22,62,21,20,22,20,21,62,21,21,21,20,22,20,21,21,21,62,21,21,21,62,21,62,21,21,21,20,21,21,21,21,21,20,21,63,21,62,21,20,21,21,21,62,21,63,21,20,21,21,21,21,21,20,21,21,21,20,21,21,21,21,21,62,21,21,21,20,21,21,21,20,21,21,21,21,21,20,21,21,21,21,21,20,21,21,21,20,21,21,21,21,21,20,21,63,21,62,21,62,21,63,22,20,21,21,21,3700


Для библиотеки IRremote в Arduino формат вывода другой:

Raw (150): 4316 3050 -3000 3050 -4350 600 -1600 550 -550 550 -1600 600 -500 550 -550 550 -1600 600 -500 600 -1550 550 -550 650 -1500 600 -500 650 -450 550 -550 600 -1550 550 -1600 600 -500 650 -450 650 -450 600 -1550 650 -450 600 -500 600 -500 600 -450 650 -450 600 -500 600 -450 650 -1550 550 -550 600 -1550 550 -550 600 -500 600 -450 650 -450 650 -450 600 -500 600 -500 600 -1550 600 -1550 600 -500 650 -450 600 -500 600 -500 550 -500 600 -500 600 -500 600 -500 600 -450 650 -450 600 -450 650 -450 650 -1550 600 -500 600 -500 600 -450 650 -450 600 -450 650 -450 600 -500 600 -500 600 -500 550 -500 650 -450 650 -450 600 -450 650 -450 600 -1600 600 -500 500 -1650 600 -1550 650 -1550 600 -1550 650 -1550 600


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

10100101 tttt011p dd100000 00101000 00001100 ff000000 mmm00000 00000000 ssssssss
                                                              
tttt: заданная температура-16 (регулировка - от 16 до 30 градусов)
p: 0 - включить, 1 - выключить 
dd: swing (00 - авто, 01 - вверх, 10 - вниз, 11 - движение)
ff: вентилятор (00 - авто, 11 - первая скорость, 10 - вторая скорость, 01 - третья скорость)
mmm: режим (000 - авто, 001 - охлаждение, 010 - осушение, 011 - нагрев, 100 - вентилятор)
ssssssss: контрольная сумма (сумма первых восьми байт по модулю 256)


Управляем


На основании этих данных уже несложно написать программу для создания требуемых двоичных кодов управления кондиционером как для Global Cache, так и Arduino. При этом желательно использовать контроллер или панель с поддержкой программирования, что позволит генерировать нужные команды «на лету», записывая в них все параметры, как делает оригинальный пульт. В частности, в iRidium Mobile для данной цели можно использовать возможность программирования на JavaScript, а для отправки на исполнительное устройство по локальной сети понадобится драйвер AV & Custom Systems.



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

В случае использования нескольких кондиционеров в одном помещении, а также для более надежной доставки ИК-команд, может потребоваться установить ИК-светодиоды непосредственно на окошках приемников каждого устройства.



Если же кондиционер в комнате только один, может быть достаточно одного правильно установленного ИК-передатчика, который также пригодится и для управления другой техникой, например вентилятором или музыкальным центром.

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

Комментарии (11)


  1. KonstantinSoloviov
    14.01.2016 16:19
    +1

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

    Я изучал этот вопрос и могу ответственно заявить, что на расстоянии до полуметра приемники — универсальны. Например, 38-килогерцовый прекрасно чувствует 30-40 килогерцовую несущую. Передатчик WiFi->IR можно сделать даже на модуле ESP8266 с прошивкой nodeMCU — скорости ногодрыгания интерпретатора Lua как раз хватает для формирования несущей до 40 килогерц.


    1. ACooper
      15.01.2016 12:11

      Можете порекомендовать какой-нибудь хороший источник, где можно почитать про передатчик WiFi->IR на ESP8266? Можно ли на данном модуле реализовать еще и прием?


      1. KonstantinSoloviov
        15.01.2016 13:15

        Lua или С? Я рассматривал с точки зрения реализации на Lua.
        Моя разработка передатчика дальше работающего прототипа не пошла (оказалось, что то, чем я планировал управлять, не годится для разрабатываемого устройства).

        Вот такой получится Lua-код Ir-передатчика (протокол NEC):

        return
        function( pin, addr, data )
            local tone = function( t )
                local write = gpio.write
                local i = t
                while i > 0 do
                    write(pin, 0)
                    write(pin, 1)
                    _ = i * 1 * 1 - 1 - 1 - 1 -- magic delay :)
                    i = i - 1
                end
            end
        -- prepare    
            local a = bit.band( addr, 0xff )
        --    print( string.format("%x",a) )
            local an = bit.band( bit.bnot(addr), 0xff )
        --    print( string.format("%x",an) )
            local d = bit.band( data, 0xff )
        --    print( string.format("%x",d) )
            local dn = bit.band( bit.bnot(data), 0xff )
        --    print( string.format("%x",dn) )
            local m = bit.bor( bit.lshift( dn, 24 ), bit.lshift( d, 16), bit.lshift( an, 8 ), a )
        --    print( string.format("%x",m) )
            local delay = tmr.delay
            local isset = bit.isset
            gpio.mode( pin, gpio.OUTPUT )
        -- send
            tone( 340 ) -- 9000ms*38kHz/1000000
            delay( 4325 ); -- 4500mcs - 175mcs (call time)
            for i = 0, 31 do
              tone( 21 ) -- 9000ms*38kHz/1000000
              delay( isset(m, i) and 1515 or 392 ) -- 1685/562mcs one/zero pause - 170mcs (call and cycle time)
            end
            tone( 21 ) -- 9000ms*38kHz/1000000 
        end
        

        Протокол NEC очень распространен и про него можно почитать например тут.

        Опыты по приему показали, что на Lua вполне можно и приемник сделать, но с пост-декодированием сигнала, то есть сначала сохранить моменты переходов 0->1->0, а затем определить переданные данные.

        На С, уверен, задача решается много эффективнее, примеры гуглятся — только выбирай:
        site:github.com esp8266 ir remote

        И еще, разбираться с протоколами очень удобно используя анализатор «USB Saleae» — это однозначный мастхев )


  1. netto
    15.01.2016 01:52

    Я в свое время решил проблему просто купив запасной пульт, добыв из него плату контроллера (без корпса самого пульта она совсем небольшая) и припаяв прямо к нужным контактам-кнопкам на ней линии от микроконтроллера. Фактически МК просто «нажимает» кнопки физического пульта. Получилось быстро и просто, как раз то, что было нужно для weekend project. Да, некошерно и «грязный хак», зато быстро и работает с тех пор безукоризненно.


  1. pushlan
    15.01.2016 05:37

    наконец то хоть что то по управлению климатом, потому что смысл в моргании лампочками в доме я никак не могу понять, для мня комфорт в доме начинается с климата а не с возможности включать свет со смартфона.
    что по отоплению, есть какие то решения?


    1. r00tGER
      15.01.2016 10:26

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


    1. ACooper
      15.01.2016 12:37

      Что именно Вас интересует про управление отоплением?

      Кондиционирование. Наверное самое простое это управление по ИК. Любая команда это отдельный код ИК. Хоть на пульте и есть кнопки увеличения/уменьшения температуры, на самом деле отправляется команда не на увеличение/уменьшение значения температуры, а команда на установку конкретного значения. Таким образом, в принципе, можно избежать неудобства с отсутствием обратной связи, например отправляя команду дважды. Другие способы это внутренние интерфейсы кондиционера и даже ModBUS.

      Батареи отопления — существуют термостаты с возможностью их управления как по проводам, так и беспроводные. Мне понравилось беспроводное решение от Danfoss — LC-13. Зимой в квартире при любой температуре за бортом всегда одна и та же температура в комнатах.

      Теплые полы — пока присматриваюсь к решению от Heatit.

      Котлы отопления — очень много моделей с возможностью внешнего управления.

      Есть даже интересное решение для проветривания помещений Aeropac wave, работающее по протоколу z-wave.

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


      1. pushlan
        15.01.2016 14:18

        конкретная задача — дом 2 эт.
        расход теплоносителя — 9 контуров батарей, 5 контуров теплых полов, на каждом сервопривод вкл/выкл, 13 помещений.
        подготовка — газовый котел с выносным датчиком и возможностью вкл/выкл его.

        А что за сценарии такие удобные могут быть со светом? Что то никак не могу почувствовать удобство и необходимость в этом.


        1. ACooper
          15.01.2016 16:14

          Вы описали набор Ваших исполнительных устройств варианты управления которыми я описал выше. Далее необходимо понять, что именно Вы хотите от них в плане автоматизации.

          В моем случае существует несколько сценариев управления: включение различных источников света в зависимости от времени дня и ночи при открытии входной двери, сопровождение светом ночью в туалет и обратно, сценарии утреннего пробуждения светом и включения телевизора, информация цветом led- ленты о прогнозе погоды на сегодня, включение или не включение света по датчику движения в зависимости от того кто дома, автоматическое затемнение при просмотре фильма, выключение всего света одной кнопкой, имитация присутствия, выключение основного света при включении одного из спотов.

          Это только то, что быстро вспомнилось из реально работающего в квартире. Надо оно вам или нет решает каждый сам для себя. Для меня это очень удобно. Мое общение с выключателями сведено к минимуму.


      1. pushlan
        15.01.2016 14:21

        по поводу кондиционирования — на приличном оригинальном пульте есть возможность программировать по дням недели, температурам и массе прочих параметров.
        зачем тогда вообще что то городить если это можно настроить штатно?


        1. ACooper
          15.01.2016 16:22

          Можно. Но сможет ли Ваш пульт не включать кондиционер если Вы вдруг решили задержаться на работе или наоборот сделать температуру похолоднее пока дома только Вы, а жены нет? Мой может. Хотя у него и нет такого пульта.