FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: CoolTux am 19 April 2020, 10:32:36

Titel: Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: CoolTux am 19 April 2020, 10:32:36
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
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: Benni am 19 April 2020, 12:28:07
Man könnte eventuell noch auf die Verwendung von event-on-change-reading aufmerksam machen.

gb#
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: rudolfkoenig am 19 April 2020, 17:20:02
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.
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: betateilchen am 19 April 2020, 17:22:31
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.
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: CoolTux am 19 April 2020, 17:22:52
Ich bin für ein komplettes untersagen dieses Unsinns
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: rudolfkoenig am 19 April 2020, 17:53:40
Habs geaendert: in so einem Fall wird eine Fehlermeldung im Log erzeugt.
Titel: Antw:Info: setreading auf das selbe Device in einem userreadings erzeugt loop
Beitrag von: CoolTux am 19 April 2020, 17:57:34
Mist wir brauchen mehr Gefällt mir Buttons  ;D