Info: setreading auf das selbe Device in einem userreadings erzeugt loop

Begonnen von CoolTux, 19 April 2020, 10:32:36

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo Rudi,

Zur Info für Dich.
Ein User hat in einem userreading ein setreading auf das selbe Device, nicht aber auf das userreading, gemacht und festgestellt das FHEMWEB dann nicht mehr erreichbar ist. Ich habe das mal getestet und bin zum selben Ergebnis gekommen.

Ausgabe im Log:
Zitat
2020.04.19 10:23:59.780 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommandChain" at fhem.pl line 3812.
2020.04.19 10:23:59.780 3: eval: { fhem('setreading ' . $NAME . ' testreading blablub') }
2020.04.19 10:23:59.780 1: stacktrace:
2020.04.19 10:23:59.780 1:     main::__ANON__                      called by fhem.pl (3812)
2020.04.19 10:23:59.780 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.780 1:     main::fhem                          called by (eval 243) (1)
2020.04.19 10:23:59.781 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.781 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.781 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.781 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.781 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.781 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.781 1:     main::fhem                          called by (eval 242) (1)
2020.04.19 10:23:59.781 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.781 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.781 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.781 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.781 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.781 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.781 1:     main::fhem                          called by (eval 241) (1)
2020.04.19 10:23:59.781 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.781 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.781 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.782 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.782 1:     main::fhem                          called by (eval 240) (1)
2020.04.19 10:23:59.782 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.782 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.782 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.782 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.782 1:     main::fhem                          called by (eval 239) (1)
2020.04.19 10:23:59.782 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.782 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.782 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.782 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.782 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.783 1:     main::fhem                          called by (eval 238) (1)
2020.04.19 10:23:59.783 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.783 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.783 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.783 1:     main::CommandSetReading             called by fhem.pl (1247)
2020.04.19 10:23:59.783 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.04.19 10:23:59.783 1:     main::AnalyzeCommandChain           called by fhem.pl (3812)
2020.04.19 10:23:59.783 1:     main::fhem                          called by (eval 237) (1)
2020.04.19 10:23:59.783 1:     (eval)                              called by fhem.pl (4697)
2020.04.19 10:23:59.783 1:     main::readingsEndUpdate             called by fhem.pl (4938)
2020.04.19 10:23:59.783 1:     main::readingsSingleUpdate          called by fhem.pl (2420)
2020.04.19 10:23:59.783 1: PERL WARNING: Deep recursion on subroutine "main::CommandSetReading" at fhem.pl line 1247.
2020.04.19 10:23:59.783 3: eval: { fhem('setreading ' . $NAME . ' testreading blablub') }
2020.04.19 10:23:59.783 1: stacktrace:
2020.04.19 10:23:59.783 1:     main::__ANON__                      called by fhem.pl (1247)
2020.04.19 10:23:59.784 1:     main::CommandSetReading             called by fhem.pl (1247)
.......
.......
.......


list vom Device

Internals:
   FUUID      5ddd211c-f33f-5153-42b7-d237e79cbf6e1dd5
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       dummytest
   NR         82
   STATE      10
   TYPE       dummy
   READINGS:
     2020-03-30 17:41:14   humidity        20
     2020-03-30 17:49:08   temperature     10
Attributes:
   alias      Marko Dummy Test
   readingList temperature humidity
   room       Test
   setList    temperature humidity
   stateFormat temperature
   userReadings tmp:temperature:.* { fhem('setreading ' . $NAME . ' testreading blablub') }


Ich habe darauf aufmerksam gemacht das die Verwendung des setreading innerhalb eines userreadings nicht Gedacht ist.



Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Man könnte eventuell noch auf die Verwendung von event-on-change-reading aufmerksam machen.

gb#

rudolfkoenig

Aus userReadings ein setreading aufzurufen ist nicht das, was der userReadings Erfinder im Sinn hatte.
Ich habe setreading erweitert, damit sie in diesem Fall (aufgerufen zwischen readingsBeginUpdate und readingsEndUpdate) nur den Wert setzt, aber nicht die komplette Event-Maschine erneut anstosst.
Bin unsicher, ob ich nicht sowas glatt untersagen sollte.

betateilchen

Zitat von: rudolfkoenig am 19 April 2020, 17:20:02
Bin unsicher, ob ich nicht sowas glatt untersagen sollte.

dafür!

Weil das Setzen eines reading aus einem userreading heraus in den seltensten Fällen überhaupt Sinn macht, bzw. weil man das gewünschte Ergebnis sicher auch auf anderen Wegen erreichen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Habs geaendert: in so einem Fall wird eine Fehlermeldung im Log erzeugt.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net