FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: kpwg am 14 Juni 2014, 16:48:42

Titel: [ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 14 Juni 2014, 16:48:42
Hallo Leute,

Die Ethersex-Firmware besitzt ein neues Feature: Multi-DHT. Es werden nun mehrere der preiswerten, aber recht genauen DHT22 Temperatur-/Feuchtesensoren in einem Ethersex unterstützt. Danke nochmals an die Entwickler für die Arbeit und die Geduld mit mir.  :D

Die Sensoren benötigen 5V Betriebsspannung und kommunizieren über je einen Pin mit dem Prozessor. Der Preis pro Stück liegt derzeit beim Chinesen etwa bei 3.50 Euro. Wer die Trägheit und Ungenauigkeit der S300TH oder TX29DTH kennt, wünscht sich vermutlich Besseres; vor allem bei Berechnung von Taupunkt und absoluter Feuchte, welche von Genauigkeit sehr profitieren.
Vorteile:   sehr genau (vor allem die Feuchte), sehr schnelle Reaktion auf Werteänderung, vorkalibirert
Nachteile: Betauung mögen sie nicht, proprietäres Protokoll (leider kein 1wire), keine Langzeiterfahrung bzgl. Alterung

Bisher konnte der eine mögliche DHT22 per ECMD mit dht temp bzw. dht humid abgefragt werden. Neu ist jetzt ein anschließender Parameter in Form einer fortlaufenden Zahl bei Null beginnend (Programmieren können das sicher besser ausdrücken  :P )
Mit dht temp 0 und dht humid 0 erreicht man also den ersten Sensor, mit dht temp 2 und dht humd 2 den dritten Sensor. Über die Weboberfläche vom Net-IO kann man jetzt ebenfalls die Sensoren mit Name sehen. Die Ansicht wird dynamisch per Javascript aktualisiert. Das Pinning geschieht sehr komfortabel über menuconfig und nicht mehr über das vorherige Bearbeiten einer Datei.

Einbindung in FHEM


dht22m.classdef:
# Uebergabeparameter DHT22 ID 0...n
params devID
# Umsetzung in ECMD Befehle fuer DHT22
get DHT cmd {"dht temp %devID\n\000dht humid %devID\n"}
get DHT expect "\d+.\d\n"
get DHT postproc {\
s/(.*)\n(.*)\n/T: $1 H: $2/; $_;\
my $hash  = $defs{%NAME};\
my $temperature = $1;\
my $humidity = $2;\
my $state = $_;\
\
readingsSingleUpdate($hash, "temperature", $temperature, 1);\
readingsSingleUpdate($hash, "humidity", $humidity, 1);\
readingsSingleUpdate($hash, "state", $state, 1);\
\
}


Die classdef wird ganz normal mit eingebunden:
define NETIO_TEST ECMD telnet 192.168.3.89:2701
attr NETIO_TEST classdefs LCD=/opt/fhem/FHEM/lcd.classdef:DHT22M=/opt/fhem/FHEM/dht22m.classdef


Die Sensoren werden definiert:
define Test0 ECMDDevice DHT22M 0
attr Test0 IODev NETIO_TEST
define Test1 ECMDDevice DHT22M 1
attr Test1 IODev NETIO_TEST
define Test2 ECMDDevice DHT22M 2
attr Test2 IODev NETIO_TEST
define Test3 ECMDDevice DHT22M 3
attr Test3 IODev NETIO_TEST


Eine zyklische Messung alle 4 Minuten könnte so aussehen:
define Messung_DHT at +*00:04 get Test0 DHT;; get Test1 DHT;; get Test2 DHT;; get Test3 DHT
attr Messung_DHT verbose 0
Fünfzehn Messwerte pro Stunde genügen den allermeisten Anforderungen.

Anbei noch ein paar Bilderchen.

Viele Grüße, Ricardo
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gutti80 am 02 Juli 2014, 20:16:47
hallo!

ja das ist ein tolles feature! ich hab auch schon lange drauf gewartet und es funktioniert einwandfrei!

danke auch für deine tollen fotos!

frage: wo kaufst du deine sensoren um 3,50.-?
ich habe jetzt schon einige chinesische anbieter durchgesehen, aber unter 9$ finde ich nichts!

lg
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 02 Juli 2014, 20:59:06
Hallo,

ich hatte die hier Ende Mai bezogen: http://www.ebay.de/itm/170931111400 (http://www.ebay.de/itm/170931111400)
Diese Lieferung hatte schon die neuere "keramische" Rückseite und nicht mehr die Gummierte.
Die Werte liegen ganz brauchbar beieinander. Für vergleichende Messungen sollte man immer Sensoren aus der gleichen Charge nehmen und am besten vorab nochmals vergleichend messen. Bei der vorherigen Lieferung hatte ich einen Ausrutscher dabei- der zeigte fast ein Grad zu wenig an.

Anbei noch ein Screenshot eines Tages mit allen 4 Sensoren direkt beieinander.

Viele Grüße, Ricardo
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gutti80 am 02 Juli 2014, 21:48:37
danke für den link!
da werd ich gleich mal zuschlagen! :-)
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 05 Juli 2014, 13:14:05
Hallo Ricardo

Ich habe Deinen Code 1:1 kopiert. Funktioniert prächtig, danke.

Allerdings bekomme ich im Log folgende Fehlermeldung, wenn ich
get KL_HumTemp1 DHT aufrufe:

Useless use of a variable in void context at (eval 31283) line 1.

in folgendem Kontext:
2014.07.05 13:11:04 5: ECMDDevice: Analyze command >{"dht temp 0\n\000dht humid 0\n"}<
2014.07.05 13:11:04 5: Postprocessing "23.2\n62.2\n" with perl command { s/(.*)\n(.*)\n/T: $1 H: $2/; $_; my $hash  = $defs{KL_HumTemp1}; my $temperature = $1; my $humidity = $2; my $state = $_;  readingsSingleUpdate($hash, "temperature", $temperature, 1); readingsSingleUpdate($hash, "humidity", $humidity, 1); readingsSingleUpdate($hash, "state", $state, 1); }.
Useless use of a variable in void context at (eval 31374) line 1.
2014.07.05 13:11:04 5: Triggering KL_HumTemp1 (1 changes)


Hast Du eine Idee, wo das herkommen könnte?
Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 05 Juli 2014, 13:38:09
Hallo Gernott,

diese Verhalten habe ich auch beobachtet! Daran ist kurios: zum Beginn des Monats läuft das Log quasi voll, nach ein paar Tagen hört das dann auf. Das es vom DHT kommt, war mir so nicht bewusst, da die Fehlermeldung keine Schlüsse zulässt. Auch in Logauszug von Dir finde ich jetzt keine Unstimmigkeiten, die auf "nutzloses Benutzen in einem leeren Zusammanhang" hindeuten könnten. Vielleicht meldet sich Boris bei Gelegenheit und schaut mal 'drüber?

Der Code ist aus meiner Sicht noch nicht ganz optimal (aber funktioniert  ::)). Das Reading DHT hätte ich gerne noch weg und state auf T: xx.x H: xx.x reduziert. Ich gehe da nochmal 'dran.

Viele Grüße, Ricardo
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 05 Juli 2014, 14:17:23
Hallo Ricardo

Da bin ich ja teilberuhigt.

Habe noch eine Frage zu Ethersex. Wie bekommt man denn im Webfrontend diese Tabelle angezeigt? Ich kriege dort nur die Onewire-Daten, aber nichts vom DHT.
Update: Hab's gefunden, Inlining war noch zu aktivieren.

Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 05 Juli 2014, 15:58:41
Zitat von: Gernott am 05 Juli 2014, 14:17:23
Update: Hab's gefunden, Inlining war noch zu aktivieren.

Wollte gerade Screenshots erstellen.  ;)
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 05 Juli 2014, 16:07:13
Zitat von: kpwg am 05 Juli 2014, 15:58:41
Wollte gerade Screenshots erstellen.  ;)
Ja, die Konfiguration ist etwas unübersichtlich, insbesondere wenn man nur gelegentlich mit Ether Sex hat.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 07 Juli 2014, 19:45:25
Hallo

Zur Genauigkeit der DHT22-Sensoren mal einige Werte.

Hier auf dem Schreibtisch
DHT22-1 T: 25.7°C rH: 55.7%
DHT22-2 T: 25.7°C rH: 57.4%

Log-HC2 mit ext. Fühler (kalibriert) T: 25.8°C rH: 56.5%

Temperaturabweichung ist minimal. Bei der Feuchte liegt einer etwas drüber, der andere etwas drunter. Finde ich akzeptabel, bei dem Preis. Eine komplette Kennlinie werde ich aber nicht aufnehmen.

Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 07 Juli 2014, 20:18:48
Das sieht aber sehr gut aus! Hätte bei der Feuchte nicht ganz so genaue Werte erwartet. Bei den Temperaturen sind so ziemlich alle Sensoren gut. Bei der Feuchte taugt aus meiner Sicht zB. ein TX29-DTH oder KS300 nur zur groben Schätzung und zur Tendenzanzeige. Da ich noch Taupunkt und absolute Feuchte errechne, sind genauere Ausgangswerte sehr wichtig. Klar ist ein SHT21 nochmals besser- der kostet aber auch fast das zehnfache.

Bin gespannt, wie sich die Sensoren auf lange Sicht verhalten (Drift, Alterung, ...)

Viele Grüße, Ricardo
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 07 Juli 2014, 20:50:08
Ich werde den Test in einem Jahr auf Wiedervorlage setzen...

Hast Du schon einen Lösungsansatz für den "useless use"-Logeintrag. Es ist hartnäckig und hört einfach nicht auf. Das sieht wirklich nicht so schön aus.

Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 07 Juli 2014, 22:21:27
Zitat von: kpwg am 05 Juli 2014, 13:38:09
Das Reading DHT hätte ich gerne noch weg und state auf T: xx.x H: xx.x reduziert.
Wie wäre es mit:
attr Test0 stateFormat T: temperature H: humidity
Damit ist das DHT zumindest in der Webanzeige weg.
Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 07 Juli 2014, 22:24:10
Dort habe ich mit sprintf °C und % stehen.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 09 Juli 2014, 21:27:05
Zitat von: Gernott am 07 Juli 2014, 20:50:08
Hast Du schon einen Lösungsansatz für den "useless use"-Logeintrag. Es ist hartnäckig und hört einfach nicht auf.
Gestern hatte ich den Raspi neugestartet und seitdem ist die Perl-Warnung weg. Das verstehe nun einer.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 10 Juli 2014, 20:02:11
Es beginnt immer zum Monatsersten und verschwindet in den folgenden Tagen. Nur woher kommt es? Die Fehlermeldung ist eben leider nichtssagend   :(
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 10 Juli 2014, 20:20:50
Na ja, man findet zumindest im Netz, daß es eine gängige Warnung des Perl-Interpreters ist. Vielleicht gibt er nach einiger Zeit einfach auf? Wäre ein menschlicher Zug. Ich habe auch eine classdef für Temperatursensoren hier aus dem Forum laufen, die von den Befehlen ziemlich ähnlich ist. Dort tritt das Problem nicht auf.

Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Patrick85 am 27 Dezember 2014, 12:12:20
Hallo zusammen,
verwende das Modul zum Auslesen von mehrere DHT22 schon seit einigen Wochen und hatte auch das Problem mit der Warnung: Useless use of a variable in void context at (eval 31283) line 1.

Seitdem ich die Kommentare entfernt hatte, wurden auch die Einträge im Log nicht mehr angezeigt. Hat vermutlich keinen logischen Hintergrund, bei mir hat es aber geholfen.

Habe zudem noch eine kleine Änderung get DHT expect "-?\d+.\d\n" vorgenommen, da ansonsten bei Minustemperaturen einen Warnung im Log erscheint. 2014.12.27 11:55:32 1: AVR: unexpected answer "-2.4\n" received (wrote "dht temp 0\n", expected \d+.\d\n)

dht22m.classdef
params devID
get DHT cmd {"dht temp %devID\n\000dht humid %devID\n"}
get DHT expect"-?\d+.\d\n"
get DHT postproc {\
s/(.*)\n(.*)\n/T: $1 H: $2/;\
my $hash  = $defs{%NAME};\
my $temperature = $1;\
my $humidity = $2;\
my $state = $_;\
\
readingsSingleUpdate($hash, "temperature", $temperature, 1);\
readingsSingleUpdate($hash, "humidity", $humidity, 1);\
readingsSingleUpdate($hash, "state", $state, 1);\
\
}


lg
Patrick
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 27 Dezember 2014, 13:30:13
Zitat von: Patrick85 am 27 Dezember 2014, 12:12:20
Useless use of a variable in void context at (eval 31283) line 1.
Seitdem ich die Kommentare entfernt hatte, wurden auch die Einträge im Log nicht mehr angezeigt. Hat vermutlich keinen logischen Hintergrund, bei mir hat es aber geholfen.
Hallo Patrick

Das wäre fast zu einfach. Kannst Du das reproduzieren (Kommentar mal wieder einfügen und wieder löschen)?

Gruß
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Patrick85 am 27 Dezember 2014, 15:29:45
Hallo Gernott,
du hast recht. Es hat nichts mit den Kommentaren zu tun, sondern mit dieser Zeile:

Original Code
s/(.*)\n(.*)\n/T: $1 H: $2/: $_;\

modifizierte Code
s/(.*)\n(.*)\n/T: $1 H: $2/;\

In meinem Code habe ich den String ": $_" entfernt. Sobald ich ihn wieder hinzufüge, erscheinen auch die Fehler wieder. Warum das so ist kann ich nicht genau sagen, da ich den Syntax auf die Schnelle nicht genau interpretieren kann. Vielleicht hat es damit zu tun, dass die DHT22 Sensore keinen Status sondern nur Werte zurückliefen.

dht temp 0
-2.7
dht humid 0
78.1


lg
Patrick
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: ag390734 am 01 März 2015, 20:45:53
Hallo zusammen

Ich bin auch sehr an dem Multi-DHT interessiert. Allerdings verzweifle ich gerade etwas mit dem Ethersex. Einen DHT hab ich seit geraumer Zeit am Laufen. Das pinning dafür hab ich in der .m4 Datei configuriert. Wie muss das jetzt aussehen? Ich nehme an, dass man jetzt nicht mehr um die dht_pinning.conf rum kommt. Aber was trägt man dann in der .m4 ein? Gar nichts mehr? Eine Anleitung dazu hab ich leider nicht gefunden.
Danke für eure Hilfe. Danach kann ich mich dann ans FHEM machen.

Viele Grüße
Andreas
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: Gernott am 02 März 2015, 00:05:16
Hallo

Da steht es doch: http://www.ethersex.de/index.php/DHT

Viele Grüße
G.
Titel: Antw:[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device
Beitrag von: kpwg am 08 März 2015, 15:24:32
Zitat von: Patrick85 am 27 Dezember 2014, 15:29:45
In meinem Code habe ich den String ": $_" entfernt. Sobald ich ihn wieder hinzufüge, erscheinen auch die Fehler wieder. Warum das so ist kann ich nicht genau sagen, da ich den Syntax auf die Schnelle nicht genau interpretieren kann. Vielleicht hat es damit zu tun, dass die DHT22 Sensore keinen Status sondern nur Werte zurückliefen.

Seit einem bestimmten Update im letzten Jahr in FHEM wird die Sache angemeckert. Der Substitutionsoperator s/// arbeitet stets auf $_, sofern man ihm nix anderes beibringt. Wenn man jedoch $_ nochmals explizit mitgibt, ist das "nutzloses Benutzen".  ;D

Ich benutze Multi-DHT seit einigen Monaten recht intensiv mit der classdef aus dem ethersex Wiki (http://www.ethersex.de/index.php/Nutzung_in_FHEM_%28Deutsch%29#DHT22_Temperatur-.2FFeuchtesensoren). Eine recht ähnliche Art zum Auslesen mehrere Werte in einem Rutsch nutze ich für den BMP180.

Viele Grüße, Ricardo