E-Mail / PushOver / Telegram Messenger – Batterie leer

Das Skript „Batterie-Ladestand“ von pix, basierend auf einem Skript von saschahb aus HomeMatic-Inside, habe ich im HomeMatic-Forum gefunden. Das Skript „Batterie leer“ geht davon aus, dass du CUxD sowie das E-Mail-AddOn auf deiner CCU2 installiert bzw. eingerichtet hast.
Anstatt die die Batteriewarnung per E-Mail zu verschicken, kannst du die Meldung auch PushOver oder dem Telegram Messenger verschicken.
Ich gehe davon aus, dass du CUxD bereits installierst hast! Falls dies noch nicht geschehen ist, findest du hier eine Anleitung.
Meine Anpassung verschickt jeden Tag eine Mail oder auf Wunsch eine PushOver-/Telegram-Meldung, auch wenn KEINE Batteriewarnung vorliegt. Somit überprüfe ich die Funktion des Skripts jeden Tag.

Update 14.06.20:
Ein aufmerksamer Leser (Notker) hat mich diese Woche darauf hingewiesen, dass der entsprechende Kanal bei batteriebetriebenen IP-Komponenten nicht „LOWBAT“ sondern „LOW_BAT“ heißt und deshalb das Skript diese Komponenten nicht berücksichtig. Inzwischen sind auch in meine umfangreiche HomeMatic-Installation die ersten IP-Komponenten eingezogen, deshalb bin ich für diesen Hinweis besonders dankbar. Ich habe seine Erweiterungen in das Script für alle eingebaut und erfolgreich getestet.

Update 23.07.17:
Ich habe alle bis heute veröffentlichten batteriebetriebenen IP-Komponenten hinzugefügt.

Update 29.01.17:
Die Meldung „Batterie leer“ kann jetzt auf Wunsch auch per Telegram Messenger verschickt werden. Ich habe das Skript „PushOverSend“ entsprechend angepasst.

Update 22.01.17:
Die Meldung „Batterie leer“ kann jetzt auf Wunsch auch per PushOver verschickt werden. Ich habe das Skript entsprechend angepasst.

Zunächst legst du eine Systemvariable „Mailtext“ vom Typ „String“ an:

mailtext
Systemvariable Mailtext

Update 31.05.16:
Jetzt ein Gewerk mit dem Namen „Batteriebetrieben“ anlegen

Nach dem Erstellen des Gewerks „Batteriebetrieben“ müssen alle batteriebetriebenen Geräte diesem Gewerk zugeordnet werden!

Update 23.11.16:
Ich habe die Funk-Sirene mit Signalleuchte „HM-Sec-Sir-WM“ mit dem Batterietyp „LR14 (Baby)“ hinzugefügt.

HomeMatic-Programm „Batterie leer“

Anschliessend legst du ein neues Program mit dem Namen „Batterie_leer“ an:

HomeMatic-Programm "Batterie leer"
HomeMatic-Programm „Batterie leer“

In das Skript des Programms wird folgendes einkopiert:

! Email-Warnung über niedrigen Batterie - Ladestand
! www.meine-homematic.de Beispiel Skript
! Anleitung:
! Folgendes Skript per Zeitmpodul 1x täglich ausführen
! Lösung basierend auf einem Skript von "saschahb"
! http://www.homematic-inside.de/tecbase.html?view=item&item_id=138
! Dank auch an Marc Hoffmann für die Review des Skriptes
! Alle Batteriebetriebenen Geräte müssen in folgendem Gewerk sein:
var myAssembly = dom.GetObject("Batteriebetrieben");
! Geändert für Email-Addon / CUXD / TCL von PIX

! Variablen initialisieren
string itemID;
string text = "";
integer counter = 0;
string cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B";
string cr2032 = "HM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS\tHM-SCI-3-FM\tHM-PBI-4-FM";
string lr44 = "HM-Sec-SC\tHM-Sec-RHS\tHM-Sec-SC-2";
string lr6 = "HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHmIP-SMI\tHmIP-SMO\tHmIP-SPI\tHMIP-eTRV";
string lr3 = "HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP\tHM-Sec-SCo\tHM-PB-2-WM55-2\tHmIP-SWDO-I\tHMIP-WRC2\tHmIP-RC8\tHmIP-WRC6\tHmIP-KRC4\tHmIP-STHD\tHmIP-STH\tHmIP-STHD";
string lr61 = "HM-LC-Sw4-Ba-PCB";
string lr14 = "HM-Sec-Sir-WM";
string batlink;
string index;
string datapoint;

! Durch alle angemeldeten Geräte iterieren
foreach(itemID, myAssembly.EnumUsedIDs()) {
    ! Gerätedetails & Schnittstelle holen
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());

    ! Name, Adresse und Kanal auslesen
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    if (interface_name == "HmIP-RF")
       {datapoint = "LOW_BAT";}
    else
       {datapoint = "LOWBAT";} 
    string channel_name = interface_name # "." # device_address # ":0." # datapoint;
    var channel = dom.GetObject(channel_name);

    ! Batterie leer?
    if ( (channel.State() == true) && (channel.Value() == true) ) {
        ! Gerät enthält CR2016-Batterie?
        batlink = "unbekannt";
        foreach (index, cr2016) {
            if (index == device.HssType()) {
                batlink = "CR2016";
                }
            }

        ! Gerät enthält CR2032-Batterie?
        foreach (index, cr2032) {
            if (index == device.HssType()) {
                batlink = "CR2032";
                }
            }

        ! Gerät enthält LR44-Batterie?
        foreach (index, lr44) {
            if (index == device.HssType()) {
                batlink = "LR44";
                }
            }

        ! Gerät enthält LR6-Batterie?
        foreach (index, lr6) {
            if (index == device.HssType()) {
                batlink = "LR6";
                }
            }

        ! Gerät enthält LR3-Batterie?
        foreach (index, lr3) {
            if (index == device.HssType()) {
                batlink = "LR3";
                }
            }

        ! Gerät enthält LR61-Batterie?
        foreach (index, lr61) {
            if (index == device.HssType()) {
                batlink = "LR61";
                }
            }

        ! Gerät enthält LR14-Batterie?
        foreach (index, lr14) {
            if (index == device.HssType()) {
                batlink = "LR14";
                }
            }

        ! Text zusammensetzen
        text = text # "- " # item.Name() # " vom Typ " # batlink # " \r\n";

        ! Counter erhöhen (Anzahl leerer Batterien)
        counter = counter + 1;
        }
    }

    ! Mail-Text zusammensetzen
    string Nachricht;
    string sDate = system.Date("%d.%m.%Y");
    Nachricht = " \r\n Prüfung des Ladestandes der Batterien vom " # sDate # ". \r\n";

! Mind. eine leere Batterie gefunden?
if ( counter > 0 ) {
    Nachricht = Nachricht # "\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n" # text;
    Nachricht = Nachricht # "\r\n Bitte tauschen Sie die Batterien zeitnah aus. ";
} else {
    Nachricht = Nachricht # "\r\n Keine Batterie muss getauscht werden. ";
}

! Nachricht per Mail verschicken
! Bitte mit Ausrufezeichen auskommentieren falls Meldung per PushOver
!--------------------------------------------------------------------------------
    ! Nachricht in Variable füllen und E-Mail absenden
    !--------------------------------------------------
    dom.GetObject("Mailtext").State(Nachricht);

    dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/etc/config/addons/email/email 04");

! Nachricht per PushOver verschicken
! Bei Bedarf die Ausrufezeichen vor den Befehlen loeschen
!----------------------------------------------------------------
    ! Nachricht in Variable füllen und PushOver absenden
    !--------------------------------------------------
    !dom.GetObject('PushOver').State(Nachricht);
 
    !var programObj = dom.GetObject("PushOverSend");
    !programObj.ProgramExecute();

Ausgabe des Skripts per Mail

Die komplette Batteriemeldung wird dann in die Systemvariable „Mailtext“ (string) geschrieben. Das Email Addon übernimmt den „Mailtext“ und verschickt über das Template Batteriemeldung die Mail.

Über „Einstellung/Systemsteuerung“ das AddOn „Email“ anwählen und eine bisher noch nicht genutzte Vorlage, im meinem Beispiel ist es die Nummer 4, auswählen. Ich gehe davon aus, dass du unter dem Reiter „Account“ deine Mail-Kontodaten bereits eingetragen hast.

E-Mail AddOn - "Batterie leer"
E-Mail AddOn – „Batterie leer“

Update 11.03.17: Ich habe inzwischen von einigen CCU2-Anwendern den Hinweis erhalten, dass bei der Verwendung von Sonderzeichen in der Betreffzeile Probleme auftraten und die Mail deshalb nicht verschickt wurde. Sollte die Mail bei dir nicht verschickt werden, kontrolliere deshalb bitte zunächst deine Betreffzeile!

Achtung: Der TCL-Bereich gilt für ALLE Mail-Vorlagen! Falls du für andere Mail-Vorlagen bereits TCL-Programm-Code nutzt, diesen unbedingt stehen lassen und den neuen Code dahinter kopieren.
Im TCL-Bereich der Mail-Vorlagen wird zusätzlich folgendes einkopiert:

load tclrega.so
array set werte [rega_script {
var emailtext_inhalt;
emailtext_inhalt = dom.GetObject("Mailtext").Value();
}]
set emailtext [encoding convertfrom utf-8 $werte(emailtext_inhalt)]
E-Mail AddOn - "Batterie leer"
E-Mail AddOn – „Batterie leer“

Zur Überprüfung des Skripts kannst du im Programm „Batterie_leer“ zunächst die Wenn-Bedingung löschen und das Programm manuell ausführen.

Ausgabe des Skripts per PushOver

Alternativ kann die Ausgabe des Skripts auch per PushOver stattfinden. Falls  du PushOver bisher noch nicht eingerichtet hast, ist jetzt die beste Gelegenheit. Eine ausführliche Beschreibung findest du in meinem Artikel pushover.net – API-Key. Zusätzlich musst du für den Versand von PushOver-Meldungen eine Systemvariable sowie ein kleines HomeMatic-Programm anlegen, eine ausführliche Anleitung dazu findest du in meinem Artikel Push-Meldung.
Anschliessend kommentierst du im Skript „Batterie leer“ die beiden Befehlszeilen mit jeweils einem !-Zeichen in der Mail-Versandroutine aus:

"Batterie leer" per PushOver-Meldung
„Batterie leer“ per PushOver-Meldung

Jetzt aktivierst du die Ausgabe des Skripts per PushOver durch das Löschen der Ausrufezeichen vor folgenden Programmzeilen:

"Batterie leer" per PushOver-Meldung
„Batterie leer“ per PushOver-Meldung

Das war’s, jetzt sollte dich die „Batterie leer“ Meldung per PushOver erreichen.

Autor: Erhard Simdorn

Am 1. September 2014 habe ich mir meine erste CCU2 gekauft und war von den Möglichkeiten der Hausautomation sofort begeistert. Am 22. November 2014 folgte dann die zweite CCU2 für einen weiteren Standort und bis heute sind es schon acht CCU2 für die ich der "Auslöser" war.

144 Gedanken zu „E-Mail / PushOver / Telegram Messenger – Batterie leer“

  1. Hallo,

    habs eingerichtet nach der Anleitung. Funktioniert 🙂 Danke. Hab da mal eine Frage bzw. Anregung. Kann man den Betreff je nach zustand anpassen ?

    Alles OK –> CCU2: Batteriestatus! OK !
    Wenn eine Batterie gewechselt werden muss –> CCU2: Batteriestatus! Batterie wechseln !

    So kann ich eine email Verteilerregel anlegen und verteilen lassen. Der Tägliche scheck ist gut kann aber so in einem Unterordner wo ich nicht drüber alarmiert werde auf mein Handy.

    Gruß Thomas

    1. Hab es geändert ….

      hab 2 eMail IDs eingetragen bei mir 2 und 3.

      Skript abgeändert wie folgt:

      ab —> ! Mind. eine leere Batterie gefunden?

      if ( counter > 0 ) {
      Nachricht = Nachricht # „\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n“ # text;
      Nachricht = Nachricht # „\r\n Bitte tauschen Sie die Batterien zeitnah aus. „;

      ! Nachricht in Variable füllen und E-Mail absenden
      !————————————————–
      dom.GetObject(„Mailtext“).State(Nachricht);

      dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 03“);
      } else {
      Nachricht = Nachricht # „\r\n Keine Batterie muss getauscht werden. „;

      ! Nachricht in Variable füllen und E-Mail absenden
      !————————————————–
      dom.GetObject(„Mailtext“).State(Nachricht);

      dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 02“);
      }

  2. Kleiner Fehler, über den ich gestolpert bin: Beim Einrichten des CUxD-Gerätes zum senden der Emails (http://homematic.simdorn.net/cuxd-installation/) steht im Screenshot „Seriennummer: 2“. Die muß natürlich 1 sein, oder, die Zeile im Code „dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“)“ muß „dom.GetObject(„CUxD.CUX2801002:1.CMD_EXEC“)“ heißen, sonst sucht man sich ziemlich scheckig, warum es nicht funktioniert… ^^

  3. Hallo ,
    ich habe es nach Anleitung eingerichtet. Funktioniert soweit, dass ich täglich eine Mail bekomme in der steht „Prüfung des Ladestandes der Batterien vom 22.07.2016. Keine Batterie muss getauscht werden. In den Servicemeldungen der CCU2 steht Funkheizkörperthermostat „Leere Batterie“. Ich habe auch im Skript den Heizkörperthermostat mit der Typenbezeichnung HM-CC-RT-DN (fehlte noch in dem Skript) eingefügt sowie dem Gewerk „Batterie betrieben“ zugeordnet.
    Wenn ich ein kleines Programm mit Geräteauswahl Heizkörperthermostat bei Batteriestatus im Wertebereich von 1,5 – 2,5 V bei Änderung auslöse, bekomme ich eine Meldung.
    Kann ich das Skript alle Geräte auflisten lassen?

    Gruß Stefan

    ! Email-Warnung über niedrigen Batterie – Ladestand
    ! http://www.meine-homematic.de Beispiel Skript
    ! Anleitung:
    ! Folgendes Skript per Zeitmpodul 1x täglich ausführen
    ! Lösung basierend auf einem Skript von „saschahb“
    ! http://www.homematic-inside.de/tecbase.html?view=item&item_id=138
    ! Dank auch an Marc Hoffmann für die Review des Skriptes
    ! Alle Batteriebetriebenen Geräte müssen in folgendem Gewerk sein:
    var myAssembly = dom.GetObject(„Batterie betrieben“);
    ! Geändert für Email-Addon / CUXD / TCL von PIX

    ! Variablen initialisieren
    string itemID;
    string text = „“;
    integer counter = 0;
    string cr2016 = „HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B“;
    string cr2032 = „HM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS\tHM-SCI-3-FM\tHM-PBI-4-FM“;
    string lr44 = „HM-Sec-SC\tHM-Sec-RHS\tHM-Sec-SC-2“;
    string lr6 = „HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHM-Sec-SCo“;
    string lr3 = „HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP“;
    string lr61 = „HM-LC-Sw4-Ba-PCB“;
    string batlink;
    string index;

    ! Durch alle angemeldeten Geräte iterieren
    foreach(itemID, myAssembly.EnumUsedIDs()) {
    ! Gerätedetails & Schnittstelle holen
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());

    ! Name, Adresse und Kanal auslesen
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(„:“, 0);
    string channel_name = interface_name # „.“ # device_address # „:0.LOWBAT“;
    var channel = dom.GetObject(channel_name);

    ! Batterie leer?
    if ( (channel.State() == true) && (channel.Value() == true) ) {
    ! Gerät enthält CR2016-Batterie?
    batlink = „unbekannt“;
    foreach (index, cr2016) {
    if (index == device.HssType()) {
    batlink = „CR2016“;
    }
    }

    ! Gerät enthält CR2032-Batterie?
    foreach (index, cr2032) {
    if (index == device.HssType()) {
    batlink = „CR2032“;
    }
    }

    ! Gerät enthält LR44-Batterie?
    foreach (index, lr44) {
    if (index == device.HssType()) {
    batlink = „LR44“;
    }
    }

    ! Gerät enthält LR6-Batterie?
    foreach (index, lr6) {
    if (index == device.HssType()) {
    batlink = „LR6“;
    }
    }

    ! Gerät enthält LR3-Batterie?
    foreach (index, lr3) {
    if (index == device.HssType()) {
    batlink = „LR3“;
    }
    }

    ! Gerät enthält LR61-Batterie?
    foreach (index, lr61) {
    if (index == device.HssType()) {
    batlink = „LR61“;
    }
    }

    ! Text zusammensetzen
    text = text # „- “ # item.Name() # “ vom Typ “ # batlink # “ \r\n“;

    ! Counter erhöhen (Anzahl leerer Batterien)
    counter = counter + 1;
    }
    }

    ! Mail-Text zusammensetzen
    string Nachricht;
    string sDate = system.Date(„%d.%m.%Y“);
    Nachricht = “ \r\n Prüfung des Ladestandes der Batterien vom “ # sDate # „. \r\n“;

    ! Mind. eine leere Batterie gefunden?
    if ( counter > 0 ) {
    Nachricht = Nachricht # „\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n“ # text;
    Nachricht = Nachricht # „\r\n Bitte tauschen Sie die Batterien zeitnah aus. „;
    } else {
    Nachricht = Nachricht # „\r\n Keine Batterie muss getauscht werden. „;
    }

    ! Nachricht in Variable füllen und E-Mail absenden
    !————————————————–
    dom.GetObject(„Mailtext“).State(Nachricht);

    dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 08“);

    1. Hallo Stefan, hast du das Gewerk mit dem Namen „Batterie betrieben“ anlegt und auch alle zu überwachenden Geräte diesem Gewerk zugeordnet?

      Das Script scannt alle diesem Gewerk zugeordneten Geräte ab und gibt dann das Gerät mit der schwachen Batterie aus. Die Erwähnung des Gerätetyps im Script ist lediglich für den Batterietyp wesentlich.

      Gruß Erhard

      1. Hallo Erhard,
        danke für die schnelle Rückantwort. Alle Geräte sind dem Gewerk „Batterie betrieben“ zugeordnet. Gibt es eine Möglichkeit alle Geräte (mit Status) in eine Mail zu drucken, um eventuell den Fehler einzukreisen? Ich bin leider nicht der Profi was die Programmierung angeht.

        Gruß Stefan

  4. Hallo

    Bei mir klappt das irgendwie nicht 🙁

    Den CuX-Daemon ist schon drauf, weil ich ein paar PioTek Tracker im Einsatz habe.
    Dort hab ich aber nichts zusätzlich konfiguriert.

    Der Text wird in die Systemvariable geschrieben aber eine Mail kommt nicht an oder wird nicht verschickt … Andere Status-Mails werden aber verschickt, somit ist zumindest mal
    das Mailing richtig eingerichtet.

    Ich habe folgende Settings drinn.

    Programm:
    dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 05“);

    E-Mail
    ******
    E-Mail Nr. 05
    an: meine-E-Mail Adresse
    Betreff: CCU2 Batteriestatus!
    Inhalt: $emailtext

    Tcl
    ***
    load tclrega.so

    array set values [rega_script {
    var v1 = dom.GetObject(„BidCos-RF.LEQ0177627:1.TEMPERATURE“).Value();
    var v2 = dom.GetObject(„BidCos-RF.LEQ0177627:1.HUMIDITY“).Value();
    } ]

    set v1 $values(v1)
    set v2 $values(v2)

    var emailtext_inhalt;
    emailtext_inhalt = dom.GetObject(„Mailtext“).Value();
    }]
    set emailtext [encoding convertfrom utf-8 $werte(emailtext_inhalt)]

    habe es auch schon so probiert:

    load tclrega.so

    array set values [rega_script {
    var v1 = dom.GetObject(„BidCos-RF.LEQ0177627:1.TEMPERATURE“).Value();
    var v2 = dom.GetObject(„BidCos-RF.LEQ0177627:1.HUMIDITY“).Value();
    var emailtext_inhalt;
    emailtext_inhalt = dom.GetObject(„Mailtext“).Value();
    } ]

    set v1 $values(v1)
    set v2 $values(v2)

    set emailtext [encoding convertfrom utf-8 $werte(emailtext_inhalt)]

    aber beides scheint bei mir irgendwie nicht zu funktionieren.

    Hat evtl. jmd mir einen Tip?

    Danke

    1. Hallo Kneuzgi,

      du musst unbedingt im CUxD das CUxD Gerät mit dem Gerätetyp 28 installieren, eine Anleitung dazu findest du hier.

      Dann sollte auch der Mail-Versand problemlos klappen.

      Gruß Erhard

  5. Hallo!

    Vielen Dank für das Script, habe die Ausgabe statt E-Mail auf den Telegram Messenger umgemünzt.
    Klappt super auch damit, jeden Tag Mittags kommt eine Nachricht.

    Viele Grüße,
    Stefan

      1. Hallo Michael,

        ich habe mir mal die Doku zum Telegram Messenger angeschaut, ist tatsächlich eine Alternative. Im Moment fehlt mir die Zeit für eine entsprechende Doku, habe mir den Punkt allerdings auf die Agenda genommen.
        Was waren die Gründe für deine Entscheidung für den Telegram Messenger?

        Gruß Erhard

    1. Hallo Schiedi,
      Wie sieht dein Script für telegram aus.
      Wäre auch für mich eine tolle Lösung.

      Danke
      Frank

      1. Guten Abend Frank,

        wenn du bereits einen Account für Telegram hast, musst du noch einen Bot einrichten.
        Eine detailierte Anleitung dazu findest du z.B. unter:

        Einführung in Telegram-Bots

        Nach erfolgreicher Umsetzung der oben verlinkten Anleitung änderst du mein HomeMatic-Programm „PushOverSend“ mit folgendem Inhalt:

        var PushoverText = dom.GetObject("PushOver").Value();
        dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot[API-Key]>/sendMessage -d text='"#PushoverText#"' -d chat_id=[Chat-ID]");

        Die [ ]-Zeichen dienen der Abgrenzung und müssen ebenfalls gelöscht werden.

        Anschliessend sollte die „Batterie leer“ per Telegram erreichen.

        Gruß Erhard

        1. Hallo Erhard,

          Telegram klappt gut, hat aber auch Probleme mit Umlauten !

          Hab bei mir jetzt im Script aus „Prüfung des Ladezustands“ erstmal „Pruefung des Ladezustands“ gemacht.

          Aber tolles Script und gute Anleitungen 🙂

          Vielen Dank !

          1. Hallo Mike,

            vielen Dank für das Feedback, ist für mich sehr motivierend! 😉

            Das Problem mit den Umlauen liegt am utf8-Zeichensatz, den die CCU2 derzeit leider noch nicht unterstützt.

            Liebe Grüße Erhard

  6. Hallo Erhard,

    ich habe Dein Scrip eins zu eins übernommen. Aktuell ist bei mir eine Batterie im Heizkörpermodul (HM-CC-RT-DN) leer. Die Bezeichnung steht auch so bereits im Script. Das Gerät steht auch in dem Gewerk „batterie betrieben“. Leider erhalte ich immer die gleiche Mail von meiner CCU2

    „Hallo,

    Prüfung des Ladestandes der Batterien vom 06.11.2016.

    Keine Batterie muss getauscht werden.

    Deine Homematic CCU“

    Was mache ich falsch?

    1. Hallo Kevin,
      wie hast du das Gewerk „Batterie betrieben“ angelegt? In Zeile 9 meines Scripts wird beim Namen des Gewerks auf Groß-/Kleinschreibung im Namen geachtet. In deinem Beitrag schreibst du den Namen des Gewerks komplett klein!

      Gruß Erhard

      1. Hallo Erhard,
        Bei dem Gewerk habe ich auf die Groß- und Kleinschreibung geachtet.
        Mittlerweile habe ich das Scrip etwas geändert. Jetzt erhalte ich wenigstens eine Meldung, dass das Wandmodul eine leere Batterie hat, obwohl immer noch ein Heizkörperventil die leere Batterie hat.

        Hier mal das geänderte Script:

        ! Email-Warnung über niedrigen Batterie – Ladestand
        ! http://www.meine-homematic.de Beispiel Skript
        ! Anleitung:
        ! Folgendes Skript per Zeitmpodul 1x täglich ausführen
        ! Lösung basierend auf einem Skript von „saschahb“
        ! http://www.homematic-inside.de/tecbase.html?view=item&item_id=138
        ! Dank auch an Marc Hoffmann für die Review des Skriptes
        ! Alle Batteriebetriebenen Geräte müssen in folgendem Gewerk sein:
        var myAssembly = dom.GetObject(„Batterie betrieben“);
        ! Geändert für Email-Addon / CUXD / TCL von PIX

        ! Variablen initialisieren
        string itemID;
        string text = „“;
        integer counter = 0;
        string cr2016 = „HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B“;
        string cr2032 = „HM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS\tHM-SCI-3-FM\tHM-PBI-4-FM“;
        string lr44 = „HM-Sec-SC\tHM-Sec-RHS\tHM-Sec-SC-2“;
        string lr6 = „HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHM-Sec-SCo“;
        string lr3 = „HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP\tHM-TC-IT-WM-W-EU“;
        string lr61 = „HM-LC-Sw4-Ba-PCB“;
        string batlink;
        string index;

        ! Durch alle angemeldeten Geräte iterieren
        foreach(itemID, myAssembly.EnumUsedIDs()) {
        ! Gerätedetails & Schnittstelle holen
        var item = dom.GetObject(itemID);
        var device = dom.GetObject(item.Device());
        var interface = dom.GetObject(item.Interface());

        ! Name, Adresse und Kanal auslesen
        string interface_name = interface.Name();
        string device_address = device.Address();
        device_address = device_address.StrValueByIndex(„:“, 0);
        string channel_name = interface_name # „.“ # device_address # „:0.LOWBAT“;
        var channel = dom.GetObject(channel_name);

        ! Batterie leer?
        if ( (channel.State() == false) && (channel.Value() == false) ) {
        ! Gerät enthält CR2016-Batterie?
        foreach (index, cr2016) {
        if (index == device.HssType()) {
        batlink = „CR2016“;
        }
        }

        ! Gerät enthält CR2032-Batterie?
        foreach (index, cr2032) {
        if (index == device.HssType()) {
        batlink = „CR2032“;
        }
        }

        ! Gerät enthält LR44-Batterie?
        foreach (index, lr44) {
        if (index == device.HssType()) {
        batlink = „LR44“;
        }
        }

        ! Gerät enthält LR6-Batterie?
        foreach (index, lr6) {
        if (index == device.HssType()) {
        batlink = „LR6“;
        }
        }

        ! Gerät enthält LR3-Batterie?
        foreach (index, lr3) {
        if (index == device.HssType()) {
        batlink = „LR3“;
        }
        }

        ! Gerät enthält LR61-Batterie?
        foreach (index, lr61) {
        if (index == device.HssType()) {
        batlink = „LR61“;
        }
        }

        ! Counter erhöhen (Anzahl leerer Batterien)
        counter = counter + 1;
        }
        }

        ! Mail-Text zusammensetzen
        string Nachricht;
        string sDate = system.Date(„%d.%m.%Y“);
        ! Text zusammensetzen
        string text = text # „- “ # item.Name() # “ vom Typ “ # batlink # „\r\n“;
        Nachricht = “ \r\n Prüfung des Ladestandes der Batterien vom “ # sDate # „. \r\n“;
        ! Mind. eine leere Batterie gefunden?
        if ( counter > 0 ) {
        Nachricht = Nachricht # „\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n“ # text;
        Nachricht = Nachricht # „\r\n Bitte tauschen Sie die Batterien zeitnah aus. „;
        } else {
        Nachricht = Nachricht # „\r\n Keine Batterie muss getauscht werden. „;
        }

        ! Nachricht in Variable füllen und E-Mail absenden
        !————————————————–
        dom.GetObject(„Mailtext“).State(Nachricht);

        dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 04“);

        In Zeile 40 habe ich von true auf false gewechselt. Ohne diese Änderung bekomme ich immer die meldung, das keine Batterie leer ist.

        Der Text in der Mail:

        Hallo,

        Prüfung des Ladestandes der Batterien vom 08.11.2016.

        Der Ladezustand folgender Batterien ist niedrig:
        – Wohnzimmer Wandthermostat vom Typ LR3

        Bitte tauschen Sie die Batterien zeitnah aus.

        Deine Homematic CCU2

        Der Inhalt in der TLC:

        load tclrega.so
        array set werte [rega_script {
        var emailtext_inhalt;
        emailtext_inhalt = dom.GetObject(„Mailtext“).Value();
        }]
        set emailtext [encoding convertfrom utf-8 $werte(emailtext_inhalt)]

        Die entsprechenden Geräte sind in den Zeilen 16 – 21 alle enthalten. Alle entsprechenden Geräte wurden auch unter dem entsprechenden Gewerk hinzugefügt.

        Viele Grüße
        Kevin

        1. Hallo Kevin, ich hatte einen ähnlichen Effekt. Es lag an der HomeMatic-Komponente, die inzwischen nicht mehr von der CCU2 erreichbar war. Nach einem Neustart der CCU2 war die Batteriemeldung weg, allerdings gab es dann eine nicht löschbare Kommunikationsstörung. Nach dem Austausch der Batterien war wieder alles OK!
          „In Zeile 40 habe ich von true auf false gewechselt. Ohne diese Änderung bekomme ich immer die meldung, das keine Batterie leer ist.“ Bitte mach deine Änderungen in der Zeile 40 wieder rückgängig, sonst stimmt die Logik des Programms nicht mehr!

          Gruß Erhard

          1. Hallo Erhard,

            vielen Dank für die Rückmeldung. Ich werde es versuchen. Mal schauen, ob es funktioniert.

            Kevin

  7. Hallo Erhard,

    Wir wollen dein Skrpit zum Batteriestand verwenden. Wie ist das, wenn ein Gerät nicht in der Liste für die Batteriesorte auftaucht?
    das Gerät: opt. Fenstersensor HM-Sec-Sco ist nicht in der Batteriesortenliste. Einige Geräte sind drin, aber es steht ein t davor. Was sollten wir machen? Funktionieren sie trotzdem?
    Wenn ein Gerät nicht auftaucht, schickt es trotzdem eine Mail, wenn die Batterie leer ist?
    Wir haben es schon soweit ausprobiert, funktioniert gut, sind eben noch keine Batterien leer gewesen.

    Danke und Gruß
    Anna und Jörg

    1. Hallo Anna & Jörg,

      das Script liest von allen HomeMatic-Komponenten, die dem Gewerk „Batterie betrieben“ zugeordnet sind, die Batteriewarnung aus und verschickt diese anschliessend die Mail. Die Auflistung der entsprechenden HomeMatic-Komponenten im Skript dient lediglich der Nennung eines Batterietyps. Also bei der Komponente „HM-Sec-SC“ wird eine Batterie vom Typ „LR44“ verwendet. Das „\t“ trennt die Auflistung der HomeMatic-Komponenten, damit diese vom Skript in ein Array (programmtechnisch ist das eine Liste“) eingelesen werden können.

      Der „HM-Sec-SCo“ ist bereits im Skript, schaut mal unter „lr6“!

      Falls Ihr weitere Fragen haben solltet, bitte einfach nochmal melden.

      Gruß Erhard

  8. Hallo Erhard,
    herzlichen Dank für das Skript, die Ideee mit Nennung der Batterietypen ist großartig!
    Bei dem Update-Hinweis meinst du aber sicher den Batterietyp LR14 (Baby)?
    ===
    Update 23.11.16:
    Ich habe die Funk-Sirene mit Signalleuchte „HM-Sec-Sir-WM“ mit dem Batterietyp „LR16“ hinzugefügt.
    ===
    Im Skript ist die Bezeichnung übrigens aus meiner Sicht korrekt.

    Gruß
    Burkhard

    1. Hallo Burkhard,

      vielen Dank für den Hinweis, habe ich sofort korrigiert!

      Viel Spaß weiterhin

      Erhard

  9. Hallo Erhard,

    ich bin genau nach Deiner Anleitung vorgegangen, die Mail wird mit dem richtigen Betreff versendet, enthält aber keinen Text.
    Wenn ich mir die Variable „Mailtext“ mit der Funktion Skript testen ansehe, steht aber alles drin.
    Das Skript im EMail-Addon habe ich eins zu eins kopiert.
    Ich benutze einen GMX-Account.
    Woran kann das liegen?

    Viele Grüße
    Georg

    1. Hallo Erhard,

      hat sich erledigt, ich habe im EMail-Addon einen Fehler gemacht.
      Dankeschön!

      Viele Grüße
      Georg

      1. Hallo Georg, toll das du die Lösung selbst gefunden hast!
        Als ich vor zwei Jahren mit der CCU2 begann, habe ich in einem Forum folgenden Satz gefunden: „HomeMatic ist die moderne Modelleisenbahn. Die Anlage wird permanent um weitere Funktionen ausgebaut, ständig ist ist man auf der Suche nach Fehlern oder Optimierungsmöglichkeiten.“ ? Dieser Satz begleitet mich seitdem beim Ausbau meiner HomeMatic-Installation.

        Gruß Erhard

  10. Hallo Erhard,

    danke für deine Anleitung 🙂 Ich habe das Script mal für Pushover geändert, sodass ihr
    eine PushNachricht senden lassen könnt. (Auszug)

    ! Mind. eine leere Batterie gefunden?
    if ( counter >= 1 ) {
    Nachricht = Nachricht # „\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n“ # text;
    Nachricht = Nachricht # „\r\n Bitte tauschen Sie die Batterien zeitnah aus. „;
    } else {
    Nachricht = Nachricht # „\r\n Keine Batterie muss getauscht werden. „;
    }

    ! Nachricht in Variable füllen und Push Nachricht per Pushover absenden
    !————————————————–
    dom.GetObject(„Mailtext“).State(Nachricht);

    ! Nachricht per Pushover versenden

    var wert = dom.GetObject(„Mailtext“).Value();
    string nachricht = “ „#wert#“ „;
    dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=—————token-id——— -d user=————user-id——— -d message='“#nachricht#“‚ http://api.pushover.net/1/messages.json“);

    Nur eine Frage hätte ich noch, ich habe in dem Script auch folgendes geändert:
    ! Mind. eine leere Batterie gefunden?
    if ( counter >= 1 ) {

    um eben nur eine Nachricht zu erhalten wenn wirklich eine Batterie leer ist, das klappt aber leider
    nicht 🙁 Nachricht kommt trotzdem.

    Wenns später soweit ist……. “ Einen Guten Rutsch ins neue Jahr.“

    BR
    Guido

    1. Hallo Guido,

      wo hast du denn deine Änderung „if(counter >= 1) {“ eingebaut?

      Korrekt wäre es, wenn du nur bei einer leeren Batterie eine Meldung benötigst:

      if ( counter > 0 ) {
      ! Nachricht in Variable füllen und E-Mail absenden
      !————————————————–
      dom.GetObject(„Mailtext“).State(Nachricht);

      dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„/etc/config/addons/email/email 04“);
      }

      Ich habe die Abfrage auf counter >= 0 vor den Block „Nachricht in Variable füllen und E-Mail absenden“ gesetzt, die geschweifte Klammer hinter dem Block bitte nicht vergessen.

      Melde dich bitte, wenn es geklappt hat! Danke.

      Eingen guten Rutsch und noch viele spannende HomeMatic-Erfahrungen im neuen Jahr

      Erhard

  11. Hallo,
    ich hatte Probleme mit dem Script: es wurden partout keine E-Mails rausgeschickt. Grund war wohl, dass das Script CUxD aufruft, um die Mail zu versenden.
    Hat das irgendeinen Grund?
    Ich habe die betreffende letzte Zeile des Scripts auskommentiert, so dass sie nicht mehr ausgeführt wird, und sende die Mail stattdessen wie folgt:

    string stdout;
    string stderr;
    system.Exec(„/etc/config/addons/email/email 04“, &stdout, &stderr);

    1. Hallo paulchen,

      welche Probleme hattest du mit dem Script? Falls du den CUx-Daemon nach meiner Anleitung angelegt hattest, lag das Problem mit großer Wahrscheinlichkeit an meiner unvollständigen Anleitung. Ich hatte bei der Beschreibung der CUxD-Installation einen wichtigen Punkt vergessen, das neue CUxD-Gerät muss im Posteingang der CCU2 vor der ersten Verwendung fertiggestellt werden.
      Falls du CUxD nicht installiert hast, kann ich dir nur unbedingt zur Nutzung von CUxD raten und den system.Exec Befehl durch ein „Gerät (28) System“ mit der Funktion „Exec“ ersetzen.
      Der system.Exec Befehl wird deine CCU2 irgendwann zum Stillstand bringen, dann geht bis zum Neustart der CCU2 nichts mehr. Ist ein bekanntes Problem und taucht immer wieder in Forenbeiträgen auf.

      Gruß Erhard

  12. Hallo Erhard,
    danke für die super Anleitung. Leider hänge ich an folgendem Problem fest: Die Systemvariable Mailtext in HM wird ordnungsgemäß gefüllt. Bei der Übergabe im Mailaddon scheint aber was schief zu gehen, es kommt immer nur eine leere eMail an. Als ich dann TCL deaktiviert hatte, kam zumindest eine Wunschemail mit beliebigem Textinhalt an (natürlich ohne Mailtext aus Systemvariable).
    Da der CUxD und eMail-Addon aus der Anfangszeit der CCU2 war (Alter 2 J) haber ich zunächst mal die Addons CUxD und Mail-Addon auf neuesten Stand gebracht. Ohne TCL geht seither weiterhin eine eMail raus, mit TCL kommt gar nichts mehr. TCL wird aktuell nur noch für dein Skript verwendet (um Fehler auszuschließen), Inhalt hab ich 1:1 aus der Anleitung kopiert, genau wie Variablenbezeichnung und Skript. Nur die eMail-Nummer wurde geändert. Hast du noch eine Idee?
    Vielen Dank vorab,
    Steve

    1. Hallo Erhard,
      nach tagelanger Suche habe ich die Lösung gefunden. Das eMail Addon scheint dahingehend einen Bug zu haben, dass es nicht mit allen Zeichen in der Betreffzeile klarkommt. Zu Filterzwecken versende ich viele eMails vorangestellten Infoblöcken in der Form [HomeMaticInfo] [FritzBoxInfo]… –> das funktioniert beim eMail Addon der CCU2 nicht mehr, sobald TCL verwendet wird. Nachdem ich die Sonderzeichen aus der Betreffzeile entfernt hatte, funktionierte alles wie gewünscht. Habe danach die eckigen Klammern testweise noch einmal eingebaut und siehe da, eMail geht nicht mehr raus. Wollte diese Info auf diesem Weg teilen, evtl. verzweifelt noch jemand wegen diesem Problem.
      Grüße Steve

      1. Hallo Steve,

        es freut mich, dass du eine Lösung gefunden hast! Besonders freue ich über deine Bereitschaft, deinen Lösungsweg hier zu posten um anderen Anwendern eine Hilfe bei der Fehlersuche zu bieten.

        Viel Spaß weiterhin mit deiner Hausautomation

        Erhard

  13. Hallo,

    ich habe gerade das Skript zur Prüfung der Batterie-Status bei mir implementiert. Funktioniert einwandfrei. Erstmal besten Dank für die echt gute und ausführliche Beschreibung. Nun habe ich da aber noch eine Frage zu. In der Beschreibung steht, das alle Batterie betriebenen HomeMatic-Komponenten in das Gewerk „Batterie betrieben“ aufgenommen werden müssen. Ich nutze auch zwei 6-Fach Taster und eine Display-Fernbedienung. Müssen dann alle 6 Kanäle und alle 20 Kanäle der Display-Fernbedienung in das Gewerk mit aufgenommen werden? Oder reicht es z. B. pro 6-Fach-Taster jeweils nur einen Kanal in das Gewerk hinzuzufügen?

    Für die Beantwortung meiner Frage bedanke ich mich im Voraus.

    Frank

    1. Hallo Frank,

      im Prinzip genügt es, wenn du jeweils nur einen Kanal des jeweiligen Gerätes dem Gewerk „Batterie betrieben“ zu ordnest. Ich ordne allerdings alle Kanäle der betroffenen Geräte den jeweiligen Gewerken zu.

      Liebe Grüsse Erhard

      1. Hallo Erhard,

        vielen Dank für die schnelle Antwort. Hat es einen besonderen Grund warum du alle Kanäle hinzufügst, wenn eigentlich nur einer reicht? Wie ich ja schon geschrieben habe, funktioniert das Skript. Naja, ich sag mal so, ich bekomme halt eine Mail zu einem bestimmten Zeitpunkt das alle Batterien in Ordnung sind. Nun wollte ich fragen, ob man auch eine Mail bekommt, wenn die Batterien der Display-Fernbedienung oder eines Taster komplett leer sind oder nur bei geringen Batteriestand? Ich hatte mal versucht eine andere Mail zu generieren indem ich die Batterien aus der Display-Fernbedienung raus genommen habe. Nun hätte ich mit einem Hinweis per Mail gerechnet, das ich die Batterien austauschen sollte. Dem war aber nicht so. Hab wieder eine Mail bekommen das alle Batterien in Ordnung sind. Daher meine Frage ob auch Mails versendet werden wenn Batterien ganz leer sind oder welche in den Komponenten fehlen. Die Fernbedienung ist allerdings (noch) mit einem Kanal im Gewerk hinterlegt. Werde es morgen mal testen wenn ich alle Kanäle der Fernbedienung dem Gewerk hinzufüge.

        Wünsche noch einen schönen Abend

        Frank

        1. Hallo Frank,

          nein, einen besonderen Grund gibt es dafür nicht! Aus meiner beruflichen Erfahrung gehe ich gerne gründlich vor, da kann ich dann auch nicht vergessen immer einen bestimmten Kanal der Geräte dem Gewerk zuzuordnen. Inzwischen habe ich 88 HomeMatic-Komponenten im Einsatz, da brauch es eine gewisse Ordnung.

          Gruß Erhard

          1. Verstehe, macht Sinn. Und wie sieht es mit Mails bei ganz leeren oder fehlenden Batterein aus? Werden die durch das Skript auch versendet bzw. wird man darauf aufmerksam gemacht die zu wechseln?

            Schönen Gruß

            Frank

          2. Hallo Frank,

            wenn eine HomeMatic-Komponente aufgrund von fehlender oder leeren Batterie nicht mehr erreichbar ist, kann das Skript „Batterie leer“ dieses nicht melden. Das Skript fragt den aktuellen Batteriestatus ab und meldet diesen anschliessend.

            Da das Skript täglich läuft, bekommst du eine schwache Batterie eigentlich immer mit.

            Gruß Erhard

  14. Guten Tag Erhard

    Vielen Dank erstmals für den ausführlichen Beitrag. Nachdem ich alles befolgt habe, konnte ich keine checks durchführen.
    Habe den Script nochmal überprüft, ob es wirklich durchläuft und sah dass dies nicht der Fall war.
    Hatte die Systemvariable „Mailtext“ wie beschrieben benannt aber im Script war es mit „MailText“ definiert.
    Falls noch jemand dass Problem hatte..

    Vielen Dank für deinen Beitrag, dieser war sehr hilfreich.

    Freundliche Grüsse
    Hüseyin

    1. Hallo Hüseyin,

      vielen Dank für den Hinweis! Ich habe die Systemvariable im Skript jetzt in „Mailtext“ umbenannt, dann stimmt die komplette Beschreibung.

      Gruß Erhard

  15. Hallo Erhard

    Leider bekomme ich die Meldung mit Telegram nicht ganz hin…

    Kannst Du mir bitte den „vollständigen“ Scriptinhalt ab hier angeben?

    ! Nachricht in Variable füllen und PushOver absenden
    !————————————————–
    …….
    ……
    ……

    Danke und Gruss
    Claudio

    1. Hallo Claudio,

      eigentlich solltest du auch das Programm „PushOverSend“ (siehe Push-Meldungen von der CCU2) auf deiner CCU2 erstellt haben. Wenn du dort die Ausrufezeichen bei Telegramm entfernst, sollte es klappen.
      Du kannst allerdings auch direkt im Batterie-Skript die Meldung per Telegram verschicken.
      ! Nachricht per Telegram verschicken
      ! Bei Bedarf die Ausrufezeichen vor den Befehlen loeschen
      !----------------------------------------------------------------
      dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot[Dein API-Key]/sendMessage -d text='"#Nachricht#"' -d chat_id=[Bot-ID]");

      Gruß Erhard

      1. Danke Erhard

        Leider nein…

        Wenn ich …… -d text='“#Nachricht#“‚…… eingebe, geschieht gar nichts! Wenn ich hingegen ……'“#PushoverText#“‚ eingebe, bekomme ich eine Nachricht von Telegramm jedoch nur mit 3 ???

        Wo liegt der Fehler?

        1. Guten Abend Claudio,

          die drei Fragezeichen deuten darauf hin, dass die Systemvariable „PushOver“ keinen Inhalt hat. Also wird die Systemvariable im Batterie-Skript nicht gefüllt. Welchen Inhalt die Systemvariable hat, kannst du jederzeit in deiner CCU2 unter [Status/Bedienung] [Systemvariable] anschauen. Kontrolliere bitte das Batterie-leer-Skript ob du dort evtl. die Systemvariable „PushOver“ falsch geschrieben hast.

          Gruß Erhard

  16. Guten Tag Herr Simdorn,

    vorab möchte ich meinen herzlichen Dank für Ihre tollen Erklärungen zum Ausdruck bringen. Dank ihrer Homepage und der von Herrn Luetgens habe ich mich sehr schnell entschieden, weg von Homematic IP hin zur echten Lösung zu gehen und lerne momentan jeden Tag..

    Ich möchte als Ergänzung zu Steves Kommentar vom 11. Januar anmerken:

    TCL kommt mit Sonderzeichen nicht zurecht. Dazu gehören auch “ : “ und “ @ „. Steves Kommentar scheint auf die eckigen Klammern abzuzielen.

    Ich habe gestern und heute damit verbracht mich zu wundern, warum die Testmail funktionierte (inklusive des Script-Textes), warum die Variante mit system.exec funktionierte nur die CUxD Version nicht.

    Dank Steves Kommentar bin ich dann endlich draufgekommen, dass meine Betreffzeile ein Doppelpunkt enthielt („CCU: Batteriestatus“).

    Doppelpunkt entfernt und siehe da, alles läuft perfekt.

    Vielen Dank – und eventuell kann man den Hinweis auf den Doppelpunkt im Betreff mit in die Anleitung aufnehmen. Ich könnte mir vorstellen, dass einige User ähnliche Betreffzeilen wählen wie ich und nicht jedem klar ist, dass dieser auch als Sonderzeichen zählt.

    Beste Grüße

    1. Hallo Steffen,

      zunächst freut es mich, dass du anhand meiner Erklärungen und Anleitungen deine CCU2 erweitern konntest. Tatsächlich gibt es wohl mit Sonderzeichen in der Betreffzeile des E-Mail-Templates in einige Fällen Schwierigkeiten. Bei mir funktioniert ein Doppelpunkt in der Betreffzeile ohne Probleme. Ich werde weiter Testen und einen Hinweis auf die Sonderzeichen in der Betreffzeile in meinem Beitrag aufnehmen.

      Gruß Erhard

  17. Lieber Erhard

    Vielen Dank für Deine tolle Arbeit und – Deiner Geduld. Leider funktioniert es immer noch nicht. Ich erlaube mir, einmal meinen kompletten Script zu posten:

    ! Email-Warnung über niedrigen Batterie – Ladestand
    ! http://www.meine-homematic.de Beispiel Skript

    [Skriptzeilen von Admin gelöscht]

    ! Nachricht per Telegram verschicken
    ! Bei Bedarf die Ausrufezeichen vor den Befehlen loeschen
    !—————————————————————-

    var PushoverText = dom.GetObject(„PushOver“).Value();
    dom.GetObject(„CUxD.CUX2801002:1.CMD_EXEC“).State(„extra/curl -s -k https://api.telegram.org/bot123456789/sendMessage -d text='“#PushoverText#“‚ -d chat_id=123456789″);

    1. Hallo Claudio,

      der Fehler liegt im letzten Absatz des Scriptes, hier muss folgende für die Verwendung von Telegram verwenden:

      dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot123456789/sendMessage -d text='"#Nachricht#"' -d chat_id=123456789");

      Die Zeile
      var PushoverText = dom.GetObject("PushOver").Value();

      kannst du auskommentieren oder besser gleich löschen.

      Gruß Erhard

      1. Hallo Erhard

        Vorweg: Das ganze via Mail funktioniert einwandfrei!! Einfach per Telegramm nicht!..!

        Scheint wirklich der „Wurm“ drin zu sein, denn es will einfach keine Nachricht kommen… Die Angaben zu Telegramm sind jedoch korrekt von mir erfasst! Habe ich geprüft. Was ist eigentlich mit der Systemvariable? Ich habe ja nur eine [PushOver] [Textnachricht] [Zeichenkette] angelegt, mehr nicht.

        1. Hallo Claudio,

          sorry für die späte Antwort, war geschäftlich unterwegs und hatte keine Zeit mich um den Blog zu kümmern.
          Die Systemvariable [PushOver] wird für Telegram nicht verwendet.
          Der Fehler liegt in den Anführungszeichen in der Kommentarfunktion, echt bekloppt! Es dürfen nur die Anführungszeichen „oben“ genutzt werden!

          dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot123456789/sendMessage -d text='"#Nachricht#"' -d chat_id=123456789");

          Sorry für die Verwirrung, jetzt sollte es klappen!

          Gruß Erhard

        2. Hallo Claudio,

          bei mir waren die Umlaute das Problem. Nachrichten mit Umlauten kommen bei mir nicht an. Habe also alle ü, ö und ä mit ue, oe, ae ersetz. Am besten geht das mit „suchen und ersetzen“ in einem Textprogramm. Du könntest die Umlaute auch wie folgt codieren. Müsste eigentlich auch klappen.

          Ä = %C3%84
          ä = %C3%A4
          Ö = %C3%96
          ö = %C3%B6
          Ü = %C3%9C
          ü = %C3%BC

  18. Hallo, das Script finde ich Super. Ich persönlich hätte gerne noch eine Erweiterung, mit dem jetzigen Status Mail weiß ich ja nur das keine Batterie gewechselt werden muss. Schön wäre es doch wenn von den Geräten die Abgefragt werden können die Batteriespannung im Mail mitgeschickt werden würde. Wenn da noch etwas mehr drinsteht ist das ja kein Problem, das Mail wird ja sowieso verschickt. Leider bin ich nicht so der crack im Programmieren aber vielleicht findet sich ja jemand der auch gerne mehr Infos über den Batterie Status möchte.
    gz aus der Schweiz
    Charly

  19. Hallo Erhard,
    super Skript !
    Danke
    Der HM-Sec-SCo hat meines Erachtens aber den Batterietyp LR03 (und nicht LR06)
    Der HM-PB-2-WM55-2 mit dem Batterietyp LR03 würde noch fehlen
    Habs bei mir im Skript geändert/ergänzt.

  20. Hallo und vielen Dank für das Script 🙂

    Ich habe das Ganze per Telegram-Benachrichtung umgesetzt. Telegram hat leider ein Problem mit Umlauten. Sind Umlaute in einem der Texte die verschickt werden sollen enthalten, so kommt die entsprechende Nachricht nicht an. Alternativ könnte man die Umlaute wie folgt kodieren:

    Ä = %C3%84
    ä = %C3%A4
    Ö = %C3%96
    ö = %C3%B6
    Ü = %C3%9C
    ü = %C3%BC

    Bei mir hats dann quasi so erst geklappt mit dem Script.

    Viele Grüße

  21. Hallo Thomas,

    Danke fur das script, leider fehlt Unterstützung für Homematic IP gerate.

    Fensterkontact „HMIP-SWDO“, Radiator Thermostat „HMIP-eTRV“ und Zimmer Thermostat „HMIP-WTH“.

    Konnen diese auch hinzugefügt werden?
    Danke.

    Gruß Johnny

      1. Hallo Erhard,

        wie sieht es mit dem Update für die HM IP Komponenten aus ? Warte schon sehnsüchtig auf die Einbindung des HmIP-SMI 🙂

        Gruß, Dennis

        1. Hallo Dennis,

          du kannst das Script ganz einfach um den HmIP-SMI erweitern. Bitte dazu einfach folgende Zeile in deinem Programm austauschen:

          string lr6 = "HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHmIP-SMI";

          Ich habe an das Ende der Zeile ein „\t“ als Tabulator und den Gerätenamen „HmIP-SMI“ hinzugefügt. So kannst du in Zukunft alle weitere IP-Geräte ergänzen, musst halt je nach Batterietyp die richtige Zeile ergänzen.

          Gruß Erhard

    1. Hallo Johnny,

      leider finde ich bei ELV keine IP-Komponente „HMIP-WTH“, alle weiteren batteriebetriebenen IP-Komponenten sind jetzt im Script hinzugefügt. Bitte einfach die Zeilen „string lr6 =“ und „string lr3 =“ austauschen.

      Gruß Erhard

  22. Hi,

    hab auch ein Problem mit Umlauten bei Telegram. Bei mir haben die Geräte schon umlaute im Namen.
    Kann ich irgendeinen Befehl nutzen um z.B. „ü“ in Nachricht mit %C3%BC zu ersetzen.

    Viele Dank

  23. Hallo Erhard,
    danke für das prima Script. Nach einigem Probieren läuft es nun einwandfrei durch.

    Zwei Hinweise:
    HM-TC-IT-WM-W-EU fehlt noch bei LR3
    und
    Bei mehreren Geräten des gleiche Typs werden alle diese Geräte in der Mail aufgeführt obwohl eine der Batterien leer ist. Oder?
    Schöner Gruß,

    1. Hallo Ulli,

      nein, es wird nur das Gerät mit der Batteriemeldung aufgeführt. Dabei steht in der Mail der von dir vergebene Namen des Gerätes.

      Liebe Grüße Erhard

  24. Hallo Erhard,

    ich habe schon einige Deiner Tips hier verbaut und die funktionieren gut. Unter anderem verwende ich auch den Nachrichtenversand via Telegram. Auch dieses funktioniert fast überall.

    In diesem Fall jedoch nicht.
    Ich habe bereits mehrere Anpassungen versucht.
    Die beiden Geräte um die es im Beispiel geht musste ich hinzufügen da es diese noch nicht gab. Es handelt sich um den Kapazitiven Füllstandsmesser und die Wetterstation Gen.2.

    Die Zeile mit den Geräten schaut jetzt so aus:

    string lr6 = „HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O-2\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHmIP-SMI\tHmIP-SMO\tHmIP-SPI\tHMIP-eTRV\tHM-Sen-Wa-Od“;

    Wenn ich den Script teste dann kommt nichts.
    Die Ausrufezeichen habe ich auch angepasst.
    Was kann da noch der Fehler sein?

    Danke und Grüße !

    Uwe

  25. Hallo Erhard,

    erstmal Danke für deinen tollen Artikel!

    Leider funktioniert es bei mir noch nicht. Im CUxD Log sehe ich folgendes:

    Sep 22 07:37:00 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: ! Email-Warnung über niedrigen Batterie – Ladestand ! http://www.meine-homematic.de Beispiel Skript ! Anleitung: ! Folgendes Skript per Zeitmpodul 1x täglich ausführen ! Lösung basierend auf einem

    CCU2 Firmware ist die Version 2.29.22

    Googlen hat mich leider noch nicht weitergebracht.

    Gruß
    Michael

    1. Hallo Michael,

      beim Kopieren des Scripts wurden anscheinend bei dir die Anführungszeichen vertauscht. Im Script dürfen NUR die normalen Anführungszeichen oben benutzt werden. Kopiere das Script bitte nochmal direkt, ohne Umweg über einen Editor, direkt in das HomeMatic-Programm.

      Gruß Erhard

  26. Hallo Erhard,

    das ist echt ne TOP-Arbeit! Ich hab leider das Problem das es mit den Heizkörper-Reglern nicht funktioniert. Ich habe das mal nachgelesen, die kommen nicht über den Wert LowBat sondern über Parameter FAULT_REPORTING
    0 = NO_FAULT (Standard)
    1=VALVE_TIGHT
    2=ADJUSTING_RANGE_TOO_LARGE
    3=ADJUSTING_RANGE_TOO_SMALL  4=COMMUNICATION_ERROR
    5=
    6=LOWBAT
    7=VALVE_ERROR_POSITION

    Es gibt auch noch zwei andere Devices da kommt die Batteriemeldung über den Parameter Error. Wenn interesse besteht poste ich diese noch.

    1. so ich hab das jetzt mal rausgesucht:
      HM-CC-RT-DN kommt über FAULT_REPORTING = 5
      HM-CC-RT-DN-BoM kommt über FAULT_REPORTING = 6
      HM-CC-VD kommt über ERROR = 4
      HM-TC-IT-WM-W-EU kommt über LOWBAT_REPORTING = true

      alle anderen Geräte kommen über LOWBAT
      ich kann allerdings nicht sagen wie es bei den IP Geräten ist

      leider bin ich im Programmieren ne Niete und kann das Script nicht anpassen…

      1. HM-CC-RT-DN kommt über FAULT_REPORTING = 6
        HM-CC-RT-DN-BoM kommt über FAULT_REPORTING = 6
        sind beide über 6, hab ich mich verklickt

        1. für mich hab ich das jetzt mal so gelöst, dann gehen die Heizung-Regler und der Rest erstmal, von den anderen modulen hab ich keins im einsatz

          boolean condition = false;
          if (device.HssType().Find(„HM-CC-RT-DN“)>=0)
          {string channel_name = interface_name # „.“ # device_address # „:4.FAULT_REPORTING“;
          var channel = dom.GetObject(channel_name);
          if ( (channel.State() == 6) ){condition = true;}else{condition = false;}}
          else
          {string channel_name = interface_name # „.“ # device_address # „:0.LOWBAT“;
          var channel = dom.GetObject(channel_name);
          if ( (channel.State() == true) && (channel.Value() == true) )
          {condition = true;} else{condition = false;}}

          1. die rauchmelder HM-Sec-SD geben gar kein batterie signal aus, nur zur Information, nicht das man drauf wartet und nie was kommt!

          2. Hallo Axel,

            auch die HM-Sec-SD liefern über S_Rauchmelder_xxx:0.LOWBAT selbstverständlich eine LOWBAT-Meldung. Warum gehst du davon aus, dass keine LOWBAT-Meldung abgefragt werden kann?

            Gruß Erhard

          3. Hallo Axel,

            deine Lösung für die Heizkörperthermostate ist klasse, allerdings liefern meine HM-CC-RT-DN den LowBat-Status auch über das LOWBAT-Flag. Hatte in der Vergangenheit schon einige Batteriewarnungen meiner HM-CC-RT-DN über mein Batterie-Leer Skript.

            Gruß Erhard

          4. Hallo Erhart,

            ich bin eigentlich nur draufgekommen, da ich einen Fensterkontakt mit „niedrigem Ladezustand“ und zwei Heizungsregler mit „Leere Batterie“im Service hatte und die Heizungsregler nicht im Mail waren. Evtl waren die Heizungsregler zu leer. Wenn ich unter Programme was machen möchte kommt beim Fenstersensor z.B. die Auswahl Batterie Leer oder Batterie OK, bei dem Heizungsregler kommt nur die Auswahl Leere Batterie. Beim Rauchmelder steht keine Batterie-Auswahl zur Verfügung. Sprich es stehen auch Unterschiedliche Meldungen im Service Bereich. Wenn ich mir dann die Paramaterliste von http://www.eq-3.de/Downloads/eq3/download%20bereich/hm_web_ui_doku/hm_devices_Endkunden.pdf durchlese, sehe ich das die Parameter unterschiedlich sind. Vielleicht hab ich auch einen Gedankenfehler oder was falsch eingerichtet…

            Für Tipps bin ich sehr Dankbar!

          5. Hallo Axel,

            wie jede batteriebetriebene HomeMatic-Komponente hat auch der HM-CC-RT-DN einen Kanaltyp „BATTERY_STATE“, dieser wird in dem Batterie-leer-Skript abgefragt. Tatsächlich haben einige batteriebetriebene HomeMatic-Komponenten einen Kanaltyp „FAULT_REPORTING“, auch hier wird eine Fehlermeldung z.B. bei „Batterie leer“ ausgegeben. Dies hat allerdings nichts mit dem Batterie-leer-Skript zu tun. Ich vermute, dass die Batterien deines Heizungsthermostates sehr schwach waren als des Batterie-leer-Skript gelaufen ist, aber der Kanaltyp war für das Skript noch ausreichen. Wenn dann der Thermostat den Motor anwirft, können schwachen Batterien sehr schnell in die Knie gehen und anschliessend komplett abschalten. Ich benutze ausschliesslich Markenbatterien, mit den habe ich bisher immer eine „Batterie-leer“ erhalten und konnte dann am folgenden Tag die Batterien tauschen.

            Wenn du die Kanaltypen mit den entsprechenden Werten deiner HomeMatic-Komponenten anschauen möchstet, empfehle ich dir die Installation des PlugIns „HQ WebUI„. Es wird zwar nicht mehr weiterentwickelt, aber es läuft noch problemlos mit der aktuellen Firmware der CCU2

            Gruß Erhard

  27. Ich verwende das Script und bin sehr zufreiden.
    Eine Frage dazu: Kann ich den Akku der Winmatic Fesntersteuerung (HM-Sec-Win) mit überwachen ?
    lg Richard

    1. Hallo Richard,

      die WINMATIC kennt für den Akku einen Parameter „LEVEL“, eine Dokumentation findest du hier. Im PDF-Dokuemnt einfach nach „HM-Sec-Win“ suchen. Somit funktioniert die Überwachung über das Batterie leer leider nicht.

      Gruß Erhard

  28. Hallo,

    erst mal vielen Dank für dieses tolle Script und die Idee bzw. deren Umsetzung. Ich bin begeistert von so viel Einsatz, Danke dafür.
    Jetzt zu Mir. Ich denke ich mute michhier als Anfängerdepp. Ich habe alles nach Anleitung gemacht. 100 mal gegenkontrolliert und auch 2 mal von vorne begonnen. Aber aus irgendeinem Grund kommen bei mir am Ende keine Mails an. Wie kann ich a) kontrollieren ob das Script läuft, b) ob die Übergabe an die Email klappt und c) eventuell ein Protokoll einsehen, wo der Hase im Pfeffer liegt. ich hätte dieses Script gerne genutzt um den Batteriestatus meiner vielen Geräte gerne per Mail auf mein Handy zu bekommen, dennoch schaue nicht jeden Tag in die Statusmeldungen der CCU2.
    Wer hat einen Tip für mich was ich als nächstes tun könnte?
    BTW: Ich bin ein absoluter Laie was Script Programmierung an geht. Keine Ahnung davon.

    Vielen Dank im Voraus für eventuelle Ideen und Bemerkungen.

    1. Hallo Dirk,

      wenn das „Batterie leer“ Skript nicht funktioniert, kann das an mehreren Dingen hängen. Ich würde dir empfehlen, zunächst die CUxD-Installation zu überprüfen.
      1) HomeMatic-Programm „Batterie leer“ manuell ausführen, dafür in der Wenn-Bedingung die Zeitsteuerung entfernen und das Programm anschließend in der CCU2 über [Status und Bedienung] [Programme] [Start] ausführen.
      2) Nach dem manuellen Ausführen des Programm in die CUxD-Console zur Fehlerkontrolle wechseln [Einstellungen] [Systemsteuerung] [Zusatzsoftware] [Cux-Daemon] [Einstellen]
      3) Oben den Button [Info] und anschliessend unten den Button [Full Syslog] anklicken

      Erscheint im Full Syslog von CUxD evtl. eine Fehlermeldung?

      Gruß Erhard

      1. Hallo Erhard,

        vielen Dank für deine Mühe und die schnelle Reaktion.
        Ja, ich habe hier eine Fehlermeldung. Ich poste sie mal hier, da ich es nicht verstehe. Vielleicht kannst Du etwas damit anfangen.

        —————-
        Oct 21 12:07:23 homematic-ccu2 daemon.warn openvpn[580]: NOTE: OpenVPN 2.1 requires ‚–script-security 2‘ or higher to call user-defined scripts or executables
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 107 col 27 near ^u201E\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n%u201C # text; Na^M [iseESP.cpp:1090]
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: ParseProgram: SyntaxError= u201E\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n%u201C # text; Nachricht = Nachricht # %u201E\r\n Bitte tauschen Sie die Batterien zeitnah aus. %u201E; ! Nachricht in Variable
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 107 col 27 near ^u201E\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n%u201C # text; Na^M [iseESP.cpp:1090]
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: ParseProgram: SyntaxError= u201E\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n%u201C # text; Nachricht = Nachricht # %u201E\r\n Bitte tauschen Sie die Batterien zeitnah aus. %u201E; ! Nachricht in Variable
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecForEach: WARNING – invalid expression used in foreach(): ! Email-Warnung über niedrigen Batterie – Ladestand ! http://www.meine-homematic.de Beispiel Skript ! Anleitung: ! Folgendes Skript per Zeitmpodul 1x täglic
        Oct 21 12:07:32 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: ! Email-Warnung über niedrigen Batterie – Ladestand ! http://www.meine-homematic.de Beispiel Skript ! Anleitung: ! Folgendes Skript per Zeitmpodul 1x täglich ausführen ! Lösung basierend auf einem
        Oct 21 12:07:38 homematic-ccu2 daemon.warn openvpn[580]: NOTE: OpenVPN 2.1 requires ‚–script-security 2‘ or higher to call user-defined scripts or executables
        ———————

        Gruß
        Dirk

        1. Hallo Dirk,

          dann haben wir auf Anhieb die richtige Stelle gefunden, auch wenn das noch nicht die Lösung ist. Wie hast du das Programm von meiner Website kopiert?
          Bitte unbedingt die Kopierfunktion (siehe Bild) dazu nutzen, ansonsten können „ungültige“ Zeichen in das Skript kopiert werden.
          Skript kopieren
          Dann sollte das Problem beseitigt sein!

          Gruß Erhard

  29. Hallo Erhard,

    danke für dein Script. Läuft super. Aber etwas ist mir noch unklar. Kann ich auch einen Funk-Sender HM-RC-Key4-2, einen Funk-Gong HM-OU-CFM-TW oder einen Funk-Wandtaster HM-PB-2-WM55 abfragen? Wenn ja, welchen Kanal wähle ich dort aus? z.B. der Funk-Gong bietet mir 2 Kanäle zur Auswahl, der Funk-Sender 4. Oder muss ich alle auswählen?

    Gruß
    Oli

    1. Hallo Oli,

      alle von dir angesprochenen HM-Komponenten haben den Kanal „LOWBAT“, dieser wird über das Skript „Batterie leer“ abgefragt. Allerdings berücksichtigt das Skript nur HM-Komponenten, die dem Gewerk „batteriebetrieben“ zugeordnet sind.Früher habe ich zur Visualisierung das Plugin „HQ WebUI“ benutzt, ich habe dazu einen Artikel geschrieben. Inzwischen nutze ich ioBroker, hier werden die einzelnen Kanäle der HM-Kompomenten ebenfalls angezeigt.

      Gruß Erhard

      P.S.: Ich setze die von dir genannten HM-Kompoenten ebenfalls ein und hatte bei allen bereits eine „Batterie leer“-Meldung über das Skript.

      1. Das mit dem Gewerke „batteriebetrieben“ habe ich verstanden. Wenn ich einen Fenstergriff-Sensor hinzufügen will, ist das auch kein Problem, da nur ein Kanal zur Auswahl steht. Bei einem Funk-Sender HM-RC-Key4-2 werden beim Hinzufügen aber 4 Kanäle angezeigt. Welchen muss ich hinzufügen? Irgendeinen oder alle?
        Gruß
        Oli

        1. Hallo Oli,

          ich füge immer alle Kanäle dem Gewerk „batteriebetrieben“ hinzu, habe mir darüber noch nie Gedanken gemacht! Aber es funktioniert zuverlässig.

          Gruß Erhard

  30. Vielen Dank! Hab’s geschafft 😉

    Allerdings auch noch zwei Newbie-Fragen:

    Kann man womöglich bewerkstelligen, dass eine Mail nur gesendet wird, wenn eine Batterie gewechselt werden sollte?

    Kann man das Gerät für CUxD eigentlich dann wieder löschen? Es gefällt mir nicht, dass ich ein Gerät in der Liste haben, dass ich gar nicht besitze.

    VG
    daniello

    1. Hallo Daniel,

      im Prinzip kann der Mail-Versand auch nur bei einer „Batterie leer Meldung“ erfolgen. Allerdings bekommt man dann leider nicht mit, wenn die Routine aus welchem Grund auch immer nicht funktioniert und die Batterien ohne Vorwarnung zu Ende gehen.

      Gruß Erhard

      1. Ich hab mir jetzt über eine Gmail-Regel in Verbindung mit IFTTT beholfen. Alle Gut-meldungen werden wegsortiert und die Schlechtmeldungen bleiben in der Inbox und lösen zusätzlich eine SMS aus.
        An eine tägliche Gutmeldung gewöhnt man sich .. die übersieht man irgendwann 😉
        CUxD ha bich auch deinstalliert und wie der eine Kollege weiter oben einfach den Standard-Mailauslöser vom Mail-Plugin verwendet.
        Vielen herzlichen Dank nochmal für diesen tollen Artikel!

        P.S. Über Deine Antwort hier hab ich keine Nachricht erhalten .. war ganz überrascht.

        1. Hallo Daniel,

          vielen Dank für dein Feedback! CUxD verwendet ich für viele weitere Aufgaben, bisher ohne Probleme.

          Warum keine Mail verschickt wurde, werde ich klären.

          Gruß Erhard

  31. Hallo Erhard

    ich als Homematic Neuling finde deine Arbeit richtig klasse und hilfreich.
    Dieses Tutorial läuft bei mir bis zum Email Versand, beim PushService Telegram bin ich nun am verzweifeln.
    Telegram ist soweit konfiguriert, sprich API und ID sind vorhanden (und getestet) und im PushoverSend eingefügt.
    CuxD schreibt auch keine Fehlermeldung ins Protokoll, HQ WebUI läuft durch.
    Hat sich was in Sachen Telegram Kombatibilität geändert?

    LG Stev

      1. Hallo Stev,

        die von Christian Luetgens vorgestellte Lösung entspricht im Kern meiner Lösung, vielleicht hilft dein Hinweis auch anderen interessierten Lesern meines Blogs.

        Gruß Erhard

  32. Hallo Erhard,
    Ich habe dein Script soweit aufgebaut und habe es auch auf Fehler überprüft. Leider nutze ich weder PushOver noch das E-Mail Addon. Ich habe die komplette Benachrichtigung mit dem Telegramm Messenger aufgebaut.
    Hast du für den Telegramm Messenger bereits ein Script geschrieben? Fall du eins hast, wäre es sehr nett, wenn du mir dieses zukommen lassen könntest.

    Danke Maik

    1. Hallo Maik,

      ich habe die Benachrichtigung inzwischen auch auf Telegram Messenger umgestellt, werde das Script in den kommenden Tagen in einem neuen Beitrag zur Verfügung stellen.

      Liebe Grüße Erhard

  33. Hallo Erhard!
    Ich habe meine CCU2 seit 31.12.17 und habe gehofft mit der Kombination „Batterie leer“ und der „einfache Alarmanlage“ das so zu kombinieren damit ich eine Nachricht erhalte welcher Melder ausgelost hat. Aber leider komme ich nicht dahinter. Oder ist so eine Kombination gar nicht möglich?
    Danke für Deine Hilfe!

    Übrigens das mit Batterie leer habe ich ein klein wenig umgeändert und zwar das ich bei dem Umlaut keine ?? erhalt habe ich das ü mit %C3%BC ersetzt.

    ! Mail-Text zusammensetzen
    string Nachricht;
    string sDate = system.Date(„%d.%m.%Y“);
    Nachricht = “ \r\n Prüfung des Ladestandes der Batterien vom “ # sDate # ….

    LG Thomas

    1. Hallo Thomas,

      was genau möchtest du erledigen? Möchtest du eine Meldung per Mail/Telegram/Pushover wenn ein Rauchmelder auslöst? Alles ist lösbar, wenn ich die genaue Aufgabenstellung kenne.

      Gruß Erhard Simdorn

  34. Hallo Erhard,

    erstmal vielen Dank für deine super Anleitungen! Die nehmen einem wirklich ne menge Arbeit ab und bringen zusätzlichen Komfort in die Arbeit mit Homematic. Top!
    Im Skript steht, dass alle Batterie betriebenen Geräte dem Gewerk „Batterie betrieben“ zugeordnet werden müssen. Können diese Geräte zusätzlich auch noch einem weiteren Gewerken zugeordnet werden, oder gibt das Probleme mit dem Skript. Konkret geht es da um den Differenz Temperatur Sensor HM-WDS30-OT2-SM-2, der noch dem Gewerk Wetter zugeordnet werde soll.

    Viele Grüße
    Sebastian

    1. Hallo Sebastian,

      selbstverständlich kannst du ein Gerät mehreren Gewerken zuordnen. Das Programm „Batterie leer“ fragt lediglich das Gewerk „Batterie betrieben“ ab und funktioniert somit auch bei Geräten, die auch mehreren Gewerken zugeordnet sind.

      Gruß Erhard

    1. Hallo Renne,

      über das PlugIn CUxD oder den ioBroker ist alles möglich! Ich habe am Anfang mich ausschliesslich auf CUxD konzentriert, erledige diese Aufgaben allerdings komplett über ioBroker. Inzwischen gibt es sehr viele Hausautomationssysteme, ich bin nach über 4 Jahren HomeMatic-Anwendung immer noch sehr zufrieden. Die Offenheit von HomeMatic bietet viele sinnvolle Erweiterungen.

      Gruß Erhard

  35. Hallo Erhard,

    ich bin heute mal verschiedene batteriebetriebene Komponenten der HM und HM IP durchgegangen, weil mich interessiert hat wie aktuell die Liste der Teilnehmer noch ist, deren Batteriestatus über das Skript ermittelt wird. Dabei ist mit aufgefallen, dass verschiedene Teilnehmer nicht in der Liste vorhanden sind. Bspw. gibt es den HomeMatic Funk-Wassermelder ‚HM-Sec-WDS‘, nicht aber das Model ‚HM-Sec-WDS-2‘. Bei einzelnen anderen Produkten ist mir das gleiche aufgefallen. Müssen die Modelle mit ‚-2‘ im Namen separat ergänzt werden, oder erkennt das Skript den Wassermelder sowohl mit als auch ohne ‚-2‘ im Namen, also nur über Namensteil ‚HM-Sec-WDS‘?

    Wie verhält sich das Ganze mit dem HM Funk-Rauchwarnmelder ‚HM-Sec-SD-2‘. Dieser taucht in der Liste ebenfalls nicht auf. Im Gegensatz zu allen anderen Teilnehmern hat dieser fest verbaute 3 V Lithium-Batterien an Board. Muss die Geräteliste um den Rauchwarnmelder ergänzt werden, oder funktioniert die Batterie tauschen Meldung nicht mit diesem Gerät.

    Gruß Sebastian

    1. Hallo Sebastian,

      alle HM-Komponenten im Gewerk „Batterie betrieben“ werden durch dieses Skript ausgewertet. Auch die Rauchmelder mit der 10-Jahresbatterie. Bei nicht aufgeführten HM-Komponeten wird allerdings als Batterietyp „unbekannt“ ausgegeben. Wenn du die fehlenden HM-Komponenten bei den Batterietypen mit erfasst, wird dann der korrekte Batterietyp ausgegeben.

      Gruß Erhard
      du kannst die fehlenden Komponenten einfach in das Script aufnehmen.

      1. Hallo Erhard,

        danke für die Erklärung, im Nachhinein wird’s klar wenn man sich das Skript nochmal ansieht…

        Gruß Sebastian

  36. Hallo Herr Simdorn,

    erst einmal ein herzliches Dankeschön für Ihre Anleitung. Ich bin neu und noch in den Anfängen beim HM programmieren. Ich habe Ihre Batteriewarnung umgesetzt und funktioniert auch tadellos. Denoch habe ich eine Frage: Gibt es eine Möglichkeit, dass nur eine Email verschickt wird, wenn auch eine Batterie leer ist?

    Weiter habe ich an der Garage einen Neigungssensor. Können Sie mir sagen, wie ich mich per Email informieren lassen kann, wenn das Garagentor länger als 60 Minuten offen ist, welche dann auch jede Stunde gesendet wird, biss das Tor wieder zu ist . Weiter hätte ich in der Mail gerne die Information, wie lange das Tor schon geöffnet ist. Ist so etwas umsetzbar?

    Über Ihr Feedback und eventuelle Hilfe wäre ich dankbar.

    Grüße Andreas

    1. Hallo Herr Fischer,

      es ist durchaus sinnvoll, dass die E-Mail jeden Tag verschickt wird. Somit wird sichergestellt, dass im Bedarfsfall das Benachrichtigung-Skript auch wirklich funktioniert.

      Zum Neigungssensor und einer entsprechenden Benachrichtigung: Die Lösung finden Sie in meinem Skript Fenster offen signalisieren.

      Gruß Erhard Simdorn

      1. Hallo Herr Simdorn,

        bei dem Skript wird aber in der Email nicht aufgeführt, wie lange das Fenster schon geöffnet ist – oder? Ist es möglich dies in der Email mit einzubinden?

        Grüße Andreas Fischer

        1. Hallo Herr Fischer,

          mit folgenden Skript-Zeilen können Sie die letzte Änderung des Sensors abfragen:

          string letzteAenderung = dom.GetObject("BidCos-RF.NEQ0754xxx:1.STATE").LastTimestamp().ToString("%d.%m.%y %H:%M Uhr");
          WriteLine(letzteAenderung);

          Bitte passen Sie dabei den Befehl „BidCos-RF.“ auf die Adresse Ihres Sensors an.

          Gruß Erhard Simdorn

  37. Hallo Erhard,

    zunächst einmal Danke für deine Scripte, Tutorials und Mühen die du in die Projekte steckst. Sowas ist großartig und ich (als Neuling) konnte hier schon einiges lernen.

    Aber leider will dein „Batterie leer“ Script nicht so wirklich in die Spur springen bei mir.
    Seit der bisher 2-monatigen Nutzung, in der ich jeden Abend einwandfrei die E-Mail „Keine Batterie muss gewechselt werden“ erhielt, hatte ich auch an zwei Fenstersensoren eine geringen Batterieladezustand gemeldet bekommen – allerdings nur wie üblich in der CCU2. Dein Script sagt mir stattdessen weiterhin, es sei alles in Ordnung.

    Erstmals hatte ich eine leere Batterie vor ca. 3-4 Wochen. Daraufhin habe ich deine Anleitung und die bei mir hinterlegten Programmierungen in der CCU 3, 4 und 5-fach gechecked. Das Script selbst habe ich sogar komplett neu 1:1 von dieser Seite kopiert. Alle Geräte mit Batterie – und vor allem die betroffenen mit geringem Ladezustand – sind im Gewerk „Batterie betrieben“. Dennoch bekomme ich nur die Meldung durch dein Script, das alles i.O. sei. Egal ob es automatisch abends durchläuft oder ob ich das Programm manuell ausführe.

    Da ich mehrfach überprüft habe, ob alles so eingestellt ist, wie es hier in deinem Tutorial steht und ich auch nichts auf eigene Faust abgeändert habe, weiß ich ehrlich gesagt nicht mehr weiter.

    Die Fensterkontakte sind die ganz normalen aus der HmIP Serie und ich als Zentrale nutze ich eine handelsüblich, unmodifizierte CCU2.

    Hast du noch eine Idee, was ich noch prüfen kann?

    Viele Grüße
    Markus

    1. Ergänzung:

      die zweite Situation mit geringem Batterialadezustand besteht im übrigen seit heute Morgen. Weshalb das Thema wieder auf den Tisch kam, ich nun noch einmal testen konnte – leider nach wie vor ohne Erfolg – und mich deswegen nun an die wende. 🙂

    2. Hallo Markus,

      ich habe keine IP-Komponenten in meiner HomeMatic-Installation, ich setze im Moment noch auf die bewährte Technik. Ich habe mich in den vergangenen Tagen mit dem Thema beschäftigt und habe einige Script erstellt, mit der solche Zustände kontrolliert werden können. Gib mir ein bisschen Zeit, dann werde ich diese Scripte mit einer entsprechenden Anleitung veröffentlichen. Mit diesen Skripten siehst du dann alle deine Komponenten mit all den wichtigen Daten und Zuordnungen.

      Gruß Erhard

      1. Ah ok. Ich bin davon ausgegangen, dass auch eine Prüfung der HmIP Geräte erfolgt, da diese auch bei der Bestimmung des „Batterie-Texts“ bereits hinterlegt sind.

        Zumindest sehe ich dort die HmIP-SWDO und auch die HmIP-eTRV (die Heizkörperthermostate, die ich auch im Einsatz habe).

  38. Hallo Erhard,
    meine CCU2 zeigt unter Servicemeldungen Leere Batterie für einen HM-CC-RT-DN.

    In Einstellungen und Geräte habe ich Low-Bat.-Schwelle 2.50 V
    Im Systemprotokoll sehe ich jedoch, Manu-Modus, Leere Batterie, Batteriestatus 2.60V.

    Was nun, der Batt-Status liegt über dem Low-Batt Wert und trotzdem leer?

    Das mal vorweg, denn ich habe das Problem, die Email-Meldung sagt:
    Prüfung des Ladestandes der Batterien vom 01.07.2018.
    Keine Batterie muss getauscht werden.

    Ich habe soeben nochmal das obige Script in das Programm kopiert und wie folgt angepasst.
    dom.GetObject(„CUxD.CUX2801001:2.CMD_EXEC“).State(„/etc/config/addons/email/email 03“);

    CUX2801001:2 weil CUX2801001:1 benutze ich für DutyCycle
    email 03 funktioniert ja, ich bekomme täglich die falsche Mail -Keine Batterie muss getauschtwerden

    Ich komme da nicht mehr weiter und hoffe auf Hilfe

    1. Hallo Gerd,

      bitte kontrolliere über „Status und Bedienung“/“Systemvariable“ wann die Systemvariable „Mailtext“ das letzte mal aktualisiert wurde.

      Gruß Erhard

  39. Ergänzung:
    Der HM-CC-RT-DN ist mit allen 6 Datenpunkten im Gewerke „Batterie betrieben“
    Die CCU2 habe ich auch neu gestartet, der Fehler bleibt.

    Gruß Gerd

  40. Danke Erhard,
    hatte deine Antwort zu spät gesehen.

    Letzte Aktualisierung: 02.07.2018 00:30:00
    also heute morgen wie im Programm gesetzt.

    Steht unter „Letzte Änderung“

    Gruß Gerd

  41. Problem gelöst

    Da momentan keine weitere Hilfe in Sicht ist habe ich folgendes Programm erstellt,
    (Bad ist der HM-CC-RT-DN mit leeren Batterien)
    und seit drei Tagen mit Erfolg getestet:

    Wenn…
    Geräteauswahl Bad bei Leere Batterie nur prüfen
    UND
    Zeitsteuerung
    Zeit: Zeitpunkt: 13:00 Uhr
    Serienmuster: täglich, jeden Tag
    Gültigkeitsdauer: Beginn: 03.07.2018, kein Enddatum
    zu Zeitpunkten auslösen

    Um 13:00 Uhr wird eine eMail versandt wenn Batterie(en) leer.

    Die Mail kommt nun seit 3 Tagen für das Bad.
    Das funktioniert gut, muss ich dann für alle Batteriegeräte mal erweitern.

    Danke an Erhard,
    da Kommentare z.Z. auf Freischaltung warten, denke ich, du bist evtl. in Urlaub.

    Gerd

    1. Hallo Gerd,

      ich war tatsächlich ein paar Tage unterwegs und konnte mich nicht um den Blog kümmern. Anscheinend hat eines der letzten Firmware-Updates für die CCU2 einiges intern geändert, so dass einige Scripte nicht mehr einwandfrei laufen. Ich habe mein „Batterie leer“-Script getestet, zum Glück läuft hier noch alles einwandfrei. Zum Testen hebe ich mir immer für jeden Gerätetyp einen Satz halbleere Batterien auf.

      Deine Lösung ist auch elegant, vielleicht werde ich sie testweise umsetzen und anschliessend veröffentlichen.

      Liebe Grüße Erhard

    2. Hallo Gerd,

      dein Problem hat mir keine Ruhe gelassen, da bei mir das Script einwandfrei funktioniert.
      Du kannst das Script folgendermaßen testen, dazu bitte eine Zeile mit einem Ausrufezeichen auskommentieren und eine neue Programmzeile einfügen:

      ! if ( (channel.State() == true) && (channel.Value() == true) ) {
      if ( 1 == 1 ) {

      Wenn du jetzt das Programm manuell aufrufst, solltest du eine Mail mit allen dem Gewerk „Batterie betrieben“ zugeordneten HomeMatic-Komponenten mit den jeweiligen Batterietypen erhalten. Somit kannst du überprüfen, ob die Komponenten auch wirklich vom Script kontrolliert werden!

      Über ein Feedback freue ich mich!

      Gruß Erhard

      1. Hallo Erhard,
        hallo Gerd,

        ich klink mich hier mal mit ein, da ich ja ein ganz ähnliches, wenn nicht sogar gleiches Problem habe.

        Ich habe daher die Änderung zum testen des Scripts bei mir mal vorgenommen und bekam daraufhin eine E-Mail mit all meinen Batterie-Geräte (die auch im Gewerk sind) und dahinter jeweils der Batterietyp aufgelistet, wenn er denn „bekannt gemacht wurde“ im Script.

        Da sind auch die Geräte mit dabei, bei denen ich letztens eine schwache Batterie hatte und es nicht über dein Script gemeldet bekam. Habe übrigens bei den Geräte die Batterie so lange nicht angerührt, bis sie komplett leer war bzw. das Gerät aus war, um zu testen ob es an einer bestimmten Schwelle lag oder so.

        Gruß
        Markus

        1. Hallo Markus,

          zunächst freut es mich, dass nach der Änderung des Scripts alle deine Komponenten aus dem Gewerk „Batterie betrieben“ aufgelistet wurden. Nun müssen wir herausfinden, warum die Meldungen über schwache Batterien nicht rechtzeitig gemeldet werden. Ich habe vergangenes Wochenende einige Test mit schwachen Batterien durchgeführt und es klappte einwandfrei. Es gibt wohl seit einiger Zeit eine Einstellung, mit der man Service-Meldungen automatisch löschen lassen kann. Diese Option habe ich bei mir deaktiviert, ich mache diesbezüglich in den kommenden Tagen weitere Tests.

          Gruß Erhard

          1. Vielen Dank für deine Hilfe und Mühen! 🙂

            Ich habe mal gerade bei mir in der Benutzerverwaltung innerhalb der CCU geschaut. Diese Funktion, die automatischen Servicemeldungen (Kommunikation gestört) zu bestätigen, ist bei mir nicht aktiv.

            Gruß
            Markus

          2. Guten Abend Markus,

            auf der Suche nach einer Lösung für dein Problem, habe ich im HomeMatic-Forum dieses Script von blackhole gefunden.
            https://homematic-forum.de/forum/viewtopic.php?f=31&t=31641&hilit=blackhole
            blackhole hat auch das Script „CCU – Protect“ geschrieben, das ich im meinem Beitrag „CCU2 absichern“ beschrieben habe.
            Dieses Script scheint mir sehr vielversprechend, ausserdem hat er auch schon HomeMatic-IP Komponenten berücksichtigt. Im Moment teste ich das Script, bei Erfolg werde ich meinen Blog-Beitrag entsprechend anpassen.

            Gruß Erhard

          3. Der Post von Blackhole liest sich sehr interessant.

            Ich bin gespannt, was du daraus machst bzw. wie du es ggf. integrierst. So lange halte ich erstmal noch die Füße still, bevor ich alles „verbastelt“ habe 🙂

            Gruß
            Markus

          4. Hallo Markus,

            ich habe das Programm von blackhole seit einer Woche laufen, bisher alles perfekt. Allerdings konnte ich noch keine einzige „Batterie leer“ Meldung erzeugen. Ausgerechnet jetzt will keine Batterie schlapp machen. Zumindest werden auch IP-Kompoenenten überwacht, habe mir jetzt extra eine IP-Komponente zum Testen zugelegt. 😉

            Gruß Erhard

  42. Hallo Erhard,

    hast du zwischenzeitlich neue Erkenntnisse sammeln könne mit dem anderen Script?
    Oder ist dir noch nicht der „Saft“ bei deinen Geräten ausgegangen 🙂

    Gruß
    Markus

    1. Hallo Markus,

      gerade gestern hatte ich die erste „Battery low“-Meldung mit dem neuen Skript, klappt perfekt und eigentlich besser als das bisher publizierte Skript.
      Ich habe bald Urlaub und werde dann die Dokumentation anpassen bzw. austauschen, sollte in den kommenden 14 Tagen erledigt sein.
      Anbei eine Battery-Low-Meldung vom neuen Skript:
      Batterie leer - Meldung per Telegram
      Die Meldung wurde das erste Mal um 13.58 Uhr ausgegeben, dann noch zweimal und abends habe ich die Batterien getauscht.

      Gruß Erhard

      1. Super das es geklappt hat und zudem noch etwas besser ist! Ich freu mich darauf, wenn du es überarbeitet hast und ich es dir gleichtun kann 🙂

        Viele Grüße
        Markus

        1. Hallo zusammen,

          ich habe das Skript mal um „HmIP-SAM“ ergänzt und zum testen die Low-Bat.-Schwelle auf 2.95 gesetzte, laut Protokoll hat er 2.90. Eigentlich hätte das Skript den HmIP-SAM jetzt melden sollen oder habe ich was übersehen?

          string lr3 = „HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP\tHM-Sec-SCo\tHM-PB-2-WM55-2\tHmIP-SWDO-I\tHMIP-WRC2\tHmIP-RC8\tHmIP-WRC6\tHmIP-KRC4\tHmIP-STHD\tHmIP-STH\tHmIP-STHD\tHmIP-SAM“;

          Gruß
          Michael

          1. Hallo Michael,

            das Script unterstütz die HmIP-Komponenten anscheinend nicht mehr zuverlässig. Ich selbst nutze keine HmIP-Komponenten, deshalb ist mir das bisher noch nicht aufgefallen.

            Inzwischen nutze ich ein neues Script für die Überwachung der Batteriezustände aus dem HomeMatic-Forum von blackhole, das Script findest du hier.

            Ich hoffe, ich komme bald dazu einen detaillierten Beitrag zur Implementierung zu schreiben. Im Moment fehlt mir leider die Zeit dazu.

            Gruß Erhard

  43. Hallo,
    das Script ist gut. Kann man das auch so machen das nur wenn es eine Leere Batterie im System gibt die Mail verschickt wird?

    Gruß
    Martin

    1. Hallo Martin,

      ich nutze inzwischen ein neues Script für die Überwachung der Batteriezustände aus dem HomeMatic-Forum von blackhole, das Script findest du hier.

      Ich hoffe, ich komme bald dazu einen detaillierten Beitrag zur Implementierung zu schreiben. Im Moment fehlt mir leider die Zeit dazu.

      Gruß Erhard

  44. Hallo Erhart
    Ich habe heute erfolgreich nach deiner Anleitung alles installiert und bin begeistert.
    Alles funktioniert .Ich hatte zwar einige Probleme die ich aber über Lösungen in deinem
    Block beseitigen konnte .Eine Frage habe ich trotzdem noch . Was muss jetzt in der Zeile
    40 von deinem Script stehen true oder false.?
    Danke !!
    MfG.Torsten

Kommentare sind geschlossen.