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

    В первой части я рассказал про железную часть. Теперь настал черед рассказать о софте.

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

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

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


    image

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

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


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

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


    image

    В те давние времена смартфоны были большой редкостью, браузеры в мобильниках не умели практически ничего, максимум на что можно было рас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, и все это переехало на один из облачных хостингов.

    Бонус


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

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

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

    image

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

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

    image

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

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

    image

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

    image

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

    image

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

    image

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

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

    image

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

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

    Подробнее
    Реклама
    Комментарии 21
    • +1
      Я бы не стал подобные вещи подключать к интернет — высока вероятность взлома. Были же инциденты со smart-автомобилями. А здесь целый дом может стать подконтрольным — последствия могут быть самыми печальными. Кстати, вы не боитесь восстания машин?)
      • +1
        Отвечу чужими словами: «Волков бояться — в лес не ходить» и «Я тебя породил — я тебя и убью»
        • 0
          Никто не застрахован. Проблема в том, что это уже не просто потеря контроля над некоторой машиной, которая спамит в интернет, а над реальной, физической вещью. Вы бы стали управлять через интернет, за тысячу километров, роботом, оперирующим живого человека?
          Это же как в голливудских фильмах: выключил сигнализацию, открыл/закрыл двери, выключил свет и совершил нападение.
          • +1
            Тем не менее роботы оперируют, и вполне себе удачно.
            А фильмы, ну они все таки больше фильмы. Сигнализация — отдельно, да и не даст никто к милицейскому пульту самоделку подключить. Замки — тоже самые обычные, тот что с электроприводом — он на калитке стоит, через забор проще перелезть чем ковыряться в протоколах.
            • +1
              Роботы оперируют. Но за этим следят лично. При этом контроль осуществляется не через огромную сеть, а непосредственно, или даже заранее программируются действия.
              Если бы я был достаточно компетентен в веб-технологиях, я бы первым попытался подшутить и превратить умный дом в безумный. Думаю у многих хабравчан такая же горячая кровь)
            • 0
              Нужно всегда взвешивать затраты на взлом через сеть и offline. Взломать дверь или выбить окно всё же проще и лучше опасаться этой угрозы, чем взлома ssl/ssh через интернет.
              Тем более если кто-то взломает ssl/wpa2, «на кой ему мой дом?» Он лучше банк взломает.
          • 0
            Ломают часто на автомате, то что хорошо знакомо.
            Тут же вообще неведома хрень, поди разберись что к чему.
            А главное — какая с этого выгода будет в итоге.

            Автору можно просто сгенерить самоподписной серт, и ходить по https с авторизацией, а без https даже авторизацию не спрашивать, сразу 404.
            У меня подобным образом настроен nginx — webdav для семейной файлопомойки с фотками.
          • 0
            А как вы обезопасили себя от зависания компонентов системы? от их поломки? сценарии обработки «непонятных» ситуаций?
            • 0
              Аппаратные и программные ватчдоги, проверка входящих данных. От поломок — отвертку и паяльник в руки и ремонтировать. За все время сгорело штуки три ST485 и несколько симисторов, то нагрузка оказалась больше, то провод заломило и замкнуло.
            • 0
              Кондишн на чердаке? Не лучшее решение имхо, особенно летом.
              • 0
                Надеюсь с другой стороны аналогичные трубы уходят наружу (с горячим воздухом).
                • 0
                  Он просто был, и другого места для него не нашлось.
                  Если бы пришлось покупать — купил бы сплит.
                • 0
                  Уважуха, здоровские вещи делаете. А как выглядит инструмент по созданию графических интерфейсов? Другим людям не предлагаете свою реализацию умного дома?
                  • 0
                    Фон рисуется в Sweet Home 3D, остальное — самописное. Это третий проект, пока у себя и знакомых.
                  • +1
                    Имею небольшое отношение к поливу. Хантеровские клапана конечно хорошо, но разве у вас на полив вода идет из водопровода/скважины? или все-таки емкость стоит?
                    Поливать холодной водой не очень правильно, дендрологи не советуют.
                    Трубы полиэтиленовые? очень не долговечные, лучше ПНД на компрессионных фитингах собрать, клапана также правильнее из дома наружу вынести в коробе(но тут дело хозяйское). Если емкость ставить, то можно автоматическую систему дозации удобрений добавить.
                    По погоде что? если был дождь все равно поливает? Наверное можно метеостанцию добавить в ваш умный дом.
                    • 0
                      Вода из водопровода, без подогрева. Знаю, что не правильно, но ставить бочку и насос только для полива 10 квадратов газона — было лень. Датчик влажности почвы есть, метеостанция — в проекте.
                      • 0
                        Если цветов и крупномеров нет и полив идет через слинклеры(MP-Ротатор и т.д.), то забейте на бочку, можно и напрямую.
                        Датчик влажности почвы показывает себя не очень хорошо на открытых участках, лично мне нравиться тупой как валенок и надежный датчик дождя от того же Хантера — Rain-click, там контакт разомкнутый/замкнутый, никакой автоматики, когда общая влажность среды позволяет не поливать — он срабатывает.
                        А всякие метеостанции — слишком сложно в плане выбора места установки и много другого — если речь идет только о поливе.
                        • 0
                          Там датчик влажности — просто два штыря в землю, надо будет попробовать другой конструктив самого датчика. Покупать готовое — не наши методы )
                          Метеостанция — то само по себе, безотносительно полива. Просто надо чем то себя занимать )
                    • 0
                      Столик из движка — огонь!
                      А вот отделка пластиковыми панелями — чо-то ваще никак.
                      • 0
                        Подскажите, а что такое у вас на счетчике воды?
                        • 0
                          Это оно, в первой части?
                          Расходомер сделал на основе обычного счетчика воды, приклеив на крыльчатку магнит, а на корпус – датчик Холла.

                          image

                          Датчик расхода воды для контроллера водоснабжения. Сделан из обычного счетчика воды.

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