FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Viktor74 am 29 Mai 2021, 15:04:52

Titel: CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 29 Mai 2021, 15:04:52
Hallo zusammen,

ich habe einen DHT22 Sensor per 1wire am Raspi 3 auf dem GPIO17 angschlossen und mit der Anleitung (siehe folgender Link) eingebunden.

https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276 (https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276)

Jetzt bekomme ich ab und zu Werte mit 0:

2021-05-29_14:26:39 DHT22 temperature: 16.7
2021-05-29_14:26:39 DHT22 humidity: 44
2021-05-29_14:29:09 DHT22 humidity: 43.8
2021-05-29_14:31:40 DHT22 temperature: 0
2021-05-29_14:31:40 DHT22 humidity: 0
2021-05-29_14:34:09 DHT22 temperature: 16.7
2021-05-29_14:34:09 DHT22 humidity: 43.1
2021-05-29_14:36:40 DHT22 temperature: 0
2021-05-29_14:36:40 DHT22 humidity: 0
2021-05-29_14:39:09 DHT22 temperature: 16.7
2021-05-29_14:39:09 DHT22 humidity: 42.5
2021-05-29_14:41:40 DHT22 temperature: 0
2021-05-29_14:41:40 DHT22 humidity: 0
2021-05-29_14:44:09 DHT22 temperature: 16.7
2021-05-29_14:44:09 DHT22 humidity: 42.9
2021-05-29_14:46:40 DHT22 temperature: 0
2021-05-29_14:46:40 DHT22 humidity: 0
2021-05-29_14:49:09 DHT22 temperature: 16.8
2021-05-29_14:49:09 DHT22 humidity: 42.1
2021-05-29_14:51:40 DHT22 temperature: 0
2021-05-29_14:51:40 DHT22 humidity: 0
2021-05-29_14:54:10 DHT22 temperature: 16.8
2021-05-29_14:54:10 DHT22 humidity: 40.6

Ich denke das Problem liegt an den CustomReadings:

Hier die Logfile-Meldung

2021.05.29 14:41:40 1: PERL WARNING: Argument "cat: '/sys/devices/platform/dht11@11/iio:device0/in_humi..." isn't numeric in division (/) at (eval 4850) line 1.
2021.05.29 14:41:40 1: stacktrace:
2021.05.29 14:41:40 1:     main::__ANON__                      called by (eval 4850) (1)
2021.05.29 14:41:40 1:     (eval)                              called by ./FHEM/98_CustomReadings.pm (105)
2021.05.29 14:41:40 1:     main::CustomReadings_Read           called by ./FHEM/98_CustomReadings.pm (44)
2021.05.29 14:41:40 1:     main::CustomReadings_OnTimer        called by fhem.pl (3419)
2021.05.29 14:41:40 1:     main::HandleTimeout                 called by fhem.pl (695)

Hier die List der CustomReadings:

Internals:
   CFGFN     
   FUUID      60ad575e-f33f-0827-405c-ccfd823694894439
   NAME       DHT22
   NR         45
   STATE      OK
   TYPE       CustomReadings
   READINGS:
     2021-05-29 15:01:40   humidity        40.7
     2021-05-29 15:01:40   state           OK
     2021-05-29 15:01:40   temperature     16.9
Attributes:
   event-on-change-reading .*
   interval   150
   readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_temp_input 2>%1) / 1000,humidity:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_humidityrelative_input 2>%1) / 1000

Kann mir vielleicht jemand helfen und erklären warum da diese Fehlermeldung kommt?

Danke im Voraus
Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 29 Mai 2021, 15:22:22
Bist du sicher, dass in den Dateien IMMER Zahlen stehen!!?

Und: was soll '2>%1' sein?

Also was ich kenne ist: '2>&1'

Und dann evtl. nach /dev/null (wenn man keine Ausgaben will: hier willst/brauchst du sie ja, denke ich ;)  ).

Anmerkung: qx() blockiert.
Gut ein "cat" sollte schnell gehen...
...wollte es nur erwähnt haben.

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 29 Mai 2021, 16:56:21
Hallo Joachim,

zu deinen Fragen:

Zitat von: MadMax-FHEM am 29 Mai 2021, 15:22:22
Bist du sicher, dass in den Dateien IMMER Zahlen stehen!!?


Tja, ich bin neu hier und ich sehe ja was raus kommt, gerne kann ich mehr Infos liefer, falls das notwendig ist.

Zitat von: MadMax-FHEM am 29 Mai 2021, 15:22:22
Und: was soll '2>%1' sein?

Das hat mich auch irritiert (weil im Vorschlag/Beispiel das & steht), aber & statt % bringt das gleiche - habe ich schon ausprobiert

Zitat von: MadMax-FHEM am 29 Mai 2021, 15:22:22
Und dann evtl. nach /dev/null (wenn man keine Ausgaben will: hier willst/brauchst du sie ja, denke ich ;)  ).

Anmerkung: qx() blockiert.
Gut ein "cat" sollte schnell gehen...
...wollte es nur erwähnt haben.

Wie gebe ich das als Befehl ein?
Gern würde ich die Tipps annehmen, aber ich habe noch nicht so viel Erfahrung.
Bitte gib mir einen Vorschlag

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 29 Mai 2021, 19:37:03
Naja ich würde zunächst mal das /1000 weglassen.

Also nativ das loggen was tatsächlich in der Datei steht.
Also nur den "cat-Befehl".


readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_temp_input 2>%1),humidity:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_humidityrelative_input 2>%1)


und evtl. doch mal aus % -> & machen...
...oder ebenfalls ganz weglassen.


readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_temp_input 2>&1),humidity:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_humidityrelative_input 2>&1)


bzw.


readingDefinitions temperature:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_temp_input),humidity:qx(cat /sys/devices/platform/dht11\@11/iio:device0/in_humidityrelative_input)


Das mal eine Zeitlang laufen lassen und sehen was im Log steht.
Also ob da tatsächlich nur Zahlen stehen bzw. ob halt ab und an auch "0" in den Dateien steht.
EDIT: evtl. steht bei dir ja ab und an in der Datei auch ein Fehler drin, siehe https://forum.fhem.de/index.php/topic,25413.msg855374.html#msg855374 (ist gleich auf der nächsten Seite, nicht gelesen? Bzw. hast du DORT doch genau dieselbe Frage gestellt? Warum doppelt? Gut, ok es kam 2 Tage keine Antwort aber tja: braucht halt Geduld)

Und bitte zukünftig "code-Tags" benutzen, das '#' im "Menü"... :)

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 29 Mai 2021, 19:57:54
Danke Joachim!

Hier der Event monitor:

2021-05-29 19:50:32 CustomReadings DHT22 temperature: 18000
2021-05-29 19:50:32 CustomReadings DHT22 humidity: 39300

Das kommt im text log:

2021-05-29_19:49:32 DHT22 temperature: cat: '/sys/devices/platform/dht11@11/iio:device0/in_temp_input': Input/output error
2021-05-29_19:49:32 DHT22 humidity: cat: '/sys/devices/platform/dht11@11/iio:device0/in_humidityrelative_input': Connection timed out
2021-05-29_19:50:32 DHT22 temperature: 18000
2021-05-29_19:50:32 DHT22 humidity: 39300
2021-05-29_19:52:35 DHT22 temperature: cat: '/sys/devices/platform/dht11@11/iio:device0/in_temp_input': Input/output error
2021-05-29_19:52:35 DHT22 humidity: cat: '/sys/devices/platform/dht11@11/iio:device0/in_humidityrelative_input': Connection timed out

Aber Hey! Es kommt keine "PERL WARNING" mehr.

Gruß
Viktor


Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 29 Mai 2021, 20:07:28
Naja, also: es steht halt manchmal Text in den Dateien des Sensors -> das kann ja nicht durch 1000 geteilt werden ;)
-> isn't numeric

Bitte code-Tags! Danke.

D.h. du musst dafür sorgen, dass nur Zahlen und keine Fehlermeldung mehr in den Dateien stehen...

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 29 Mai 2021, 20:21:49
Hi Joachim,

ja so langsam versteh ich.

wegen Code dachte ich nur das # zu nutzen, wenn es wirklich Programmier Zeugs ist und nicht bei logs oder so - aber gern mach ich das:

2021-05-29_20:09:59 DHT22_Temp temperature: 17500
2021-05-29_20:11:59 DHT22_Temp temperature:
2021-05-29_20:13:59 DHT22_Temp temperature: 17400
2021-05-29_20:14:59 DHT22_Temp temperature:
2021-05-29_20:16:00 DHT22_Temp temperature: 17400
2021-05-29_20:17:01 DHT22_Temp temperature: 17300
2021-05-29_20:18:02 DHT22_Temp temperature:


Ich habe hier nochmal ein Custom Readings angelegt und nur die Temperatur rausholen lassen und siehe da es kommt gar nichts - also keine Zahl.

Das hilft mir zwar im Verständnis zu den Fehlermeldungen, aber ich weis immer noch nicht warum der DHT22 gar keinen Wert liefert??

Trotzdem Danke

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 29 Mai 2021, 20:23:47
Zitat von: MadMax-FHEM am 29 Mai 2021, 20:07:28
D.h. du musst dafür sorgen, dass nur Zahlen und keine Fehlermeldung mehr in den Dateien stehen...

Hast Du vielleicht eine Idee was ich da manchen kann - also wenn kein Wert geliefert wird?

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 29 Mai 2021, 20:46:00
Ja code-Tags auch für Logs etc.: liest sich besser :)

Ich habe jetzt nichts gefunden, dass bei CustomReadings auch Perl geht, dann könnte man ja das Ergebnis prüfen etc.
(nutze Customreadings nicht, wenn mache ich das eher wie der "Kollege" im ersten Post des anderen Threads, also aus dem Script heraus fhem "befüllen"... Weil ein weiterer Vorteil: es blockiert dann nicht)
D.h. du musst eben im Script das die Textdateien füllt dafür sorgen, dass eine Zahl drin steht... ;)

Welches Script nutzt du denn?
Poste das doch mal...

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 30 Mai 2021, 09:31:10
Guten Morgen Joachim,

das mit dem Skript klingt gut, aber wie anfangs erwähnt habe ich einen Lösungsvorschlag ohne Python Skript gewählt, da ich das so einfach wie möglich halten wollte um möglichst wenig Fehlersuche betreiben zu müssen.

Hier nochmals der Komplettvorschlag:

https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276 (https://forum.fhem.de/index.php/topic,25413.msg850276.html#msg850276)

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 30 Mai 2021, 09:51:44
Ah, ok.

Dann sehe ich aktuell folgende Wege:

- statt direkt per cat im CustomReading die u.U. "fehlerhaften" "Dateien" auszulesen ein shellscript per cron, welches die Werte überprüft und andere Dateien schreibt, die dann per CustomReadings verarbeitet werden...

- ein Script per cron oder fhem at welches die Werte ausliest und gegebenenfalls "korrigiert" und direkt die Werte nach fhem schreibt, z.B. in einen dummy...

- die "Dateien" per at (statt CustomReadings) auszulesen, Werte gegebenenfalls "korrigieren" und in einen dummy schreibt...

- Variante wie zuvor, nur mittels DOIF...

- doch das Python-Script...

Bei den Varianten ohne DOIF/Python-Script kann ich unterstützen...

Oder mal testen, ob man in CustomReadings auch Perl programmieren kann...

Die Variante mit Shell-Script dachte ich in dem Thread irgendwo entdeckt zu haben?

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 30 Mai 2021, 12:05:39
Gut Joachim,

ich bin bereit was auszuprobieren, aber ich möchte die laufende Messkette nicht unterbrechen.

Die Daten brauche ich für meine aktuelle Bachelorarbeit und bessere Ergebnisse sind schon gut für mich.

Also, wenn Du einen Vorschlag hast bin ich gern bereit da was zu machen.

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 30 Mai 2021, 12:41:44
Naja, am einfachsten ist das mit at und dummy...
...bzw. at und Shellscript...

Ich kann ja dann mal was basteln...

Aber wenn es für die Batchelorarbeit ist, müsstest du dann nicht selbst ran... ;)

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 30 Mai 2021, 13:38:48
Zitat von: MadMax-FHEM am 30 Mai 2021, 12:41:44
Aber wenn es für die Batchelorarbeit ist, müsstest du dann nicht selbst ran... ;)

Ich habe nochmal darüber nachgedacht und möchte nicht den Anschein von unsportlichem Verhalten erwecken. Aus diesem Grund möchte ich nichts gebastelt haben.

Wir bleiben lieber beim Thema "CustomReadings"

Gruß
Viktor
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Prof. Dr. Peter Henning am 30 Mai 2021, 20:50:33
Nun, wir werden sehen, ob das auch in der eidesstattlichen Versicherung der Bachelor Thesis als Hilfe angegeben wird. Da müsste diese Unterstützung nämlich erwähnt werden.

LG

pah
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 30 Mai 2021, 21:07:29
Zitat von: Prof. Dr. Peter Henning am 30 Mai 2021, 20:50:33
Nun, wir werden sehen, ob das auch in der eidesstattlichen Versicherung der Bachelor Thesis als Hilfe angegeben wird. Da müsste diese Unterstützung nämlich erwähnt werden.

LG

pah

Also ich habe schon Messdaten und dafür musste niemand etwas basteln! Damit das so bleibt nehme ich lieber keine fremde Hilfe an.
Vielen Dank für den Hinweis.

Falls es zum eigentlichen Thema etwas neues gibt, bin ich ganz Ohr.

Ich wünsche einen guten Tag
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: MadMax-FHEM am 30 Mai 2021, 21:11:31
Zitat von: Prof. Dr. Peter Henning am 30 Mai 2021, 20:50:33
Nun, wir werden sehen, ob das auch in der eidesstattlichen Versicherung der Bachelor Thesis als Hilfe angegeben wird. Da müsste diese Unterstützung nämlich erwähnt werden.

LG

pah

:) Toll!

Aber ja: stimmt...

Dann hier auch ein Hilfeversuch:

du brauchst einen dummy (statt dem CustomReading-Device), hier als "RawDef" (wichtig auch die setreadings, damit die Readings schon mal da sind ODER es muss der erste Versuch eine gültige Zahl liefern ;)  ):


defmod dmHumTemp dummy

setstate dmHumTemp 2021-05-30 20:58:58 humidity 28
setstate dmHumTemp 2021-05-30 20:58:58 temperature 16


dann eben ein at was das Script zyklisch aufruft (ähnlich des Intervalls des CustomReading), ebenfalls als "RawDef":


defmod atHumTemp at *00:00:30 "/opt/fhem/readout.sh"


Alternativ geht auch ein cron auf Systemebene...

Und dann nat. das Bash-Script (/opt/fhem/readout.sh):


#!/bin/bash

Temp=$(cat /sys/devices/platform/dht11\@11/iio:device0/in_temp_input  2>/dev/null)
Humidity=$(cat /sys/devices/platform/dht11\@11/iio:device0/in_humidityrelative_input  2>/dev/null)
dummy="dmHumTemp"

# check if number or text
if [ -n "$Temp" ] && [ "$Temp" -eq "$Temp" ] 2>/dev/null; then
# number -> write into dummy
  Temp=$(($Temp/1000))
  /usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading $dummy temperature $Temp"
else
# nan -> read last value from dummy and (re)write in order to get an event
  Temp=$(/usr/bin/perl /opt/fhem/fhem.pl 7072 "{ReadingsVal('${dummy}','temperature','error')}")
  /usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading $dummy temperature $Temp"
fi

# check if number or text
if [ -n "$Humidity" ] && [ "$Humidity" -eq "$Humidity" ] 2>/dev/null; then
# number -> write into dummy
  Humidity=$(($Humidity/1000))
  echo $Humidity
  /usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading $dummy humidity $Humidity"
else
# nan -> read last value from dummy and (re)write in order to get an event
  Humidity=$(/usr/bin/perl /opt/fhem/fhem.pl 7072 "{ReadingsVal('${dummy}','humidity','error')}")
  /usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading $dummy humidity $Humidity"
fi


(ich hab's mal "angetestet", also mit selbst erstellten Textdateien, mal mit Zahl mal mit Text drin, kann aber nat. die Funktionalität nicht garantieren... ;)  Ist aber doch ähnlich dem was in dem anderen Thread schon vorgestellt wurde? EDIT: https://forum.fhem.de/index.php/topic,25413.msg919580.html#msg919580 gut dort als Python hier als Bash)

Wichtig: das Bash Script muss nat. so sein, dass es fhem ausführen kann/darf.
Also irgendwo wo fhem Zugriff hat, z.B. /opt/fhem
Und auch Berechtigung, also z.B. sudo chown fhem: /opt/fhem/readout.sh

EDIT: wichtig auch -> du brauchst nat. ein telnet-Device... ;)

Statt Auslesen per ReadingsVal mit Angabe von "error" kannst du auch ReadingsNum nehmen (eigentlich besser aber ein Fehler ist so schwerer zu erkennen)...

Gruß, Joachim
Titel: Antw:CustomReadings für das Auslesen vom DHT22 Sensor fehlerhaft
Beitrag von: Viktor74 am 31 Mai 2021, 09:36:20
Also jetzt bin ich etwas verwirrt, gestern hat es sich so angehört als ob mir hier ins Gewissen geredet wird, weil ich dabei bin etwas zu fordern bzw. zuzulassen was falsch wäre.

Ich war mir nicht sicher ob das Spaß ist, aber nach dem ich hier von Prof. Dr. Peter Henning angezählt wurde verging mir das lächeln.

Keine Ahnung was das hier wird, aber für Prof. Dr. Peter Henning möchte ich sagen, dass ich diesen Hilfeversuch von Joachim erst ausprobieren werde, wenn ich schon Bachelor bin.

Hier nochmal was ich Gestern schon dazu geschrieben habe:
ZitatZitat von: Prof. Dr. Peter Henning am Gestern um 20:50:33
Nun, wir werden sehen, ob das auch in der eidesstattlichen Versicherung der Bachelor Thesis als Hilfe angegeben wird. Da müsste diese Unterstützung nämlich erwähnt werden.

LG

pah

Also ich habe schon Messdaten und dafür musste niemand etwas basteln! Damit das so bleibt nehme ich lieber keine fremde Hilfe an.
Vielen Dank für den Hinweis.

Falls es zum eigentlichen Thema etwas neues gibt, bin ich ganz Ohr.

Ich wünsche einen guten Tag