В сети много раз наталкивался на различные поделки типа моей. Почти все либо на Arduino либо на ESP8266. И мало кто использует websocket. Есть куча вариантов:
- Сбор данных с датчиков (температура, давление, влажность, освещенность) ардуинкой или ESP8266.
- Переключение нагрузки через приложение или страничку при использовании вебсервера на Arduino.
- Попытки локально поднять точку управления модулями на базе той же ардуинки.
- Даже нашел несколько вариантов с архитектурой подобной electro control center. Правда нигде не смог отрыть исходники этого.
- Есть куча решений, которые в удобном формате принимают данные с чего угодно и отображают их.
Почти все они мне не подошли, поэтому набросал свой вариант. Расположил я его пока тут: wall.electro-control-center.ru/mainframe. Он написан на питоне с использованием фрэймворка django и tornado. О нем много написано в блоге, останавливаться не буду. В текущем релизе общение с Arduino происходит через websocket.
Краткое описание центра управления
Далее по тексту будет употребляться термин: центр управления или electro control center (ecc) – это сервер, с которым общаются ардуинки (ноды или звенья).
Вот скриншоты моего аккаунта. На нем два выключателя и 6 текущих значений датчиков.
Ниже графики по датчикам.
На графиках я вывожу три значения агрегированные за час: максимальное значени, среднее и минимальное. Позже добавлю возможность настройки графиков и вывода их на определенные страницы. Сейчас они отображаются в зоне, ноде и на дашборде.
Пока ардуинка весит в коридоре и выполняет функции всего, что конечно делает её медленной. А именно, она включает и выключает освещение по сигналу из ecc (electro control center), по датчику движения, по кнопке, отправляет значения нескольких датчиков.
Алгоритм подключения Arduino к центру управления
Регистрация
Пишите мне на почту: admin@electro-control-center.ru. В теме укажите: «новый аккаунт в ecc».
Нода (звено, Arduino)
Берем любую ардуинку, например Arduino UNO.
Я использую Arduino Leonardo, Arduino UNO с чипом CH340G и Arduino Mega с чипом CH340G. Основное отличие китайских дешевых ардуинок на чипе CH340G – это то, что в них медленно заливаются скетчи. В остальном работают так же.
Подключаем к ней сетевой модуль, например Ethernet shield w5100. Подключаем к ней, например, датчик температуры и влажности DHT-22. Втыкаем в сеть.
Подключение ноды к центру управления
Логинимся в админку по адресу wall.electro-control-center.ru/admin/login.
Подключение и настройка элементов описана в документации на странице подключение узла к центру управления.
Скетч для Arduino
Загружаем модуль Arduino-Websocket для работы с вебсокетом отсюда.
Вносим правку иначе компилятор будет ругаться:
Находим папку с загруженной библиотекой и открываем файл sha1.cpp.
uint8_t sha1InitState[] PROGMEM = {
исправляем на:
const uint8_t sha1InitState[] PROGMEM = {
Скачиваем работающий скетч с гитхаба.
Берем этот скетч с гитхаба, заменяем токен, который можно получить в админке при редактировании ноды и загружаем в ардуинку. При наличии интернета ардуинка довольно быстро подцепится к центру управления и начнет отправлять туда данные.
Если у вас другая сетевая плата или другой датчик или вы вообще что-то хотите менять, то описание API ардуинки вам в помощь. А что касается работы с другими сетевыми интерфейсами, то позже добавлю еще несколько вариантов на основе тех, что у меня есть.
Заходим в центр управления
Адрес wall.electro-control-center.ru/mainframe.
В центре управления должен появиться блок с вашим датчиком (на странице ноды) и график.
Полезные ссылки
- Описание API центра управления для работы с Arduino.
- Подключение узла к центру управления.
- Заметка про перевод центра управления на websocket.
- Тут ссылки на исходники центра управления и скетчей. Скетчи не все рабочие, так как по мере их появления менялся API центра управления.