Очередной умный дом, в трех частях. Часть вторая, программно-серверная.

Очередной умный дом, в трех частях. Часть вторая, программно-серверная

Настал черед рассказать о софте.

Итак, в начале было слово был четырехканальный выключатель света, с подключенными к нему разными датчиками. Физический интерфейс — RS485. Поверх RS485 реализован упрощенный вариант MODBUS ASCII. Реализованы только функции 03 и 06, в отличие от стандарта адресация байтовых регистров начинается с нуля. Плюс к тому добавлена поддержка широковещательных посылок, ответ на которые не выдается. Ими устанавливается время, либо отключаются все выходы. Через переходник RS485 — RS232 контроллер был подключен к COM порту.

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

Вариант 1: PC + Windows

 

3908e87a4a674b9ba5cf593b5a0f71f0

 

Написано все было на Delphi, много кнопок, много циферок, все работает, но есть одно но – зачем мне, находясь дома, включать дома же свет через компьютер? Непонятно. Поэтому началась разработка сетевой версии. И получился:

Вариант 2: PC + Windows + интернет

Был написан небольшой сервис, который работал шлюзом между интернетом и внутренней приборной сетью. Программа была доработана для работы по сети. Все хорошо, все работает, но есть одно но – зачем постоянно с собой носить ноутбук или флешку с программой, чтобы включить дома свет? Непонятно. Поэтому дальнейшая разработка продолжилась. И получился:

Вариант 3: PC + Windows + интернет + мобильный телефон

 

c0423047b50943e0b30ebfdcb89775bf

 

В те давние времена смартфоны были большой редкостью, браузеры в мобильниках не умели практически ничего, максимум на что можно было расcчитывать – J2ME. В качестве эксперимента в серверную часть был добавлен клиент ICQ, в мобильнике тоже был установлен один из многочисленных асечных клиентов. Все работало, но каждый раз говорить «ОК, Гугл» писать на телефонной клавиатуре «Дом, включи мне свет в прихожей, и покажи состояние остальных ламп и датчиков» было не очень комфортно. Поэтому началась разработка J2ME приложения, на основных идеях которого сейчас основан один из интерфейсов. Суть состояла в том, что есть несколько закладок или экранов, каждый из которых соответствовал одному контроллеру. Все работало, все было хорошо, но появилось очередное но – прогресс не стоял на месте, браузеры из программ для показа страничек с картинками научились много чему дополнительно. А содержать параллельно три ветки – Win32, J2ME и Web – стало лень. Да и смартфоны с планшетами бодро зашагали по планете. Поэтому разработка продолжилась и вылилась в окончательный на сегодня:

Вариант 4: LAMP + интернет + Web

В клиентской части было решено не распылятся на разные технологии, а оставить только одну – HTML+JS. Благо, мобильные и десктопные браузеры научились делать многое и главное – одинаково.

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

  • Клиенты (либо скрипт в роутере, либо шлюз) периодически отправляют на сервер свой адрес, по которому в дальнейшем сервер с ними работает. Своего рода DynDNS
  • Раз в час сервер синхронизирует время на всех контроллерах, так как часов реального времени в них нет, а есть только программные
  • Раз в минуту сервер опрашивает все контроллеры и заносит ответы в базу

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

Все это работало у меня дома сначала в роутере Asus WL-500gP V2, перешитом прошивкой «от Олега и энтузиастов» на котором были установлены Lighttpd + PHP5 + MySQL. К роутеру был подключен переходник USB-RS232 и настроен ser2net. В базе хранятся настройки и логи, админка и сервисы написаны на PHP. Потом был разработан шлюз Ethernet-RS485, и все это переехало на один из облачных хостингов.

Бонус

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

Предположим, есть участок. На нем есть несколько зон освещения, например вход, дорожка, стоянка для машины. Отдельно – калитка с электрозамком, и въездные ворота с электроприводом. Есть гараж, чтобы не размениваться по мелочам – два этажа, по две зоны освещения на каждом, и с раздельным отоплением. Есть видеонаблюдение и интернет.

На первом этаже установлены:

 

25a6090bbb92428b8c5235c4a78b668b

 

Сверху – контроллер освещения и отопления 1 этажа, УЗО и автомат с независимым расцепителем. Второй ряд – контроллер защиты электросети с реле на 100А, снизу – 12В блок питания и контроллер освещения на участке. В самом низу – двухканальный приемник, который через контроллер освещения позволяет находясь на улице включить свет на входе и открыть замок калитки.

На втором этаже:

 

27f03d88ba1940a98afcd12bb1d80248

 

Сверху – электроника от оконного кондиционера, она сама по себе. Второй ряд – шлюз Ethernet-RS485, снизу – контроллер освещения и отопления второго этажа и силовые реле для конвекторов.

Датчики температуры внутри помещения и температуры теплоносителя (воздуха из конвектора в данном случае):

 

a20507c694064d7189e4a525b180f820

 

На чердаке – кондиционер, видеорекордеры, роутеры, антенны, модем и прочее:

 

cfe53a72a8d440f9b3c8c017cd913236

 

Все это благополучно проработало зиму, пришла весна, а за ней и лето. А летом что главное? Мангал, беседка и полив. Была выкопана яма, в ней разведена водопроводная арматура:

 

c3f75ee52fb1465ab6f175fa26cf9372

 

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

 

af4bf2d047d6475599c62d46efe11824

 

В ящике сверху – контроллер освещения беседки, в центре – блок питания 24В для клапанов и контроллер водоснабжения.

Получилось как то так – второй этаж гаража и беседка:

 

787d6da6677848f9aefae557034db3d1

 

Между ямой и остальными контроллерами – примерно 15 метров, стена из 30см газобетона и 10см перекрытия ямы из армированной стяжки. Беспроводные датчики и выключатели? Нет, спасибо. Протянут силовой кабель 3х4 и сигнальный 4х0,22, подключены в силовой щиток – и все, свет есть, полив есть, все управляется и показывает состояния датчиков. Как по мне – никаких проблем ни с масштабируемостью, ни с отсутствием беспроводных технологий.

С программно-серверной частью на этом все, в следующей части опишу самое интересное – пользовательский интерфейс.