Подключаем narodmon.ru к Home Assistant

Narodmon.ru - сервис народного мониторинга, на котором владельцы самодельных устройств публикуют данные всевозможных датчиков, чаще всего погодных, включающих температуру, влажность, атмосферное давление и т.п. Если зайти по адресу https://narodmon.ru, есть шанс, что рядом с вашим домом какой-нибудь умелец уже выставил наружу сенсор температуры, а может даже и влажности с давлением. Доверять их показаниям или нет - решает каждый для себя, мы же попробуем подключить эти датчики к Home Assistant. Поехали.

Выбираем устройство для снятия показаний

Открываем карту nadormon.ru и выбираем ближайшее к нам устройство, от которого мы хотим получать погодные данные. В нашем примере это будет устройство с идентификатором D1974.

1548104335290

Регистрируемся на narodmon.ru, открываем пункт меню Профиль->Мои приложения->Новый ключ и создаём API ключ, назовём его home_assistant.

Идём на любой сайт-генератор MD5 и обзаводимся уникальным MD5 хешем, для чего вбиваем в текстовое поле произвольный текст и жамкаем кнопку Generate. Должно получиться что-то вроде: 0D80600A54ACE607A80B2759EEBAFABA. Это число (UUID клиента), полученный ранее ключ API и ID нашего устройства (без буквы D) нам понадобятся на следующем шаге.

Настраиваем Home Assistant

Для наших целей замечательно подойдёт компонент RESTful sensor. Добавим в configuration.yaml следующие строчки (данные id, uuid и api_key мы сохранили ранее):

sensor:
  - platform: rest
    resource: https://narodmon.ru/api/sensorsOnDevice?id=1974&uuid=0D80600A54ACE607A80B2759EEBAFABA&api_key=my_api_key
    name: narodmon
    json_attributes: 
      - location
      - sensors
    value_template: '{{ value_json.id }}'
    scan_interval: 180
    headers:
      User-Agent: Home Assistant

  - platform: template
    sensors:
      narodmon_temperature:
        value_template: '{{ states.sensor.narodmon.attributes.sensors[0].value }}'
        device_class: temperature
        friendly_name: 'Narodmon Temperature'
        unit_of_measurement: '°C'

      narodmon_humidity:
        value_template: '{{ states.sensor.narodmon.attributes.sensors[1].value }}'
        device_class: humidity
        friendly_name: 'Narodmon Humidity'
        unit_of_measurement: '%'
      narodmon_pressure:
        value_template: '{{ states.sensor.narodmon.attributes.sensors[2].value }}'
        device_class: pressure
        friendly_name: 'Narodmon Pressure'
        unit_of_measurement: 'mmHg'

Основная “хитрость” здесь в том, что кроме значения сенсора (value_template) в секции attributes мы перечисляем атрибуты, которые мы хотим извлечь из ответа сервиса и добавить к нашему сенсору sensors.narodmon. Одним из этих атрибутов является массив sensors. Имея этот массив мы можем легко получить значение любого из датчиков с помощью платформы template sensor Home Assistant. Значение первого датчика можно получить с помощью sensors[0].value, второго - sensors[1].value и т.п. Значение сенсора sensors.narodmon особой ценности не несёт, а просто содержит ID устройства narodmon. Но туда можно поместить любой атрибут из JSON ответа на ваше усмотрение, например name или uptime.

Сохраняем файл конфигурации. После этого на всякий случай пробуем в браузере открыть URL, который мы указали в поле resource. Должен отобразиться JSON ответ с сайта. Если браузер выдаёт ошибку, вы где-то ошиблись с параметрами URL:

{"id":1974,"mac":"","name":"RPi","my":0,"owner":"1366","location":"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433, \u0420\u043e\u0441\u0441\u0438\u044f","distance":13.15,"liked":0,"uptime":50,"sensors":[{"id":8140,"mac":"","fav":0,"pub":1,"type":1,"name":"DHT22","value":-16.4,"unit":"\u00b0","time":1548104702,"changed":1548104702,"trend":0},{"id":8141,"mac":"","fav":0,"pub":1,"type":2,"name":"DHT22","value":81.4,"unit":"%","time":1548104702,"changed":1548104402,"trend":0},{"id":8142,"mac":"","fav":0,"pub":1,"type":3,"name":"BMP085","value":759.62,"unit":"mmHg","time":1548104702,"changed":1548104702,"trend":0}]}

Если используется Firefox, он может представить ответ сервера в более красивом виде, но для нас сейчас это не принципиально.

1548105461689

Перезапускаем Home Assistant, проверяем ошибки в логах, затем заходим в раздел States (выглядит как <>) и пытаемся найти все сенсоры, включающие слово narodmon:

1548106110676

Данные в Home Assistant, осталось показать их.

Отображаем данные

Добавим данные сенсоров на карточку Lovelace:

cards:
  - type: entities
    id: narodmon
    title: Народный мониторинг
    show_header_toggle: false
    entities:
      - sensor.narodmon_temperature
      - sensor.narodmon_humidity
      - sensor.narodmon_pressure

1548106375509

Готово. Если что-то не работает, в разделе Мои приложения на сайте narodmon.ru можно посмотреть логи сервера на предмет возможных ошибок.