Hallo,
ich nutze das SkyQ Modul (endlich gibt es das!). Leider liest der Entwickler nicht oder kaum mit, ich habe aber ein blödes Problem mit dem Modul: Es wird irgendwie irgendwo ein Reading angelegt, was dann irgendwann für den Fehler "configfile: Sky: unknown attribute ip. Type 'attr Sky ?' for a detailed list." sorgt und mein AutoSave deaktiviert. Ich bin leider nicht in der Modulentwicklung zu Hause, denke aber, dass es nur eine Kleinigkeit ist. Hat ev jemand nen kurzen Moment Zeit und kann mir sagen, was ich wie in dem Modul ändern muss, damit der Fehler weg ist?
https://forum.fhem.de/index.php?topic=96017.msg889811
Bekommst Du diesen Fehler immer beim Starten von FHEM? Oder irgendwann mitten im Lauf?
Habe den Fehler im Code gefunden
$hash->{AttrList} =
"ip"
. $readingFnAttributes;
Ändern in
$hash->{AttrList} =
"ip "
. $readingFnAttributes;
Super, vielen dank, lade ich gerade rein.
Ich gebe zu, ich kenne mich in der Modul Entwicklung 0 komma überhaupt nix aus. Reißt dieser Teil vom Source FHEM in den Tot, wenn die IP nicht vorhanden ist?
Weißt leider nicht, wie ich dieses Eval da einbauen kann.
sub getReceiverInfo($) {
my ($device) = @_;
my $hash = $defs{$device};
my $ip = AttrVal($hash->{name}, 'ip', undef);
my $url = "http://$ip:9006/as/system/information";
my $r = HTTP::Request->new('GET', $url);
my $ua = LWP::UserAgent->new();
my $res = $ua->request($r);
my $data = decode_json($res->content);
my %json = %{ decode_json($res->content) };
foreach my $key (keys %json) {
readingsSingleUpdate($hash, $key, $data->{$key}, 1);
}
my $status = $data->{"activeStandby"};
if($status == 1) {
readingsSingleUpdate($hash, "state", "off", 1);
} else {
readingsSingleUpdate($hash, "state", "on", 1);
}
return undef;
}
Das Abholen von Daten via HTTP/S würde ich mittels HttpUtils_NonblockingGet machen. Also mit Hilfe der HttpUtils.
Das ist sicherer, Du brauchst keine zusätzlichen Module und es blockiert nicht.
Die Funktion decode_json liefert Dir als Antwort bereits eine Hashreferenz. Daher
my $json = decode_json($res->content);
Damit bei einem Fehler von decode_json Dein FHEM nicht in den Tod geht, schreiben wir ein eval rum
my $json = eval { decode_json($res->content) };
Grüße
Danke für deine Antwort. Könntest du mir beim letzten Teil helfen, damit es nicht abstürzt?
Ich komme da leider nicht so ganz mit und weiß nur, dass das Modul regelmäßig für einen Absturz sorgt.
Guten Morgen,
Dann brauche ich ein Log um zu sehen wo und wie.
my $data = eval { decode_json($res->content) };
my %json = eval { %{ decode_json($res->content) } };
Für genaueres brauch ich ein Log
Hey super, gibt zwar nen Fehler, aber keinen Absturz mehr. Vielen lieben Dank!!
Wie genau lautet denn der Fehler?
Vielleicht so
my $data;
my %json;
$data = eval { decode_json($res->content) };
%json = eval { %{ decode_json($res->content) } };