WBS Sensor - Daten zerlegen

Begonnen von peko3006, 04 Dezember 2015, 10:56:45

Vorheriges Thema - Nächstes Thema

peko3006

Hallo Leute so wie es aussieht scheitere ich mal wieder am Perl Syntax für das Zerlegen der Sensordaten eines WBS Nodes.

Gemacht habe ich folgendes:
fhem.cfg:
define WattmeterBernd WBS state 12

Sensor Url Aufruf
http://<meine IP>:8083/fhem/rawmsg?WBS:12:watt;1100|kwh;0.03|zstand;1000.32

Im FHEM kommt dann unter State folgendes an
S: watt;1100|kwh;0.03|zstand;1000.32 | 2015-12-04 10:41:28

Das ganze behandle ich dann so:
attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; my @val = split(/\:/, $val);; my @erg = split(/\|/, $val[1]);; my $watt = $erg[1];; return $watt;; }

Aber egal was ich mache, welche Trennzeichen ich verwende er zerlegt mir den String nicht in die Werte.
Steht im UserReading eigentlich auch das drin was ich annehme?

Ich hänge mal noch einen Screenshot an zum besseren Verständnis.



papa

Nimm doch einfach nen Ersetzen mit RegEx.


my $val = ReadingsVal($name,"state",0);
$val =~ s/.*watt;(\d+).*/$1/;
return $val;


RegEx testen sich am besten in der Commandzeile - z.B. so


echo "S: watt;1100|kwh;0.03|zstand;1000.32 | 2015-12-04 10:41:28" | perl -pe 's/.*watt;(\d+).*/$1/'
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

peko3006

Ok mit RegEx geht es natürlich viel besser das stimmt. Das ich da nicht drauf gekommen bin.

Auf der Kommandozeile klappt es ja auch aber in der FHEM.conf geht es so nicht.

Folgendes habe ich eingetragen:
attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt;(\d+).*/$1/; return $val;;}

Der Befehl wird aber irgendwie abgeschnitten (siehe Screenshot)
Sicher ein syntaktischer Fehler!?

Wie kann ich herausbekommen was wirklich in State steht?


papa

attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt;;(\d+).*/$1/;; return $val;;}


In der Config müssen alle Semikolon dopplet geschrieben werden. Am besten nie direkt in der Config arbeiten, sondern die Editoren im Webfrontend benutzen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

peko3006

Ok die Formel wird erstmal direkt übernommen. Aber zerlegt wird der String trotzdem nicht.
Bei CUL_WS Snesoren klapt das so wunderbar.
Kann es sein das im State was anderes steht?

peko3006

Kann keine dazu was sagen bzw. noch nen Tip geben?!

frank

solange sich der state nicht ändert triggert auch das userreading nicht. siehe commandref userreading.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

peko3006

Naja das ändert sich schon jedes mal. Nur leider kann ich mit dem Aufruf

watt { my $val = ReadingsVal($name,"state",0); $val =~ s/.*watt;(\d+).*/$1/; return $val;}

Den state nicht zerlegen, noch sonst irgendwie verarbeiten. Deshalb meine Vermnutung das in state gar nicht das drinnen steht was anzeigt wird.

dev0

#8
Zitat von: peko3006 am 07 Dezember 2015, 13:20:56
Deshalb meine Vermnutung das in state gar nicht das drinnen steht was anzeigt wird.
Kann eigentlich nicht sein, aber lass Dir das doch anzeigen:
{ReadingsVal("WattmeterBernd","state",0)}
In die FHEM Befehlszeile eingeben.

Und zeig doch mal ein list vom Device.

peko3006

Ok das kommt folgendes Ergebnis:

watt;989|kwh;0.03|zstand;1000.32

Das wäre ja ok so. Nur warum zerlegt er mir dann die Werte nicht entsprechend in die Variablen.
Manuell geht es ja mit folgendem Aufruf.

echo "watt;1100|kwh;0.03|zstand;1000.32 | 2015-12-04 10:41:28" | perl -pe 's/.*watt;(\d+).*/$1/'

Nur in der Konfig so nicht:
attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt;(\d+).*/$1/; return $val;;}

frank

da kein watt reading zu sehen war, hatte ich die vermutung, dass state noch nicht getriggert hatte.

was sagt denn fhem.log? wahrscheinlich noch ein syntax fehler. beim editieren in der fhem.cfg müssen die semicolon verdoppelt werden.

vor dem return ist noch ein einzelnes semicolon
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

dev0

attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt;(\d+).*/$1/; return $val;;}
Vor dem return ist das ; nicht verdoppelt. Die anderen schon.

peko3006

Im Log ist nichts aufälliges zu finden.

In der Konfig hab ich folgendes geschrieben:

attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt;;(\d+).*/$1/;; return $val;;}

frank

ich könnte mir vorstellen, dass das semikolon in der regex nach dem watt probleme macht.
lösche dort mal beide semicolon und nimm dafür nur einen punkt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

peko3006

Ohne Ergebnis leider. Ich fasse nochmal zusammen. Vielleicht kann es mal jemand nachbauen.

Definition in FHEM.cfg

define WattmeterBernd WBS state 12
define FileLog_WattmeterBernd FileLog ./log/WattmeterBernd-%Y.log WattmeterBernd
attr FileLog_WattmeterBernd logtype text
attr WattmeterBernd userReadings watt { my $val = ReadingsVal($name,"state",0);; $val =~ s/.*watt,(\d+).*/$1/;; return $val;;}


Hier der aufruf im Browser:
http://<IP FHEM Server>/fhem/rawmsg?WBS:12:watt,989|kwh,0.03|zstand;1000.32

Folgendes kommt dann unter State in FHEM an
-> watt,989|kwh,0.03|zstand;1000.32