FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: nexulm am 09 Juli 2016, 01:14:54

Titel: ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: nexulm am 09 Juli 2016, 01:14:54
Hallo,

ich komme nicht mehr weiter. Ich habe bisher 3x DHT22 Sensoren im Keller zu Messung von Temperatur und Luftfeuchte verbaut.
Am 04./05.07. hab eich nachts ein fhem update (update all) ausgeführt. Seit dem habe ich nur noch die Temperaturen in FHEM. Die Luftfeuchte wird nicht mehr angezeigt.
Den verwedneten AVR NETIO schliesse ich aus, da ich per z.B. ...
http://192.168.99.160/ecmd?dht%20temperature%200
...und...
http://192.168.99.160/ecmd?dht%20humid%200
...die Temperatur für Sensor 0 im Webrowser angezeigt bekomme. Das Gleiche für die weiteren Sensoren. Das funktioniert soweit.

Was hat sich im FHEM Repo am Verhalten im Bereich ECMD/ECMDDevice verändert?

meine Config:
define AVR_NETIO ECMD telnet 192.168.99.160:2701
attr AVR_NETIO classdefs DHT22M=/opt/fhem/dht22m.classdef
attr AVR_NETIO group AVR-NetIO
attr AVR_NETIO requestSeparator 1
attr global verbose 5
attr AVR_NETIO logTraffic 5
attr AVR_NETIO room Keller

Beispielhaft für einen Sensor:
define Serverraum_DHT ECMDDevice DHT22M 0
attr Serverraum_DHT IODev AVR_NETIO
attr Serverraum_DHT event-on-change-reading .*
attr Serverraum_DHT group Temperatur-/Feuchtesensor
attr Serverraum_DHT room Keller,Favourites

meine 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);\
\
}

Logauszug beim manuellen Abruf in FHEM über get Waschkueche_DHT DHT

2016.07.09 01:00:10 5: Cmd: >get Waschkueche_DHT DHT<
2016.07.09 01:00:10 5: ECMDDevice: Analyze command >{"dht temp 2\n\000dht humid 2\n"}<
2016.07.09 01:00:10 5: AVR_NETIO: sending command "dht temp 2\n\000dht humid 2\n"
2016.07.09 01:00:10 5: AVR_NETIO: write "dht temp 2\n\000dht humid 2\n", expect \d+.\d\n
2016.07.09 01:00:10 5: SW: 6468742074656d7020320a006468742068756d696420320a
2016.07.09 01:00:10 5: AVR_NETIO: read "19.1\n"
2016.07.09 01:00:10 5: AVR_NETIO: received answer "19.1\n"
2016.07.09 01:00:10 5: Postprocessing "19.1\n" with perl command { s/(.*)\n(.*)\n/T: $1 H: $2/; $_; my $hash  = $defs{Waschkueche_DHT}; my $temperature = $1; my $humidity = $2; my $state = $_;  readingsSingleUpdate($hash, "temperature", $temperature, 1); readingsSingleUpdate($hash, "humidity", $humidity, 1); readingsSingleUpdate($hash, "state", $state, 1); }.
2016.07.09 01:00:10 1: PERL WARNING: Useless use of a variable in void context at (eval 1375) line 1.
2016.07.09 01:00:10 3: eval: { s/(.*)\n(.*)\n/T: $1 H: $2/; $_; my $hash  = $defs{Waschkueche_DHT}; my $temperature = $1; my $humidity = $2; my $state = $_;  readingsSingleUpdate($hash, "temperature", $temperature, 1); readingsSingleUpdate($hash, "humidity", $humidity, 1); readingsSingleUpdate($hash, "state", $state, 1); }
2016.07.09 01:00:10 5: Triggering Waschkueche_DHT (1 changes)
2016.07.09 01:00:10 5: Starting notify loop for Waschkueche_DHT, first event 19.1

2016.07.09 01:00:10 5: Postprocessed value is "19.1\n".
2016.07.09 01:00:10 5: Triggering Waschkueche_DHT (2 changes)
2016.07.09 01:00:10 5: Starting notify loop for Waschkueche_DHT, first event DHT: 19.1

2016.07.09 01:00:10 4: name: /fhem?cmd=get%20Waschkueche_DHT%20DHT&XHR=1&fw_id=3016 / RL:10 / text/plain; charset=UTF-8 /  /
2016.07.09 01:00:10 5: HMLAN/RAW: /E2A325B,0000,0D10A17B,FF,FFBC,A3805E2A325B2576260000000000000243000000

2016.07.09 01:00:10 5: HMLAN_Parse: XX_LANInterface R:E2A325B   stat:0000 t:0D10A17B d:FF r:FFBC     m:A3 805E 2A325B 257626 0000000000000243000000
2016.07.09 01:00:10 5: XX_LANInterface dispatch A14A3805E2A325B2576260000000000000243000000::-68:XX_LANInterface

Filelog exemplarisch von einem Sensor
2016-07-05_00:02:26 Serverraum_DHT humidity: 64.5
2016-07-05_00:02:26 Serverraum_DHT T: 19.6 H: 64.5
2016-07-05_00:02:26 Serverraum_DHT DHT: T: 19.6 H: 64.5
2016-07-05_00:02:26 Serverraum_DHT DHT T: 19.6 H: 64.5
2016-07-05_00:12:26 Serverraum_DHT temperature: 19.5
2016-07-05_00:12:26 Serverraum_DHT humidity: 64.4
2016-07-05_00:12:26 Serverraum_DHT T: 19.5 H: 64.4
2016-07-05_00:12:26 Serverraum_DHT DHT: T: 19.5 H: 64.4
2016-07-05_00:12:26 Serverraum_DHT DHT T: 19.5 H: 64.4
2016-07-05_00:22:26 Serverraum_DHT humidity: 63.9
2016-07-05_00:22:26 Serverraum_DHT T: 19.5 H: 63.9
2016-07-05_00:22:26 Serverraum_DHT DHT: T: 19.5 H: 63.9
2016-07-05_00:22:26 Serverraum_DHT DHT T: 19.5 H: 63.9
2016-07-05_07:32:04 Serverraum_DHT
2016-07-05_07:32:04 Serverraum_DHT DHT
2016-07-05_07:42:04 Serverraum_DHT
2016-07-05_07:42:04 Serverraum_DHT DHT
2016-07-05_07:52:04 Serverraum_DHT
2016-07-05_07:52:04 Serverraum_DHT DHT
2016-07-05_08:02:04 Serverraum_DHT
2016-07-05_08:02:04 Serverraum_DHT DHT


Wie geschrieben bis zum FHEM "update all" hat alles gefunzt und per URL Aufruf können die Werte weiterhin vom AVR NETIO abgerufen werden.

Über Ideen/Hilfestellungen zur Fehlerursache und -Behebung würde ich mich freuen.
Titel: Antw:ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: Dr. Boris Neubert am 09 Juli 2016, 17:09:04
Problem vermutlich durch

attr AVR_NETIO requestSeparator 1


Bitte in der Commandref nachlesen und dann einfach weglassen.
Titel: Antw:ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: nexulm am 09 Juli 2016, 17:17:46
...hatte gerade noch die folgende Fehlermeldung imLogfile gesehen
2016.07.09 17:04:10 1: AVR_NETIO: illegal spec expect"\d+.\d\n" for get DHT for class DHT22M in file /opt/fhem/dht22m.classdef.
Hier gibt es unterschiedliche Angaben im Forum hier https://forum.fhem.de/index.php/topic,24561.15.html (https://forum.fhem.de/index.php/topic,24561.15.html)
get DHT expect"?\d+.\d\n"
get DHT expect"-?\d+.\d\n"
...und bei Ethersex hier http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch) (http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch)):
get DHT expect "\d+.\d\n"

Mit keiner dieser drei Möglichkeiten wird die Fehlermeldung vermieden!?!

ABER:
Es lag tatsächich am "requestSeparator 1".
Die Zeile habe ich auskommentiert, die Fehlermeldung im Log ist verschwunden und alle (nun) 4DHT zeigen Temperatur und Luftfeuchte.

Frage mich nur warum es mit der Zeile...
attr AVR_NETIO requestSeparator 1
...bis zum fhem "update all" am 04.07. über 1,5 Jahre fehlerfrei lief!?!

Danke nochmal für den entscheidenden Hinweis!
Titel: Antw:ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: Dr. Boris Neubert am 09 Juli 2016, 18:50:23
Richtig ist vermutlich

get DHT expect "-?\d+.\d\n"


(führendes optionales Minuszeichen und natürlich ein Leerzeichen nach expect).

Du hattest wohl ein alte Version. Habe vor langem einiges an der Separator-Behandlung geändert.

Viele Grüße
Boris
Titel: Antw:ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: kpwg am 10 Juli 2016, 12:15:27
Danke Boris, das funktioniert. Habe es gleich im E6-wiki geändert.

Viele Grüße, Ricardo
Titel: Antw:ECMD mit AVR NETIO und DHT22 ohne Luftfeuchte seit Update
Beitrag von: Dr. Boris Neubert am 10 Juli 2016, 16:52:01
Danke, Ricardo, für die Änderung im Wiki.

Grüße
Boris