Как стать автором
Обновить

«Умный дом» собственными руками. Часть 5. Технологии Х10

Время на прочтение7 мин
Количество просмотров53K
image

В прошлой статье мы прикрутили к нашей системе «умный дом» небольшой веб-интерфейс. Самое время обратиться к той части дела, ради которой все это и затевается — управление нагрузкой. Под нагрузкой подразумевается любое электроустройство, которым есть смысл управлять.
За подробностями реализации прошу под кат.


Небольшое вступление или что-же такое Х10


Протокол связи Х10 и основанный на нем стандарт известны миру достаточно давно. Стандарт был разработан в 1975 году компанией Pico Electronics для управления домашними электроприборами. Так в чем же его преимущество, по сравнению с протоколом 1-wire? Все дело в том, что для связи с приемниками, контроллер Х10 использует обычную электропроводку, что позволяет избежать лишних проводов и добраться до труднодоступных мест (например, кому-то не захочется портить ремонт ;)

Что внутри?


Для передачи сигналов Х10 используются «пакеты» колебаний на частоте 120 кГц длительностью 1 мс. Передача сигнала в Х10 синхронизирована с нулевым напряжением в цепи переменного тока. Когда напряжение достигает нулевого значения, приемник сигнала Х10 (например, встроенный в патрон лампочки) «слушает» сеть в течение 6 мс. Если в это время передатчик сигнала х10 посылает «пакет», приемник воспринимает его как единицу. Отсутствие «пакета» воспринимается как ноль. Каждое устройство, управляемое посредством х10, имеет свой адрес, состоящий из двух символов. Первый – код дома, второй – код устройства. Каждый из них может иметь 16 значений, а общее число различных адресов достигает 256. Код дома обозначают латинской буквой (от A до P), а код устройства – числом от 1 до 16. По электропроводке каждый код дома и устройства передается своей последовательностью нулей и единиц – двоичным кодом.

Каждая команда х10 также имеет свой двоичный код. Последний бит в двоичных кодах устройства и команды служит для различия типа кодов: 0 соответствует коду устройства, 1 – коду команды. Для того чтобы приемник знал, когда начинается передача полезного сигнала, передатчик сначала посылает так называемый стартовый код – ему соответствует последовательность 1110. За ним следует код дома, а потом – код устройства или команда. Последовательность стартового кода, кода дома и кода устройства или команды называется кадром (или фреймом) Х10. Каждый кадр передается два раза подряд – для большей надежности. Каждый информационный бит кадра, за исключением битов стартового кода, сопровождается комплементарным (дополняющим) битом – после 1 идет комплементарный 0, после 0 – единица. Таким образом, для передачи одного кадра необходимо 11 циклов переменного напряжения.

Для передачи команды Х10 нужно сначала отправить кадр с кодом устройства, которому предназначена команда, а за ним – кадр с самой командой. Исключение составляют групповые команды, например «All Units Off» – они отправляются всем устройствам, поэтому код устройства перед ними передавать не нужно.

При передаче последовательности адресов и/или команд между каждой парой кадров должен быть промежуток в три цикла переменного напряжения – то есть последовательность 000000. Например, адрес устройства и команда для него передаются двумя парами кадров с указанным промежутком. Для передачи такой последовательности необходимо 22+3+22=47 циклов напряжения. При частоте 50 Гц такая операция занимает примерно одну секунду. Пожалуй, в этом и заключается самый большой минус данной технологии по сравнению с 1-wire, где команды передаются практически мгновенно. Отмечу, что команды «Bright» («Ярче») и «Dim» («Темнее») следуют друг за другом без промежутка между кодами. Это пример передачи сигналов в однофазной сети. В трехфазных сетях передача сигнала происходит аналогично, но «приурочена» к нулю каждой фазы. X10 команды, как правило, не проходят между разными фазами. Это означает, что необходимо либо подключать все устройства на какую-то определенную фазу, либо использовать специальные устройства — репитеры, которые далеко не всегда доступны в продаже. Кроме того, репитеры вносят свою лепту в задержки, связанные с передачей команд, фактически удваивая их. Это на самом деле большая проблема, так как обычно при 3-х фазном электроснабжении стараются развести фазы так, чтобы нагрузка на них была равномерна, а значит велика вероятнось того, что одна группа розеток или комната будет запитана от первой фазы, а другая от второй.

Оборудование


Что же нужно для организации умного дома на такой технологии? Для начала, прежде всего — контроллер. Это голова всей сети Х10. Именно он посылает в сеть управляющие команды.

Контроллеры X10 различаются от чрезвычайно простых до весьма «сообразительных».
Самые простые контроллеры могут управлять четырьмя устройствами X10 с четырьмя последовательными адресами (1-4 или 5-8). Такие контроллеры обычно содержат следующие кнопки:
  • Устройство 1 On/Off
  • Устройство 2 On/Off
  • Устройство 3 On/Off
  • Устройство 4 On/Off
  • Ярче(Brighten) / Темнее(Dim) (последнее выбранное устройство)
  • Включить весь свет / Выключить все

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

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

Именно последний тип контроллеров нас и интересует. Небольшой сеанс гугла подсказал, что наиболее адекватной моделью в моем случае является CM11A. Выглядит сие чудо примерно так:

image

Как можно видеть, с одной стороны вставляется в обычную розетку (лучше не в фильтр), с другой — в COM-порт нашего компьютера. Для тех у кого нет COM, есть вариант контроллера с переходником USB-COM — CM11USB.
Поставляется с программкой ActiveHome, которая, впрочем, нас не интересует ;)

С контроллером разобрались, теперь перейдем к тому, чем он управляет.

Технология Х10 помогает решить самые разные задачи домашней автоматизации. Например, можно включать и выключать в заданное время свет, дистанционно изменять яркость освещения, управлять электроприборами с помощью компьютера, раздвигать шторы, включать охранную и пожарную сигнализацию и делать много других полезных вещей. Для этого разработаны различные виды устройств, поддерживающих х10. Перечислю их:
  • Исполнительные модули (приемники) – принимают и выполняют команды x10. Каждый приемник имеет адрес, состоящий из кода дома и кода устройства, например A10. Несколько приемников могут иметь тот же адрес – в этом случае они управляются одновременно. Приемниками могут быть, например, ламповые и приборные розеточные модули, настенные выключатели, светорегуляторы в ламповом патроне, приводы жалюзи, диммерные модули для управления резистивной нагрузкой
  • Трансиверы – принимают сигналы от пультов дистанционного управления (ИК или радио), преобразуют в формат x10 и передают в электросеть
  • Пульты ДУ – обеспечивают дистанционное управление устройствами X10 по ИК- или радиоканалам. Есть и универсальные пульты ДУ для управления устройствами x10 и аудио/видеоаппаратурой
  • Оборудование для повышения качества и надежности работы систем X10 – усилители и ретрансляторы сигналов, фильтры для подавления электромагнитных помех. В простых системах часто можно обойтись и без этих устройств
  • Измерительное оборудование – предназначено для измерения затухания сигналов X10

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

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

Софт


Что же нам нужно сделать, чтобы получить возможность управления нашим модулем с помощью компьютера? Для начала, установить необходимый софт. Есть несколько систем для общения с контроллером под Linux. Я остановился на HEYU (офсайт).

Установка проста и назамысловата: скачиваем исходники, смотрим содержимое INSTALL, выполняем по инструкциям ;)

Попробуем в действии! Для начала, нам нужно задать адрес нашему модулю. Сделам это: ввернем модуль вместе с управляемой лампой в патрон. Для присвоения LM15S кода дома и кода модуля необходимо подать напряжение на модуль LM15S выключателем. Затем, в течении 30 секунд, подадим 3 команды на включение нашим контроллером на адрес, который хотим присвоить модулю:

nix@nix-boss:~$ heyu on a1
nix@nix-boss:~$ heyu on a1
nix@nix-boss:~$ heyu on a1


После этого нашему модулю присваивается адрес А1 в сети Х10. Достаточно просто.
На некоторых устройствах адрес можно выставлять с помощью джамперов. Например, на устройствах, производимых фирмой Marmitek.

Теперь мы можем управлять нашей лампой нехитрыми командами:

nix@nix-boss:~$ heyu on a1
nix@nix-boss:~$ heyu off a1

Соответственно, первая — включение лампы, вторая — выключение. Некоторые модули позволяют плавно менять освещенность:

heyu dim a5 10

Что выставит яркость лампы на 10 ступеней из 22.
С управлением разобрались, перейдем к интеграции в наше ПО.

Интегрируем Х10


Добавим в подпрограмму checkcmd() скрипта srv.pl после строк:

201	          if($text =~ /врем/)
202	          {
203	                  my $up = `uptime`;
204	                  $up =~ /(.*?) up/;
205	                  sayText("Сейчас $1");
206	                  return;
207	         }


Следующее:

208	          if($text =~ /вкл/)
209	          {
210	                  system('heyu on a1');
211	                  sayText("Лампа включена");
212	                  return;
213	         }
214
215	          if($text =~ /выкл/)
216	          {
217	                  system('heyu off a1');
218	                  sayText("Лампа выключена");
219	                  return;
220	         }


Все просто ;) Теперь, если вы можете сказать: «Система, включить лампу» или «Система, выключить лампу» и увидеть результат. Тут конечно не хватает проверки, если ламп будет много или включить можно будет не только лампу. Просто добавим еще одно условие:

208	          if($text =~ /вкл/)
209	          {
210                    system('heya on a1') if $text =~ /гостин/;
211	                  system('heyu on a2') if $text =~ /зал/;
212	                  sayText("Лампа включена");
213	                  return;
214	         }
215
216	          if($text =~ /выкл/)
217	          {
218                    system('heya off a1') if $text =~ /гостин/;
219	                  system('heyu off a2') if $text =~ /зал/;
220	                  sayText("Лампа выключена");
221	                  return;
220	         }


Тут можно добавлять и экспериментировать бесконечно. Дальше все зависит только от вашей фантазии и возможностей.

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

Спасибо за внимание ;)
Теги:
Хабы:
Всего голосов 52: ↑44 и ↓8+36
Комментарии46

Публикации

Истории

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань