2025-04-03

Не знаю кому и для чего это может понадобиться, но  у всех свои затеи.

У умного дома Яндекс есть свои API, ими и воспользуемся для получения значений с датчиков подключенных к Яндекс Станции.

Предположим что сам датчик уже подключен к “Алисе”, далее заходим на https://oauth.yandex.ru/client/new/

auth yandex

Заполняем:

Название может быть любым понятным вам;
Платформу выберем Веб-сервис, а в качестве URL оставим ссылку по умолчанию;

В доступах добавим iot:view для просмотра всех имеющихся устройств, если планируете в дальнейшем по API управлять, то добавим iot:control.

token

Создаем приложение и получаем данные для авторизации, здесь нас интересует ClientID

Получим отладочный токен авторизации без кодов подтверждения, для этого в ссылку добавим полученный ClientID 

https://oauth.yandex.ru/authorize?response_type=token&client_id=ВашClientID

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

На этом настройка в яндексе завершена, для теста можем в командную строку линукса вбить

curl -i -X GET ‘https://api.iot.yandex.net/v1.0/user/info’ -H ‘Authorization: Bearer ВАШ ТОКЕН’

В ответ получим портянку информации по всем вашим устройствам подключенных к Умному дому Яндекс

Для меня был нужен датчик температуры и влажности, поэтому нахожу его id (“id”:”d4991cc2-hhfj-dfgg-b40f-6cc3f11f6196″) и копирую его значение.

Далее подставив в ссылку id 

curl -i -X GET ‘https://api.iot.yandex.net/v1.0/devices/d4991cc2-hhfj-dfgg-b40f-6cc3f11f6196’ -H ‘Authorization: Bearer ВАШ ТОКЕН’

Получим информацию по конкретному датчику

Из полученных данных для заббикса спарсим определенные значения, вариантов этого много, но я воспользуюсь python скриптом который будет лежать прям на zabbix-server

Логинимся по ssh, создаем папку и скрипт

mkdir /tmp/script

nano /tmp/script/sensor.py

 

Вставим скрипт поменяем переменную token и сохраним

#!/usr/bin/python3

import requests

url = "https://api.iot.yandex.net/v1.0/devices/d4991cc2-hhfj-dfgg-b40f-6cc3f11f6196" #Заменить ID своего датчика
token = 'Ваш токен'

headers= {"Authorization" : f"Bearer {token}", "Content-Type": "application/json"}

resp = requests.get(url, headers=headers)
resps = dict(resp.json())
for key, values in resps.items():
  if key == 'properties':
      for z in values:
          z = dict(z)
          for keyz, valuez in z.items():
              if keyz == 'state':
                  nameelement = valuez.get('instance')
                  print(valuez.get('value'))
                  text_file = open(nameelement, "w+")
                  text_file.write(str(valuez.get('value')))
                    text_file.close()

В результате скрипт в той же директории создает файлы с доступными данными, в случае с датчиком яндекса  – уровень заряда батареи, влажность, давление и температура. Если файлы уже созданы (повторное выполнение скрипта), то данные в файлах будут заменяться

Добавим в расписание выполнение скрипта каждые 10 минут

crontab -e

*/10 * * * * /tmp/script/sensor.py

В заббиксе значения будем добавлять через заббикс агента установленного на заббикс-сервере, для этого добавим в фале конфига параметры

nano /etc/zabbix/zabbix_agentd.conf

в любое место вставим

UserParameter = temp, cat /tmp/script/temperature

UserParameter = pressure, cat /tmp/script/pressure

UserParameter = humidity, cat /tmp/script/humidity

UserParameter = battery, cat /script/battery_level

Где название конечного файла должен быть ваш

Сохраняем и рестартуем агента

service zabbix-agent restart

Остается только добавить элементы в zabbix, ключи в моем случае temp, pressure, humidity, battery, можете задать свои

zabsensor

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *