Pushnachrichten mit Pushover an Android bzw. iOS

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
JPS
Beiträge: 1007
Registriert: 07.08.2010, 22:51
Kontaktdaten:

Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von JPS » 12.01.2013, 16:10

Ich versuche, dieses Thema parallel auf meiner Hausautomations-Internetseite aktuell zu halten.

Neben den bekannten Apps wie z.B. "Notify my Android" oder "Prowl" kann man von der CCU auch Pushnachrichten über Pushover (https://pushover.net) an Android- bzw. Apple-Geräte senden.

Pushover bring bereits einige nützliche PlugIns mit, z.B. ein E-Mail Gateway. Darüber hinaus ergeben sich durch die direkte IFTTT "if this, then that" (https://ifttt.com) Implementierung sehr interessante Möglichkeiten. Auch die Kombination mit "Tasker" soll (über Umwege) möglich sein, das habe ich jedoch bisher nicht getestet.

Falls jemand Pushover für die Benachrichtigung aus der CCU nutzen möchte, hier eine kurze Anleitung:

Pushover nutzt einen einfachen REST API, um die Nachrichten von den "Apps" zu empfangen und an die jeweiligen Geräte zu senden.

Zunächst muss man sich auf der Internetseite des Dienstes kostenlos registrieren und und erhält einen "User-Code". Anschließend ist (mindestens) eine sogenannte "App" zu erstellen. Der Name "App" ist an dieser Stelle ein wenig verwirrend, beim Erstellen einer solchen "App" genügt die Eingabe eines Namens, z.B. HomeMatic. Als Ergebnis erhält man einen Token-Code, der diese "App" identifiziert. Über jede "App" können monatlich derzeit 7500 Nachrichten kostenlos verschickt werden. Falls das nicht reicht, legt man einfach mehrere "Apps" an. Über optionale "Device Codes" lassen sich Nachrichten gezielt auf bestimmte Endgeräte pushen.

Darüber hinaus wird auf jedem Endgeräte die kostenpflichtige Pushover-App benötigt (derzeit für Android 3,05 €, Apple weiß ich nicht).

Beim Versand einer Nachricht sind folgende Parameter zwingend:

Code: Alles auswählen

token (required) - your application's API token
user (required) - the user key (not e-mail address) of your user (or you), viewable when logged into the dashboard
message (required) - your message 
Ergänzend können optionale Parameter definiert werden:

Code: Alles auswählen

device (optional) - your user's device identifier to send the message directly to that device, rather than all of the user's devices
title (optional) - your message's title, otherwise uses your app's name
url (optional) - a supplementary URL to show with your message
url_title (optional) - a title for your supplementary URL
priority (optional) - set to "1" to display as high-priority and bypass quiet hours, or "-1" to always send as a quiet notification
timestamp (optional) - set to a Unix timestamp to have your message show with a particular time, rather than now
sound (optional) - set to the name of one of the sounds supported by device clients to override the user's default sound choice 
Das Versenden der Nachricht erfolgt über einen POST Aufruf über die folgende URL: http://api.pushover.net/1/messages.json

Hierzu verwende ich CURL, das originär nicht auf der CCU vorhanden ist. Wie es installiert wird steht hier: http://homematic-forum.de/forum/viewtop ... t=8#p35326, wobei man sich den ersten Punkt (Installation von SSH/Dropbear) auch sparen und CURL ohne SSH über Telnet installieren kann.

Nachdem CURL erfolgreich installiert wurde, kann man bereits über die Kommandozeile der CCU (z.B. über PuTTY) erste Testnachrichten senden, indem man nacheinander folgende Befehle eingibt, wobei natürlich die eigenen Werte für "APP_TOKEN" und "USER_KEY" einzugeben sind:

Code: Alles auswählen

curl -s \
  -F "token=APP_TOKEN" \
  -F "user=USER_KEY" \
  -F "message=hello world" \
  http://api.pushover.net/1/messages.json
Aus der CCU heraus erfolgt der Aufruf z.B. mit einen kleinen Script über CuxD (analog geht es natürlich auch über SystemExec):

Code: Alles auswählen

string nachricht = "Hallo Welt";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("curl -s -d token=APP_TOKEN -d user=USER_KEY -d message='"#nachricht#"' http://api.pushover.net/1/messages.json");
Für priorisierte Nachrichten (rot hinterlegt und Umgehen der Ruhezeiten) muss vor der URL der Parameter

Code: Alles auswählen

-d priority=1
ergänzt werden.

Wenn es funktioniert, schaut es in etwa so aus...
Screenshot_forum.png
Hier ein Beispiel zum Pushen des Ergebnisses der Batterieprüfung:

Code: Alles auswählen

! Alle Batteriebetriebenen Geräte müssen in folgendem Gewerk sein:
var myAssembly = dom.GetObject("Batterie betrieben");
! 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";
string lr44 = "HM-Sec-SC\tHM-Sec-RHS";
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";
string lr3 = "HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP";
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";
}
}
! Text zusammensetzen
text = text # "-> " # item.Name() # " vom Typ " # batlink # ",  ";
! Counter erhöhen (Anzahl leerer Batterien)
counter = counter + 1;
}
}
! Mind. eine leere Batterie gefunden?
if ( counter > 0 )
{
! Push-Text zusammensetzen
string MailText;
string sDate = system.Date("%d.%m.%Y");
MailText = "Die Pruefung des Ladestandes der Batterien vom " # sDate # " hat ergeben: ";
MailText = MailText # "Der Ladezustand folgender Batterien ist niedrig: " # text;
MailText = MailText # "Bitte die Batterien zeitnah austauschen.";
! Push-Variablen initialisieren
string teilstr;
string sendmail = "";
! Push-Text erstellen (Wörter am Leerzeichen trennen)
foreach(teilstr, MailText.Split(" "))
{
sendmail = sendmail # "+" # teilstr;
}
! Eigentliche Nachricht absenden
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("curl -s -d token=APP_TOKEN -d user=USER_KEY -d message='"#sendmail#"' -d sound=pushover http://api.pushover.net/1/messages.json");
}
Hinweis: Bei Verwendung der CCU2 funktioniert dieser Weg mit CURL offensichtlich nicht mehr. Der CURL lässt sich zwar installieren, läuft dann aber nicht.

Alternativ kann man jedoch bei CCU2 und CCU1 den CURL verwenden, der seit einiger Zeit im CUxD enthalten ist. Hierzu muss der CUxD installiert sein und in den Skripten der Aufruf für Pushover gegenüber oben wie folgt geändert werden...

streiche:
setze:

Code: Alles auswählen

LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl
...also z.B. so...[/b]

Code: Alles auswählen

string nachricht = "Hallo Welt";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=APP_TOKEN -d user=USER_KEY -d message='"#nachricht#"' http://api.pushover.net/1/messages.json");
Zuletzt geändert von JPS am 27.12.2013, 00:34, insgesamt 3-mal geändert.
SMART WOHNEN by sTeRn AV
Meine Lösungen, um das Leben zuhause "smarter" zu machen.


Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Tobias78
Beiträge: 1450
Registriert: 27.06.2010, 01:01
Wohnort: Braunschweig

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von Tobias78 » 12.01.2013, 21:12

Hallo JPS,
vielen Dank für diesen interessanten Beitrag.
Als exzessiver Prowl Nutzer habe ich mich auch gleich daran gemacht und versucht, die Vorteile und Nachteile zu Prowl herauszufinden.

Pro Pushover:
- iftt (klingt interessant, habe ich bisher nicht genutzt
- Statt 4 Sounds stehen 15 Sounds zur Verfügung und können mit jeder Meldung variiert werden
- Icons können für jede Meldung vergeben werden (stimmt das?)
- Priorisierte Meldungen werden dauerhaft farbig hervorgehoben

Contro Pushover:
- Meldungen können nicht mehr per URL Aufruf verschickt werden, sondern CURL ist zwingend erforderlich (?)

Bitte korrigiere mich, wenn ich falsch liege.

Frage: Ist Curl ähnlich "instabil" bei mehrfachaufrufen wie die System.Exec, oder hat das beides nichts miteinander zu tun? Können eigentlich auch Bilder mitverschickt werden? Das wäre dann echt das "Killer-Feature".

Gruß, Tobias.
--------------------------------------------
Im Einsatz und empfehlenswert:
RaspberryMatic,IO.Broker, Homeputer Studio; CuXD; PocketControl, HomeStatus, Robonect, Alexa, io.Broker
------------------------------------------

Benutzeravatar
JPS
Beiträge: 1007
Registriert: 07.08.2010, 22:51
Kontaktdaten:

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von JPS » 12.01.2013, 22:09

Tobias78 hat geschrieben:- iftt (klingt interessant, habe ich bisher nicht genutzt
IFTT, ist wirklich ziemlich cool, man kann damit über eine simple "Wenn-Dann-Logik" alle möglichen Online-Dienste und Smartphone-Funktionen von einander abhängig automatisieren, z.B. WENN [es morgen schneit], DANN [sende mir eine Pushover Mitteilung, SMS, Mail oder was auch immer].
Tobias78 hat geschrieben:- Statt 4 Sounds stehen 15 Sounds zur Verfügung und können mit jeder Meldung variiert werden
Ja genau, durch den Parameter "sound" (wenn ich richtig gezählt habe, sind es sogar 16 verschiedene Sounds)
Tobias78 hat geschrieben:- Icons können für jede Meldung vergeben werden (stimmt das?)
nicht ganz, für jede "Application" kannst du dir auch ein eigenes Icon hoch laden, das immer dann erscheint, wenn du Nachrichten über das entsprechende Token dieser "Application" versendest. Ich nutze derzeit die drei "Applications" MITTEILUNG, WARNUNG und ALARM. Theoretisch kannst du dir aber für jede Nachricht eine eigene "Application" anlegen, dann hättest du auch für jede Nachricht ein eigenes Icon.
Tobias78 hat geschrieben:- Priorisierte Meldungen werden dauerhaft farbig hervorgehoben
Ja, rot hinterlegt, wie auf dem Screenshot oben gezeigt.
Tobias78 hat geschrieben:- Meldungen können nicht mehr per URL Aufruf verschickt werden, sondern CURL ist zwingend erforderlich (?)
Gemäß der Beschreibung lassen sich Meldungen über eine Mail-Adresse, C#, Go, Lua, Node.js, Perl, PHP, Python, Ruby, sowie über eine Windows- oder Unix-Kommandozeile verschicken.
Ich wollte nicht den Umweg über den Mailversand gehen und entschied mich bei der Umsetzung für die Unix-Kommandozeilen-Variante, umgesetzt über CURL.
Möglicherweise lassen sich über die anderen Verfahren einfachere Aufrufe erzeugen, vielleicht auch per URL Aufruf, da müsste vielleicht mal ein Experte ran.
Näheres dazu findest du hier: https://pushover.net/faq
Tobias78 hat geschrieben:Frage: Ist Curl ähnlich "instabil" bei mehrfachaufrufen wie die System.Exec, oder hat das beides nichts miteinander zu tun?
CURL wird über SystemExec (aus den bekannten Gründen nicht so optimal) oder über CUxD (wie in den Beispielen gezeigt) aufgerufen. Ich habe heute alle meine CCU-Programme, die Mails verschicken, um die Pushover-Zeile mit (CUxD) ergänzt und dabei zum Testen über die verschiedenen "Applikations" haufenweise unmittelbar hintereinander Mitteilungen verschickt, Probleme mit der Stabilität der CCU habe ich dabei nicht bemerkt.

Nett ist in diesem Zusammenhang auch die Statistik-Funktion...
Statistik.jpg
Tobias78 hat geschrieben:Können eigentlich auch Bilder mitverschickt werden?
Soweit bisher weiß nicht (ich kenne den Dienst aber auch erst seit drei Tagen :wink:), außer natürlich die Icons aber die sollen max. 75x75 groß sein. Vielleicht geht hier aber auch was mit IFTTT?
Zuletzt geändert von JPS am 13.01.2013, 00:41, insgesamt 1-mal geändert.
SMART WOHNEN by sTeRn AV
Meine Lösungen, um das Leben zuhause "smarter" zu machen.


Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

DrTob
Beiträge: 3408
Registriert: 29.10.2010, 08:24

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von DrTob » 13.01.2013, 00:28

hab's gerade mal ausprobiert. Funktioniert gut. Da ich keine Lust hatte mir CURL auf der CCU zu installieren, habe ich mir schnell einen PHP-"Proxy" geschrieben, über das Aufrufe dann über wget funktionieren.

(z.B.: http://webserver/pushover.php?message=E ... d=pianobar)

Code: Alles auswählen

<?
$default_token		= "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$default_user		= "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

$token 		= $HTTP_GET_VARS["token"];
$user	 	= $HTTP_GET_VARS["user"];
$message 	= $HTTP_GET_VARS["message"];
$device 	= $HTTP_GET_VARS["device"];
$title 		= $HTTP_GET_VARS["title"];
$url 		= $HTTP_GET_VARS["url"];
$url_title 	= $HTTP_GET_VARS["url_title"];
$priority 	= $HTTP_GET_VARS["priority"];
$timestamp 	= $HTTP_GET_VARS["timestamp"];
$sound 		= $HTTP_GET_VARS["sound"];

if (!isset($token)) $token = $default_token;
if (!isset($user)) $user = $default_user;

$postfields = array("token" => $token,
					"user" => $user,
					"message" => $message
					);

if (isset($device)) $postfields["device"] = $device;
if (isset($title)) $postfields["title"] = $title;
if (isset($url)) $postfields["url"] = $url;
if (isset($url_title)) $postfields["url_title"] = $url_title;
if (isset($priority)) $postfields["priority"] = $priority;
if (isset($timestamp)) $postfields["timestamp"] = $timestamp;
if (isset($sound)) $postfields["sound"] = $sound;

curl_setopt_array($ch = curl_init(), array(
			CURLOPT_URL => "https://api.pushover.net/1/messages.json",
			CURLOPT_POSTFIELDS => $postfields
			)
	);
curl_exec($ch);
curl_close($ch);
 ?> 
Zuletzt geändert von DrTob am 14.01.2013, 21:43, insgesamt 1-mal geändert.

grissli1
Beiträge: 2232
Registriert: 22.06.2012, 17:46
Wohnort: Tirol/Austria

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von grissli1 » 13.01.2013, 11:52

Hi,
DrTob hat geschrieben:hab's gerade mal ausprobiert. Funktioniert gut. Da ich keine Lust hatte mir CURL auf der CCU zu installieren, habe ich mir schnell einen PHP-"Proxy" geschrieben, über das Aufrufe dann über wget funktionieren.

(z.B.: http://webserver/pushover.php?message=E ... d=pianobar)
und wo hast du deinen PHP-"Proxy" laufen???

Viele Grüße
Chris
System: RaspberryMatic 2.31.25.20180225 auf RPi3, ReverseProxy auf RPi3, mehrere Harmony Hubs

DrTob
Beiträge: 3408
Registriert: 29.10.2010, 08:24

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von DrTob » 13.01.2013, 13:02

Der läuft auf meinem Webserver.

Benutzeravatar
JPS
Beiträge: 1007
Registriert: 07.08.2010, 22:51
Kontaktdaten:

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von JPS » 20.01.2013, 13:41

Ich wurde per PN darum gebeten, die Bildchen aus dem o.a. Screenshot zur Verfügung zu stellen, bitteschön...
Icon HM.png
Icon HM.png (6.58 KiB) 34148 mal betrachtet
Icon HM_Warnung.png
Icon HM_Warnung.png (6.64 KiB) 34148 mal betrachtet
Icon HM_Alarm.png
Icon HM_Alarm.png (6.69 KiB) 34148 mal betrachtet
Die Basisbilder sind von hier...
http://icons.mysitemyway.com/

Und falls jemand WebMatic nutzt,
...die Farben von diesem Set passen hervorragend... :wink:
http://icons.mysitemyway.com/category/m ... are-icons/
SMART WOHNEN by sTeRn AV
Meine Lösungen, um das Leben zuhause "smarter" zu machen.


Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Tobias78
Beiträge: 1450
Registriert: 27.06.2010, 01:01
Wohnort: Braunschweig

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von Tobias78 » 26.01.2013, 20:00

Hallo JPS,
ich würde gern Pushover und Curl nun auch verwenden. Das meiste hat auch funktioniert: Bei Curl --help über Telnet kommt die Hilfe...
Ich bekomme nur partout nichts über ein Skript gesendet.
Mein CuXD Gerät hat eine etwas andere Nummer welche ich angepasst habe:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State("curl -s -d token=UN3mC5SJ02KQ2FfqVZgagDtlk7hXXX -d user=3C4rKlpmGDitQicFgeeHmE7M1pGXXX -d message='"Test"' http://api.pushover.net/1/messages.json");
dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
Du verwendest statt CMD_SETS CMD_EXEC. Was ist denn richtig?

Die Datei curl.trace bleibt bei 0 byte, also wird wahrscheinlich CURL garnicht erst gestartet...

Gruß, Tobias.
--------------------------------------------
Im Einsatz und empfehlenswert:
RaspberryMatic,IO.Broker, Homeputer Studio; CuXD; PocketControl, HomeStatus, Robonect, Alexa, io.Broker
------------------------------------------

grissli1
Beiträge: 2232
Registriert: 22.06.2012, 17:46
Wohnort: Tirol/Austria

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von grissli1 » 26.01.2013, 22:03

Hi,

das kann nicht funktionieren, so wie du das eingegeben hast.
Bitte einfach so nutzen, wie es angegeben ist. Dann funktioniert es auch.

Code: Alles auswählen

string nachricht = "HIER DEN GEWUENSCHTEN TEXT EINTRAGEN";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("curl -s -d token=APP_TOKEN -d user=USER_KEY -d message='"#nachricht#"' http://api.pushover.net/1/messages.json");
Hier nur mehr den TEXT, die Nummer vom CUxD Gerät, den APP_TOKEN und den USER_KEY anpassen. Sonst nichts!

Viele Grüße
Chris
System: RaspberryMatic 2.31.25.20180225 auf RPi3, ReverseProxy auf RPi3, mehrere Harmony Hubs

Benutzeravatar
JPS
Beiträge: 1007
Registriert: 07.08.2010, 22:51
Kontaktdaten:

Re: Pushnachrichten mit Pushover an Android bzw. iOS

Beitrag von JPS » 26.01.2013, 22:21

@ Tobias 78
Um das Problem einzugrenzen...

1. Werden Nachrichten empfangen, die du über https://pushover.net/ (Send Notification) sendest?

2. Werden Nachrichten empfangen, die du über den Pushover-MailService, also an "Your User Key@api.pushover.net", sendest?

...dann funktioniert schon mal der Pushover-Dienst.

3. Wenn du über Telnet nacheinander die folgenden Befehle eingibst (nach jeder Zeile "Enter"), wird dann die Nachricht gepusht?

Code: Alles auswählen

curl -s \
  -F "token=APP_TOKEN" \
  -F "user=USER_KEY" \
  -F "message=hello world" \
  http://api.pushover.net/1/messages.json
...dann funktioniert auch CURL.

4. Gib dann mal...

Code: Alles auswählen

string nachricht = "Hello World";
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("curl -s -d token=UN3mC5SJ02KQ2FfqVZgagDtlk7hXXX -d user=3C4rKlpmGDitQicFgeeHmE7M1pGXXX -d message='"#nachricht#"' http://api.pushover.net/1/messages.json");
...unter Script testen ein und drücke auf Ausführen (nicht vergessen, die letzten drei Stellen wieder einzutragen. Bei mir habe ich es gerade geprüft (allerdings mit "CUxD.CUX2801001:1.CMD_EXEC").State"), funktioniert.

Falls es bei dir nicht klappt, geht es über SystemExec?

Code: Alles auswählen

string stdout;
string stderr;
string nachricht = "Hello World";
system.Exec ("curl -s -d token=UN3mC5SJ02KQ2FfqVZgagDtlk7hXXX -d user=3C4rKlpmGDitQicFgeeHmE7M1pGXXX -d message='"#nachricht#"' http://api.pushover.net/1/messages.json", &stdout, &stderr);
Wenn ja, liegt's wohl , am CUxD.

Viel Erfolg
SMART WOHNEN by sTeRn AV
Meine Lösungen, um das Leben zuhause "smarter" zu machen.


Verwendung meiner Hinweise und Skripte auf eigenes Risiko | Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“