FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Shadow3561 am 23 Februar 2024, 21:03:00

Titel: !!gelöst!! Userreading aufteilen / Split
Beitrag von: Shadow3561 am 23 Februar 2024, 21:03:00
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
Titel: Aw: Userreading aufteilen / Split
Beitrag von: juemuc am 23 Februar 2024, 21:11:25
Hallo,

teste einmal

{my @val = split(/./,ReadingsVal($NAME, "BSH.Common.Root.SelectedProgram", ""); return $val[5]}
Viele Grüße
Jürgen
Titel: Aw: Userreading aufteilen / Split
Beitrag von: Shadow3561 am 23 Februar 2024, 21:19:16
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.

Titel: Aw: Userreading aufteilen / Split
Beitrag von: juemuc am 23 Februar 2024, 22:03:11
Neuer Versuch.

program {my @val = split( ".", ReadingsVal($NAME,"BSH.Common.Root.SelectedProgram","")); return $val[4]}
Viele Grüße
Jürgen
Titel: Aw: Userreading aufteilen / Split
Beitrag von: Otto123 am 23 Februar 2024, 22:29:00
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.
Titel: Aw: Userreading aufteilen / Split
Beitrag von: juemuc am 23 Februar 2024, 22:33:01
Hallo Otto,

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

Viele Grüße
Jürgen
Titel: Aw: Userreading aufteilen / Split
Beitrag von: Shadow3561 am 24 Februar 2024, 07:51:51
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.
Titel: Aw: Userreading aufteilen / Split
Beitrag von: Otto123 am 24 Februar 2024, 09:01:24
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
Titel: Aw: Userreading aufteilen / Split
Beitrag von: Shadow3561 am 24 Februar 2024, 10:29:48
Danke.

So funktioniert es jetzt wie gewünscht.
program {(split( '\.', ReadingsVal("WNC244070","BSH.Common.Root.SelectedProgram","")))[4]}
Titel: Aw: !!gelöst!! Userreading aufteilen / Split
Beitrag von: Otto123 am 24 Februar 2024, 10:35:02
ich würde noch "WNC244070" durch $name ersetzen - das macht es flexibler