Hauptmenü

Fragen zu ECMD

Begonnen von Marie, 01 November 2017, 16:03:15

Vorheriges Thema - Nächstes Thema

Marie

Arrrgh... gerade den Text fertig gehabt, blöde über die Mac-Maus gestrichen und ich war wieder auf der vorherigen Seite im Browser...und mein geschriebener Text weg.... >:( >:( :o :'(


Alos hier im zweiten Anlauf eine kurze Variante:


Problemstellung: Ein Arduino sendet per serieller Schnittstelle zyklisch Textdaten. (dient zur Übermittlung von Daten eines BMS von LiFeYPo4 Batterien). Eigentlich wollte ich diese Daten in ein Victron-Gateway schicken und sie damit dem Inverter und Solarcharger zur Verfügung stellen...klappt aber leider nicht, da die Schnittstelle des Gateways (Beaglebone) Probleme macht...by the way, hat jemand praktische Erfahrung mit Beaglebone UART's?
Alle Daten hole ich dann per Modbus aus FHEM ab und visualisiere sie per TabletUI auf einem iPad. Klappt soweit auch. Nur leider halt nicht die Batteriedaten.


Also lange Rede kurzer Sinn, habe ich zweit ausgeholt ?


Also kurzerhand den Arduino auf die Schnittstelle des FHEM-Bananapi gestöpselt und ECMD /und Device definiert, classref geschrieben...und schon sehe ich Daten im Log.
Soweit so gut.


So kann z.B. die gesendete Zeile aussehen:



\r\nPID\t516\r\nP\t0\r\nSOC\t92\r\nCE\t0



In der classref steht folgendes:



reading SOC match "(?<=\\r\\nSOC\\t)(\d{1,5})(?=.*)"



Die classref ist auch an das ECMDDevice gebunden...ist es übrigens richtig, das ich zum erneuten Lesen der classref FHEM neu starten muss? Oder geht das auch einfacher?


Gebe ich diese Regex Daten in einen externen Regex-Prozessor ein, so erhalte ich genau die Daten die ich will, nämlich hier den Zahlenwert  für den SOC der Batterie.
Leider ist FHEM nicht dieser Meinung und im Log steht nur



2017.11.01 15:17:50 5: 123SmartBMS: Spontaneously received \r\nPID\t516\r\nP\t0\r\nSOC\t92\r\nCE\t0 (\015\012\120\111\104\011\065\061\066\015\012\120\011\060\015\012\123\117\103\011\071\062\015\012\103\105\011\060)
2017.11.01 15:17:50 5: 123SmartBMS: dispatch \r\nPID\t516\r\nP\t0\r\nSOC\t92\r\nCE\t0
2017.11.01 15:17:50 5: 123SmartBMS: trying to match message \r\nPID\t516\r\nP\t0\r\nSOC\t92\r\nCE\t0 (\015\012\120\111\104\011\065\061\066\015\012\120\011\060\015\012\123\117\103\011\071\062\015\012\103\105\011\060)


nur im Reading steht leider nichts...

Ich hatte auch schon mal etwas im Reading drin stehen, leider nur nicht ganz das Richtige...das kriege ich aber nicht mehr hin... :o


Ich stehe jetzt ein wenig auf dem Schlauch, vielleicht habe ich das auch nur mal wieder nicht ganz verstanden...ein postproc habe ich auch schon benutzt, hat aber nicht geholfen...
Für die Fachleute unter Euch bestimmt kein Problem, ich stehe ja Bekannterweise mit Regex ein wenig auf Kriegsfuss....


Wer kann mir einen Tip geben ?


LG


Marie
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Marie

Hier nochmal eben kurz, wie ein einzelner Wert aussieht von der Formatierung, müsst Ihr ja nicht auch noch auseinanderdrehen...  ;)



\r\nSOC\t92
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

fiedel

Bei mir steht die Beschäftigung mit ECMD und den Classdefs auch kurz bevor.
Ich kann hier also vorab schon mal was lernen.
Zum Weiterkommen hier eine Seite mit Beispielen.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Marie

Abend,


danke für den Hinweis, leider habe ich alle diese Seiten schon durch...auch Tante google hilft mir nicht mehr viel weiter...es geht ja fast überall um get & co... ich will ja nur spontane Daten auswerten...


Naja,


noch gebe ich nicht ganz die Hoffnung auf, auch wenn ich schon etliche Stunden heute in den Sand gesetzt habe wegen diesem Mi... aber ich komme weiter


...wenn jetzt nicht gerade der Bananapi rumzicken würde...wer ist heir eigentlich die Frau???  ;)


stirnrunzelnd..


Marie
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Markus Bloch

#4
Hallo Marie,

bitte bedenke, dass die Zeile

\r\nPID\t516\r\nP\t0\r\nSOC\t92\r\nCE\t0

nicht tatsächlich dem entspricht wie es dort da steht.

\r\n stellt einen Zeilenumbruch da und \t einen Tabulator. Es handelt sich also nicht um die Zeichenkette "\t".

Bsp:

PID     516
P       0
SOC     92
CE      0


Das bedeutet für deine Regexp:
reading SOC match ".*SOC\t(\d+).*"

Viele Grüße

Markus

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Marie

Hallo Markus,


genau so wird das auch übertragen...es handelt sich um ein CR und NL sowie TAB...


LG




Marie
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Marie

#6
Wo ich im Augenblick hänge sind die {}""{}, mit Hochkommata aussen, innen, geschweifte Klammern hier und da...das macht mich gerade wahnsinnig ..


LG


Marie




PS: Eine Zeile die im Regex Prozessor funktioniert wäre


reading on match "{"(^SOC\\t)\d{1,5}(?=.*)"}"


Auch FHEM meckert  im Log nicht...aber was kommt bei FHEM dann dabei raus?
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Markus Bloch

Ich kann Dir nur empfehlen deine Regex so simpel wie möglich zu gestalten. Geschweifte Klammern brauch man dazu nicht.

Wo konkret blickst Du nicht durch? Hast Du mal ein Beispiel wo es hakt?
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Marie

Das mit dem einfach ist gut, dann bin ich immer dafür...


reading on match "{"(^SOC\\t)\d{1,5}(?=.*)"}"



Schreibe ich das ohne geschweifte Klammern oder Hochkommata geht das bei mir nicht...



Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Markus Bloch

Ich nehme mal an die geschweiften Klammern stammen nicht von deinem BMS. Aus FHEM-Sicht benötigt man hier keine geschweiften Klammern, nur Anführungszeichen.

reading on match ".*SOC\t(\d+).*"
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Marie

Sorry,


ohne geschweifte Klammern aber mit Hochkommata geht doch, obwohl ich das vorhin schon ausprobiert habe...da hast Du Recht


so, nochmal Stand der Dinge...


  Internals:   
DEF        serial /dev/ttyS2@19200
DeviceName /dev/ttyS2@19200
FD    11
NAME       [url=http://192.168.xxx.xxx:8083/fhem?detail=123SmartBMS]123SmartBMS[/url]
NR    51
Protocol   serial
STATE      opened
TYPE       ECMD
   aREADINGS: 2017-11-01 20:17:09   state           opened
fhem:
     classDefs: Werte: filename   /opt/fhem/www/tablet/123Smart.classdef 
     params     port pin
     readings:
         on:
            match      (^SOC\\t)\d{1,5}(?=.*)
     sets:
Attributes:
   autoReopen 1
   classdefs  Werte=/opt/fhem/www/tablet/123Smart.classdef
   logTraffic 5
   split      \r\n   
   verbose    5
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Marie

Habe mal Dein Regex ausprobiert... zumindest habe ich jetzt wieder ein Reading... fehlt nur noch ein bisschen Postprocessing-..  :) ;D
Kann man sich das Postprocessing nicht einfach sparen indem man das Match schon passend macht? Oder denke ich da zu einfach/kompliziert?


LG
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Markus Bloch

Ist eine berechtigte Frage, ist aber leider aktuell so nicht implementiert. Ich habe gerade selber mal den Quellcode studiert. Die Regex dient nur zur Erkennung der richtigen Zeile (in deinem Fall). Mit dem Postprocessing musst du nun die Zahl rausschneiden. Ich bin am Anfang auch davon ausgegangen, dass man direkt in der Regex den eigentlichen Teil, welchen man als Readinginhalt haben möchte, mit runden Klammern gruppieren kann. Aber dem ist leider nicht so.

Ein vollständiges Beispiel:

reading soc match "SOC\t\d+"
reading soc postproc {s/SOC\t//}


mit s/SOC\t// wird "SOC<TAB>" ersetzt durch "", also weggeschnitten.

Damit sollte nur noch der Wert im Reading stehen.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Marie

Dann bin ich dummerweise von falschen Voraussetzungen ausgegangen...ärgerlich, zumal das viel Zeit gekostet hat...


Da sind die Beschreibungen so finde ich, ein wenig dürftig...zumindest habe ich nicht die richtigen Stellen gefunden...


So, mal das postproc testen...
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Marie

Mit dem Postproc wird das reading zu 1....



Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.