FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: TomLee am 20 März 2023, 13:24:08

Titel: userReadings mit json2reading
Beitrag von: TomLee am 20 März 2023, 13:24:08
Zitat von: rudolfkoenig am 27 Februar 2020, 18:28:54- man kann per userReadings die FHEM/perl Funktion json2reading aufrufen.


Aufgrund diesem Thread (https://forum.fhem.de/index.php?msg=1268580), stell ich mir die Frage was ich falsch mache ?

Der Code funzt, in der Befehlszeile ausgeführt, einwandfrei:

defmod d dummy
attr d setList on off
attr d userReadings ble { json2reading($defs{d},q({"bli":1,"bla":2,"blub":3}));;return 'done'}

setstate d off
setstate d 2023-03-20 13:15:16 bla 2
setstate d 2023-03-20 13:15:16 ble Error evaluating d userReading ble: syntax error at (eval 396) line 1, at EOF\
Missing right curly or square bracket at (eval 396) line 1, at end of line\

setstate d 2023-03-20 13:15:16 bli 1
setstate d 2023-03-20 13:15:16 blub 3
setstate d 2023-03-20 13:14:15 state off
Titel: Aw: userReadings mit json2reading
Beitrag von: Aurel_B am 20 März 2023, 13:48:05
So richtig weiterhelfen kann ich dir auch nicht, was ich herausgefunden habe: irgendwie mag er das $defs{d} nicht. Mit

ble { my $foo = $defs{d}; json2reading($foo,q({"bli":1,"bla":2,"blub":3});return 'done';}

ist schonmal die Fehlermeldung weg wegen den Curly Braces, dafür gibt es "nur" noch einen Syntax error. Vielleicht hilft dir das weiter?
Titel: Aw: userReadings mit json2reading
Beitrag von: TomLee am 21 März 2023, 23:18:37
ZitatVielleicht hilft dir das weiter?

Nein, wenn ich die in deinem Beispiel fehlende schliessende runde Klammer ergänze:

Zitatble { my $foo = $defs{d}; json2reading($foo,q({"bli":1,"bla":2,"blub":3}));return 'done';}

stürzt FHEM ab, trotzdem danke für die Rückmeldung/das versucht hast das nachzuvollziehen.
Titel: Aw: userReadings mit json2reading
Beitrag von: Aurel_B am 22 März 2023, 08:52:19
Oha stimmt, da habe ich eine Klammer vergessen. Mit der Klammer hängt sich FHEM auf mit

2023.03.22 08:50:22.051 1: PERL WARNING: Deep recursion on subroutine "main::readingsEndUpdate" at fhem.pl line 5541.
2023.03.22 08:50:22.051 1: PERL WARNING: Deep recursion on subroutine "main::json2reading" at (eval 26949005) line 1.
Titel: Aw: userReadings mit json2reading
Beitrag von: TomLee am 28 März 2023, 15:00:26
Es hat mir keine Ruhe gelassen:

defmod d dummy
attr d readingList test
attr d setList on off
attr d userReadings ble:(on|off) {fhem(qq(sleep 0.1;;{json2reading('d',q({"bli":1,"bla":2,"blub":3}))}));;return 'done';;}

setstate d off
setstate d 2023-03-28 14:58:36 bla 2
setstate d 2023-03-28 14:58:36 ble done
setstate d 2023-03-28 14:58:36 bli 1
setstate d 2023-03-28 14:58:36 blub 3
setstate d 2023-03-28 14:58:36 state off