ist es möglich, wenn ein Schaltbefehl nicht erfolgreich war den Befehl zu wiederholen?
Geht das in einen Script, oder läuft das Skript auf Grund des Fehlers nicht weiter?
Beispiel:
//Gerät einschalten
$err = HM_WriteValueBoolean(Zwischenstecker, "STATE", true);
if ($err == False) {
IPS_Sleep(4000);
// erneut Versuchen
HM_WriteValueBoolean(Zwischenstecker, "STATE", true);
}
Das sollte weiterlaufen, da es ja nur eine Warnung ist (kann mit @ unterdrückt werden).
Aber imho versucht die CCU eh mehrmals das Gerät zu erreichen.
Somit wäre es besser du suchst den Fehler warum der Befehle nicht ankommt.
Michael
Der letzte Fehler war eine Kommunikationsstörung.
Ich hatte den Eindruck, dass der zweite Schaltbefehl nicht gesendet wurde nachdem beim ersten die Störung aufgetreten ist.
Ich habe dann nach etwa 10 Sekunden das Gerät in der WebUI aktiviert und da war die Kommunikationsstörung auch wieder weg.
Ja, passt doch.
Eventuell ist das Gerät gerade so an der Grenze vom Empfangsbereich oder der Duty-Cycle der CCU war erreicht z.B. durch häufiges wiederholen von Sendungen oder großen Funkpaketen wie für die Statusanzeigen.
Lieber die Ursache suchen und nicht die Symptome mit doppelten dreifachen senden der Befehle behandeln.
Auf lange Sicht hast du sonst noch mehr Probleme.
Michael
Mittels einer besseren Antenne als der kleine Drahtstummel der CCU kannst du einiges an Empfangsqualität verbessern und damit möglicherweise dein Problem lösen. Ich habe jedenfalls nach der Umrüstung meiner CCU keine Probleme mehr
Bei einer Kommunikationsstörung kann ein neuer Versuch etwas später helfen.
Aber wenn es ein anderes Problem ist, wie zB als bei dem MP3 Gong die Batterien ohne Vorwarnung leer waren, hat es den Duty-Cycle der CCU auf über 80 % erhöht.
Leider kann man nicht sehen, was das Problem ist. Ich denk ein neuer Versuch nach 10 Sekunden ist ok, wenn der Fehler dann noch da ist muss er anders behoben werden.
Bei den Skript, wo ab und zu einmal die Kommunikationsstörung auftritt, werden hintereinander zwei Zwischenstecker geschaltet und danach wird Shutter Control aufgerufen.
Zuerst wird die ON_TIME gesetzt und dann eingeschaltet.
Von der CCU bis zum Zwischenstecker sind es 9 Meter und es ist eine Wand dazwischen.
Warum haben bei der RSSI Liste manche Geräte zwei Werte und andere nur einen?
Statusanzeige
-66dBm -205dBm
Zwischenstecker-Wohnzimmer
-58dBm -52dBm
Zwischenstecker-Schlafzimmer
-52dBm -207dBm
Temperatur-Balkon
-55dBm
Der Temperatur-/ Feuchtesensor außen ist eigentlich am weitesten weg, hat aber einen besseren Wert als die Zwischenstecker.
Warum haben bei der RSSI Liste manche Geräte zwei Werte und andere nur einen?
Weil manche Geräte nur senden und nicht empfangen. Siehe Temperatursensor.
Der Temperatur-/ Feuchtesensor außen ist eigentlich am weitesten weg, hat aber einen besseren Wert als die Zwischenstecker.
Da haben so viele Umgebungsbedingungen Einfluss darauf, dass Hersteller meist immer nur eine Freifeldreichweite angeben um Reichweitendiskussionen von Haus aus den Saft abzudrehen.
Den sleep habe ich nur in wenigen Skripten
Lass mal tatsächlich eine Störung in Deinem HM-System passieren und die Zwangspause damit häufig auftreten und Du wirst ganz schnell merken wie leicht es ist ein System zu lähmen. Selbst IP-Symcon selber rät zu einen sehr vorsichtigen Einsatz dieses Befehls - mit gutem Grund.
ich habe es mit einen Skript versucht, welches das Gerät einschaltet und wenn es einen Fehler gab wird noch einmal versucht das Gerät einzuschalten. Wenn das nicht erfolgreich war erfolgt eine Benachrichtigung.
Die ID des zu schaltenden Gerätes wird beim Aufruf übergeben, das geht auch beim ersten mal.
Aber nach dem Skript Timer ist die ID nicht mehr verfügbar.
Wie könnte man die ID verfügbar machen ? Oder gibt es da einen besseren Weg, das zu realisieren.
Als ersten Ansatz könnte man eine Variable vom Typ Integer hinzufügen (die die ID $VariablenID hat)
und den Wert der ID mit „SetValueInteger ( integer $VariablenID, integer $Wert )“ hinterlegen
um ihn beim nächsten Aufruf mit „GetValueInteger ( integer $VariablenID )“ wieder lesen.
Ich selber mache es etwas komplizierter:
Ich nehme eine Variable vom Typ String und schreibe und lese ein serialized array, das alle möglichen Daten für eine ganze Gruppe von HM-Variablen enthält.