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
Man könnte eventuell noch auf die Verwendung von event-on-change-reading aufmerksam machen.
gb#
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.
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.
Ich bin für ein komplettes untersagen dieses Unsinns
Habs geaendert: in so einem Fall wird eine Fehlermeldung im Log erzeugt.
Mist wir brauchen mehr Gefällt mir Buttons ;D