[Из песочницы] Беспроводное домашнее облако для вещей интернета

Я провел много часов повторяя проекты других по умным беспроводным вещам. Это привело меня к очевидному выводу: после третьего-четвертого проекта ты обнаруживаешь, что все они выполнены на разных принципах, с использованием разных технологий и приемов, особенно после того, как изменил или модернизировал некоторые из них. Это значит, что что твой мир вещей становится абсолютно не подлежащим обслуживанию.

Другими словами, ты должен поддерживать огромные библиотеки спецификаций и кодов. И необходимо больше времени для того чтобы справиться со всеми своими устройствами. Определенно, некоторые более организованы, чем я, но, наверняка, большинство в борьбе с энтропией добились незначительных успехов. Без обид.

Что делать, чтобы обуздать нашествие роботов на свой дом (а это в любом случае неизбежно)?… Все просто. Вещи проще. Облако умнее.

Концепция

  1. Устройства как можно проще: стандартный модуль связи с частным облаком. Состоит из беспроводного модуля и скриптов инициализации (как в модуле, так и на сервере). Если модуль выходит из строя, выбрасываем его и меняем на новый стандартный модуль.
  2. Вся логика и интеллект располагается на сервере. Простом роутере на линукс.


Вещи проще. Облако умнее
Крохотный сервер принимает данные с датчиков, хранит их и посылает команды исполнительным устройствам. Теперь ваши устройства не толпа мыслящих вещей. Они лишь синапсы мозга сервера. Это просто и естественно.

В моей сети два типа устройств:

  • Датчики и элементы управления (входные) и
  • Реле, клапаны и т.п. (выходные)


Все они общаются с сервером посредством модулей wifi (ESP8266 из известного китайского магазина). Входы отправляют данные о своем состоянии на сервер базы данных. Выходы принимают и исполняют команды от сервера. Как я уже упомянул, никакого разума у устройств нет.

Цель — сделать вещи как можно более простыми.

Вся логика остается на сервере. На сервере все алгоритмы, триггеры и т.п. Например, сервер принимает решение включить отопление, если температура в определенных помещениях опускается ниже определенного уровня на определенное количество времени. Сервер принимает решение открыть электромагнитный клапан полива в теплице, если влажность почвы упала до определенного уровня в определенное время суток. Естественно, человек может всегда вмешаться и взять управление в свои руки или изменить логику. Сервер также уведомляет владельца о критических событиях по СМС. Он может принимать команды с определенных телефонов.

Ядро умного облака


image

image

Я использовал маленький беспроводный роутер с OpenWRT и расширенной памятью, способный содержать веб сервер и сервер баз данных — Gl-iNet 6416A не дороже 25 USD.

Удивительно крохотное устройство дает нам:

  1. Веб сервер lighttpd для размещения страниц интерфейса (предустановлен)
  2. php, чтобы они были интерактивными (предустановлен)
  3. Сервер баз данных MySQL для хранения данных (устанавливается). Кое-кто использует SQlite, но он не способен обрабатывать одновременные запросы, в топку


Это мое частное облако. Оно создает свою собственную подсеть сеть (192.168.8.1), свою собственную сеть wifi, доступную только моим вещам. У него также есть внешний интерфейс (WAN), подключенный к моему обычному домашнему роутеру (с назначенным адресом 192.168.1.100). Он нужен для доступа к панели управления из моей домашней wifi сети.

Прикладное программное обеспечение, использованное в проекте:

  • WinSCP — графический FTP клиент для доступа к файлам
  • HeidiSQL — графический SQL клиент для доступа к базе данных
  • PuTTy — клиент SSH для передачи команд операционной системе OpenWRT


Текущая конфигурация хранится на GitHub.

И да, виноват, я использовал флешку как файловое хранилище, хотя по-взрослому не стоит использовать память NAND (требование mySQL).

Стандартный модуль


image

Модуль wifi (ESP8266) заправленный стандартным скетчем. Вкратце, он считывает параметры последнего доступа к точке доступа, пытается к ней подключиться, если ему не удается, он запускает свою точку доступа и страницу с формой для новых параметров доступа. А если ему удается подключиться, он загружает с сервера предназначенные этому модулю скрипты и запускает их. Модули различаются по MAC адресам.

В моем облаке для каждого MAC адреса есть выделенная папочка с рабочими скриптами по адресу 192.168.8.1:86

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

AP_config — две строки: SSID и пароль.

init.lua — подключение к точке доступа с сохраненными параметрами из AP_config. При неудаче — запуск do («ap_request.lua»). При удаче — загрузка рабочих скриптов и запуск их.

ap_request.lua — запрос новых параметров доступа к точке доступа, запись их в файл AP_config (в случае, если подключение с предустановленными не удалось).

Скрипты модуля

Управляемые устройства


image

image

image

Цель — сделать периферийный устройства как можно более простыми. Например модуль с двумя реле (выключатели света) состоит из:

  • Блока питания AC-DC
  • Стабилизатора питания на 3,3В
  • ESP8266 (в данном случае ESP-01 с двумя управляемыми пинами)
  • модули реле
  • корпус


Всё про всё — 7 USD.

Датчики (входы)


image

image

Устройство с датчиком состоит из:

  • Блока питания
  • Стабилизатора питания
  • Модуля wifi (опять ESP01)
  • Цифрового датчика температуры и влажности DHT11


Всё не более 5 USD.

Он измеряет показания температуры и влажности и каждые 3 минуты отправляет на сервер, где они сохраняются в базу данных mySQL.

Управление


image

image

image

image

image

Всё веселье на сервере!


Самое интересное это то, что у меня нет обычных панелей управления. Все интерфейсы виртуальные. Кнопки, выключатели, движки виртуальны. Конечно, можно сделать их реальными и некоторые из них я сделаю.

С помощью этого сайта мы можем наблюдать историю датчиков и текущие значения, можем управлять лампами, клапанами и т.п.
Вы всегда можете добавить новые устройства к панели при помощи простых навыков HTML и Javascript кодирования.

Я использовал карты ссылок с изображениями построенными в простой программе SweetHome 3D для организации навигации по дому.

Включите свое воображение


Гораздо больше людей знают как кодировать для веба (PHP, Javascript, HTML), чем для контроллеров (C++, Lua). При помощи этой структуры мы можем получать, запрашивать, отправлять данные и команды простыми php или js скриптами. Мы можем построить обучаемую систему, которая сможет приспосабливаться к нашим привычкам, сообщать нам о происшествиях.

© Geektimes