„Kommunikation gestört“ beheben

Zwei Programme, mit denen die Servicemeldungen „Kommunikation gestört“ automatisch entfernt werden

Wer eine CCU mit diversen Aktoren betreibt, der kennt das Problem: Eine Fülle von Servicemeldungen mit dem Inhalt „Kommunikation zur  Zeit gestört“ oder „Kommunikation war gestört“. Mit den beiden Scripten auf dieser Seite kann die CCU auf kurzzeitige Funkstörungen reagieren und die Servicemeldungen bereinigen, so dass nur die wirklich wichtigen Meldungen stehenbleiben.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Wie kommt es zu den Servicemeldungen?

Kommunikationsstörungen tauchen in den Servicemeldungen auf, wenn die CCU versucht, ein Gerät anzusprechen und dieses nicht antwortet. In dem Fall erstellt die CCU zwei Servicemeldungen:

Kommunikation ist zur Zeit gestört

Die Meldung lässt sich nicht bestätigen und wird so lange angezeigt, bis das Gerät sich wieder bei der CCU gemeldet hat. Dabei ist es egal, ob das Gerät sich von allein bei der CCU meldet (z. B. bei einem Aktor, der am Gerät eingeschaltet wurde) oder ob die CCU das Gerät anspricht und über das bidirektionale Protokoll eine Rückmeldung erhält (z. B. beim Einschalten durch ein Programm).

Kommunikation war gestört

Die Meldung wird nicht automatisch bestätigt, wenn das Gerät wieder erreichbar ist. Die Meldung muss also in jedem Fall bestätigt werden, um sie aus der Liste zu entfernen. Wenn die CCU erneut versucht, das Gerät anzusprechen, und es wieder nicht erreichbar ist, erscheint auch die Meldung wieder.

Wenn ein Gerät die CCU nicht erreichen kann, beispielsweise ein Tür-/Fensterkontakt oder auch ein Schaltaktor, dann erscheint natürlich keine Meldung in der CCU: Um die Störung zu melden, müsste das Gerät die CCU erst einmal erreichen.

Die Ausnahme sind zyklische Meldungen, die die CCU erwartet: Wenn in der CCU eingestellt ist, dass ein Tür-/Fensterkontakt eine periodische Statusmeldung senden soll (alle 24h), dann erscheint eine Kommunikationsstörung in den Servicemeldungen, wenn diese Meldung ausbleibt.

Seit Firmware-Version 2.17.x wird auch noch der Duty Cycle streng überwacht: Wenn die CCU mehr als 36 Sekunden in einer Stunde gesendet hat, dann macht sie eine Pause und erzeugt Kommunikationsstörungen.

Script 1: „Kommunikation war gestört“ automatisch bestätigen

Das erste Script wird ausgeführt, sobald sich der Zähler für Servicemeldungen ändert. Dann läuft das Script los und bestätigt alle auftretenden „Gerätekommunikation war gestört“-Meldungen.

Zunächst das WebUI-Programm.

Damit es sich nicht totläuft, wenn gerade ein Dutzend Meldungen gleichzeitig auftreten, lasse ich es mit 10 Sekunden Verzögerung ausführen. Wichtig dafür der Haken bei „Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z. B. Retriggern)“ und natürlich „bei Aktualisierung“.

Um das folgende Script einzufügen, bitte komplett markieren, in der WebUI auf den den Button „Script“ klicken und den gesamten Text einfügen. Nachdem das Script eingefügt wurde, sieht man wie in meinem Screenshot oben den Anfang des Codes.

! HomeMatic-Script
! "KOMMUNIKATION GESTöRT" BEHEBEN
! http://www.christian-luetgens.de/homematic/hardware/funkstoerungen/servicemeldungen/Servicemeldungen.htm

string itemID;
string address;
object aldp_obj;

foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
   address = dom.GetObject(itemID).Address();
   aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH");
   if (aldp_obj) {
     if (aldp_obj.Value()) {
       aldp_obj.AlReceipt();
     }
   }
}

!  Ende des Scripts

Script 2: Geräte mit gestörter Kommunikation prüfen

Einmal stündlich geht das zweite Script die gelisteten Geräte mit Kommunikationsstörungen durch und versucht, sie anzusprechen.

Wenn das gelingt, weil z. B. die Funkstörung vorbei ist, verschwindet auch die Meldung, die sich nicht bestätigen ließ. Wenn das Gerät immer noch nicht antwortet, wird natürlich wieder eine Fehlermeldung erzeugt, um die Script 1 sich kümmert .

In einer früheren Version hatte ich auch Script 2 durch die Aktualisierung des Servicemeldungs-Zählers auslösen lassen – aber das funktionierte irgendwann nicht mehr: Wenn ein Gerät weiterhin nicht erreichbar war, wurde wie geplant eine neue „Kommunikation war gestört“-Meldung eingestellt und der Zähler aktualisiert. Dann wurde jedoch nicht nur die Verzögerung für das Script beendet, sondern das Script selbst.

Das Script lief also immer nur so lange, bis das erste weiterhin gestörte Gerät gefunden wurde.

Die Lösung besteht darin, das Programm stündlich laufen zu lassen. Dadurch dauert es zwar auch bis zu eine Stunde, bevor ein kurzfristig nicht erreichbares Gerät wieder aus der Liste entfernt wird, aber dies geschieht dafür zuverlässig.

Und hier das Script, das wieder genauso im Programm eingefügt werden kann wie oben:

! HomeMatic-Script
! "KOMMUNIKATION GESTöRT" BEHEBEN
! http://www.christian-luetgens.de/homematic/hardware/funkstoerungen/servicemeldungen/Servicemeldungen.htm

string itemID;
string address;
object aldp_obj;
string channel;
var x;
integer max=5;

foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
  address = dom.GetObject(itemID).Address();
  aldp_obj = dom.GetObject("AL-" # address # ":0.UNREACH");
  if (aldp_obj) {
    if (aldp_obj.Value()) {
      foreach (channel, dom.GetObject(itemID).Channels().EnumUsedIDs()) {
        if (max > 0) { 
          x = dom.GetObject(channel).State();
          max = max - 1;
        }
      }
    }
  }
}

!  Ende des Scripts

Die Anzahl der Geräte, die bei Aufruf des Scripts geprüft werden, ist auf maximal fünf begrenzt. Wenn mehr Geräte ausgefallen sind, wird das Script abgebrochen und läuft dann erst nach einer Stunde wieder für die nächsten fünf (oder für dieselben, wenn sie immer noch ausgefallen sind)

Hintergrund ist der Duty Cycle: Wenn die CCU den Sendebetrieb einstellt, hat man leicht mal 30 oder 50 Geräte mit gestörter Kommunikation in der Liste. Wenn die CCU dann wieder senden kann, aber gleich wieder sämtliche Geräte aktiv angesprochen werden, dann steigt womöglich der Duty Cycle wieder auf 100 %, der Sendebetrieb wird eingestellt und die Kommunikationsstörungen kommen alle wieder.

Im Normalbetrieb sind fünf dauerhaft gestörte Funkverbindungen schon eine Menge. Wer regelmäßig mehr hat, sollte über ein Gateway oder einen Repeater nachdenken – oder max=5 auf einen höheren Wert ändern.

Konfigurationsdaten übertragen

Die Meldung „Konfigurationsdaten stehen zur Übertragung an“ hängt indirekt mit den Kommunikationsstörungen zusammen.

Wenn die CCU versucht, Konfigurationsdaten an ein Gerät zu übertragen, das gerade nicht erreichbar ist, dann speichert die CCU diese Daten zunächst für sich ab und erstellt eine Servicemeldung. Sobald das entsprechende Gerät wieder erreichbar ist, werden die Daten automatisch übertragen und die Servicemeldung verschwindet.

Schlägt die Übertragung fehl, kann es ebenfalls zur Meldung „Kommunikation ist zur Zeit gestört“ kommen: Wenn die CCU Daten an einen Aktor sendet, der dauerhaft auf Empfang sein sollte und dennoch nicht erreichbar ist, wird eine entsprechende Meldung eingestellt. Bei Geräten, die im Normalbetrieb nicht erreichbar sind, wird nur die Servicemeldung zu „Konfigurationsdaten“ eingestellt, aber keine Kommunikationsstörung.

Weitere Informationen zu Konfigurationsdaten finden Sie im Bereich Hintergrund.

Navigation