,

Homematic Skript – Automatisches Quittieren von Servicemeldungen bei Funkstörungen

Wer ein größeres Homematic-Netz bestehend aus vielen Funksendern betreibt, kennt das leidige Thema sporadisch auftretende Funkstörungen, die dazu führen, dass die LED der CCU2 für die Servicemeldungen eigentlich dauerhaft blinkt. So wird man schnell „blind“ für wichtige Meldungen, die dann im Speicher der CCU2 landen.

Dazu zählen z.B. komplette Ausfälle oder leere Batterien der Geräte. Daher zeige ich Euch heute, wie Ihr mit einem einfachen Skript diese Meldungen quittieren könnt sobald diese aufgetreten sind. Meldungen, die weiterhin aktiv sind wie z.B. „Gerätekommunikation gestört“, „Batterieladezustand gering“ oder „Konfigurationsdaten stehen zur Übertragung an“ bleiben davon unbetroffen.

Bezeichnung Amazon ELV-Shop ELV-Bausatz
4 GB SD-Karte Link Link nicht verfügbar
Powerline Adapter Link Link nicht verfügbar
Funkmodul Raspberry Pi nicht verfügbar nicht verfügbar Bausatz
Raspberry Pi 2 Link Link nicht verfügbar
Raspberry Pi3 Link Link nicht verfügbar

Es werden mit dem Skript nur die Meldungen quittiert, die Ihr sonst händisch abgearbeitet hättet wie z.B. „Gerätekommunikation war gestört“. Ein Beispiel sehr Ihr im unteren Bild. Der Button „Bestätigen“ ist nicht ausgegraut und die Meldung kann daher quittiert werden.

Um das Skript einzubinden, muss ein neues Programm erzeugt werden. Dazu klickt Ihr auf „Programme und Verknüpfungen“ —> „Programme und Zentralenverknüpfungen“ und dort auf „Neu“.

Als Bedingung: Wenn… wählt Ihr „Systemzustand“ und „Servicemeldungen“ aus. Der Wertebereich wird mit größer als 0 gewählt. Außerdem muss noch „bei Aktualisierungen auslösen“ aktiviert werden.


Dadurch wird das Programm automatisch ausgeführt, wenn eine neue Servicemeldung auftaucht. Das Quittieren übernimmt dann unser Skript, welches wir im nächsten Schritt einfügen.

Dazu wählen wir bei Aktivität: Dann… „Skript“ aus. In das Fenster für das Skript kopiert Ihr nun folgenden Text:

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();
}
}
}

Es sollte noch eine kleine Verzögerung von 1-2 Sekunden eingesetzt werden, dann läuft das ganze zuverlässiger.

Das war es auch schon. Damit verhindert Ihr ungewollte Servicemeldungen und erhaltet ab sofort nur noch die wichtigen Meldungen, die wirklich relevant sind!

5 Kommentare
  1. nosec
    nosec sagte:

    bei mir klappts nicht, wo liegt das Problem?

    Error 1 at row 7 col 31 near ^- # address # :0.STICKY_UNREACH);
    if (aldp_obj) {
    if (aldp_obj.Value()) {
    aldp_o
    Error 1 at row 7 col 31 near ^- # address # :0.STICKY_UNREACH);
    if (aldp_obj) {
    if (aldp_obj.Value()) {
    aldp_o
    Parse following code failed:
    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();
    }
    }
    }

    Antworten
  2. Kay-Uwe Mönkedieck
    Kay-Uwe Mönkedieck sagte:

    Hallo liebe HomeMatic Freunde,
    ich habe das Script von Holger eingefügt und bekomme leider diese Meldung:
    Error 1 at row 7 col 27 near ^„AL-“ # address # „:0.STICKY_UNREACH“);
    if (aldp_obj) {
    if (aldp_obj.Val
    Error 1 at row 7 col 27 near ^„AL-“ # address # „:0.STICKY_UNREACH“);
    if (aldp_obj) {
    if (aldp_obj.Val
    Parse following code failed:

    Leider bin ich nicht sehr bewandert was Scripts angeht. Ich würde mich freuen wenn ihr mit bei diesem Problem weiterhelfen könntet. Vorab vielen lieben Dank.

    Kay-Uwe

    Antworten
  3. Björn
    Björn sagte:

    bei mir hat es auch nicht auf anhieb funktionert. das Problem sind die anführungszeichen. Wenn man das skript per copy/paste in der homematic einfügt. Alle Anführungszeichen einmal löschen und neu setzen – das war’s.

    Antworten
  4. Holger
    Holger sagte:

    Hallo Sebastian,
    bitte überprüfe mal Dein Skript, leider hakt es und lief bei mir nicht durch.
    Diese Variante funktioniert:

    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();
    }
    }
    }

    Gruß
    Holger

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert