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

11 апреля 2020, 06:46

Разобраться с сервисом 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", после чего должны увидеть сопряжение с нашим датчиком. 
Вернувшись на вкладку Main, мы должны увидеть показания с датчиков. В моем случае их два. 
  • Датчик DHT22 - расположен в квартире.
  • Датчик DS18B20 - на улице.

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

Я же параллельно настроил и постинг сообщений и по MQTT. Для этого необходимо активировать второй пункт, указать 
Server: ip адрес MQTT брокера;
Port: по умолчанию он 1883;
Login: Логин авторизации MQTT брокера;
Passw: Пароль.

Открываем сайт Народного мониторинга 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 '{print $2}')
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 '{print $2}')
echo $temp
echo $hum
curl -X GET "http://$hbip:$hbport/?accessoryId=temp&value=$temp"
curl -X GET "http://$hbip:$hbport/?accessoryId=hum&value=$hum"
Для получения tempid и humid, нам необходимо отрывать любой интересующий нас датчик на сайте narodmon.ru

После нажатия на кнопку Поделиться, мы увидим наш ID (в моем случае - это 1750).

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

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

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

chmod  x /home/pi/.homebridge/bashscript/narodmon.sh
/home/pi/.homebridge/script/narodmon.sh
Как только мы запустили скрипт, тут же видим текущие значения с датчиков (в моем случае, датчик только температурный).
  • Остался единственный шаг - это добавить данный скрипт в cron для того, чтобы он запускался циклически каждые 10 минут. Для этого: 
crontab -e
В открывшемся редакторе вставляем в конец строку. Если вы хотите, чтобы скрипт запускался каждые 5 минут, можно изменить значение 10 на 5.
*/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 '{print $2}')
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 '{print $2}')

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 '{print $2}')
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 '{print $2}')
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 '{print $2}')

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/temp
  • narodmon/hum
  • narodmon/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. Давление также удаленное.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (xrust)
    (xrust) 5 месяцев назад

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

  2. (jo_b1ack)
    (jo_b1ack) 5 месяцев назад
    Тишина должна быть в библиотеке (с)  ))))
  3. Сергей Кутовой (Mustik)
    Сергей Кутовой (Mustik) 5 месяцев назад

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

  4. Эдуард Захаревский (drdic)
    Эдуард Захаревский (drdic) 5 месяцев назад

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

К списку статей

Устройства в материале

ESP8266 NodeMcu v3

Производитель: Espressif Systems
Заказать на:
JD

Датчик температуры DS18B20 (зонд)

Производитель: noname
Заказать на:

Датчик температуры/влажности DHT22

Производитель: noname
Заказать на:

Скидки для сообщества

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Тематические чаты

Похожие статьи

09 ноября 2018, 20:54
Кейс создания умного дома без каких либо прокладок в виде Raspberry pi
17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
01 октября 2018, 07:43
Нативный HomeKit на ESP8266
24 августа 2018, 12:18
Пошаговая установка HomeAssistant