!!gelöst!! Userreading aufteilen / Split

Begonnen von Shadow3561, 23 Februar 2024, 21:03:00

Vorheriges Thema - Nächstes Thema

Shadow3561

Moin,
Ich benötige mal wieder etwas Hilfe.
Mein Waschtrockner liefert leider nur kryptische readings. Eines davon sieht so aus
LaundryCare.WasherDryer.Program.DelicatesSilk.DelicatesSilk.DelicatesSilk
Jetzt möchte ich gerne ein userreading erstellen wo nur das letzte "DelicatesSilk" drinsteht.
Mit Perl habe ich
/[^.]*$/gm als regex.

Im userreading habe ich folgendes

program {my $val=ReadingsVal($NAME, "BSH.Common.Root.SelectedProgram", "");;$val=/[^.]*$/gm;;return $1}
leider liefert es nur "2" zurück.
Jemand eine Idee was ich falsch mache und ist dann bereit mir etwas unter die Arme zu greifen?

Mit freundlichen Grüßen

juemuc

Hallo,

teste einmal

{my @val = split(/./,ReadingsVal($NAME, "BSH.Common.Root.SelectedProgram", ""); return $val[5]}
Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Shadow3561

Moin,
das liefert bei mir leider Error evaluating WNC244070 userReading program: syntax error at (eval 113185) line 1, at EOF
Global symbol "@val" requires explicit package name (did you forget to declare "my @val"?) at (eval 113185) line 1.
zurück.


juemuc

Neuer Versuch.

program {my @val = split( ".", ReadingsVal($NAME,"BSH.Common.Root.SelectedProgram","")); return $val[4]}
Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Otto123

#4
der Fehler in #2 liegt ev. auch daran, weil versucht wurde den Code in der FHEM Kommandozeile zu testen. Er müsste mit dem einen Semikolon aber über den DEF Editor in die Definition geschrieben werden. ;)
Für den Versuch in der Kommandozeile müsste man ;; schreiben.
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

juemuc

Hallo Otto,

ich glaube, dass der Fehler eher in "Split-Definition" (/./ anstatt ".") lag. Ich konnte es bei mir reproduzieren.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Shadow3561

Moin,
danke für die Unterstützung bisher.
Leider funktioniert es weiterhin nicht.

Meine Device definition:
defmod WNC244070 HomeConnect hcconn ******
attr WNC244070 alias Waschtrockner
attr WNC244070 icon scene_washing_machine
attr WNC244070 room Büro
attr WNC244070 userReadings remaining-time { strftime('%H:%M', gmtime(ReadingsNum($NAME, "BSH.Common.Option.RemainingProgramTime", 0))) }, operation-state {ReadingsVal($name,"BSH.Common.Status.OperationState",0) eq "BSH.Common.EnumType.OperationState.Run" ? "Run" : "Finished"}, door-state {ReadingsVal($name,"BSH.Common.Status.DoorState",0) eq "BSH.Common.EnumType.DoorState.Open" ? "open" : "closed"}, program { my @val = split( ".", ReadingsVal($NAME,"BSH.Common.Root.SelectedProgram",""));; return $val[4]}
attr WNC244070 webCmd BSH.Common.Root.SelectedProgram:startProgram:stopProgram

als program reading erscheint weiterhin
Error evaluating WNC244070 userReading program: Global symbol "@val" requires explicit package name (did you forget to declare "my @val"?) at (eval 637473) line 1.\
Ich habe das @val auch durch $val getauscht, gleicher Effekt.

Otto123

Moin,

der Punkt im split muss maskiert werden. So in kürzere Form (zum Test in der Kommandozeile)
{(split( '\.', "LaundryCare.WasherDryer.Program.DelicatesSilk.DelicatesSilk.DelicatesSilk"))[4]}
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

Shadow3561

Danke.

So funktioniert es jetzt wie gewünscht.
program {(split( '\.', ReadingsVal("WNC244070","BSH.Common.Root.SelectedProgram","")))[4]}

Otto123

ich würde noch "WNC244070" durch $name ersetzen - das macht es flexibler
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