Три года назад Я рассказал вам, как я сделал приставку к импульсным счетчикам воды «Ватериус».
Устройство считает импульсы со счетчиков воды, просыпается раз в сутки и отправляет данные на сервер по Wi-Fi. Следующий этап, который мы запустили Веб-сайт — услуга по передаче показаний управляющим компаниям.
Чтобы грамотно отвечать пользователям, что не так с их устройствами, была настроена база данных временных рядов InfluxDB и Grafana для рисования графиков.
К сайту сейчас подключено около 1600 устройств — есть за чем «мониторить»… Grafana имеет 4 дашборда:
- мониторинг состояния сервера
- мониторинг состояния тестового сервера
- графики по устройствам
- статистика и бизнес-метрики
Сначала покажу личный аккаунт Ватериуса в стиле «минимализм»:
Личный кабинет пользователя сайта Вы можете включить статистику по месяцам
И настраиваем отправку показаний в разные места:
Уже 95 площадок по всей России.
.
Устройства отправляют на сервер гораздо больше данных (подробное описание полей на github ).
Первая версия имела следующие поля:
- количество импульсов;
- показания счетчиков, куб.
м;
- разница показаний от предыдущего пробуждения, л;
- причина загрузки attiny85 (значение регистра);
- версии прошивок микроконтроллеров Attiny и ESP;
- количество перезагрузок;
- пульсовая масса в метре (1 или 10 литров).
Уровень сигнала полезен, если устройство регулярно теряет соединение.
Количество перезагрузок указывает на замену батареи или проблемы.
Чтобы выбрать устройство в базе данных, используйте поля со списком электронной почты и токена.
Графики расхода пригодятся, если настройка отклонилась от инструкции и показания опережают или отстают.
Схема подачи горячей и холодной воды Администратор видит, что горячей воды расходуется гораздо больше, чем холодной, и может сделать вывод, что счетчик горячей воды стоит на 1 л/имп, а Ватериус решил, что на 10. Однажды Ватериус насчитал для друга 20 кубометров за неделю.
Я испугался, и когда пришел чинить, обнаружил, что провода счетчика не закреплены в разъеме.
В прошивку сразу был добавлен уровень сигнала на входе микроконтроллера (analogRead) в момент замыкания геркона.
По нему можно судить о качестве подключения Ватериуса к счетчикам.
Если значение скачет, значит, провод не закреплен.
На графике ниже АЦП изменяется в пределах погрешности измерения 103-104, что говорит о хорошем контакте.
Здесь на Горячей Воде мы видим плохой контакт провода с Ватериусом:
Позже я добавил продолжительность пробуждения Ватериуса по Wi-Fi (время пробуждения), чтобы судить о его отношениях с маршрутизатором.
А длительность настройки Ватериуса пользователем (setuptime) позволяет узнать, когда и сколько раз он его настраивал.
На панели управления Grafana администратор переключается между устройствами, используя адрес электронной почты пользователя и уникальный номер Vaterium. Если устройств несколько, все они будут отображены во всплывающем списке.
Чтобы создать такие поля со списком, мы используем переменные панели мониторинга:
Ниже приведен пример графиков, когда с устройством случилось что-то плохое.
Ватериус очень часто выходил на связь, потом батарейки сели, через неделю пользователь установил новые и перепрошил микроконтроллер - количество перезагрузок (boot) обнулилось.
Для упрощения конструкции в Ватериусе нет вольтметра.
Напряжение измеряется в ESP после стабилизатора.
При включении Wi-Fi есть скачки.
Если нарисовать их график (напряжение_дифф), то можно увидеть, что к концу срока службы батареи они становятся частыми.
Когда батарейки разрядятся, мы оповестим вас по электронной почте (устройство не выходит на связь 5 дней).
Любопытно, что Ватериус продолжит снимать показания — напряжения для питания аттины хватает, но не хватает для включения Wi-Fi. Настройки виджетов Grafana такие же:
Виджет Стат Текущее значение счетчика воды:
SELECT mean("ch0") FROM "infinity".
"waterius" WHERE ("email" =~ /^$email$/ AND "token" =~ /^$token$/) AND $timeFilter GROUP BY time($__interval)
Виджет График (старый) разница в литрах:
SELECT mean("delta0") FROM "infinity".
"waterius" WHERE ("email" =~ /^$email$/ AND "token" =~ /^$token$/) AND $timeFilter GROUP BY time($__interval)
Код Python, который отправляет информацию в базу данных InfluxDB:
client = InfluxDBClient(host, port,
INFLUXDB_USERNAME, INFLUXDB_PASS,
INFLUXDB_DB, ssl=ssl, verify_ssl=True, timeout=3.0)
def influx_send(data):
try:
point = {
'measurement': 'waterius',
'tags': {},
'fields': {}
}
tags = ['version', 'version_esp', 'email', 'f'] # + key
fields = ['delta0', 'delta1', 'good', 'boot', 'ch0', 'ch1', 'imp0', 'imp1',
'voltage', 'resets', 'voltage_low', 'voltage_diff', 'rssi',
'waketime', 'setuptime', 'adc0', 'adc1']
for name in tags:
if name in data:
point['tags'][name] = data[name]
for name in fields:
if name in data:
point['fields'][name] = data[name]
if 'key' in data:
point['tags']['token'] = data['key'] # influxdb 'key' is a keyword
if not client.write_points([point, ]):
log.error('InfluxDBClient influx_send error')
except Exception:
log.error('InfluxDB data error: ' + traceback.format_exc())
В следующей статье я могу рассказать о визуализации бизнес-показателей и статистики пользователей.
Если вы знаете, как сделать дашборд Grafana доступным для пользователей, чтобы они видели только свои устройства, напишите нам и мы попробуем это реализовать.
Спасибо всей команде проекта, пользователям и тем, кто помогает проекту! Чат проекта в телеграмма .
Теги: #iot #it инфраструктура #мониторинг #Grafana #influxdb
-
10 Сочетаний Клавиш, Которые Экономят Время
19 Oct, 24 -
Дыра В Безопасности Инвестиций Яндекса
19 Oct, 24 -
Обзор Радар-Детектора Mio Mirad 860
19 Oct, 24 -
Судо-Уязвимость
19 Oct, 24 -
Оптимизация Исследования Рынка
19 Oct, 24 -
Создатель Сайта О Самоубийстве Арестован
19 Oct, 24 -
Просто Добавь Воды: Zombobox.com
19 Oct, 24