Умный дом из старого смартфона или антипаттерны домашней автоматизации

Здравствуйте, дорогие читатели! Очередная история о том, как менеджер самого среднего звена, сдувая пыль с залежавшихся железок на полке, творит такое, от чего у профессионалов всех мастей боль в глазах. ¡Но, это работает, amigo!



Признаюсь, в этот раз я все хотел сделать правильно. Взял Raspbery Pi с полки. Пирожок тот самый, что я уже использовал в своем роботе-газонокосилке: ссылка на пост и ссылка на другой пост. Взял mosquitto, все должно было работать на mqtt, но от себя никуда не убежишь. Под катом море граблей, велосипедов, плохой пайки, сплошной ад для перфекциониста.

image

Все началось с желания дополнить мой проект Noorik, который я поставил себе на ворота. Если коротко — это DIY решение для GSM блока открытия ворот.
Для открытия ворот достаточно замкнуть определенные контакты на плате.

image

Заменил arduino на esp8266 и сделал веб-интерфейс с кнопкой открытия. Это оказалось интересно, но дальше я захотел единый интерфейс для открытия откатных ворот, гаражных секционных ворот и калитки.

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

  1. система управления котельной
  2. охранная система
  3. мобильный интерфейс к камерам видеонаблюдения
  4. данные о температуре в доме и на улице

Бэкенд


Малинка работала нормально, но при очередном включении просто перестала включаться. Светодиод питания сначала загорается, затем плавно за 3-5 секунд гаснет, сильно греется элемент (polyfuse T075) около гнезда питания. А тут уже руки чесались применить mqtt, блэкджер, пригласить куртизанок и прочие прелести.



Не беда, благо своей участи ждал другой пациент. Orange pi zero в студию. Сколько я не мучился с этим чудом китайской мысли — вдохнуть жизнь в такой маленький пирожок оказалось делом выше моих сил. Я скачивал прошивки на официальном и левых сайтах, я покупал прошивки с рук и обменивал на криптовалюту. Думаю, мне просто попался бракованный образец.



Я понял, что сама судьба толкает меня в объятья велосипедостроительства, и что уж скрывать радость, я окунулся в это занятие с головой.



Первым делом я решил использовать как головное устройство (брокер, сервер) видавший виды смартфон. Знаете эти старые вещи просто так не уходят. Им пользовался я, жена, дочь, потом я управлял с этого смартфона своим роботом-снегоуборщиком, я пытался утопить его в реке( до Москвы-реки я так и не добрался, но в родной Пахре эта труба навела шороху). И вот она — новая жизнь для Samsung Galaxy S3.

Установил на смартфон Palapa Web Server и Ftp-сервер. Идея простая в базе данных MySQL всего три таблицы: values, logs, rules.

  • В таблице values пары ключ/значение.
  • В таблице logs история изменений значений.
  • В таблице rules правила изменения одних ячеек в зависимости от значения в других.

Все это хозяйство обслуживает один скрипт php, который по http запросу записывает или выдает данные из базы, а так же обслуживает правила по расписанию.
Я даже не понимаю какой должен быть уровень программирования, чтобы человек захотел это увидеть, но я готов показать Вам код — пишите в ЛС.

Фронтенд




Не кидайте в меня камни, я признаюсь сам. Я использовал Bootstrap. Да, грешен.
Первоначальной мыслью было обернуть все это через Phonegap и получить полноценное приложение. Скажу больше я так и сделал, но в итоге более работоспособной оказалась online-версия. Себе и жене на телефоне просто сделал ярлык на рабочем столе для открытия нужной странице по внутреннему ip.

Каждый элемент реагирует на событие нажатие + проверяется состояние ajax запросами на сервер и изменяется в случае необходимости. Очень удобно, так как видишь все изменения, которые вступили в силу по правилу или сделаны другим пользователем.
Собственно, код по запросу без проблем.

ESP-8266




Я пробовал разные модули и чистый ESP-8266. В итоге самым удобным вариантом оказался модуль LOLIN V3.



Питание с помощью импульсных блоков питания.



Модули для ворота требовали реле и у меня были опасения, что контактные реле будут срабатывать. В итоге работют и твердотельные и контактные. Проблема с тем, что большое количество модулей даже без маркировки об этом являются low-triggered.



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

  digitalWrite(rele, 1);
  digitalWrite(rele2, 1);
  pinMode(rele, OUTPUT);
  pinMode(rele2, OUTPUT);

В итоге модуль для гаража в сборе выглядит так. PIR-датчик для определения движения аккуратно вгрызан в родную обшивку.



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



При этом каждый контур обслуживает отдельный насос.



Последовательно с автоматами были включены реле для управления насосами и котлом.



Аккуратно впихивает все хозяйство в щиток.



Прошивка


Решил использовать для прошивки Arduino IDE, чтобы не связываться с nodemcu и lua. В интернете и на GT в частности огромное количество информации для начинающих.
Из интересного, мне кажется, функция соединения с wifi. Дело в том, что у меня в доме 4 сети wifi и может добавиться. Чтобы жестко не задавать название сети предварительно проводим сканирование доступных сетей.

Код setupWiFi()
void setupWiFi()
{
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  
while(WiFi.status() != WL_CONNECTED)
   {
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      Serial.println("");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
              j=0;
              ssid=WiFi.SSID(i);
              Serial.print("Connecting");
              ssid.toCharArray(charBuf, 50);
               WiFi.begin(charBuf,WIFI_PASS);
               while(WiFi.status() != WL_CONNECTED)
               {
                 delay(500);
                 Serial.print(".");
                 j++;
                     if(j>20){
                          break;
                         }
               }
                   if((WiFi.status() == WL_CONNECTED)){
                          break;
                         }
     
    }
  }
}
   Serial.println("Connected");
   Serial.println(WiFi.localIP());
}


При включенном автоматическом режиме котельной по расписанию проверяется температура на улице и температура теплоносителя.

  • При температуре ниже 14*С включается теплый пол первого этажа.
  • При температуре ниже 4*С включаются все контуры.

Температура теплоносителя выбирается по таблице в зависимости от сечения труб и уличной температуры. При достижении необходимой комнатной температуры котел выключается. Ко всему применен некий гестерезис для сглаживания переходных значений.

Система охраны работает еще проще. В таблице есть правило о том, что при включенной системе охраны, если обнаружено движение у одного из PIR-датчиков происходит отправка SMS через API одного из сервисов.

Планы


  • создание online-версии на удаленном сервере и синхронизация изменений для возможности удаленного управления.
  • Отображения данных с GSM/GPS маячков в машине;
  • Открытие ворот при появлении наших машин в определенной зоне;
  • Подключение к системе пультовой охраны;

Голосование по фото. Какой проект делать следующим?

Доделать KickBrick

Доделать дельта 3D-принтер на строительных шпильках


Стабилизатор для зеркальной камеры


Спасибо за внимание. С Вами был СлаваГик.

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

Так какой же проект делать следующим?
Поделиться публикацией
Комментарии 47
    –1
    Привет! Писал тебе в приват — прочти плиз ;) — спасибо!
      +1
      Зря вы так… ИМХО.
      У самого старый андроид висит в качестве панели управления…
      И я тоже делал свои странички с управлением.
      Но все таки поборол себя и осилил за пару дней OpenHAB на RPI A+.
      И не жалею. Красиво, удобно. И, что самое главное, мне(или не мне) не придется через пол года вспоминать как же оно работает. Ибо стандарт, а не велосипед.
      Да и зачем тратить силы на то, что уже и так сделано?
        0
        Это зависит от специализации, КМК. Мне вот гораздо проще написать свой скрипт, в котором будет именно то, что мне надо и так, как мне надо, чем читать документацию по очередному самому стандартному на этот месяц «стандарту», написанному явно негуманоидами для своих загадочных целей. Времени займет примерно одинаково. Амнезией не страдаю, комментарии писать умею, в итоге за пару минут разбираюсь даже со скриптами, которые писал пять лет назад.
          0
          Конечно проще. Фатальный недостаток же!
          Мне вот тоже было проще. И я потратил неделю только на то, чтобы сделать расписание для своей системы вентиляции. С удобным веб интерфесом и прочими плюшками.
          А сейчас у меня есть возможность делать расписание вообще для любых устройств дома. И это потребовало от меня два дня разбираться «с стандартным решением».
            +1
            А потом вы столкнетесь с чем-нибудь нестандартным, например, с невозможностью повесить обработчик события, чтобы ваша система, скажем, отправила вам СМС или письмо с указанием конкретных данных или зафиксировала что-то в логах. С невозможностью создавать сложные кастомные правила, например, будить вас плавным включением света только по будням и при этом учитывать праздники. С невозможностью добавить определение наличия кого-то дома по появлению смартфона в домашней wi-fi сети. И т.д. и т.п. после чего вы или наворотите костылей к «стандарной системе», изуродовав ее до неузнаваемости, или скажете что-то типа «зелен виноград».
              0
              OpenHAB расширяется плагинами.
              Хотите велосипед — допишите.
              И речь здесь не о «исправьте сорсы»(которое приведет к костылям и потере совместимости), речь здесь о «допишите».
              Плагины пишутся чисто и красиво, так, как вам угодно.
                0
                Хотите велосипед — допишите.

                Какая экономия времени! Изучить чужой фреймворк, собрать все его подводные камни, потом изучить язык плагинов для этого фреймворка и собрать уже его подводные камни. И в итоге все равно будет свой код, просто в виде плагина для фреймворка. Который конечно же потеряет со временем обратную совместимость.
                  0
                  Ваши доводы противоречат всему опыту человечества в разработке ПО.
                  Даже по пунктам не интересно разбирать в силу очевидной слабости утверждений.
                    –1
                    И это хорошо, ведь в мнении людей, высказывающихся от имени «всего опыта человечества», я не очень заинтересован.
                +1
                будить вас плавным включением света только по будням и при этом учитывать праздники.

                https://home-assistant.io/components/binary_sensor.workday/

                С невозможностью добавить определение наличия кого-то дома по появлению смартфона в домашней wi-fi сети.

                Определял так присутствие, потом сменил роутер и снова ничего не надо программировать, а только поправить одну строчку в конфиге
                https://home-assistant.io/components/#presence-detection

                В одиночку у меня бы ушли месяцы, чтобы самому это написать и с вероятностью 97.5% в моей самописной системе не было бы не списка праздников, ни парсера на десяток роутеров.

                  0
                  В одиночку у меня бы ушли месяцы, чтобы самому это написать
                  Потому я и сказал про специализацию. Я за десяток минут могу написать парсер для вебморды роутера, чтобы получать оттуда список wifi-клиентов. А если там openwrt, то положить скрипт, который будет уведомлять мое устройство.

                  А вот чего я не люблю, так это обнаруживать через год-другой, что фреймворк сменил версию и часть функций отвалилась, у части изменились параметры, часть вообще исчезла поскольку авторы на них забили. И что хуже всего — не все проблемы всплывают сразу, например, изменится название у какого-нибудь события…
                  +1
                  определение наличия кого-то дома по появлению смартфона в домашней wi-fi сети

                  А потом злоумышленник придёт в дом с телефоном, украденным у дражайшей и получит доступ к… холодильнику! Ужос-ужос!

                +1
                я два года писал свой велосипед… а потом у меня закончилось свободное время и проект встал. Да и далек он был от идеала с точки зрения архитектуры, стандартизации, расширяемости и вообще качества работы.
                Потом перешел на home assistant, времени все так же нет, а новые фичи появляются сами раз в пару недель.
                  0
                  HASS ИМХО сложноват для НЕ ITшников.
                  Как и OPenHAB 1.
                  Ибо текстовые конфиги — зло.
                  В этом плане OH2 мне приглянулся сильно как раз возможностью настроить всё через GUI. Даже биндинги.
                  Ну и расписание, конечно.
                    +1
                    openhab настройку я не осилил — очень сложно. Второй какой-то глючный показался… и тормозное всё. И на java- не залезешь в исходники, чтоб патч прописать.
              0
              Извините, а зачем столько насосов на цикруляцию? У вас несколько ванных-туалетов, и на каждой ванной вы гоняете горячую воду, чтоб не ждать, пока нагреется, по кругу через котёл своим насосом? или это для тёплых полов? честно, не понимаю, зачем столько
                0
                просто автор перечитал форумхауса

                а надо было просто сделать гидравлический расчет для системы один раз у профа
                  0
                  У автора как раз все по фэншую. В теплый пол и радиаторы подается теплоноситель с разной температурой, поэтому раздельные контура. Плюс у него разбито по этажам, чтобы можно было отключить неиспользуемые контура.
                    0
                    6 насосов на 2 этажа — много? А сколько норм?
                      0
                      1 насос на теплый пол 1 этажа
                      1 насос на теплый пол цоколь
                      У меня полностью 1 этаж и цоколь в ТП, потому что по мрамору даже прохладным летом не очень комфортно.

                      по насосу на батареи цоколь, 1 этаж, 2 этаж, мансарда.

                      Есть еще 1 насос на котел, который через гидравлическую стрелку соединяется с коллектором и один специальный насос на рециркуляцию горячей воды по дому.
                        0
                        Т.е. вы летом кочегарите газовый котел и греете полы? Чтобы потом это охлаждать кондиционером? Стоил ли того мрамор?
                        0
                        На каждом этаже по коллектору теплого пола, то есть два. Работают от одного насоса.
                          0
                          У меня 1 (один) на два уровня, шесть комнат и два десятка батарей. Когда электричество выключается (бывает и такое) гравитационно добивает на плечо 15 метров от котла с перепадом высот относительно котла с трех метров до двух (подъем в середине).
                        0
                        Тоже возник этот вопрос, вот что надо было ставить в голосовалку и о чем писать следующий пост.
                        Тем более насосы с электрическим задвижками, значит откуда то всё это управляется.
                        0
                        А можно код на ereminspb#gmail?
                          0
                          https://yadi.sk/d/iDj1b2BJ3LSCnQ
                          0
                          В щиток, конечно, впихивать слаботочку совершенно неправильно.
                          Выпихивайте в отдельный бокс.
                          Я для своих колхозов использую распаечные коробки. Они удобны и уже с готовой крышкой.
                            0
                            Да не, мне кажется, в использовании общего щита нет никакого особого криминала. Разве что провода проложить и закрепить поаккуратнее. Тем более, сети связанные (реле управляют нагрузкой).

                            Если придираться, там еще многожильный кабель под винтовыми клеммами без гильз и вообще, как я понимаю, там ШВВП (белый тонкий) и ПВС (белый толстый) — на каком-нибудь форуме электриков народ бы уже обязательно заклеймил автора за это.

                            А если по делу — провода из витой пары — неудачный выбор. Они довольно ломучие, причем часто ломаются где-нибудь под изоляцией недалеко от места пайки. Я бы на месте автора купил бы на авторынке разноцветных проводов.
                              0
                              колхоз с силовой электрикой в щитке ясно не по теме. Но если обратить внимание — там атас — снизу белые, сверху синие. Это делал человек ничего не смыслящий в разводке щитков. Хоть бы форумы почитал. Я уж не говорю про ПУЭ, которые, вообще-то написаны кровью
                                +7
                                Может быть у вас найдется время написать статью на GT про разводку электрики в доме, хорошие практики, про скрытые грабли и прочее? Думаю, многим это будет интересно (мне вот точно интересно).
                                  –1

                                  Не могу пока проголосовать за коммент, но категорически поддерживаю

                                    0
                                    http://www.mastergrad.com/blogs/post/11251/
                                    в блоге автора несколько постов, как раз по вашим хотелкам
                                      +2
                                      Посмотрел. 11251 — не совсем по теме. Вот рядом есть близкое http://www.mastergrad.com/blogs/post/11240/ и более адекватное, но во второй части на окончательной фотке есть явный ляп — негде не видно земли, как будто ее нет. Нет ни шины, ни желто-зеленых проводов. Писать на эту тему еще один пост, теперь в GT — надо подумать.
                                        –1
                                        Кинул вам кармы авансом. Голосую за статью!
                                          0
                                          Если вы про это фото — http://www.mastercity.ru/blogs/uploads/media/topic/2016/11/30/14/c4f82f0c17927751ef57.jpg
                                          то откуда в собранном, но не установленном щитке взяться земле?
                                          Земля в нормальных условиях никогда ничем не должна коммутироваться и просто собирается на шинке в удобном месте. Так что ляпом я это не назову.
                                          Вот пример установленного щитка, земля собрана на шинке в верхнем правом углу
                                          https://habrastorage.org/web/dd3/205/55b/dd320555b011458291a7a7a10e9ce4fc.jpg
                                            0
                                            c4f82f0c17927751ef57.jpg — действительно не заметил что щиток не установлен.
                                            dd320555b011458291a7a7a10e9ce4fc.jpg
                                            -нет подписей
                                            -посмотрите на запитку шин свеху автоматов. Белые провода идут к УЗО в наконечниках. А снизу — нет. Если это многопроволочный провод (ПВС?) — то «приехали»
                                            -одна из земель — черная. С какого бодуна?
                                            -снизу вошло 3 земли, а до верху дошли лишь две. Где одна потерялась?
                                            -снизу слева на нулевой шине 5 потребителей. А автоматов слева только четыре. Что за пятый потребитель занулен там?
                                            -Ввод снизу, идет вдоль вывода с левых автоматов. Это не самая удачная компоновка. Я бы не стал делать ввод рядом с выводом и тем более не стал бы вести их вплотную параллельно. Лучше делать отдельно с зазором. Сдвинул бы автоматы максимально вправо и ставил зазор между вводными линиями и потребителями.
                                              0
                                              >> нет подписей
                                              Возможно, они на крышке

                                              >> Белые провода идут к УЗО в наконечниках. А снизу — нет.
                                              Синие со стороны шины — тоже. Рискну предположить, что с наконечником не влезли. Возможно, они облужены или наконечник используется без пластиковой «юбочки».

                                              >> одна из земель — черная. С какого бодуна?
                                              У меня у родителей система уравнивания потенциалов в санузле была сделана черным проводом. Может, тут так же?

                                              >> снизу вошло 3 земли, а до верху дошли лишь две. Где одна потерялась?
                                              Возможно, ее закрывает L от правого УЗО

                                              А число проводов у меня тоже не сошлось. Помимо «лишней» N, есть еще «лишняя» PE, но я не нашел еще одной фазы… Разве что, со второго слева автомата может выходить два провода, один идет наверх, его не видно, второй — вниз. Рискну предположить, что так питается какая-нибудь розетка для роутера в соседнем слаботочном щите.
                                                0
                                                ну без нюансов да, распишу.
                                                — подписи появились позже, после установки крышки
                                                — щиток собирался гибким проводом ПуГВ-3, везде где должно стоят НШВИ и НШВ. Там, где вывод с УЗО подключается к автоматам с гребенкой, стоит НШВ, т.к. НШВИ своей изоляцией будет мешать нормально обжать гребенку
                                                — провод от застройщика :) заземление ванной
                                                — отдельная розетка под щитком, она подключена к автомату одной из силовых линий. Почему землю не видно, проверю вечером :)
                                                — аналогично предыдущему
                                                — Имхо, это на вкус и цвет, и в каждом варианте есть свои преимущества. Или есть регламент?
                                                  0
                                                  про дополнительную землю торможу с утра — провод просто не видно, по кол-ву подключений на шине заземления все сходится
                                          +1
                                          В первом приближении — ликбез готов.
                                          Надо еще подготовить картинки, и подумать, может что-то еще существенное осталось.
                                          https://docs.google.com/document/d/1WfW8pjWDOLy74uqUPzgs5K3PO32_1P1h-OBnjBMSgyA/pub

                                            0

                                            cs-cs.net плюс голова на плечах. Мне помогло :)

                                        0
                                        Кстати говоря подобные модули 8266 могут ловить помехи от с электросети, от такого соседства. Сам пару раз сталкивался с подобным.
                                        +1
                                        Следующим проектом — сделать все правильно и доделать этот :)
                                          0
                                          Сколько времени работает (без перезагрузок)?
                                          Просто смартфон вроде бы как не самое стабильное устройство, что бы использовать его в качестве сервера… Железяку типа малинки можно по сторожевому таймеру рестартовать, а смартфон то проблематично вроде бы так сделать. Зависнет в самый неподходящий момент.
                                            0
                                            У мну древний Highscreen Jet Duo в качестве будильника и панели управления. Последний раз перезагружался год или два назад.
                                            Стабильность не проблема класса устроств, а проблема конкретных устройств.
                                            Ну и ничто не мешает также перезагружать смарт по сторожевому таймеру. Подпаяться к кнопке — плевое дело.
                                            0
                                            Orange pi zero в студию. Сколько я не мучился с этим чудом китайской мысли — вдохнуть жизнь в такой маленький пирожок оказалось делом выше моих сил. Я скачивал прошивки на официальном и левых сайтах, я покупал прошивки с рук и обменивал на криптовалюту. Думаю, мне просто попался бракованный образец.

                                            Для Orange Pi есть смысл сразу начинать со сборки мейнлайновых U-Boot и ядра. Хотя, вполне вероятно, действительно брак.
                                              +1
                                              С виду интерфейсы интересные
                                              webzuweb, а можете просто выложить исходники, как есть в github — ну просто чтобы не отвечать всем заинтересованным в личку. Плюс, может, кто-то что-то подправит, разовьет. Получите какие-то полезные pull requests.

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

                                              Самое читаемое