Hauptmenü

ACE3000 Typ 260 und EMCD

Begonnen von Praktikant, 12 Oktober 2017, 20:34:16

Vorheriges Thema - Nächstes Thema

Praktikant

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.

Praktikant

#1
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/).
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