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

в 16:09, , рубрики: android, arduino, diy или сделай сам, IoT, антипаттерны домашней автоматизации, умный дом, умный дом и смартфон, Умный дом из старого смартфона, метки: ,

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

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

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

image

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

image

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

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

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

Бэкенд

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

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

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

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

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

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

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

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

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

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

Фронтенд

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

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

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

ESP-8266

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прошивка

Решил использовать для прошивки 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-принтер на строительных шпильках

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

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

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

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

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

Автор: webzuweb

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js