Hallo zusammen!
Mein FHEM hat sich heute Nacht verabschiedet bzw. wurde durch mein Watchdog-Script beendet, Logmeldungen wie folgt:
2018.03.14 03:52:07 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1759.
2018.03.14 03:52:07 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::readingsSingleUpdate" at ./FHEM/10_MQTT_DEVICE.pm line 115.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::readingsEndUpdate" at fhem.pl line 4620.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::fhem" at (eval 1549533) line 2.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommandChain" at fhem.pl line 3568.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommand" at fhem.pl line 1026.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::CommandSet" at fhem.pl line 1173.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "main::DoSet" at fhem.pl line 1792.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 03:52:08 1: PERL WARNING: Deep recursion on subroutine "MQTT::DEVICE::Set" at fhem.pl line 3523.
2018.03.14 03:52:08 3: eval: {
fhem("set $name getIP");
}
2018.03.14 04:05:33 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2018.03.14 04:08:05 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2018.03.14 06:46:07 3: telnetPort: port 7072 opened
Zur gleichen Zeit beendete sich die Testinstanz, es dürfte nach den Fehlern aus der Hauptinstanz wohl mit dem Speicher eng geworden sein.
2018.03.14 04:07:18 1: Cannot fork: Cannot allocate memory
2018.03.14 04:07:18 1: Cannot fork: Cannot allocate memory
fhem("set $name getIP"); kommt von meinen MQTT-Devices, damit aktualisiere ich ein Reading mit der IP-Adresse, List wie folgt:
Internals:
CFGFN
IODev MQTTBroker
NAME GARA.SONF.Deckenleuchte
NR 237
STATE off
TYPE MQTT_DEVICE
qos *:1
retain *:1
READINGS:
2018-02-25 16:39:03 IPAddress 192.168.1.2
2018-02-25 16:39:01 getIP
2018-03-14 19:58:50 presence Online
2018-03-14 11:29:15 result {"POWER":"off"}
2018-03-14 11:29:15 result_POWER off
2018-03-14 11:29:15 state off
2018-03-14 19:56:38 tele {"Time":"2018-03-14T19:56:38", "Uptime":481, "Vcc":3.143, "POWER":"off", "Wifi":{"AP":1, "SSId":"WiFi", "RSSI":34, "APMac":"00:00:00:00:00:00"}}
2018-03-14 19:56:38 tele_POWER off
2018-03-14 19:56:38 tele_Time 2018-03-14T19:56:38
2018-03-14 19:56:38 tele_Uptime 481
2018-03-14 19:56:38 tele_Vcc 3.143
2018-03-14 19:56:38 tele_Wifi_AP 1
2018-03-14 19:56:38 tele_Wifi_APMac 00:00:00:00:00:00
2018-03-14 19:56:38 tele_Wifi_RSSI 34
2018-03-14 19:56:38 tele_Wifi_SSId WiFi
2018-03-14 19:58:50 transmission-state incoming publish received
message_ids:
publishSets:
:
topic cmnd/Sonoff-000000/POWER
values:
on
off
getIP:
topic cmnd/Sonoff-000000/IPAddress1
values:
noArg
sets:
getIP noArg
off
on
subscribe:
tele/Sonoff-000000/LWT
stat/Sonoff-000000/RESULT
stat/Sonoff-000000/POWER
tele/Sonoff-000000/STATE
subscribeExpr:
^tele\/Sonoff-000000\/LWT$
^stat\/Sonoff-000000\/RESULT$
^stat\/Sonoff-000000\/POWER$
^tele\/Sonoff-000000\/STATE$
subscribeReadings:
stat/Sonoff-000000/POWER:
cmd
name state
stat/Sonoff-000000/RESULT:
cmd
name result
tele/Sonoff-000000/LWT:
cmd
name presence
tele/Sonoff-000000/STATE:
cmd
name tele
Attributes:
IODev MQTTBroker
alias Deckenleuchte Garage
event-on-change-reading .*
group Beleuchtung
icon light_ceiling_light
publishSet on off cmnd/Sonoff-000000/POWER
publishSet_getIP noArg cmnd/Sonoff-000000/IPAddress1
qos at-least-once
retain 1
room Haus
stateFormat {ReadingsVal($name, "presence", "") eq "Offline" ? "Offline" : ReadingsVal($name, "state", "")}
subscribeReading_presence tele/Sonoff-000000/LWT
subscribeReading_result stat/Sonoff-000000/RESULT
subscribeReading_state stat/Sonoff-000000/POWER
subscribeReading_tele tele/Sonoff-000000/STATE
useSetExtensions 1
userReadings IPAddress:result_IPAddress1.* {
my $devIP = ReadingsVal($name,'result_IPAddress1','(0.0.0.0)');
fhem("deletereading $name result_IPAddress1");
if ($devIP =~ m/\(((?:\d{1,3}\.){3}\d{1,3})\)/) {
return $1;
} else {
return $devIP;
}
},
getIP:presence.*?Online {
fhem("set $name getIP");
}
webCmd toggle:on:off
Wo liegt das Problem bzw. wie kann ich es lösen?
Die Konfiguration in dieser Form hat sich in den letzten Tagen/Wochen nicht geändert, ich hatte den Absturz zum ersten Mal.
LG Thomas
Zitat von: ThoTo am 14 März 2018, 20:06:29
Zur gleichen Zeit beendete sich die Testinstanz, es dürfte nach den Fehlern aus der Hauptinstanz wohl mit dem Speicher eng geworden sein.
2018.03.14 04:07:18 1: Cannot fork: Cannot allocate memory
2018.03.14 04:07:18 1: Cannot fork: Cannot allocate memory
mmh ursache oder folge davon....?
lies doch mal hier mit: https://forum.fhem.de/index.php/topic,84372.0.html
Hi,
hast Du da ein UserReading, welches "set $name getIP" macht? Wenn ich das richtig sehe: Ändert getIP etwas am Device? Falls ja, dann wird dadurch ja wieder das UserReading aufgerufen. Das ergibt dann eine unendliche Rekursion.
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 15 März 2018, 12:25:23
Hi,
hast Du da ein UserReading, welches "set $name getIP" macht? Wenn ich das richtig sehe: Ändert getIP etwas am Device? Falls ja, dann wird dadurch ja wieder das UserReading aufgerufen. Das ergibt dann eine unendliche Rekursion.
Gruß,
Thorsten
Hi Thorsten,
ja genau so ist es.
getIP erzeugt/ändert das Reading result_IPAddress1.
Das Triggern von getIP gehört in ein sauberes Notify, ich habs im Userreading, das ist falsch.
Trotzdem lese ich mal im von nils_ angesprochen Thread mit, hatt den Fehler ja zum ersten Mal und in Kombination mit einem Problem auf der Testinstanz.
Danke & LG
Thomas