Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

    Выходит с 17 июля 2008 г. цена договорная

    Опрос

    gismeteo.ru
    Погода на Яндексе
    pogoda.ru
    meteonova.ru
    по телевизору
    за окном
    в газете
    а че его смотреть?
    в другом месте
    по счетчику гейгера



    Календарь
    «    Август 2019    »
    ПнВтСрЧтПтСбВс
     1234
    567891011
    12131415161718
    19202122232425
    262728293031 

    Архив новостей
    Март 2022 (1)
    Декабрь 2021 (1)
    Август 2021 (1)
    Июль 2021 (3)
    Февраль 2021 (3)
    Январь 2021 (1)

    Информация
    Domoticz + скрипт на Python 3, публикация на Народный мониторинг
    Умный дом
    автор: dimon, опубликовано: 17 августа 2019

    Все изображения кликабельны


    Захотелось мне вывести данные с датчиков Domoticz на Народный мониторинг, но на сайте в справке API передачи показаний почему-то есть скрипт только на python2. Как оказалось Python 3 отличается от Python 2 очень даже. Потребовался целый вечер и полбутылки виски чтобы разобраться и сваять скрипт, который будет брать данные с датчика Домотикз и класть их на Народный мониторинг (narodmon.ru)

    С первого взгляда все кажется элементарно, скрипт есть в справке Народного монитора. Но в реальности все оказывается не так уж и радужно. Скрипт написан на Python 2, а у нас на малинке с Domoticz давно уже Python обновился до версии 3.

    Сначала проверим что же у нас на самом деле есть:

    pi@raspberrypi:~ $ python --version
    Python 2.7.9
    pi@raspberrypi:~ $ python3 --version
    Python 3.4.2
    pi@raspberrypi:~ $
    


    Проверяем также наличие модуля requests в Python
    pi@raspberrypi:~ $ pip show requests
    ---
    Name: requests
    Version: 2.4.3
    Location: /usr/lib/python2.7/dist-packages
    Requires:
    pi@raspberrypi:~ $
    


    Python модули и версии, модуль requestsPython модули и версии, модуль requests


    Если пакет не найден, то устанавливаем:
    sudo pip install requests


    Переходим в папку со скриптами:

    cd domoticz/
    cd scripts/
    cd python/


    создаем файл:

    > dz2nm-socket.py


    даем права на исполнение:

    chmod +x dz2nm-socket.py


    Права на исполнения в Linux для Питон скриптаПрава на исполнения в Linux для Питон скрипта

    Теперь нам нужно понять что может выдать наш датчик.
    В моем случае это совмещенный датчик тепературы и влажности Xiaomi. Датчик размещен на улице, скрыл от прямых солнечных лучей и имееет idx в Domoticz 66. Проверим что же мы можем получит с этого датчика через запрос json, для этого в адресной строке браузера вводим адрес - https://admin:password@ip_dz/json.htm?type=devices&rid=66, где

    admin - логин пользователя Dz
    password - пароль пользователя Dz
    ip_dz - ip устройства где крутится наш сервер Dz

    В результате мы должны получить примерно такой ответ:

    
    {
       "ActTime" : 1565979237,
       "AstrTwilightEnd" : "00:00",
       "AstrTwilightStart" : "00:00",
       "CivTwilightEnd" : "21:42",
       "CivTwilightStart" : "04:25",
       "DayLength" : "15:36",
       "NautTwilightEnd" : "22:56",
       "NautTwilightStart" : "03:10",
       "ServerTime" : "2019-08-16 21:13:57",
       "SunAtSouth" : "13:03",
       "Sunrise" : "05:15",
       "Sunset" : "20:51",
       "app_version" : "4.11074",
       "result" : [
          {
             "AddjMulti" : 1.0,
             "AddjMulti2" : 1.0,
             "AddjValue" : 0.0,
             "AddjValue2" : 0.0,
             "BatteryLevel" : 255,
             "CustomImage" : 0,
             "Data" : "15.8 C, 67 %",
             "Description" : "",
             "DewPoint" : "9.68",
             "Favorite" : 1,
             "HardwareID" : 2,
             "HardwareName" : "lumi-gateway-v3_miio",
             "HardwareType" : "Xiaomi Gateway",
             "HardwareTypeVal" : 95,
             "HaveTimeout" : false,
             "Humidity" : 67,
             "HumidityStatus" : "Wet",
             "ID" : "0ВВВ",
             "LastUpdate" : "2019-08-16 20:54:45",
             "Name" : "T&H Улица",
             "Notifications" : "false",
             "PlanID" : "6",
             "PlanIDs" : [ 6 ],
             "Protected" : false,
             "ShowNotifications" : true,
             "SignalLevel" : "-",
             "SubType" : "LaCrosse TX3",
             "Temp" : 15.800000000000001,
             "Timers" : "false",
             "Type" : "Temp + Humidity",
             "TypeImg" : "temperature",
             "Unit" : 2,
             "Used" : 1,
             "XOffset" : "861",
             "YOffset" : "11",
             "idx" : "66",
             "trend" : 0
          }
       ],
       "status" : "OK",
       "title" : "Devices"
    }
    


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


    Открываем, созданный ранее файл dz2nm-socket.py, и пишем в него код:

    
    # Скрипт с помощью модуля Питона request и запроса json запрашивает 
    # данные избранного датчика у Domoticz и отправляет часть из них на 
    # сервис Народный мониторинг (narodmon.ru)
    # Автор tudimon.com
    
    # подключаем модули
    import requests
    import socket
    import urllib3
    # отключим предупреждения
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    
    ip = '127.0.0.1' # ip-адрес Domoticz
    port = '433' # порт
    user = 'dz_user' # пользователь Dz
    password = 'dz_user_password' # пароль пользователя 
    idx = 66  #номер датчика в Domoticz, который будем опрашивать
    
    
    # Строка запроса если нужна авторизация
    #get_url = 'http://'+user+':'+password+'@'+ip+':'+port+'/json.htm?type=devices&rid={}'.format(idx)
    
    # Строка запроса если не нужна авторизация
    # в случае если скрипт выполняется на том же устройстве что и Dz и в 
    # Настройки - Настройки - Система
    # Локальные сети (без имени/пароля) указан ip адрес localhost
    get_url = 'https://'+ip+'/json.htm?type=devices&rid={}'.format(idx)
    
    # для теста выведем строку подключения в консоль Pi
    #print ('================================')
    #print (get_url)
    #print ('================================')
    
    
    # ================= запрос данных от Domoticz =====================
    
    # запрос данных избранного датчика
    get_data = requests.get(get_url, verify=False).json()
    
    # ключ verify=False пришлось добавить потому что у меня Dz работает только на 433 порту
    # а SSL сертификат самоподписанный, соответственно request ругался на ошибку сертификата
    
    
    # ответ придет в виде JSON, где необходимо выбрать интересующее поле, 
    # например температура, влажность и уровень заряда батарейки 
    
    humidity = get_data['result'][0]['Humidity']
    temperature = get_data['result'][0]['Temp']
    batt_level = get_data['result'][0]['BatteryLevel']
    
    #Выведем данные в консоль pi
    #print ("Влажность " + str(humidity))
    #print ("Температура " + str(temperature))
    #print ("Заряд батарейки " + str(batt_level))
    # после окончания тестирования строки закомментированы
    
    
    # ============== передача данных в сервис narodmon ==================
    
    # MAC адрес устройства. Заменить на свой!
    DEVICE_MAC = 'ffffffffff' # MAC WiFi dz Raspberry Pi
    
    # идентификатор устройства, для простоты добавляется 01 (02) к mac устройства
    SENSOR_ID_1 = 'dz_t'
    SENSOR_ID_2 = 'dz_h'
    
    # значения датчиков, тип float/integer
    sensor_value_1 = temperature
    sensor_value_2 = humidity
    
    # создание сокета
    sock = socket.socket()
    
    # обработчик исключений
    try:
        # подключаемся к сокету
        sock.connect(('narodmon.ru', 8283))
    
        # формируем строку для сокета при  единичном значении датчика
        #s_sock = ("#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1))
    
        #формируем строку для сокета при  множественные значение датчиков
        s_sock = ("#{}\n#{}#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1, SENSOR_ID_2, sensor_value_2))
    
        # Пишем строку с консоль для контроля
        #print('======================================')
        #print(s_sock)
        #print('======================================')
        # после окончания тестирования строки закомментированы
    
        # Пишем в сокет
        sock.send(s_sock.encode('utf8'))
    
        # читаем ответ
        data = sock.recv(1024)
        sock.close()
    #    print (data)
    except socket.error as e:
        print('ERROR! Exception {}'.format(e))
    
    


    Теперь идем на Народный мониторинг и в разделе Профиль - Мои датчики - Добавить добавляем наш датчик. Необходимо указать тот же MAC-адрес, что и в нашем скрипте:

    Добавить датчик по mac на народный мониторинг


    Датчики возможно добавить только после того как наш сервер отдаст хоть какие-то значения Народному мониторингу. Когда данный туда будут переданы мы увидим такую форму на сайте и сможем отредактировать описание, название, уровень моря, адрес и другие параметры:

    Народный мониторинг, добавление датчиковНародный мониторинг, добавление датчиков


    Теперь осталось добавить наш скрипт в планировщик Raspberry Pi, чтобы она автоматически раз в 15 минут слада данные из Домотокз на Народный мониторинг:

    crontab -e
    
    */15 * * * * python3 /home/pi/domoticz/scripts/python/dz2nm-socket.py


    Потом ждем 24 часа и делаем наши датчики публичными, чтобы их могли видеть другие пользователи Народного мониторинга:

    Публикация датчиков Народного мониторингаПубликация датчиков Народного мониторинга

     
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.

    Другие новости по теме:

  • Добавление RF 433МГц датчиков дыма/газа/протечки к Domoticz
  • Domoticz. Включаем гирлянду по датчику Xiaomi Flower Monitor
  • Domoticz и UPS APC
  • Domoticz. Уведомление о низком уровне батарее датчиков
  • Domoticz. Ежедневное уведомление на e-mail с показаниями всех датчиков Xiao ...


  • Комментарии:

    Оставить комментарий



     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Облако тегов
    Arduino, backup, CentOS, cmd, div, DLE, DLE хаки, domoticz, dzvents, event, Home Assistant, HomeAssistant, Linux, log, LUA, Monster, ogf3, Template, VBS, w2k8, windows, WSH, xiaomi, бумага, бумажный самолетик, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, уведомления, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2021 by dimon - all right reserved!
    Тираж:           экземпляров.   Дизайн, верстка by dimon