[ECMD] Multi-DHT mit dem AVR Net-IO: mehrere DHT-22 an einem Device

Begonnen von kpwg, 14 Juni 2014, 16:48:42

Vorheriges Thema - Nächstes Thema

kpwg

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

Gutti80

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

kpwg

Hallo,

ich hatte die hier Ende Mai bezogen: 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

Gutti80


Gernott

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.

kpwg

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

Gernott

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.

kpwg

Zitat von: Gernott am 05 Juli 2014, 14:17:23
Update: Hab's gefunden, Inlining war noch zu aktivieren.

Wollte gerade Screenshots erstellen.  ;)

Gernott

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.

Gernott

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.

kpwg

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

Gernott

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.

Gernott

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.

kpwg


Gernott

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.