userReadings mit json2reading

Begonnen von TomLee, 20 März 2023, 13:24:08

Vorheriges Thema - Nächstes Thema

TomLee

Zitat von: rudolfkoenig am 27 Februar 2020, 18:28:54- man kann per userReadings die FHEM/perl Funktion json2reading aufrufen.


Aufgrund diesem Thread, 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

Aurel_B

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?

TomLee

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.

Aurel_B

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.

TomLee

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