ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Управление освещением по X10

27/02/2011 15:21:04

Возможно, данная статья устарела.
Все новые статьи

X10В своих предыдущих статьях, посвященных в том числе автоматизации освещения, я рассказывал о технологии 1-wire. В моем доме микросети 1-wire прижились и успешно решают различные задачи, показывая при этом хорошую надежность. Выполненная "звездой" электрическая проводка дома позволяет монтировать модули 1-wire в шкафы и щитки. Однако иногда бывают ситуации, когда необходимо что-то автоматизировать "на скорую руку" или когда нет возможности проложить дополнительный кабель для управляющей шины. В таких случаях может помочь автоматика, которая для передачи команд исполнительным модулям использует уже существующую в доме электрическую сеть. Такой способ автоматизации прост в монтаже и относительно дешев, учитывая отсутствие затрат на проделку и зашпаклевывание дыр и штроб. Традиционно одним из наиболее популярных стандартов, описывающих передачу данных по электрической сети, является X10.

X10 - технология далеко не новая, и была разработана в далеком уже 1975 году, но по-прежнему находит применение в системах домашней, и не только, автоматизации. Данные в стандарте X10 передаются короткими импульсами высокой частоты и синхронизированы с моментом прохождения тока нуля. За один такой переход передается 1 бит. Отсюда становится очевидным, что скорость передачи в сети X10 является крайне низкой. X10 - далеко не единственный стандарт, предполагающий передачу по электросети. Существуют и другие разработки, в том числе аналоги, как, например, A10 (Xanura), которые увеличивают скорость и надежность работы автоматики, но модули стандарта X10 по-прежнему являются наиболее популярными и доступными в том числе и с экономической точки зрения.

Компьютерный интерфейс CM11A (X10)
Компьютерный интерфейс Marmitek CM11A.
Подключен к сети и к компьютеру с помощью специального кабеля

Итак, я приобрел два релейных модуля AM12, интерфейсный модуль CM11A от компании Marmitek и китайский ламповый модуль PLC-P 2026G. CM11A включается с одной стороны в электрическую сеть, с другой стороны в COM-порт компьютера. Судя по отсутствию этого модуля в каталоге Marmitek, он уже снят с производства. Эту догадку подтверждает и тот факт, что поставляемое с модулем CM11A программное обеспечение Active Home не работает с 64-битными версиями Windows. Никаких обновлений ПО не выпускалось, поэтому если вы планируете использовать CM11A вместе, например, с Windows 7 64-bit (а практически все продаваемые ныне процессоры являются 64-разрядными), то Active Home вам ничем помочь не сможет.

ПО для X10. Active Home
Красивый, но абсолютно ненужный диск...

Ну а мне, разумеется, родное ПО для Windows в любом случае не нужно. Есть ли поддержка CM11A в Linux? Конечно есть! Существует несколько реализаций, но я кликнул на первую же ссылку. Этой ссылкой оказался сайт проекта WiSH. Забегая немного вперед скажу, что речь также пойдет и о программе HEYU. Скачав последнюю версию программы WiSH для ядра 2.6, я стал ее компилировать в Debian lenny. Но, как это часто бывает, без приключений не обошлось. Компилятор радостно сообщил об ошибке:

/root/x10dev-2.1.7/dev/dev.c: In function ‘x10_exit’:
/root/x10dev-2.1.7/dev/dev.c:621: error: void value not ignored as it ought to be
/root/x10dev-2.1.7/dev/dev.c:626: error: void value not ignored as it ought to be
make[3]: *** [/root/x10dev-2.1.7/dev/dev.o] Ошибка 1
make[2]: *** [_module_/root/x10dev-2.1.7/dev] Ошибка 2

Ну, этим нас не испугаешь. Необходимо в файле dev/dev.c изменить соответствующую функцию на это:

void __exit
x10_exit (void)
{
  dbg ("%s", "Unloading X10 driver");

  if (x10api.data >= 0) {
    dbg ("unregistering %d:%s", x10api.data, DATA_DEVICE_NAME);
    unregister_chrdev (x10api.data, DATA_DEVICE_NAME);
  }
  if (x10api.control >= 0) {
    dbg ("unregistering %d:%s", x10api.control, CONTROL_DEVICE_NAME);
    unregister_chrdev (x10api.control, CONTROL_DEVICE_NAME);
    }
  remove_proc_entry(procinfoname,procdir);
  remove_proc_entry(procdirname,NULL);
  info ("X10 driver unloaded");
}

Дальше все просто

make install
modprobe x10
/usr/sbin/cm11ad -device /dev/ttyS1

В Linux /dev/ttyS1 соответствует COM2. Кстати, WiSH поддерживает не только Marmitek CM11A, но также X10 совместимые устройства PowerLinc Serial и PowerLinc USB. После запуска демона в логах можно наблюдать следующие записи:

starting. api-device=/dev/x10/.api, pidfile=/var/run/x10d.pid
Successfully opened X10 API device /dev/x10/.api
Transmit thread starting
CM11A current date/time Mon Jan 17 07:57:03 2011#012
transmitter connected

Связь с устройством установлена. WiSH предлагает очень похожую на owfs схему работы с сетью. После запуска модуля появляется папка /dev/x10/*, которая содержит файлы a1 a2 a3 и т.д. Каждый файл ассоциирован с определенным устройством или командой сети.

WiSH создает файловую структуру сети X10
Файловое представление сети X10. Удобно и наглядно

Таким образом, выполняя простейшую команду,

echo 1 > /dev/x10/a1

мы тем самым отправляем команду ВКЛЮЧИТЬ устройству с адресом A1. На модулях Marmitek есть два переключателя, с помощью которых вручную задается адрес устройств. Один из переключателей имеет диапазон от A до P, другой от 1 до 16. Отсюда делаем вывод, что в сети могут работать до 256 устройств. В китайском модуле PLC-P 2026G адрес задается иначе. Сначала модуль вводится в режим программирования удержанием кнопки 5 секунд, а затем в сеть посылается любая команда. Адрес устройства, которому посылается эта команда, записывается в память модуля.

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

<?
$fp = fopen('/dev/x10/a1', 'w+');
fwrite($fp, '1');
fclose($fp);
?>

Состояние устройства можно получить считыванием информации из файла

cat /dev/x10/a1
100

Здесь 100 означает, что модуль включен. Но тут есть одна сложность. Дело в том, что хотя стандарт X10 и предусматривает возможность считывания состояния модулей командой STATUS, подавляющее большинство выпускаемых модулей не поддерживают эту функцию. В отличие от 1-wire, где мы без труда можем получить состояние всех свойств компонента, в X10 мы не знаем в каком текущем положении находится модуль. Включен он или выключен. Драйвер, в частности программа WiSH/HEYU или любая друая, в данном случае берет эту функцию на себя. Но если мы включили/выключили модуль кнопкой на самом модуле, наш сервер никак не сможет это узнать. Это, на самом деле большой недостаток модулей X10. Двухсторонняя схема обмена информации предусмотрена, например в модулях A10, который является развитием стандарта X10, но эти модули значительно дороже и почти недоступны на российском рынке.

Позволю провести еще несколько сравнений между X10 и 1-wire. Несмотря на то, что оба протокола не отличаются высокими скоростями, X10 намного медленнее. После отправки команды в сеть 1-wire, модуль реагирует почти мгновенно. Задержки обычно не превышают сотых долей секунды. Для отправки команды модулю X10 требуется примерно 0,7-1 секунда. Во-первых, это создаст некоторый дискомфорт при управлении освещением вручную с помощью X10-выключателей. Во-вторых, и это пожалуй главное, с помощью стандарта X10 трудно конструировать сложные световые схемы, где участвуют десятки модулей. Конечно, стандарт предусматривает групповое управление модулями, например, такие команды как "Включить весь свет" или "Включить все модули с адресом A", но когда речь заходит об интеллектуальном управлении схемами освещения с большим количеством элементов, это станет настоящей проблемой, так как может занимать десятки секунд, не говоря уже о том, как все это последовательное переключение ламп с задержкой в секунду будет смотреться.

Релейный модуль Marmitek AM12 для X10
Релейный модуль Marmitek AM12. Достаточно крупное устройство.

Несколько слов о релейных модулях Marmitek AM12. Эти модули оснащены реле, которое при переключении ОЧЕНЬ громко щелкает. Звук, издаваемый реле, может легко напугать человека, находящегося поблизости. Возможно, это объясняется применением высоконадежного реле, способного выдерживать заявленную нагрузку. Кстати, о нагрузке, AM12 работает с лампами накаливания до 500Вт, электромоторами до 230Вт и резистивной нагрузкой до 3600Вт.
Да, один из двух заказанных мною модулей AM12 оказался... неисправен. На команду включения модуль отвечал несколькими щелчками реле, подключенная лампа при этом моргала, после чего AM12 выключался. Говорит ли это об исключительном везении или действительно есть проблемы со стабильностью продукции Marmitek сказать сложно. В Интернет-магазине, в котором я делал заказ, впрочем, сразу же согласились выслать замену, за что им большое спасибо.

Отдельно хочется рассказать о дешевом китайском ламповом диммируемом модуле PLC-P 2026G. Модуль оснащен симисторным управлением, поэтому работает бесшумно. Подключать к модулю можно только лампы накаливания, так как даже включаясь на 100%, модуль включает нагрузку плавно. Управлять таким диммером и мощностью подключенной лампы с помощью WiSH проще простого:

echo + > /dev/x10/a2
echo - > /dev/x10/a2

В стандарте X10 заложена возможность сразу задавать определенную яркость с помощью команд Preset Dim или Extented X10. Однако 2026G этот набор команд не поддерживает, а значит изменять яркость лампы можно только последовательной посылкой нескольких команд подряд. Слава богу разработчики X10 понимали, что пошаговое изменения яркости будет смотреться, мягко говоря, непрезентабельно, поэтому между идущими подряд командами DIM или BRIGHT нет обязательных для других случаев перерывов. Это позволяет производить регулировку яркости ламп плавно.
Забавный факт. Несмотря на семисторное управление в PLC-P 2026G, некоторые простые энергосберегающие лампы, типа китайских Philips Energy Saver с ним работают и даже в определенных пределах диммируются. Эти же лампы в модулях AM12 работают еще интереснее. В отключенном состоянии лампы вспыхивают раз в несколько секунд. Объяснение этому эффекту есть, но это тема для другой статьи.

Хеййююю

К сожалению программа WiSH не позволяет отправлять команды DIM/BRIGHT подряд в одном блоке. Во всяком случае в документации я такой возможности не нашел. Зато это помогло мне наткнуться на замечательную программу HEYU, которая предоставляет гораздо больше возможностей для управления различными X10 устройствами и поддерживает Extended X10 команды. В том числе программа умеет плавно управлять яркостью модуля

heyu dim a2 10

Эта команда снижает яркость лампы на 10 ступеней из 22.
Когда HEYU стартует первый раз (после, разумеется, make; make install и редактирования x10config) автоматически запускается heyu_relay, который выполняет некоторые служебные функции.

Очень жаль что, HEYU не предлагает такого удобного доступа к X10, как WiSH. Нет и никакого API. Все команды выполняются только путем запуска программы heyu с параметрами. Для интеграции с Web-интерфейсом и PHP приходится делать так:

<?
exec("heyu on a2");
?>

Надо только обратить внимание на то, чтобы ко всем файлам был доступ, в том числе к конфигурационному, который лучше располагать в папке /etc/heyu

Тем не менее, учитывая отсутствующую возможность определить текущее состояние модуля, управлять таким устройством автоматически крайне сложно. Получается, чтобы гарантированно задать модулю 30% яркость необходимо сначала послать полную серию команд, чтобы вывести модуль на максимальную или минимальную яркость, а уже потом задать необходимую. Диммеры с отсутствующей поддержкой Preset Dim или аналогичных им команд из группы Extended X10 Code, как мне кажется, имеют крайне узкую сферу применения. Их можно использовать только в схемах c управляющим элементом (контроллером/компьютером), который фиксирует все команды, отправленные модулю, вычисляет и сохраняет у себя в памяти предполагаемое состояние модуля. Хотя и в этом случае нет никакой гарантии правильного расчета, так как все же существует вероятность, что какая-нибудь из команд из-за помех, коих в сегодняшних силовых сетях может быть много, не достигла модуля. Из присутствующих на российском рынке модулей только LD11 на DIN-рейку поддерживает Preset Dim и Leviton Dim. Поэтому для домашней автоматизации (совместно с лампами накаливания) можно рекомендовать LD11, хотя их стоимость в полтора раза выше. Я искренне не понимаю, что мешает братьям китайцам при нынешних возможностях и стоимости электроники добавить в модуль поддержку этой незамысловатой команды. Полагаю, цена китайского изделия от этого изменилась бы совсем незначительно.


Ламповый модуль PLC-P 2026G, не поддерживающий команды прямого управления уровнем яркости

X10 модули достаточно хорошо вписались в общую систему моего Умного Дома наряду с другими компонентами. Все, что мне потребовалось - это прописать адрес модуля в общем списке устройств и сделать простейший обработчик в скрипте, который отвечает за работу с исполнительными устройствами.

<?
if ( preg_match("/^x10./", $key_addr) )
{
    // Для WiSH
    $key_addr = preg_replace("/^x10./", "", $key_addr);
    $fp = fopen('/dev/x10/'.$key_addr, 'w+');
    fwrite($fp, $key_pio);
    fclose($fp);

    // Для HEYU
    if ( $key_pio == 1 )
    $heyu_cmd = "on";
    elseif ( $key_pio == 0 )
    $heyu_cmd = "off";

    exec("heyu $heyu_cmd $key_addr");
}
?>

Система Управления Умного Дома
Занесение нового исполнительного устройства в систему управления Умного Дома

Все остальное как то, считывание из базы данных адреса устройства, запись текущего состояния, запись события в журнал и т.д. уже присутствовало в скрипте.
Таким образом, у меня появилась возможность управлять X10 устройствами, а стало быть и нагрузками, подключенными к ним, через telnet/ssh, через Web (посредством вызова PHP-скрипта напрямую), через Web-интерфейс Умного Дома или посредством любых скриптов и программ.

Вообще говоря, если кому-то покажется слишком скучным и утомительным разрабатывать собственный домашний сайт, есть уже готовая "Web-мордочка" для HEYU, которая называется domus.Link. Собственная система милее, так как позволяет в едином интерфейсе связать разные технологии и подходы. Зато в domus.Link есть темы для iPhone и Android. ;)

Напоследок несколько слов о применении X10 в частных домах с 3-х фазным подключением к сетям энергоснабжения. X10 команды, как правило, не проходят между разными фазами. Это означает, что необходимо либо подключать все устройства на какую-то определенную фазу, либо использовать специальные устройства - репитеры, которые далеко не всегда доступны в продаже. Кроме того, репитеры вносят свою лепту в задержки, связанные с передачей команд, фактически удваивая их. Это на самом деле большая проблема, так как обычно при 3-х фазном электроснабжении стараются развести фазы так, чтобы нагрузка на них была равномерна, а значит велика вероятнось того, что одна группа розеток или комната будет запитана от первой фазы, а другая от второй.
Дополнительно стоит подумать и о защите X10 устройств от управления извне. Так, например, если в соседнем от вашего доме также установят X10 модули, то при совпадении адресов, ваши модули будут реагировать на команды, идущие от соседей. Для решения этой проблемы применяется довольно дорогое устройство-фильтр, ослабляющий сигналы X10. Кроме всего уже сказанного, нельзя не упомянуть еще об одной особенности применения X10. Если между устройством, отправляющем команды, и модулем будут присутствовать УЗО, то это снизит общую надежность передачи данных, так как УЗО в силу своей конструкции мешает прохождению сигналов X10.

UPDATE: Спустя год использования устройства X10 были заменены на модули MegaD. На тот момент MegaD-328.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2014-05-09 22:04:14 | Александр
Использую X10 (CM-11, CM-15) и S10 уже 7 лет, ни одного ложного срабатывания, всё работает как часы. Появилась отличная бесплатная постоянно обновляемая программа Active Home Vista, имеющая встроенный WEB-сервер и клиент под Android.


2014-04-14 01:19:40 | Слава23
Могу поделиться пограммой Home control assistant старая версия под Windows7 и СM11.
На ней всё это реализуется за один вечер в изящной логической графике. Но сейчас Я X10 применяю только в неответственных приложениях, как дистанцирнное освещение, а ведь был даже термостат управляемый логическими событиями! Моя проблема в обилии ложных срабатываний в соответствии с увеличением активности соседей.


2012-02-11 16:58:47 | Александр
С cm15a у Вас ничего не выйдет - это нативный USB девайс, COM-порт он не эмулирует. Драйверов под Линукс нет. Выход - купить cm11 или Ocelot в связке с XM11, ну или перейти на Windows.


2012-02-08 00:16:23 | артем
Я пытаюсь сделать то же самое. Только у меня модуль cm15a, подскажите пожалуйста, как определить к какому порту он автоматически подключиться? (ОС убнуту с ядром 2.6)