Array von Wallbox zerlegen

Begonnen von Rothammel, 06 Januar 2022, 21:43:56

Vorheriges Thema - Nächstes Thema

Rothammel

ich bekomme von meiner Wallbox über MQTT so ein Array:

[221,224,222,1,13.4,13.2,13.2,3000,3000,3000,0,9050,100,100,100,4]
Spannung Ampere usw.

wie kann ich das zerlegen und in readings setzen?

Viele Grüße
Stan

Otto123

Hi Stan,

mal als Ansatz als Test für die FHEM Kommandozeile
{my $wert='[221,224,222,1,13.4,13.2,13.2,3000,3000,3000,0,9050,100,100,100,4]';;$wert =~ s/\[|\]//g;;return join "\n", split ',',$wert}

Wenn Du join weglässt und den split in ein array schreibst (oder als array behandelst), kannst Du jedes Element in ein Reading schreiben.

Vielleicht bist Du mit dem [array] zu weit gegangen und im json steht mehr drin? Dann gibt es so Funktionen wie json2nameValue()

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Rothammel

der Test Schnipsel funktioniert, aber wie weiter?

ein json wäre cool, gibts aber nicht über mqtt

Otto123

#3
Da ich nichts weiter weiß. Du hast ein MQTT2_DEVICE?
Dann trägst Du in die readinglist ungefähr folgende Zeile ein:
wallbox/Rothammel/array:.* { json2nameValue($EVENT,'Wert') }

Habs probiert json2nameValue() nimmt an der Stelle auch einfach das Array und verzichtet auf ein komplettes json :) es kennt auch noch einen dritten Parameter, mit dem kannst Du aus dem reading "Wert1" -> "Strom" machen usw.

Für besser Antwort braucht es mehr Info :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ch.eick

Zitat von: Rothammel am 14 Januar 2022, 10:53:19
der Test Schnipsel funktioniert, aber wie weiter?

ein json wäre cool, gibts aber nicht über mqtt
Ich hätte da auch noch einen Ansatz, wenn Otto's weg nicht klappt, was ich nicht glaube :-)

{ my $rec=0;;my @wert=(221,224,222,1,13.4,13.2,13.2,3000,3000,3000,0,9050,100,100,100,4);;my @x=("L1_V","L2_V","L3_V","cos_phi","L1_A","L2_A","L3_A","L1_P","L2_P","L3_P","X1","Total_P","X2","X3","X4","X5");; for (my $i=0;;$i<=$#wert;;$i++) {  print $x[$i]." ".$wert[$i]."\n";; };; }


Dann steht das im Log

L1_V 221
L2_V 224
L3_V 222
cos_phi 1
L1_A 13.4
L2_A 13.2
L3_A 13.2
L1_P 3000
L2_P 3000
L3_P 3000
X1 0
Total_P 9050
X2 100
X3 100
X4 100
X5 4


Oder mit einem zusammengebauten json

{ my $rec=0;; my $json='';;my @wert=(221,224,222,1,13.4,13.2,13.2,3000,3000,3000,0,9050,100,100,100,4);; my @x=("L1_V","L2_V","L3_V","cos_phi","L1_A","L2_A","L3_A","L1_P","L2_P","L3_P","X1","Total_P","X2","X3","X4","X5");;  for (my $i=0;;$i<=$#wert;;$i++) { print $x[$i]." ".$wert[$i]."\n";;  $json .= ($i > 0)?',':'';; $json .= '"'.$x[$i].'":"'.$wert[$i].'"';; } print '{'.$json.'}';; }

Dann kommt im Log zusätzlich das json, was man entsprechend mit den FHEM json Funktionen wieder in readings umsetzen kann.

{"L1_V":"221","L2_V":"224","L3_V":"222","cos_phi":"1","L1_A":"13.4","L2_A":"13.2","L3_A":"13.2","L1_P":"3000","L2_P":"3000","L3_P":"3000","X1":"0","Total_P":"9050","X2":"100","X3":"100","X4":"100","X5":"4"}


VG
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick