Pushover Dienst in FHEM anlegen und flexibel nutzen

Wenn man sich mit dem Thema Smart Home beschäftigt, stellt sich recht schnell die Frage, wie man Benachrichtigungen über eingetretene Ereignisse versenden kann. Eine von vielen Möglichkeiten ist, einen Push-Dienst zu nutzen-damit lassen sich Nachrichten von der Smarthome-Zentrale an  Endgeräte wie Tablets oder Smartphones schicken.  Ich selbst habe mit dem Dienst „Pushover“ sehr gute Erfahrungen gemacht und zeige in diesem Artikel, wie man diesen in FHEM einrichtet. Weiterhin stelle ich eine Möglichkeit vor, wie man das Absetzen der Nachrichten so flexibel gestalten kann, dass man ohne großen Aufwand auch auf einen anderen Dienst umsteigen kann.

Wer meinen Artikel über meine umgesetzten Smart Home Funktionalitäten gelesen hat, wird festgestellt haben, dass ich Pushover für verschiedenste Benachrichtigungen nutze- beispielsweise offene Fenster, zu hohe Luftfeuchtigkeit oder eine fertige Waschmaschine.

Hinweis: Fü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.

Wie immer muss zunächst ein entsprechendes Gerät in FHEM definiert werden, in diesem Fall ein Pushover-Gerät (siehe Commandref):

define <name> Pushover <token> <user>

Der Name kann frei gewählt werden. Um token und user zu bekommen, muss man sich bei Pushover registrieren und eine Anwendung anlegen. Die Werte findet man dann als „API token“ bzw. „User key“ in seinem persönlichen Bereich.

Die Nutzung des Dienstes ist kostenlos, es dürfen allerdings nicht mehr als 7500 Meldungen pro Monat verschickt werden- das sollte allerdings auch für umfangreiche Anwendungen mehr als ausreichend sein :).

Auf den Endgeräten, die Meldungen von Pushover erhalten sollen, muss die Pushover-App installiert werden. Diese kostet eine einmalige Gebühr (für iOs zum Zeitpunkt der Erstellung dieses Posts 4,99€) und ist ansonsten kostenlos und werbefrei. Die App ist für Android, Apple und auch für PCs verfügbar.

In der App sollte man zunächst einstellen, wie man die gesendeten Push-Nachrichten erhalten möchte. Die Nachrichten erscheinen dann entsprechend der gewählten Einstellungen auf dem Endgerät- beispielsweise als Banner-Popup. Je nach Endgerät sind verschiedene Einstellungen möglich.

Für alle Geräte, die benutzt werden sollen definiert man in seinem persönlichen Bereich der Pushover Webseite noch frei wählbare Namen- diese können dann später genutzt werden, um Nachrichten nur an bestimmte Geräte zu schicken.

Mehr ist zunächst nicht zu tun, im einfachsten Fall kann man nun folgendermaßen aus FHEM eine Nachricht an alle definierten Geräte verschicken:

set <name> msg "Meine erste Pushover Nachricht"

Es gibt noch diverse weitere Parameter die man angeben kann, diese entnimmt man am besten der Commandref. Eine Liste von Nachrichten aus dem Smart Home könnte dann beispielsweise so aussehen:

Per oben gezeigtem „set“ Befehl kann man die Nachrichten nun aus seinen umgesetzten Logik-Funktionen heraus aus FHEM absetzen. Ich empfehle allerdings, die Aufrufe in eigenen Funktionen in der Datei 99_myUtils.pm zu kapseln. Dies hat folgende Vorteile:

  • Die Aufrufe im eigenen Code sind wesentlich kürzer (je nach Anzahl der verwendeten Parameter)
  • Verwendete Parameter (wie Titel, Anzahl der Wiederholungen etc) müssen nicht jedes mal angegeben werden, und sind somit auch immer gleich bzw. konsistent
  • Möchte man auf einen anderen Push-Dienst umsteigen, muss man nicht die ganzen Aufrufe in seinem Code zusammensuchen, sondern kann einfach zentral den Inhalt der erstellen Funktionen ändern

Ich habe folgende Funktionen erstellt:

  • sendNotification: Sendet eine Nachricht mit optionalem Titel und normaler Priorität
  • sendAdminNotification: Sendet eine Nachricht mit optionalem Titel und mittlerer Priorität nur an bestimmte Geräte
  • sendAdminEmergenyNotification: Sendet eine Nachricht mit hoher Priorität nur an bestimmte Geräte. Die Nachricht muss am Endgerät bestätigt werden. Wenn dies nicht geschieht, wird die Nachricht einige Male neu gesendet und poppt somit immer neu am Endgerät auf

Meinen hierfür erstellten Code findet ihr im folgenden. Die verwendeten Gerätenamen („iPadBernd“, „iPhoneBernd“) müsst ihr natürlich an eure eigenen Gerätenamen anpassen, ebenso den Namen eures Pushover Geräts (ich habe „myPushover“ gewählt),

sub sendNotification($;$$$)
{
 my $msg = shift(@_);
 my $title = shift(@_);
 my $admin = shift(@_);
 my $emcy = shift(@_);
 
 $title = "" if !$title; 
 $admin = "false" if !$admin; 
 $emcy = "false" if !$emcy; 
 
 my $cmdTitle = $title ? "title='$title'" : "";
 my $cmdAdmin = "";
 
 if($admin eq "true")
 {
    if($emcy eq "true")
    {
       $cmdAdmin = "device=iPadBernd,iPhoneBernd priority=2 retry=300 expire=7200";
    }
    else
    {
       $cmdAdmin = "device=iPadBernd,iPhoneBernd priority=1";
    } 
 }
 
 fhem("set myPushover msg $msg $cmdTitle $cmdAdmin")
}

sub sendAdminNotification($;$$)
{
 my $msg = shift(@_);
 my $title = shift(@_);
 my $emcy = shift(@_);
 
 $title = 'Admin-Nachricht' if !$title;
 $emcy = 'false' if !$emcy;

 sendNotification($msg, $title, "true", $emcy); 
}

sub sendAdminEmergencyNotification($;$)
{ 
 my $msg = shift(@_);
 my $title = shift(@_);
 
 $title = 'Admin-Emergency-Nachricht' if !$title;
 
 sendAdminNotification($msg, $title, "true"); 
}

Um nun eine Notfall-Nachricht die bestätigt werden muss aus eurem Code abzusetzen, genügt folgender Aufruf:

sendAdminEmergencyNotification("Ein Notfall!");

Würde man direkt die Syntax des Geräts nutzen müssen man für denselben Effekt folgendes schreiben:

fhem("set myPushover Ein Notfall! device=iPadBernd,iPhoneBernd priority=2 retry=300 expire=7200");

Wie man sieht ist der Aufruf der erstellen Funktion wesentlich kürzer und man muss sich nicht jedes mal Gedanken machen wie die Parameter aussehen müssen. Außerdem ist dieser Aufruf unabhängig vom Push-Dienst, der intern letztendlich aufgerufen wird.

4 Antworten auf „Pushover Dienst in FHEM anlegen und flexibel nutzen“

  1. Kleiner Bug in der sendAdminNotification Sub:
    statt „sendPushoverNotification“ muss dort „sendNotification“ stehen.
    Sonst perfekt, hab’s gleich eingebaut und mein Notify rausgeschmissen 🙂

    Und noch einer:
    in der Sub steht sendAdminEmergenyNotification („c“ fehlt) sendAdminEmergencyNotification

    1. Hi Thomas,
      danke für deine Anmerkungen, du hast natürlich völlig recht, habe es gleich geändert. Bin gar nicht sicher wie das passiert ist, denn in meiner Produktivumgebung ist es richtig 🙂
      Aber egal, Haupsache es stimmt jetzt. Freut mich wenn die Routinen nützlich für dich sind!

  2. Noch ein Hinweis:

    Die eine Zeile in sendNotification sollte wie folgt verändert werden, dass auch Titel mit mehren Worten korrekt verarbeitet werden:

    my $cmdTitle = $title ? „title=’$title'“ : „“;

    1. Danke für den Hinweis, du hast recht. Ich wollte das gerade bei mir nachziehen und habe festgestellt dass ich es in meinem Produktivsystem schon genau so geändert hatte 🙂 Habe anscheinend vergessen das im Artikel zu aktualisieren, wird aber sofort nachgeholt.

Schreibe einen Kommentar zu Andi Friedrich Antworten abbrechen

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