Очередной умный дом, в трех частях. Часть вторая, программно-серверная. +Бонус
В первой части я рассказал про железную часть. Теперь настал черед рассказать о софте.Итак, в начале было слово был четырехканальный выключатель света, с подключенными к нему разными датчиками. Физический интерфейс — RS485. Поверх RS485 реализован упрощенный вариант MODBUS ASCII. Реализованы только функции 03 и 06, в отличие от стандарта адресация байтовых регистров начинается с нуля. Плюс к тому добавлена поддержка широковещательных посылок, ответ на которые не выдается. Ими устанавливается время, либо отключаются все выходы. Через переходник RS485 — RS232 контроллер был подключен к COM порту.В те далекие времена смартфонов, планшетов и единообразия в браузерах не было, поэтому самый первый вариант управляющей программы был для обычного ПК. Вот такой:
Вариант 1: PC + WindowsНаписано все было на Delphi, много кнопок, много циферок, все работает, но есть одно, но — зачем мне, находясь дома, включать дома же свет через компьютер? Непонятно. Поэтому началась разработка сетевой версии. И получился:
Вариант 2: PC + Windows + интернет Был написан небольшой сервис, который работал шлюзом между интернетом и внутренней приборной сетью. Программа была доработана для работы по сети. Все хорошо, все работает, но есть одно, но — зачем постоянно с собой носить ноутбук или флешку с программой, чтобы включить дома свет? Непонятно. Поэтому дальнейшая разработка продолжилась. И получился: Вариант 3: PC + Windows + интернет + мобильный телефон В те давние времена смартфоны были большой редкостью, браузеры в мобильниках не умели практически ничего, максимум на что можно было рас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, и все это переехало на один из облачных хостингов.
Бонус Так как в прошлой части было много картинок — то решил рассказать об одном из проектов в этой части. Заодно рассмотрим проблемы масштабируемости и разницу между проводным и беспроводным интерфейсами, по поводу которых в прошлой части было много споров. Проект важный, но, к сожалению, с туманными перспективами. Итак, начнем.Предположим, есть участок. На нем есть несколько зон освещения, например вход, дорожка, стоянка для машины. Отдельно — калитка с электрозамком, и въездные ворота с электроприводом. Есть гараж, чтобы не размениваться по мелочам — два этажа, по две зоны освещения на каждом, и с раздельным отоплением. Есть видеонаблюдение и интернет.
На первом этаже установлены:
Сверху — контроллер освещения и отопления 1 этажа, УЗО и автомат с независимым расцепителем. Второй ряд — контроллер защиты электросети с реле на 100А, снизу — 12В блок питания и контроллер освещения на участке. В самом низу — двухканальный приемник, который через контроллер освещения позволяет находясь на улице включить свет на входе и открыть замок калитки.
На втором этаже:
Сверху — электроника от оконного кондиционера, она сама по себе. Второй ряд — шлюз Ethernet-RS485, снизу — контроллер освещения и отопления второго этажа и силовые реле для конвекторов.
Датчики температуры внутри помещения и температуры теплоносителя (воздуха из конвектора в данном случае):
На чердаке — кондиционер, видеорекордеры, роутеры, антенны, моде и прочее:
Все это благополучно проработало зиму, пришла весна, а за ней и лето. А летом что главное? Мангал, беседка и полив. Была выкопана яма, в ней разведена водопроводная арматура:
Слева — фильтр, датчик давления на входе, датчик расхода воды. В центре — датчик протечки, справа — два клапана полива, редуктор понижения давления и датчик давления после редуктора. Установлены два контроллера — освещения беседки и водоснабжения. В самой беседке две зоны — декоративная подсветка и основной свет:
В ящике сверху — контроллер освещения беседки, в центре — блок питания 24В для клапанов и контроллер водоснабжения.
Получилось как то так — второй этаж гаража и беседка:
Между ямой и остальными контроллерами — примерно 15 метров, стена из 30 см газобетона и 10 см перекрытия ямы из армированной стяжки. Беспроводные датчики и выключатели? Нет, спасибо. Протянут силовой кабель 3×4 и сигнальный 4×0,22, подключены в силовой щиток — и все, свет есть, полив есть, все управляется и показывает состояния датчиков. Как по мне — никаких проблем ни с масштабируемостью, ни с отсутствием беспроводных технологий.
С программно-серверной частью на этом все, в следующей части опишу самое интересное — пользовательский интерфейс.