DHT22-Messwerte in fhem auslesen

Begonnen von zYloriC, 16 Juli 2014, 16:22:01

Vorheriges Thema - Nächstes Thema

KölnSolar

ZitatIch möchte den DHT22 Sensor ohne das python script einbinden und habe deshalb die Lösung von arthoffhem (Beitrag 162) implementiert.
damit wäre dann ja meine obige Frage beantwortet.  :D

Hier noch der Link zu
Zitat von: https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276Beitrag 162

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Geisha2021

Hallo Markus,

es funktioniert ja prinzipiell jedoch jeder 2. Wert ist 0 und das möchte ich nicht in meiner DB loggen.
Ich kriege es aber einfach nicht weg.


mumpitzstuff

https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern

Schau mal unten bei DHT11 und DHT22 auf die Sampling Rate. Vermutlich liegt es daran, das die overlay Datei versucht jede Sekunden einen Wert zu samplen, was jedoch beim DHT22 scheitern dürfte und zwar bei jedem 2. Mal. Man kann sich aus den binary overlay Dateien eine Textform erzeugen lassen, sich diese mal ansehen und eventuell die Samling Rate (falls es diese ist) anpassen und daraus wieder eine Binärdatei erzeugen und verwenden.

Geisha2021

#198
So ich habe es geschafft. Ich kann jetzt die Temperatur und Feuchtigkeit loggen und vernünftig auch als Plot darstellen.
Im folgenden möchte ich für Neulinge wie mich zusammenfassen was man alles machen muss.

Hier im Forum habe ich den Eindruck, dass zuviel Kenntniss über die Programmiersprachen vorausgesetzt wird.
Als FHEM user will man sich ja nicht unbedingt tief in Perl oder Python einarbeiten.

Also hier meine Lösung ohne Adafruit und ohne Phytonscript basierend auf dem Beitrag 162 von arthoffhem

Wie man den DHT22 anschließt an den Raspberry setze ich als bekannt voraus.

Jetzt alles konfigurieren wie in Beitrag 162 von arthoffhem

Ich nutze jedoch nicht FileLog sonder DBLog (MariaDB)

Dann User reading anlegen:

define DHT22 CustomReadings

Folgende attribute definieren: In den Klammern die Erklärung der Attribute)
attr DHT22 readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@5/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@5/iio:device0/in_humidityrelative_input 2>%1) / 1000
Ich habe jedoch den DHT22 an GPIO 5 angeschlossen und deshalb muss man das obige attribut anpassen: statt....@0.. in ...@5.. ändern
(Abfrage der DHT22 Parameter die in den Dateien in_temp_input und in_humidityrelative_input abgelegt sind.

attr DHT22 DbLogExclude .* (nichts wird geloggt)
attr DHT22 DbLogInclude temperature,humidity (Temperatur und Feuchtigkeit werden geloggt)

Weil praktisch immer bei beiden Parametern der Wert 0 geloggt wurde der fast bei jeder zweiten Abfrage auftaucht, verhindert das folgende Attribut das loggen der 0-Werte.
Die Besonderheit ist, dass der 0-Wert nicht numerisch sondern als String vorliegt. Deshalb die Abfrage mit eq

attr DHT22 DbLogValueFn {if ($READING =~ /temperature/ && $VALUE eq "0"){$IGNORE=1;}}
{if ($READING =~ /humidity/ && $VALUE eq "0"){$IGNORE=1;}}

attr DHT22 event-on-change-reading temperature,humidity (nur bei Änderung loggen)
attr DHT22 interval 20 (Abfrage interval 20s. wurde zu Testzwecken zunächst auf 4s geändert um Änderungen sofort zu sehen.)


Ich hoffe, dies hilft Leuten die nicht so firm sind in den Programmiersprachen.

Gruß Uli

Geisha2021

Zitat von: mumpitzstuff am 08 Dezember 2020, 12:20:19
https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern

Schau mal unten bei DHT11 und DHT22 auf die Sampling Rate. Vermutlich liegt es daran, das die overlay Datei versucht jede Sekunden einen Wert zu samplen, was jedoch beim DHT22 scheitern dürfte und zwar bei jedem 2. Mal. Man kann sich aus den binary overlay Dateien eine Textform erzeugen lassen, sich diese mal ansehen und eventuell die Samling Rate (falls es diese ist) anpassen und daraus wieder eine Binärdatei erzeugen und verwenden.

Wie macht man aus dem overlay binary eine Textform?.

Mein Problem habe ich gelöst (siehe mein Beitrag). Mir ist es egal wenn da nullwerte kommen solange ich sie nicht loggen muss. Die Messwerte stimmen ja ziemlich.
Interessant wäre es schon wenn man das overlay entsprechend anpassen könnte um das Problem generell zu lösen. Wer hat das eigentlich erstellt?


Wernieman

OT:
Also ... CrossCompiling hat jetzt nicht unbedingt mit "Linux-Gurus" zu tuen ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Geisha2021

Das folgende attribut funktioniert jedoch nicht.

attr DHT22 event-on-change-reading temperature,humidity

Es werden auch gleiche Werte geloggt.
Gilt dieses attribut nicht für CustomReadings?

Bei den DS18B20 Sensoren funktioniert es.

Wie kann man erkennen welche attribute funktionieren?

Viktor74

Hallo zusammen,

ich habe folgendes Zitat ausprobiert und es funktioniert (ich musste zwar im Rasp etwas anpassen -anstatt DHT11@0 wurde es DHT11@11 ).

Leider habe ich beim Text log immer wieder Aussetzer mit dem Wert 0 für Temperatur und Luftfeuchte:

2021-05-27_16:39:20 DHT22 temperature: 0
2021-05-27_16:39:20 DHT22 humidity: 0
2021-05-27_16:41:49 DHT22 temperature: 15.3
2021-05-27_16:41:49 DHT22 humidity: 48.1
2021-05-27_16:46:49 DHT22 temperature: 15.2
2021-05-27_16:51:49 DHT22 humidity: 47.7
2021-05-27_16:54:19 DHT22 temperature: 15.1
2021-05-27_16:54:19 DHT22 humidity: 48.5
2021-05-27_16:56:49 DHT22 humidity: 48.1
2021-05-27_16:59:19 DHT22 temperature: 15
2021-05-27_16:59:19 DHT22 humidity: 48.7
2021-05-27_17:01:51 DHT22 temperature: 0
2021-05-27_17:01:51 DHT22 humidity: 0

Hat das Jemand schon in den Griff bekommen?

Zitat von: artoffhem am 26 Oktober 2018, 21:58:49
Hallo Zusammen,

möchte hier eine Lösung teilen wie ich einen DHT11 Sensor ohne Python script eingebunden habe.
Der RPi unterstützt direkt 1-Wire (https://wiki.fhem.de/wiki/Raspberry_Pi_und_1-Wire) und DHT Sensoren an einstellbaren GPIO Pins mittels dtoverlay Einstellungen.

Ausgangspunkt für diese Beschreibung ist folgender Blog https://arduinodiy.wordpress.com/2018/05/17/reading-the-dht11-or-dht22-on-the-raspberry-via-an-overlay-and-send-it-to-the-openhab-rest-api/

Bei meinem RPi3 habe ich den DHT11 an GPIO5 angeschlossen, da der Standardport (GPIO4) mit dem HM-MOD-RPI-PCB blockiert ist. Kurze Notiz am Rande - DHT Sensoren haben kein 1-Wire Protokoll - war mir Anfangs nicht klar.

Folgende Schritte sind notwendig.

RPi Unterstützung für DHT in /boot/config.txt aktivieren
sudo nano /boot/config.txt
# activtion DHT11/DHT21/DHT22 sensor on GPIOx (default 4)
dtoverlay=dht11,gpiopin=5
# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Neustart RPi
sudo shutdown -r now

Kontrolle ob dht11 aktiviert wurde
sudo vcdbg log msg
in der Ausgabe taucht folgende Meldung auf
xxx: Loaded overlay 'dht11'
xxx: dtparam: gpiopin=5


Kontrolle ob die Werte ausgelesen werden können
cat /sys/devices/platform/dht11@0/iio:device0/in_temp_input
Ausgabe z.B.:
21000
cat /sys/devices/platform/dht11@0/iio:device0/in_humidityrelative_input
Ausgabe z.B:
65000

Anlegen eins CustomReadings in FHEM um die Werte auszulesen
define DHT11 CustomReadings
attr DHT11 readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@0/iio:device0/in_humidityrelative_input 2>%1) / 1000

Abfrage Intervall festlegen
attr DHT11 interval 150
event-on-change-reading festlegen damit im Filelog nur bei Änderungen protokolliert wird
attr DHT11 event-on-change-reading .*

FileLog anlegen
define FileLog_DHT11 FileLog ./log/DHT11-%Y.log DHT11

viel Spaß

edit 2018-10-27: Tippfehler in config.txt korrigiert

KölnSolar

Ich habe nun das 58_GPIO4-Modul um die Funktionalität für DHT11/DHT22 erweitert. Somit sind weder Python noch CustomReading mit Systembefehl notwendig. Nur noch
- Sensor anschließen
- dtoverlay einrichten
- define des FHEM-devices

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

riker1

Hallo

habe es nun geschafft : ist ein Pi4

in der Config:

# activtion DHT11/DHT21/DHT22 sensor on GPIOx (default 4)
dtoverlay=dht11,gpiopin=4
# activating device tree debugging (use sudo vcdbg log msg)
dtdebug=on


Allerdings ist das Verzeichnis anders:


cat /sys/devices/platform/dht11@[b]4[/b]/iio:device0/in_temp_input
24200


allerdings bekomme ich öfters ein Fehler:
cat in_humidityrelative_input
cat: in_humidityrelative_input: Input/output error


wiederholt man es mehrmals kommt manchmal ein Wert?

Muss man da noch was einstellen?

Danke VG T


FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

KölnSolar

Nutze einfach mein 58_GPIO4 und es funktioniert problemlos(Lesefehler bleiben, sind aber uninteressant, solange nicht eine wie auch immer geartete zeitkritische Steuerung aufgesetzt ist. Dann ist der DHTxx per GPIO das falsche Konstrukt.)
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

riker1

Zitat von: KölnSolar am 04 Juli 2021, 09:38:06
Nutze einfach mein 58_GPIO4 und es funktioniert problemlos(Lesefehler bleiben, sind aber uninteressant, solange nicht eine wie auch immer geartete zeitkritische Steuerung aufgesetzt ist. Dann ist der DHTxx per GPIO das falsche Konstrukt.)
Grüße Markus

top danke läuft.

Bin aber etwas verwirrt mit dem Kommentar zu wiring p1 ....gin wäre egal?

dtoverlay=w1-gpio,gpiopin=4,pullup=off
Der gpiopin kann beliebig gewählt werden, da das FHEM-Modul diesbezüglich unabhängig funktioniert.


habe das gar nicht aktiviert.....

Danke
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

KölnSolar

Zitathabe das gar nicht aktiviert.....
Musst Du ja auch nicht.  :D

Das 58_GPIO4 ist im Ursprung für 1wire entstanden. Default-GPIO beim dtoverlay ist 4(genau wie beim dht11-overlay). Nutzt man beides, muss mal also für eins der beiden einen anderen GPIO wählen.

ZitatDer gpiopin kann beliebig gewählt werden, da das FHEM-Modul diesbezüglich unabhängig funktioniert.
Physikalisch kann für 1wire und auch DHT11 der GPIO frei gewählt werden und muss dann, sofern abweichend von 4, als Parameter in der config.txt definiert werden.
Meine Aussage bezog sich auf das FHEM-Modul und den Zugriffspfad auf die Sensordaten. Bei 1wire ist der Pfad "pinneutral". Bei dht11 hat der dtoverlay-Autor den gpiopin in den Pfad eingebaut, weshalb wir auch in FHEM den Pin bekannt machen müssen. Das habe ich dann über das define dht-x gelöst. Ist also eigentlich gar nicht wichtig für den Anwender, der tut, was ihm gesagt wird. Umgekehrt möchten manche ja die Hintergründe verstehen oder fragen sich: Warum muss bei dht11 der GPIO-Pin definiert werden, während es für 1wire nirgend eine Pin-Definition gibt.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

riker1

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox