Статья

Добавляем датчик температуры DHT11/DHT22, AM2302 через GPIO в Domoticz

Оглавление: Domoticz, установкаDomoticz, настройки после установки. Добавление первого датчика.
Domoticz добавление шлюза XiaomiDomoticz  полуумное управление Livolo, BroadlinkРадио в Domoticz, виртуальные переключатели Bluetooth в Domoticz, Xiaomi Flower Care, Mijia SensorУмная розетка Mijia Smart Wi-Fi и Philips Smart Bulb добавляем в Domoticz

Добавляем Xiaomi Mi Robot Vacuum Cleaner в Domoticz

Yeelight режим разработчика, DomoticzBroadlink MP1 управляем из Domoticz

Добавим датчики температуры и влажности которые подключаются через GPIO Raspberry Pi

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

Что такое GPIO?

Аббревиатура с английского расшифровывается как: General-purpose Input/Output. Это интерфейс ввода/вывода общего назначения, к которым можно подключать разнообразные датчики, исполнительные устройства, дисплеи, контроллеры, и т.д и т.п

Как выглядит интерфейс GPIO?

Это разъем, который содержит набор из пинов и размещен непосредственно на плате Raspberry Pi:

  • В старых моделях (A и B) - 26 шт. ( 8 шт. отдельным разъемом);
  • В новых моделях (A , B и B2) - 40 шт. (показан на скриншоте)

Пины в GPIO могут выполнять 3 функции:

  • подача электричества определенного напряжения;
  • заземление;

  • прием/отправка сигналов;

Добавим виртуальный датчик, нужен будет IDX - это номер который присвоит ему система умного дома Domoticz

  1. Настройка-Оборудование
  2. В разделе Тип: выбираете - Dummy (Does nothing, use for only virtual switch), указываете имя

  3. Нажимайте добавить, появится новая запись

  4. Выберите создать виртуальные датчики

  5. Указываете имя, Тип датчика: Температура и влажность - OK

  6. Переходим в Настройка-Устройства в открывшемся окне находим созданный вами датчик и запоминаем его IDX

Инструкция в картинках

Подключение датчика DHT11

Так как все эти датчики практически одинаковые, рассматривать будем на примере DHT11

  • Отключите питание Raspberry Pi во избежание проблем
  • Подключаем датчик к пинам GPIO:

  • Пин №1 это 3v

  • Пин №7 это сигнальный порт (GPIO4) через него и будем получать данные
  • Пин №9 это Ground

Схема подключения датчика DHT11

Установка плагина

Подключитесь по SSH с помощью программы Putty к вашей Raspberry PI
Для установки библиотеки для работы с датчиками необходимо установить несколько пакетов:

sudo apt-get update sudo apt-get install build-essential python-dev python-openssl

  • Скачиваем библиотеку Adafruit Python DHT с Github и переходим в папку:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT

  • Запускаем установку

sudo python setup.py install

  • Переходим в папку

cd Adafruit_Python_DHT/examples

  • Проверяем работу датчика DHT11

sudo./AdafruitDHT.py 11 4

  • Проверяем работу датчика DHT22

sudo./AdafruitDHT.py 22 4

  • Проверяем работу датчика AM2302

sudo./AdafruitDHT.py 2302 4

Пояснение: в конце команды указана модель датчика и номер (GPIO4) = пин порядковый №7 куда он подключен.

Создаем скрипт python

Создаем файл, введите в консоли:

sudo nano dht11.py

  • Вставляете код указав свой IP-адрес:порт Domoticz и IDX=датчика который создали ранее

#!/usr/bin/python import sys import requests import Adafruit_DHT # Parse command line parameters. sensor_args = { '11': Adafruit_DHT.DHT11, '22': Adafruit_DHT.DHT22, '2302': Adafruit_DHT.AM2302 } if len(sys.argv) == 3 and sys.argv[1] in sensor_args: sensor = sensor_args[sys.argv[1]] pin = sys.argv[2] else: print('usage: sudo./Adafruit_DHT.py [11|22|2302] GPIOpin#') print('example: sudo./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4') sys.exit(1) humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print('Temp=* Humidity=%'.format(temperature, humidity)) cmd = ('http://127.0.0.1:3333/json.htm?type=command&param=udevice&idx=ВАШ_ДАТЧИК&nvalue=0&svalue=' ''.format(temperature) ';' ''.format(humidity) ';0') requests.get(cmd) else: print('Failed to get reading. Try again!') sys.exit(1)

  • Сохраняем файл, нажимаем на клавиатуре Ctrl O=>Enter=>Ctrl X
  • Добавляем права файлу

sudo chmod x dht11.py

  • Проверяем работу

sudo./dht11.py 11 4

  • Если все сделали правильно у вас в Domoticz обновятся показания датчика

Автозапуск считывания показаний с помощью crontab

Создаем файл, вводим в консоли:

sudo nano dht11.sh

  • В открывшемся окне вставляем

#! /bin/sh cd /home/pi/Adafruit_Python_DHT/examples/ python /home/pi/Adafruit_Python_DHT/examples/dht11.py 11 4

  • Сохраняем файл, нажимаем на клавиатуре Ctrl O=>Enter=>Ctrl X
  • Добавляем права файлу

sudo chmod x dht11.sh

  • Что бы получать показания с датчиков каждую минуту, добавляем в crontab (планировщик заданий)

sudo crontab -e

  • В открывшемся окне, спускаемся в самый вниз и вводим:

* * * * * /home/pi/Adafruit_Python_DHT/examples/dht11.sh

Итог: Мы создали скрипт и запускаем автоматическое обновление показаний датчика в Domoticz, каждую минуту


Спасибо!Отличная статья.Всё подробно описано -понятно даже для новичков.Так держать!

Здравствуйте, не могли бы вы помочь мне?


Я сделал все, но я не получаю показ температуры в Domoticz.


спасибо


pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./dht22.py 22 4


Temp=16.3* Humidity=1.0%




#!/usr/bin/python


import sys


import requests


import Adafruit_DHT


# Parse command line parameters.


sensor_args = { '11': Adafruit_DHT.DHT11,


'22': Adafruit_DHT.DHT22,


'2302': Adafruit_DHT.AM2302 }


if len(sys.argv) == 3 and sys.argv[1] in sensor_args:


sensor = sensor_args[sys.argv[1]]


pin = sys.argv[2]


else:


print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')


print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')


sys.exit(1)


humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


if humidity is not None and temperature is not None:


print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))


cmd = ('http://192.168.178.29:8080/json.htm?type=command¶m=udevice&idx=20&nvalue=0&svalue=' + '{0:0.1f}'.format(temperature) + ';' + '{0:0.0f}'.format(humidity)$


requests.get(cmd)


else:


print('Failed to get reading. Try again!')


sys.exit(1)

sudo apt-get install python-pip


sudo pip install requests


Я сделал все. Но он ничего не показывает в Domoticz

idx соответствует созданному датчику? при проверке  
sudo ./dht22.py 22 4 у вас состояние должно изменится на созданном датчике.  адрес  http://192.168.178.29">http://192.168.178.29 это адрес вашего домотикза?

да idx 20 который на Domoticz. Да ето адрес Domoticz 

Попробуйте еще прописать  в Domoticz  Настройка-Настройки-


Локальные сети (без имени/пароля):


127.0.0.*;192.168.178.*

и что сейчас выводит 

 sudo ./dht22.py 22 4

не изменился, температура не отображается

Что сейчас выводит 


 sudo ./dht22.py 22 4

pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./dht22.py 22 4


Temp=16.7* Humidity=1.0%

у вас влажность не меняется у вас по моему беда с самим датчиком подуйте на него и проведите замеры. Если у вас на датчике 4 ноги, out попробуйте сменить на другой свободный

 та же проблема.. у меня несколько датчиков валяется. перепробывал всё

dht11 работает в любом случае

dht22 бред вместо показаний даёт, не зависимо 3 или 4 ноги у него.

Поэтому не с датчиком проблема, либа битая, с 22 датчиком она не рабоает. Теперь гуляю по гуглу чтобы проблему решить.

да нашёл.. у них реально куча ошибок в либе.. притом она на плюсах написана, так что чинить тот ещё гемор будет

pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./dht22.py 22 4


Temp=29.2* Humidity=99.9%

на Домотике нет указаний


но в консоли меняется температура

ну тогда я бессилен к сожалению, попробуйте создать все заново что бы IDX сменился к примеру

хорошо я попробую 

Я написал в
Локальные сети (без имени/пароля):
127.0.0.*;192.168.178.*, теперь температура отображается.
спасибо

Вернуться назад

Устройства


Вернуться назад