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
Hallo,
teste einmal
{my @val = split(/./,ReadingsVal($NAME, "BSH.Common.Root.SelectedProgram", ""); return $val[5]}
Viele Grüße
Jürgen
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.
Neuer Versuch.
program {my @val = split( ".", ReadingsVal($NAME,"BSH.Common.Root.SelectedProgram","")); return $val[4]}
Viele Grüße
Jürgen
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.
Hallo Otto,
ich glaube, dass der Fehler eher in "Split-Definition" (/./ anstatt ".") lag. Ich konnte es bei mir reproduzieren.
Viele Grüße
Jürgen
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.
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
Danke.
So funktioniert es jetzt wie gewünscht.
program {(split( '\.', ReadingsVal("WNC244070","BSH.Common.Root.SelectedProgram","")))[4]}
ich würde noch "WNC244070" durch $name ersetzen - das macht es flexibler