Batteriewarnung für Homematic-Geräte per Pushover

Bei meinen Smart Home Geräten habe ich darauf geachtet, überall wo es möglich ist, netzbetriebene Geräte zu verwenden. Da es aber häufig nicht anders geht, kommen viele batteriebetriebene Geräte zum Einsatz- z.B. Fensterkontakte und Heizkörperthermostate. Wenn die Batterie eines Geräts zu Neige geht, bekommt man dies zunächst nicht mit- es gibt aber einfache Möglichkeiten dafür. Ich zeige hier, wie man sich in solchen Fällen von FHEM per Pushover Nachricht informieren lassen kann.

HinweisFür dieses Tutorial ist ein installiertes und lauffähiges FHEM System sowie Grundkenntnisse über die FHEM-Mechanismen notwendig. Hierauf wird in diesem Tutorial nicht näher eingegangen. Evtl. werden diese Grundlagen in späteren Posts erläutert.
Weiterhin ist ein eingerichteter Pushover Dienst notwendig. Dies wurde bereits in einem anderen Post von mir beschrieben.

Grundsätzlich sendet jedes batteriebetriebene Homematic-Gerät einen Batteriestatus. Manche Geräte (wie Heizkörper- und Wandthermostate) senden sowohl einen Status (ok/low), als auch einen Spannungswert (z.B. 3.0V). Andere Geräte (z.B. Fensterkontakte) senden nur den Status. Für eine Batterieüberwachung ist es ausreichend, auf den Status zu reagieren. Da dies für alle batteriebetriebenen Homematic-Geräte passt, ist es auch universeller.

Man könnte sich nun ein notify erstellen, welches sofort eine Nachricht verschickt, wenn der Status eines Geräts sich auf low ändert. Dies hatte ich auch längere Zeit so in Betrieb. Allerdings war ich damit nicht zufrieden, denn man bekommt dann zu allen möglichen Zeiten eine Nachricht und vergisst dann häufig darauf zu reagieren, z.B. weil man unterwegs ist.

Da ich festgestellt habe (getestet mit Fensterkontakten, Wandthermostaten und Heizkörperthermostaten), dass die Geräte nach dem Statuswechsel auf low noch locker 1-2 Wochen (teilweise noch länger) laufen, habe ich mich darauf beschränkt, den Status einmal die Woche  zu überprüfen, und dann eine „Sammel-Nachricht“ für alle Geräte zu schicken, die zu diesem Zeitpunkt den Batteriestatus „low“ haben. Dies wird nun im folgenden beschrieben.

Da die Überprüfung immer zu einem festen Zeitpunkt stattfinden soll, eignet sich ein at am besten dafür. Dies sieht bei mir so aus:

define homematicBatteryCheck at *20:00:00 { if($wday==0) { homematicBatterySummary()} }

Dieses at sorgt dafür, dass jeden Sonntag um 20:00 die Funktion homematicBatterySummary aufgerufen wird.

Diese Funktion muss natürlich noch erstellt werden. Dies macht man am besten in der Datei 99_myUtils.pm, und sieht bei mir wie folgt aus:

sub homematicBatterySummary()
{
	my @monitored = devspec2array("TYPE=CUL_HM");
	my $msgText = "";
	my $numberOfDevices = 0;
	
	foreach(@monitored) 
	{
		my $state = ReadingsVal($_, "battery", "ok");
		
		if($state ne "ok")
		{
			$msgText .= AttrVal($_,"alias",$_)." ";
			$numberOfDevices++;
		}
	}
	
	if($numberOfDevices)
	{
		sendAdminNotification("Batteriewarnung für $numberOfDevices Gerät(e): $msgText", "Batteriestatus");
	}
}

Kurze Erläuterung zum Code: Zunächst werden alle Geräte vom Typ CUL_HM in ein Array geladen – dies sind alle Homematic Geräte. Dann wird von jedem Gerät im Array das Reading „battery“ gelesen. Als Default wird „ok“ zurückgegeben. Dies ist z.B. dann der Fall, wenn das Gerät kein solches Reading hat- z.B. weil es ein netzbetriebenes Gerät ist. Wenn der Status nicht „ok“ ist, dann wird der Name des Geräts an einen String angehängt und die Anzahl der Geräte, die Batterieprobleme haben, erhöht. Wenn mindestens ein solches Gerät gefunden wurde, wird schließlich eine Pushover Nachricht geschickt, die die Anzahl der Geräte und die Namen der Geräte enthält. Hierfür wird die Funktion sendAdminNotification verwendet, die ich im Post zum Pushover Dienst schon beschrieben habe.

Mit dieser Lösung bin ich bisher sehr zufrieden. Wenn es Geräte mit Batterieproblemen gibt, bekomme ich immer am Sonntag um 20:00 eine Info darüber. Da ich zu diesem Zeitpunkt in den allermeisten Fällen zuhause bin, kann ich die betroffenen Batterien auch sofort auswechseln.

7 Antworten auf „Batteriewarnung für Homematic-Geräte per Pushover“

  1. Ich hab die Funktion etwas angepasst. Jetzt wird in der Variablen $msgText alles gespeichert, inklusive „Status von „battery“ und die Ausgabe ist auf Telegram angepasst. Falls es jemand gut findet, einfach benutzen 😉

    sub homematicBatterySummary()
    {
    my @monitored = devspec2array(„TYPE=CUL_HM“);
    my $msgText = „“;
    my $numberOfDevices = 0;
    my $state = „“;

    foreach(@monitored)
    {
    my $state = ReadingsVal($_, „battery“, „ok“);

    if($state ne „ok“)
    {
    $msgText = (AttrVal($_,“alias“,$_)) .“ -> Batteriestatus: „. $state;
    $numberOfDevices++;
    }
    }

    if($numberOfDevices)
    {
    fhem („set ChatTelegramBot message Batteriewarnung für $numberOfDevices Gerät(e): $msgText“);
    }
    }

Schreibe einen Kommentar

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