2024-05-16

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

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

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

Заполняем:

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

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

Создаем приложение и получаем данные для авторизации, здесь нас интересует 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


Вставим скрипт и сохраним

#!/usr/bin/python3


import requests

from requests.structures import CaseInsensitiveDict


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


headers = CaseInsensitiveDict()

headers[“Authorization”] = “Bearer ВАШ ТОКЕН”

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, можете задать свои

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

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