Hi,
teile hier ein für mich sehr nützliches Snippet, dass ich mir geschrieben habe mit folgender Funktion:
Wenn ich meine AccessPoints Update oder aus irgendeinem Grund neu starte sind ab und zu nicht mehr alle Shellys mit dem "stärksten" AP verbunden. Dann starte ich alle meine Shellys neu, damit sie sich wieder zum Besten AP verbinden.
Dazu einfach folgenden Code in die 99_myUtils.pm:
sub shellyRestart {
foreach my $shelly (devspec2array("TYPE=MQTT2_DEVICE:FILTER=id=[s|S]helly.*")) {
my $ip = ReadingsVal($shelly, "ip", "0");
Log 3, "Sende Reboot an: $shelly ($ip)";
# create request for every shelly
# Settings
my $URL = qq{http://$ip/reboot};
my $param = {
url => $URL,
method => 'GET',
#user => $username,
#pwd => $password,
hideurl => 0,
shelly => $shelly,
timeout => 4,
callback => \&ShellyReboot_ParseHttpResponse
};
# uncomment for debug
#Log3 'ShellyReboot-Fn', 3, 'NonBlocking GET: ' . Dumper($param);
HttpUtils_NonblockingGet($param);
}
return "ShellyReboot started - See Log for Infos";
}
# Callback ShellyRestart
sub ShellyReboot_ParseHttpResponse($)
{
my ($param, $err, $data) = @_;
my $name = $param->{shelly};
if($err ne "")
{
Log3 $name, 3, "$name : error while requesting ".$param->{url}." - $err";
}
elsif($data ne "") {
Log3 $name, 5, "url ".$param->{url}." returned: $data";
# An dieser Stelle die Antwort parsen / verarbeiten mit $data
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 "ShellyReboot", 3, "ShellyReboot Error: decode_json failed, invalid json. error: $@ ";
}else{
Log3 "ShellyReboot", 3,"ShellyReboot OK: $name - Info: " . $decoded_data->{'ok'};
}
}
}
Dann in der FHEM Commandozeile {shellyRestart}
eingeben und schon starten alle neu.
Vielleicht kanns ja jemand gebrauchen.
lg