Статья

Обмен данными между NarodMon.ru и Умным домом

Разобраться с сервисом narodmon.ru меня сподвигла статья Погода с сервиса NarodMon в HomeKit с помощью Node-Red. Раньше я периодически заходил на этот сайт посмотреть реальную температуру с датчика в своем городе. 

Почему бы не добавить свой датчик и не отправлять данные на этот сервис? - подумал я, и приступил к реализации.

Что понадобится сделать?

  • Собрать устройство.
  • Прошить.
  • Настроить подключение сенсора.
  • Настроить связь межу ESP8266 и сервисом NarodMon.ru.

Собираем устройство

Итак, нам понадобятся:

  • ESP8266 nodeMCU - куда же без нее (подойдет и любая другая плата на базе ESP8266).
  • Обычный датчик температуры DS18B20 в металлической колбе, но подойдет и любой другой (важно, чтобы был уличный).
  • Блок питания 5в.

Схема подключения проста до безобразия, датчик имеет три пина для подключения. Подключаем:

DS18B20ESP8266 nodeMCUКрасный3.3ЧерныйGNDЖелтыйRX

WiFi-IoT

Встроенную в прошивку функцию транслирования данных на narodmon.ru имеет прошивка WiFi-IoT, с неё и начнем. Заходим на сайт, и конфигурируем прошивку таким образом:

Можете даже не утруждать себя делать предыдущий шаг и просто взять готовую скомпилированную прошивку, я за вас сделал эту работу, туда же положил и прошивальщик. 

Качаем архив, распаковываем, подключаем ESP8266 к компьютеру при помощи кабеля USB - microUSB, запускаем FlashESP8266.exe, указываем COM порт и наш файл прошивки. Жмем кнопку Flash и ждем окончания процесса. 

Перезагружаем наше устройство, сканируем открытую сеть Wi-Fi и подключаемся к ней. Далее необходимо открыть в браузере адрес: 192.168.4.1, попадаем на страницу нашей прошивки WiFi-IoT.

Сразу же переходим на вкладку Main и настраиваем Wi-FI подключение со своим роутером. Указываем:

  • AP name: SSID вашего роутера.
  • AP pass: пароль.

Нажимаем кнопку "Set" и ждем, пока устройство перезагрузится. 

В настройках роутера смотрим, какой адрес выдал нам DHCP сервер, и открываем его. 

Приступим к настройке датчика. Для этого открываем вкладку Hardware, и ставим галочку на против "Enable DS18B20", при этом GPIO оставляем 3. Нажимаем на кнопку "Set". Я же подключил к своей ESP еще и второй датчик DHT22, поэтому включил и его. После этих действий возвращаемся на вкладку Main, а оттуда переходим на вкладку 1-ware. 

Здесь нажимаем на "Scan list", после чего должны увидеть сопряжение с нашим датчиком. 

Датчик DHT22 - расположен в квартире.
Датчик DS18B20 - на улице.

Приступим к настройке постинга нашей температуры на сервис narodmon.ru. Для этого открываем вкладку Servers и ставим галочку напротив "Enable NarodMon.ru send", время так и оставляем 5 минут. Ниже видим ID нашего устройства, он нам понадобится для добавления датчика на самом сайте NarodMon, поэтому копируем его в буфер обмена. 

Открываем сайт Народного мониторинга NarodMon.ru, и сразу видим наш датчик, пока еще без данных. Логинимся на сайте и добавляем его на свой аккаунт, здесь все максимально просто и интуитивно понятно. При этом, в поле MAC необходимо вставить содержимое нашего буфера обмена, а точнее - ID из скриншота выше. 

Хочу вас поздравить - датчик привязан и уже отправляет данные на сайт. Посмотреть, как выглядит мой датчик, можно по ссылке

Добавляем датчик по MQTT

Для добавления датчика по MQTT, необходимо прослушать топик в таком виде: admin/#

Получив топик, мы с легкостью сможем добавить его в любую альтернативную систему домашний автоматизации, будь то HomeBridge, HomeAssistant, MajorDoMo...

Приведу пример конфига для добавления в HomeBridge:

{ "accessory": "mqttthing", "type": "temperatureSensor", "name": "Температура Двор", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getCurrentTemperature": "admin/ESP002A6F83/dsw1" }, "history": true }

Также могу привести пример и для Home Assistant:

- platform: mqtt name: "Dvor_Temperature" state_topic: "admin/ESP002A6F83/dsw1" unit_of_measurement: '°C'

ESP Easy

А как же быть с любимой мною ESP Easy? - сразу задался я вопросом и пошел гуглить. А все оказывается намного проще - необходимо просто добавить скрип в Rules, который будет оправлять данные с ESP на Народный мониторинг. Итак, обо все по порядку.

Как заливать прошивку и как добавлять устройства в ESP Easy, я рассказывать не буду, можно открыть одну из моих предыдущих статей на данную тему, там это уже много раз описано. 

Сразу начну с того, что у нас есть ESP, к ней подключены датчики, и мы хотим отправлять данные на NarodMon.ru. Чтобы было понятнее, приведу скрин с девайсами.  

Первое, что необходимо сделать, это добавить вкладку Rules, если у вас до сих пор ее нет. Открываем Tools -> Advanced, и ставим галочку напротив Rules. После чего у нас появилась новая вкладка, вот и кликаем по ней. Далее я приведу скрипт, который будет постить сообщения на Народный мониторинг, раз в 300 сек (каждые 5 минут). 

On System#Boot do //When the ESP boots, do timerSet,1,10 //Set Timer 1 for the next event in 10 seconds endon On Rules#Timer=1 do //When Timer1 expires, do SendToHTTP narodmon.ru,80,/get?ID=BATYUSHINXXXXXXX&T1=[dht22#Temperature]&H1=[dht22#Humidity] timerSet,1,300 //Resets the Timer 1 for another 360 seconds endon

Разберем этот скрипт, а точнее нас интересует только строка, которая начинается: SendToHTTP. Нам необходимо подставить свои данные, а именно:

  • ID=BATYUSHINXXXXXXX - Придумываем свой ID, важно, чтобы он был уникальным;
  • T1 - Название датчика, я взял сокращенно T1 - температура, датчик первый.

Далее в квадратных скобках:

  • dht22 - имя девайса, смотрите скриншот выше;
  • Temperature - значение Values, смотрим там же на скришоте;
  • & - знак, после которого можно по аналогии добавить следующий датчик.

После того, как скрипт написан, нажимаем кнопку Submit. Перезагружаем наше устройство (можно через Web интерфейс).

Как и в предыдущем способе с прошивкой WiFi-IoT, заходим на сайт NarodMon.ru и видим наш датчик. Повторяться не стану и единственное, на что хочу обратить внимание - это то, что MAC адрес для сопряжения это и есть наш ID (в моем случае это "BATYUSHINXXXXXXX"). 

LifeHack #1

Собираем все датчики на одну ESP, откуда транслируем на Народный мониторинг. В итоге получаем вот такую портянку устройств со всеми датчиками, но зато одним устройством. 


Реализовать это можно двумя способами:

  • Способ 1. В ESP Easy есть такой девайс, как "Generic - MQTT Import", он собирает MQTT топики.
  • Способ 2. Я описывал в статье, как можно заставить ESP Easy обмениваться данными по протоколу UDP.

LifeHack #2

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

Кстати, дополнение к лайфаку - графики можно объединять и выводить сразу несколько. 

Вот, например, график моего датчика температуры и датчика, расположенного в моем городе километра 3 от меня. 

LifeHack #3

Уличный датчик спустя сутки его работы можно открыть для публичного использования. На сайте Народного мониторинга, открываем Профиль -> Мои датчики, и меняем доступ на публичный. 


Мой датчик доступен по адресу

LifeHack #4 или погода в Телеграме

Если добавить бота @narodmon20bot, и авторизоваться, то по команде /my можно получать значения со всех своих датчиков. 

Как пройти авторизацию - смотрите скриншот, специально вышел и вошел, чтобы показать вам (Код "319913" придет вам на почту). 

Забираем данные с чужих датчиков и отправляем себе в Дом

Ну а что делать, если вам не хочется заморачиваться с DIY, или на карте датчик расположен неподалеку от вас и вы хотите получать данные с него и оправлять себе в Apple HomeKit? И на этот вопрос у меня есть ответ. Реализовать это можно двумя способами.

Способ 1. При помощи плагина HomeBridge Http Webhooks 

Нам необходимо: 

Установленная система HomeBridge.Установить плагин "Homebridge Http Webhooks", через Web-UI или по SSH;

npm install -g homebridge-http-webhooks

  • Добавить в конфиг платформу:

{ "platform": "HttpWebHooks", "webhook_port": "51111", "cache_directory": "/home/pi/.homebridge/.node-persist/storage", "sensors": [ { "id": "temp", "name": "Температура", "type": "temperature" }, { "id": "hum", "name": "Влажность", "type": "humidity" } ] }

После чего перезагружаем бридж и видим два датчика с нулевыми показаниями. 

  • Далее нам необходимо Зарегистрироваться на сайте Narodmon.ru, если вы этого еще не сделали, и получить ключ.

Дальше нам необходимо получить еще один ключ на сайте http://www.md5.cz/.

Открываем сайт, нажимаем на кнопку "hash darling. hash!" и сохраняем полученный ключ.

В моем случае - это "d41d8cd98f00b204e9800998ecf8427e"

  • Теперь нам необходимо создать скрипт, который будет забирать данные с Narodmon.ru и передавать их в Apple HomeKit.

Создадим папку и поместим в нее файл нашего будущего скрипта.

mkdir /home/pi/.homebridge/script nano /home/pi/.homebridge/script/narodmon.sh

В открывшемся редакторе вставляем содержимое, предварительно подставив свои данные. А именно, нас интересует:

hbip='ip адрес устройства, на котором установлен homebridge'

hbport='порт, который был указан в конфиге'

apikey='API ключ, тот, который мы получали на сайте narodmon.ru'

uuid='Key, полученный на сайте md5.cz'

Как получить temid и humid я покажу ниже.

#!/bin/bash hbip='127.0.0.1' hbport='51111' apikey='rXp10txXXXXXXX' uuid='d41d8cd98f00b204e9800998ecf8427e' tempid='1750' humid='1750' temp=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$tempid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 u00b0 | grep value | awk '') hum=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$humid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 % | grep value | awk '') echo $temp echo $hum curl -X GET "http://$hbip:$hbport/?accessoryId=temp&value=$temp" curl -X GET "http://$hbip:$hbport/?accessoryId=hum&value=$hum"

Дополняем наш скрипт последней недостающей информацией, сохраняем нажатием "Ctrl O" "Y" и выходим "Ctrl X".

Еще один небольшой ЛайфХак. Датчики можно использовать разные и при желании можно добавить несколько однотипных, дополнив скрип и конфиг.

Даем права и можно запускать наш скрипт, для этого:

chmod x /home/pi/.homebridge/bashscript/narodmon.sh /home/pi/.homebridge/script/narodmon.sh

  • Остался единственный шаг - это добавить данный скрипт в cron для того, чтобы он запускался циклически каждые 10 минут. Для этого: 

crontab -e

*/10 * * * * /home/pi/.homebridge/script/narodmon.sh

Способ 2. Для любителей MQTT

Если вы, как и я, не очень любите устанавливать дополнительные плагины, без которых можно и так обойтись, значит этот вариант для вас. Также этот вариант подойдет любому, кто пользуется передачей данных по MQTT.

Ниже приведу скрипт, который забирает данные с NarodMon и отдает их по MQTT в виде топиков narodmon/temp и narodmon/hum.

#!/bin/bash apikey='rXp10txXXXXXXX' uuid='d41d8cd98f00b204e9800998ecf8427e' tempid='1091' humid='1091' temp=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$tempid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 u00b0 | grep value | awk '') hum=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$humid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 % | grep value | awk '') mqtthost='127.0.0.1' mqttport='1883' mqttuser='admin' mqttpass='admin' mqtttopic='narodmon' mosquitto_pub -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/temp -m $temp mosquitto_pub -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/hum -m $hum

Тут также необходимо поправить все под себя, а также поправить настройки MQTT брокера. 

Добавление Атмосферного давления в Apple HomeKit

Дальше я решил считать данные Атмосферного давления и передать их в Apple HomeKit. Поправляем наш скрип, тем самым, добавив в него считывания данных и еще одну переменную.

#!/bin/bash apikey='rXp10txXXXXXXX' uuid='d41d8cd98f00b204e9800998ecf8427e' tempid='1091' humid='1091' pressid='1750' temp=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$tempid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 u00b0 | grep value | awk '') hum=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$humid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 % | grep value | awk '') press=$(curl -s --data "cmd=sensorsOnDevice&api_key=$apikey&uuid=$uuid&id=$pressid&lang=en" https://narodmon.ru/api | python -m json.tool | grep -A 2 mmHg | grep value | awk '') mqtthost='127.0.0.1' mqttport='1883' mqttuser='admin' mqttpass='admin' mqtttopic='narodmon' mosquitto_pub -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/temp -m $temp mosquitto_pub -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/hum -m $hum mosquitto_pub -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/press -m $press

Сохраняем скрипт, запускаем и видим, что теперь у нас передаются уже три топика. 

narodmon/tempnarodmon/humnarodmon/press

Так как давления в Apple HomeKit нет, его можно вывести как Освещенность. Приведу пример конфига для HomeBridge. 

{ "accessory": "mqttthing", "type": "lightSensor", "name": "Давление", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getCurrentAmbientLightLevel": "narodmon/press" } }

На этом, думаю, стоит заканчивать, вроде бы описал все, что хотел! До скорой встречи,  увидимся в следующей статье. 

Напоследок приведу скриншот -  первый сенсор это мой, который мы собирали на базе nodeMCU и DS18B20. Второй - это я забираю данные с narodmon и передаю по MQTT. Давление также удаленное.


Глянул карту в моем регионе в радиусе 50 км нет датчиков. Вдохновился :-)

Пиши чем закончиться=) 

Выпил пивка, успокоился.

Тишина должна быть в библиотеке (с)  ))))

Благодарю) Заделал свой датчик) Щас придумаю корпус и сделаю публичным)

поделись фотками и скринами в блоге.

Да маловато фоток для блога) вот когда еще пару датчиков навешаю, тогда выложу)

А как же Esphome? :( Может можно что нибудь придумать?

Вот с esphome не подскажу :( возможно кто-то разберётся, не думаю что сложно 

а я обошёлся без внешних скриптов.
PS: не забудьте на narodmon.ru переключить режим приёма данных в POST.

/config/configuration.yaml


rest_command:


narodmon:


url: "http://narodmon.ru/post"


method: post


content_type: "application/x-www-form-urlencoded"


payload: 'ID=DCA632B74830&DCA632B7483001={{ states("sensor.0x00158d0004aae920_pressure") }}&DCA632B7483002={{ states("sensor.0x00158d0004aae920_temperature") }}&DCA632B7483003={{ states("sensor.0x00158d0004aae920_humidity") }}'



/config/automations.yaml


- id: '1600640676277'


alias: Narodmon


description: ''


trigger:


- platform: time_pattern


minutes: '/5'


condition: []


action:


- service: rest_command.narodmon


data: {}


mode: single

Подскажите пожалуйста а на народный мониторинг  можно отправлять не посредством GET а по TCP  ?


Вернуться назад

Устройства


Вернуться назад