В современных системах домашней автоматизации управление климатом чаще всего в списке решаемых задач стоит на втором месте после работы с осветительными приборами. Спектр применяемого оборудования в данном сценарии очень широк. Верхние строки занимает профессиональные устройства для HVAC (Heating, Ventilation, & Air Conditioning – отопление, вентиляция и кондиционирование), включая теплые полы, системы рециркуляции воздуха и холодные потолки. В доступном сегменте мы видим традиционные бытовые кондиционеры и многочисленные электронагревательные приборы и газовые котлы, а задачи вентиляции чаще всего решаются «ручным» методом открытия окон.
Наиболее удобным способом управления кондиционером является подключение к нему по специализированному интерфейсу, обеспечивающему не только отправку команд, но и контроль статуса, а также информирование о состоянии и возможных неисправностях. Однако этот вариант доступен только в определенных моделях, может требовать приобретения дополнительных блоков и его сложно назвать доступным. Впрочем, сегодня, с распространением таких стандартов как AllJoyn, HomeKit и SmartThings, подобные модели начинают появляться и в более массовом сегменте.
К счастью, есть и другой способ управления кондиционером – использование ИК-канала. В плюсы этого подхода стоит отнести универсальность (один ИК-передатчик может одновременно обслуживать различное оборудование в комнате) и невысокую стоимость. Минусом является полное отсутствие обратной связи от управляемого устройства. Кроме того, это решение не гарантирует даже доставку команд. Насколько такой способ подойдет – решать вам, однако, на наш взгляд, наличие такого варианта лучше, чем полное отсутствие управления.
Посмотрим, какие есть варианты оборудования для отправки ИК-команд. Одними из наиболее популярных и универсальных сегодня можно назвать устройства производства компании Global Cache. Линейка продуктов включает в себя полтора десятка моделей, обеспечивающих контроль и управление по интерфейсам ИК, RS-232 и сухих контактов. Этв надежные решения мы рекомендуем для данной задачи в рамках профессиональной инсталляции, за которую придется нести ответственность.
![](https://habrastorage.org/r/w780q1/files/a93/ea6/8ea/a93ea68ea44142e7890d4f375676697c.jpg)
Для работы со всеми передатчиками используется сетевой интерфейс (проводной или беспроводной) и основанный на TCP/IP протокол. Наличие подробной документации позволяет легко интегрировать данные решения в вашу систему автоматизации. Отметим, что программный комплекс iRidium имеет встроенную базу конфигураций для оборудования Global Cache, что еще больше упрощает работу с ними.
![](https://habrastorage.org/r/w780q1/files/7a8/b50/257/7a8b50257c194044b1f6bd25ce85b094.jpg)
Минусом устройств этого производителя является их достаточно высокая стоимость. В качестве более доступной альтернативы, особенно для тех, кто любит делать все своими руками, можно назвать изготовление передатчика на базе микроконтроллера. Для тренировки и макетной сборки хорошо подойдёт известная платформа Arduino. Вам понадобится любая плата (требования ко входам и выходам в данном проекте минимальные), соответствующий сетевой интерфейс или модуль для обеспечения удаленного доступа, ИК-светодиод и буквально пара дополнительных деталей. Примеры подобных устройств в сети можно легко найти и адаптировать для своих задач (см. например вариант от SparkFun).
![](https://habrastorage.org/r/w780q1/files/71f/96f/1f0/71f96f1f0d484f9e9553cb522e82daa2.jpg)
Желательно также приобрести и модуль ИК-приемника, который потребуется для изучения протокола вашего кондиционера. Отметим, что одним из основных параметров физического ИК-протокола является частота модуляции (наиболее частые значения – 38 и 36 кГц). «Научить» одно устройство передавать данные на разных частотах можно, а вот приемники настроены на фиксированное значение, так что возможно их потребуется несколько.
Следующим шагом является расшифровка протокола управления вашего кондиционера. На пульте обычно присутствует базовый набор кнопок – увеличение и уменьшение температуры, выбор режима, управление вентилятором, выбор направления выхода воздуха, выключение.
![](https://habrastorage.org/r/w780q1/files/998/d12/511/998d125112464cdeb5b5163c8d278461.jpg)
В отличие от аудио-видео техники, пульт кондиционера в каждой отправляемой команде использует полный набор всех параметров. Так что традиционный вариант «понажимать кнопки, записать все команды, воспроизводить записи», в общем случае не требующий знания деталей протокола, здесь не подходит.
В нашем случае для начала нужно сделать записи, в которых изменяется только один параметр, например температура. Потом фиксировать ее и попробовать менять другой параметр, записав данные во вторую группу. Отметим, что если вы используете Arduino, то, скорее всего, потребуется поправить файлы штатной библиотеки для увеличения максимальной длительности записываемой команды в режиме RAW.
![](https://habrastorage.org/r/w1560/files/53b/e26/989/53be2698903e4fac8f74161e3c298d67.png)
Не вдаваясь в подробности, покажем несколько примеров. Вывод с Global Cache в фирменной утилите iLearn может выглядеть так:
Для библиотеки IRremote в Arduino формат вывода другой:
Путем несложных манипуляций из данных записанных строк (здесь могут помочь, например, материалы этого сайта), мы получаем двоичные коды, которые, в нашем случае, имеют размер девять байт. Проведя исследование всех параметров, удалось выяснить кодировку используемых нашим кондиционером, производства не самого известного бренда, полей:
На основании этих данных уже несложно написать программу для создания требуемых двоичных кодов управления кондиционером как для Global Cache, так и Arduino. При этом желательно использовать контроллер или панель с поддержкой программирования, что позволит генерировать нужные команды «на лету», записывая в них все параметры, как делает оригинальный пульт. В частности, в iRidium Mobile для данной цели можно использовать возможность программирования на JavaScript, а для отправки на исполнительное устройство по локальной сети понадобится драйвер AV & Custom Systems.
![](https://habrastorage.org/r/w780q1/files/44b/72a/eaa/44b72aeaa1c74802882b514099aecf1c.jpg)
Отметим, что здесь можно также реализовать и отображение текущего режима кондиционера. Однако надо отдавать себе отчет в том, что информация будет браться из внутренних переменных панели управления, а не непосредственно с кондиционера, поскольку ИК-управление является в данном случае односторонним.
В случае использования нескольких кондиционеров в одном помещении, а также для более надежной доставки ИК-команд, может потребоваться установить ИК-светодиоды непосредственно на окошках приемников каждого устройства.
![](https://habrastorage.org/r/w1560/files/0a4/849/138/0a48491389b8421d9cc79639dc34cb41.png)
Если же кондиционер в комнате только один, может быть достаточно одного правильно установленного ИК-передатчика, который также пригодится и для управления другой техникой, например вентилятором или музыкальным центром.
При необходимости система управления может быть дополнена датчиками реальной температуры, сенсором потребления кондиционера (для контроля его включения), датчиком на окно для блокировки работы, автоматическими режимами управления, учетом динамики уличной температуры, расписанием и другими возможностями.
Наиболее удобным способом управления кондиционером является подключение к нему по специализированному интерфейсу, обеспечивающему не только отправку команд, но и контроль статуса, а также информирование о состоянии и возможных неисправностях. Однако этот вариант доступен только в определенных моделях, может требовать приобретения дополнительных блоков и его сложно назвать доступным. Впрочем, сегодня, с распространением таких стандартов как AllJoyn, HomeKit и SmartThings, подобные модели начинают появляться и в более массовом сегменте.
К счастью, есть и другой способ управления кондиционером – использование ИК-канала. В плюсы этого подхода стоит отнести универсальность (один ИК-передатчик может одновременно обслуживать различное оборудование в комнате) и невысокую стоимость. Минусом является полное отсутствие обратной связи от управляемого устройства. Кроме того, это решение не гарантирует даже доставку команд. Насколько такой способ подойдет – решать вам, однако, на наш взгляд, наличие такого варианта лучше, чем полное отсутствие управления.
Выбираем оборудование
Посмотрим, какие есть варианты оборудования для отправки ИК-команд. Одними из наиболее популярных и универсальных сегодня можно назвать устройства производства компании Global Cache. Линейка продуктов включает в себя полтора десятка моделей, обеспечивающих контроль и управление по интерфейсам ИК, RS-232 и сухих контактов. Этв надежные решения мы рекомендуем для данной задачи в рамках профессиональной инсталляции, за которую придется нести ответственность.
![](https://habrastorage.org/files/a93/ea6/8ea/a93ea68ea44142e7890d4f375676697c.jpg)
Для работы со всеми передатчиками используется сетевой интерфейс (проводной или беспроводной) и основанный на TCP/IP протокол. Наличие подробной документации позволяет легко интегрировать данные решения в вашу систему автоматизации. Отметим, что программный комплекс iRidium имеет встроенную базу конфигураций для оборудования Global Cache, что еще больше упрощает работу с ними.
![](https://habrastorage.org/files/7a8/b50/257/7a8b50257c194044b1f6bd25ce85b094.jpg)
Минусом устройств этого производителя является их достаточно высокая стоимость. В качестве более доступной альтернативы, особенно для тех, кто любит делать все своими руками, можно назвать изготовление передатчика на базе микроконтроллера. Для тренировки и макетной сборки хорошо подойдёт известная платформа Arduino. Вам понадобится любая плата (требования ко входам и выходам в данном проекте минимальные), соответствующий сетевой интерфейс или модуль для обеспечения удаленного доступа, ИК-светодиод и буквально пара дополнительных деталей. Примеры подобных устройств в сети можно легко найти и адаптировать для своих задач (см. например вариант от SparkFun).
![](https://habrastorage.org/files/71f/96f/1f0/71f96f1f0d484f9e9553cb522e82daa2.jpg)
Желательно также приобрести и модуль ИК-приемника, который потребуется для изучения протокола вашего кондиционера. Отметим, что одним из основных параметров физического ИК-протокола является частота модуляции (наиболее частые значения – 38 и 36 кГц). «Научить» одно устройство передавать данные на разных частотах можно, а вот приемники настроены на фиксированное значение, так что возможно их потребуется несколько.
Изучаем протокол
Следующим шагом является расшифровка протокола управления вашего кондиционера. На пульте обычно присутствует базовый набор кнопок – увеличение и уменьшение температуры, выбор режима, управление вентилятором, выбор направления выхода воздуха, выключение.
![](https://habrastorage.org/files/998/d12/511/998d125112464cdeb5b5163c8d278461.jpg)
В отличие от аудио-видео техники, пульт кондиционера в каждой отправляемой команде использует полный набор всех параметров. Так что традиционный вариант «понажимать кнопки, записать все команды, воспроизводить записи», в общем случае не требующий знания деталей протокола, здесь не подходит.
В нашем случае для начала нужно сделать записи, в которых изменяется только один параметр, например температура. Потом фиксировать ее и попробовать менять другой параметр, записав данные во вторую группу. Отметим, что если вы используете Arduino, то, скорее всего, потребуется поправить файлы штатной библиотеки для увеличения максимальной длительности записываемой команды в режиме RAW.
![](https://habrastorage.org/files/53b/e26/989/53be2698903e4fac8f74161e3c298d67.png)
Не вдаваясь в подробности, покажем несколько примеров. Вывод с 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.
![](https://habrastorage.org/files/44b/72a/eaa/44b72aeaa1c74802882b514099aecf1c.jpg)
Отметим, что здесь можно также реализовать и отображение текущего режима кондиционера. Однако надо отдавать себе отчет в том, что информация будет браться из внутренних переменных панели управления, а не непосредственно с кондиционера, поскольку ИК-управление является в данном случае односторонним.
В случае использования нескольких кондиционеров в одном помещении, а также для более надежной доставки ИК-команд, может потребоваться установить ИК-светодиоды непосредственно на окошках приемников каждого устройства.
![](https://habrastorage.org/files/0a4/849/138/0a48491389b8421d9cc79639dc34cb41.png)
Если же кондиционер в комнате только один, может быть достаточно одного правильно установленного ИК-передатчика, который также пригодится и для управления другой техникой, например вентилятором или музыкальным центром.
При необходимости система управления может быть дополнена датчиками реальной температуры, сенсором потребления кондиционера (для контроля его включения), датчиком на окно для блокировки работы, автоматическими режимами управления, учетом динамики уличной температуры, расписанием и другими возможностями.