Я провел много часов повторяя проекты других по умным беспроводным вещам. Это привело меня к очевидному выводу: после третьего-четвертого проекта ты обнаруживаешь, что все они выполнены на разных принципах, с использованием разных технологий и приемов, особенно после того, как изменил или модернизировал некоторые из них. Это значит, что что твой мир вещей становится абсолютно не подлежащим обслуживанию.
Другими словами, ты должен поддерживать огромные библиотеки спецификаций и кодов. И необходимо больше времени для того чтобы справиться со всеми своими устройствами. Определенно, некоторые более организованы, чем я, но, наверняка, большинство в борьбе с энтропией добились незначительных успехов. Без обид.
Что делать, чтобы обуздать нашествие роботов на свой дом (а это в любом случае неизбежно)?.. Все просто. Вещи проще. Облако умнее.
Крохотный сервер принимает данные с датчиков, хранит их и посылает команды исполнительным устройствам. Теперь ваши устройства не толпа мыслящих вещей. Они лишь синапсы мозга сервера. Это просто и естественно.
В моей сети два типа устройств:
Все они общаются с сервером посредством модулей wifi (ESP8266 из известного китайского магазина). Входы отправляют данные о своем состоянии на сервер базы данных. Выходы принимают и исполняют команды от сервера. Как я уже упомянул, никакого разума у устройств нет.
Цель — сделать вещи как можно более простыми.
Вся логика остается на сервере. На сервере все алгоритмы, триггеры и т.п. Например, сервер принимает решение включить отопление, если температура в определенных помещениях опускается ниже определенного уровня на определенное количество времени. Сервер принимает решение открыть электромагнитный клапан полива в теплице, если влажность почвы упала до определенного уровня в определенное время суток. Естественно, человек может всегда вмешаться и взять управление в свои руки или изменить логику. Сервер также уведомляет владельца о критических событиях по СМС. Он может принимать команды с определенных телефонов.
![image](http://cdn.instructables.com/F4I/06EI/IPOHKZC1/F4I06EIIPOHKZC1.LARGE.jpg)
![image](http://cdn.instructables.com/F1D/OTWI/IPMVCPFL/F1DOTWIIPMVCPFL.LARGE.jpg)
Я использовал маленький беспроводный роутер с OpenWRT и расширенной памятью, способный содержать веб сервер и сервер баз данных — Gl-iNet 6416A не дороже 25 USD.
Удивительно крохотное устройство дает нам:
Это мое частное облако. Оно создает свою собственную подсеть сеть (192.168.8.1), свою собственную сеть wifi, доступную только моим вещам. У него также есть внешний интерфейс (WAN), подключенный к моему обычному домашнему роутеру (с назначенным адресом 192.168.1.100). Он нужен для доступа к панели управления из моей домашней wifi сети.
Прикладное программное обеспечение, использованное в проекте:
Текущая конфигурация хранится на GitHub.
И да, виноват, я использовал флешку как файловое хранилище, хотя по-взрослому не стоит использовать память NAND (требование mySQL).
![image](http://cdn.instructables.com/FLL/ILDR/IPOHL0KN/FLLILDRIPOHL0KN.LARGE.jpg)
Модуль 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](http://cdn.instructables.com/FWG/ABEE/IOIWD2O0/FWGABEEIOIWD2O0.LARGE.jpg)
![image](http://cdn.instructables.com/FEE/Q7YE/IOIWD2O9/FEEQ7YEIOIWD2O9.LARGE.jpg)
![image](http://cdn.instructables.com/FHW/GXJ9/IPMVCTFK/FHWGXJ9IPMVCTFK.LARGE.jpg)
Цель — сделать периферийный устройства как можно более простыми. Например модуль с двумя реле (выключатели света) состоит из:
Всё про всё — 7 USD.
![image](http://cdn.instructables.com/FLK/A4CP/IOIWD2RS/FLKA4CPIOIWD2RS.LARGE.jpg)
![image](http://cdn.instructables.com/FSA/PUIB/IOIWD2P9/FSAPUIBIOIWD2P9.LARGE.jpg)
Устройство с датчиком состоит из:
Всё не более 5 USD.
Он измеряет показания температуры и влажности и каждые 3 минуты отправляет на сервер, где они сохраняются в базу данных mySQL.
![image](http://cdn.instructables.com/F37/7MVP/IOIWD2SV/F377MVPIOIWD2SV.LARGE.jpg)
![image](http://cdn.instructables.com/FIK/XQMZ/IOIWD2UQ/FIKXQMZIOIWD2UQ.LARGE.jpg)
![image](http://cdn.instructables.com/FZK/ZROO/IOIWD2VU/FZKZROOIOIWD2VU.LARGE.jpg)
![image](http://cdn.instructables.com/FW1/1N6P/IOIWD2WT/FW11N6PIOIWD2WT.LARGE.jpg)
![image](http://cdn.instructables.com/F31/7J58/IOIWDRHZ/F317J58IOIWDRHZ.LARGE.jpg)
Самое интересное это то, что у меня нет обычных панелей управления. Все интерфейсы виртуальные. Кнопки, выключатели, движки виртуальны. Конечно, можно сделать их реальными и некоторые из них я сделаю.
С помощью этого сайта мы можем наблюдать историю датчиков и текущие значения, можем управлять лампами, клапанами и т.п.
Вы всегда можете добавить новые устройства к панели при помощи простых навыков HTML и Javascript кодирования.
Я использовал карты ссылок с изображениями построенными в простой программе SweetHome 3D для организации навигации по дому.
Гораздо больше людей знают как кодировать для веба (PHP, Javascript, HTML), чем для контроллеров (C++, Lua). При помощи этой структуры мы можем получать, запрашивать, отправлять данные и команды простыми php или js скриптами. Мы можем построить обучаемую систему, которая сможет приспосабливаться к нашим привычкам, сообщать нам о происшествиях.
Другими словами, ты должен поддерживать огромные библиотеки спецификаций и кодов. И необходимо больше времени для того чтобы справиться со всеми своими устройствами. Определенно, некоторые более организованы, чем я, но, наверняка, большинство в борьбе с энтропией добились незначительных успехов. Без обид.
Что делать, чтобы обуздать нашествие роботов на свой дом (а это в любом случае неизбежно)?.. Все просто. Вещи проще. Облако умнее.
Концепция
- Устройства как можно проще: стандартный модуль связи с частным облаком. Состоит из беспроводного модуля и скриптов инициализации (как в модуле, так и на сервере). Если модуль выходит из строя, выбрасываем его и меняем на новый стандартный модуль.
- Вся логика и интеллект располагается на сервере. Простом роутере на линукс.
Вещи проще. Облако умнее
Крохотный сервер принимает данные с датчиков, хранит их и посылает команды исполнительным устройствам. Теперь ваши устройства не толпа мыслящих вещей. Они лишь синапсы мозга сервера. Это просто и естественно.
В моей сети два типа устройств:
- Датчики и элементы управления (входные) и
- Реле, клапаны и т.п. (выходные)
Все они общаются с сервером посредством модулей wifi (ESP8266 из известного китайского магазина). Входы отправляют данные о своем состоянии на сервер базы данных. Выходы принимают и исполняют команды от сервера. Как я уже упомянул, никакого разума у устройств нет.
Цель — сделать вещи как можно более простыми.
Вся логика остается на сервере. На сервере все алгоритмы, триггеры и т.п. Например, сервер принимает решение включить отопление, если температура в определенных помещениях опускается ниже определенного уровня на определенное количество времени. Сервер принимает решение открыть электромагнитный клапан полива в теплице, если влажность почвы упала до определенного уровня в определенное время суток. Естественно, человек может всегда вмешаться и взять управление в свои руки или изменить логику. Сервер также уведомляет владельца о критических событиях по СМС. Он может принимать команды с определенных телефонов.
Ядро умного облака
![image](http://cdn.instructables.com/F4I/06EI/IPOHKZC1/F4I06EIIPOHKZC1.LARGE.jpg)
![image](http://cdn.instructables.com/F1D/OTWI/IPMVCPFL/F1DOTWIIPMVCPFL.LARGE.jpg)
Я использовал маленький беспроводный роутер с 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).
Стандартный модуль
![image](http://cdn.instructables.com/FLL/ILDR/IPOHL0KN/FLLILDRIPOHL0KN.LARGE.jpg)
Модуль 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](http://cdn.instructables.com/FWG/ABEE/IOIWD2O0/FWGABEEIOIWD2O0.LARGE.jpg)
![image](http://cdn.instructables.com/FEE/Q7YE/IOIWD2O9/FEEQ7YEIOIWD2O9.LARGE.jpg)
![image](http://cdn.instructables.com/FHW/GXJ9/IPMVCTFK/FHWGXJ9IPMVCTFK.LARGE.jpg)
Цель — сделать периферийный устройства как можно более простыми. Например модуль с двумя реле (выключатели света) состоит из:
- Блока питания AC-DC
- Стабилизатора питания на 3,3В
- ESP8266 (в данном случае ESP-01 с двумя управляемыми пинами)
- модули реле
- корпус
Всё про всё — 7 USD.
Датчики (входы)
![image](http://cdn.instructables.com/FLK/A4CP/IOIWD2RS/FLKA4CPIOIWD2RS.LARGE.jpg)
![image](http://cdn.instructables.com/FSA/PUIB/IOIWD2P9/FSAPUIBIOIWD2P9.LARGE.jpg)
Устройство с датчиком состоит из:
- Блока питания
- Стабилизатора питания
- Модуля wifi (опять ESP01)
- Цифрового датчика температуры и влажности DHT11
Всё не более 5 USD.
Он измеряет показания температуры и влажности и каждые 3 минуты отправляет на сервер, где они сохраняются в базу данных mySQL.
Управление
![image](http://cdn.instructables.com/F37/7MVP/IOIWD2SV/F377MVPIOIWD2SV.LARGE.jpg)
![image](http://cdn.instructables.com/FIK/XQMZ/IOIWD2UQ/FIKXQMZIOIWD2UQ.LARGE.jpg)
![image](http://cdn.instructables.com/FZK/ZROO/IOIWD2VU/FZKZROOIOIWD2VU.LARGE.jpg)
![image](http://cdn.instructables.com/FW1/1N6P/IOIWD2WT/FW11N6PIOIWD2WT.LARGE.jpg)
![image](http://cdn.instructables.com/F31/7J58/IOIWDRHZ/F317J58IOIWDRHZ.LARGE.jpg)
Всё веселье на сервере!
Самое интересное это то, что у меня нет обычных панелей управления. Все интерфейсы виртуальные. Кнопки, выключатели, движки виртуальны. Конечно, можно сделать их реальными и некоторые из них я сделаю.
С помощью этого сайта мы можем наблюдать историю датчиков и текущие значения, можем управлять лампами, клапанами и т.п.
Вы всегда можете добавить новые устройства к панели при помощи простых навыков HTML и Javascript кодирования.
Я использовал карты ссылок с изображениями построенными в простой программе SweetHome 3D для организации навигации по дому.
Включите свое воображение
Гораздо больше людей знают как кодировать для веба (PHP, Javascript, HTML), чем для контроллеров (C++, Lua). При помощи этой структуры мы можем получать, запрашивать, отправлять данные и команды простыми php или js скриптами. Мы можем построить обучаемую систему, которая сможет приспосабливаться к нашим привычкам, сообщать нам о происшествиях.