Hallo zusammen.
Ich habe heute meine USB IR Lesekopf (ACE3000) von Volkszähler über hTerm ansprechen können und habe auch eine erfolgreiche Antwort erhalten.
Nun soll der Zähler in FHEM unterkommen.
Der zweite Zähler wird, dank OBIS, erkannt und ausgewertet.
Nun ist es ja so, dass der Itron Zähler einen "Weckruf" benötigt. Mittels EMCD (get ACE3000 raw {"/?!\r\n"}) wird das versendet. Die Antwort ist ein Popupfenster in dem nichts steht.
Das ist insoweit auch noch verständlich, da der ACE3000 eine gewisse Zeit braucht die Antwort auszugeben.
Jetzt gucke ich in das Logfile und finde folgendes:
2017.10.12 20:25:37 3: ACE3000: Unknown code 1, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code ., help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 8, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code ., help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 0, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code (, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 0, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 4, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 9, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 4, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 0, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 2, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code ., help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code 5, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code *, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code k, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code W, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code h, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code ), help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code
, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code
, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code !, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code
, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code
, help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code , help me!
2017.10.12 20:25:38 3: ACE3000: Unknown code D, help me!
Zeichen für Zeichen steht dort der Zählerstand den ich haben will.
Nur halt leider nicht in einem Stück.
Nun die Fragen:
-Wie bekomme ich den kompletten Antwortstring in eine "Variable"?
-Wie parse ich mir den Zählerstand raus?
-Wie wiederhole ich die Abfolge? (Wahrscheinlich mit at Kommandos ::) )
Für Input wäre ich dankbar.
Das ganze hat mich dann doch nicht in Ruhe gelassen und ich habe endlich mal wieder etwas Zeit aufbringen können.
Allerdings hänge ich nun bei der Auswertung der Leistung. Wenn jemand sieht was ich verkehrt mache....immer raus damit.
So sieht mein ECMD aus:
Internals:
CFGFN
DEF serial /dev/ttyUSB0@300,7,E,1
DeviceName /dev/ttyUSB0@300,7,E,1
FD 11
FUUID 5d4074f1-f33f-5fe8-57be-0d4682014b8ce8b3
NAME Itron
NR 124
PARTIAL
Protocol serial
STATE opened
TYPE ECMD
READINGS:
2019-07-30 20:08:33 raw /
2019-07-30 21:06:37 state opened
fhem:
classDefs:
H260:
filename /opt/fhem/FHEM/H260.classdef
readings:
state:
match [0-9]{6}\.[0-9]{1}
postproc {/[0-9]{6}\.[0-9]{1}/; $_ }
sets:
read:
cmd {"/?!\r\n"}
expect [0-9]{6}\.[0-9]{1}
partial:
msg
ts 1564590064.56374
Attributes:
classdefs H260=/opt/fhem/FHEM/H260.classdef
logTraffic 5
partial 6
room Strom
So mein ECMDdevice (Das fettgedruckte hätte ich gerne in einem Reading:(:
Internals:
CFGFN
DEF H260
FUUID 5d40906a-f33f-5fe8-2dfb-0f8ecadb7f343d5d
IODev Itron
Itron_MSGCNT 29377
Itron_TIME 2019-07-31 16:58:32
LASTInputDev Itron
MSGCNT 29377
NAME ACE3000
NR 357
STATE read /?!
/ACE0\3k260V01.18
F.F(00)
C.1(1234567891234567)
C.5.0(00)
1.8.0(064117.7*kWh)
!
J
TYPE ECMDDevice
READINGS:
2019-07-31 16:58:32 data
2019-07-31 18:23:13 read /?!
/ACE0\3k260V01.18
F.F(00)
C.1(1234567891234567)
C.5.0(00)
1.8.0[b](064117.7[/b]*kWh)
!
J
2019-07-31 18:23:13 state read /?!
/ACE0\3k260V01.18
F.F(00)
C.1(1234567891234567)
C.5.0(00)
1.8.0([b]064117.7[/b]*kWh)
!
J
fhem:
classname H260
cache:
readings:
command:
data
match:
data .*
state [0-9]{6}\.[0-9]{1}
specials:
%NAME ACE3000
%TYPE ECMDDevice
Attributes:
IODev Itron
room Strom
Und so schaut meine classdef aus:
# Umsetzung in ECMD Befehle
set read cmd {"/?!\r\n"}
set read expect "[0-9]{6}\.[0-9]{1}"
reading state match "[0-9]{6}\.[0-9]{1}"
reading state postproc {/[0-9]{6}\.[0-9]{1}/; $_ }
Hier noch der Auszug aus dem Logfile:
019.07.31 18:13:24 3: Itron: Unknown code
, help me!
2019.07.31 18:13:25 3: Itron: Unknown code
, help me!
2019.07.31 18:13:25 3: Itron: Unknown code
, help me!
2019.07.31 18:13:25 3: Itron: Unknown code
, help me!
2019.07.31 18:23:13 1: Itron: unexpected answer /?!\r\n/ACE0\\3k260V01.18\r\n\002F.F(00)\r\nC.1(1234567891234567)\r\nC.5.0(00)\r\n1.8.0(064117.7*kWh)\r\n!\r\n\003J (\057\077\041\015\012\057\101\103\105\060\134\063\153\062\066\060\126\060\061\056\061\070\015\012\002\106\056\106\050\060\060\051\015\012\103\056\061\050\061\061\062\066\061\062\063\064\065\066\067\070\071\061\062\063\064\065\066\067\051\015\012\103\056\065\056\060\050\060\060\051\015\012\061\056\070\056\060\050\060\066\064\061\061\067\056\067\052\153\127\150\051\015\012\041\015\012\003\112\177\177) received (wrote /?!\r\n (\057\077\041\015\012), expected [0-9]{6}\.[0-9]{1})
Aber irgendwie bringt das nicht den ersehnten Erfolg.
Ich bekomme zwar eine Antwort vom Zähler und in der Theorie funktioniert auch die Regex Abfrage (Getestet in https://regexr.com/ (https://regexr.com/)).
Aber einfach nur den Zählerwert...vergiss es. Ich weiß schon nicht mehr was ich googlen soll :o.
Also wenn jemand ne Idee hat... immer raus damit