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
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
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
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");
Code: Alles auswählen
-d priority=1
Wenn es funktioniert, schaut es in etwa so aus... 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");
}
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:
Code: Alles auswählen
curl
Code: Alles auswählen
LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl
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");