Как стать автором
Обновить

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

Время на прочтение 5 мин
Количество просмотров 57K
Здравствуйте, дорогие читатели! Очередная история о том, как менеджер самого среднего звена, сдувая пыль с залежавшихся железок на полке, творит такое, от чего у профессионалов всех мастей боль в глазах. ¡Но, это работает, 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-принтер на строительных шпильках


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


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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Так какой же проект делать следующим?
23.41% Доделать KickBrick 59
34.52% Доделать дельта 3D-принтер на строительных шпильках 87
42.06% Стабилизатор для зеркальной камеры 106
Проголосовали 252 пользователя. Воздержались 159 пользователей.
Теги:
Хабы:
+25
Комментарии 47
Комментарии Комментарии 47

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн