Я провел много часов повторяя проекты других по умным беспроводным вещам. Это привело меня к очевидному выводу: после третьего-четвертого проекта ты обнаруживаешь, что все они выполнены на разных принципах, с использованием разных технологий и приемов, особенно после того, как изменил или модернизировал некоторые из них. Это значит, что что твой мир вещей становится абсолютно не подлежащим обслуживанию.
Другими словами, ты должен поддерживать огромные библиотеки спецификаций и кодов. И необходимо больше времени для того чтобы справиться со всеми своими устройствами. Определенно, некоторые более организованы, чем я, но, наверняка, большинство в борьбе с энтропией добились незначительных успехов. Без обид.
Что делать, чтобы обуздать нашествие роботов на свой дом (а это в любом случае неизбежно)?.. Все просто. Вещи проще. Облако умнее.
Концепция
- Устройства как можно проще: стандартный модуль связи с частным облаком. Состоит из беспроводного модуля и скриптов инициализации (как в модуле, так и на сервере). Если модуль выходит из строя, выбрасываем его и меняем на новый стандартный модуль.
- Вся логика и интеллект располагается на сервере. Простом роутере на линукс.
Вещи проще. Облако умнее
Крохотный сервер принимает данные с датчиков, хранит их и посылает команды исполнительным устройствам. Теперь ваши устройства не толпа мыслящих вещей. Они лишь синапсы
В моей сети два типа устройств:
- Датчики и элементы управления (входные) и
- Реле, клапаны и т.п. (выходные)
Все они общаются с сервером посредством модулей wifi (ESP8266 из известного китайского магазина). Входы отправляют данные о своем состоянии на сервер базы данных. Выходы принимают и исполняют команды от сервера. Как я уже упомянул, никакого разума у устройств нет.
Цель — сделать вещи как можно более простыми.
Вся логика остается на сервере. На сервере все алгоритмы, триггеры и т.п. Например, сервер принимает решение включить отопление, если температура в определенных помещениях опускается ниже определенного уровня на определенное количество времени. Сервер принимает решение открыть электромагнитный клапан полива в теплице, если влажность почвы упала до определенного уровня в определенное время суток. Естественно, человек может всегда вмешаться и взять управление в свои руки или изменить логику. Сервер также уведомляет владельца о критических событиях по СМС. Он может принимать команды с определенных телефонов.
Ядро умного облака
Я использовал маленький беспроводный роутер с OpenWRT и расширенной памятью, способный содержать веб сервер и сервер баз данных — Gl-iNet 6416A не дороже 25 USD.
Удивительно крохотное устройство дает нам:
- Веб сервер lighttpd для размещения страниц интерфейса (предустановлен)
- php, чтобы они были интерактивными (предустановлен)
- Сервер баз данных MySQL для хранения данных (устанавливается). Кое-кто использует SQlite, но он не способен обрабатывать одновременные запросы, в топку
Это мое частное облако. Оно создает свою собственную подсеть сеть (192.168.8.1), свою собственную сеть wifi, доступную только моим вещам. У него также есть внешний интерфейс (WAN), подключенный к моему обычному домашнему роутеру (с назначенным адресом 192.168.1.100). Он нужен для доступа к панели управления из моей домашней wifi сети.
Прикладное программное обеспечение, использованное в проекте:
- WinSCP — графический FTP клиент для доступа к файлам
- HeidiSQL — графический SQL клиент для доступа к базе данных
- PuTTy — клиент SSH для передачи команд операционной системе OpenWRT
Текущая конфигурация хранится на GitHub.
И да, виноват, я использовал флешку как файловое хранилище, хотя по-взрослому не стоит использовать память NAND (требование mySQL).
Стандартный модуль
Модуль 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 (в случае, если подключение с предустановленными не удалось).
Управляемые устройства
Цель — сделать периферийный устройства как можно более простыми. Например модуль с двумя реле (выключатели света) состоит из:
- Блока питания AC-DC
- Стабилизатора питания на 3,3В
- ESP8266 (в данном случае ESP-01 с двумя управляемыми пинами)
- модули реле
- корпус
Всё про всё — 7 USD.
Датчики (входы)
Устройство с датчиком состоит из:
- Блока питания
- Стабилизатора питания
- Модуля wifi (опять ESP01)
- Цифрового датчика температуры и влажности DHT11
Всё не более 5 USD.
Он измеряет показания температуры и влажности и каждые 3 минуты отправляет на сервер, где они сохраняются в базу данных mySQL.
Управление
Всё веселье на сервере!
Самое интересное это то, что у меня нет обычных панелей управления. Все интерфейсы виртуальные. Кнопки, выключатели, движки виртуальны. Конечно, можно сделать их реальными и некоторые из них я сделаю.
С помощью этого сайта мы можем наблюдать историю датчиков и текущие значения, можем управлять лампами, клапанами и т.п.
Вы всегда можете добавить новые устройства к панели при помощи простых навыков HTML и Javascript кодирования.
Я использовал карты ссылок с изображениями построенными в простой программе SweetHome 3D для организации навигации по дому.
Включите свое воображение
Гораздо больше людей знают как кодировать для веба (PHP, Javascript, HTML), чем для контроллеров (C++, Lua). При помощи этой структуры мы можем получать, запрашивать, отправлять данные и команды простыми php или js скриптами. Мы можем построить обучаемую систему, которая сможет приспосабливаться к нашим привычкам, сообщать нам о происшествиях.
Автор: Alex--T