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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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