Motivation
Die nachfolgende Anleitung soll dazu dienen, Push-Nachrichten, die durch unterschiedliche WebUI-Programme bzw. -Skripte erzeugt wurden, durch ein zentrales Programm wahlweise mit den Push-Diensten
Pushover (iOS, Android sowie als Desktop-Variante für Safari, Chrome oder Firefox),
Pushsafer (iOS, Android, Windows Mobile, Windows Desktop sowie Chrome, Firefox) und/oder
Telegram (nahezu alle aktuellen OS)
zu verschicken. Zusätzlich können nun auch Anrufe per
CallMeBot (Anruffunktion über Telegram)
empfangen werden, die den Inhalt der Textnachrichten vorlesen. Da die Dauer der Anrufe aber auf 30 Sekunden beschränkt ist, macht es nur für relativ kurze Textnachrichten Sinn. Meine Empfehlung ist es daher, die CallMeBot-Anrufe auf kurze Warn- und Alarmmeldungen zu beschränken.
Im Folgenden werden das zentrale Push-Nachrichten-Programm kurz als zPNP und die darin enthaltenen zentralen Push-Nachrichten-Skripte als zPNS-Po, zPNS-Ps, zPNS-Tg und zPNS-Cmb bezeichnet.
Prowl und Pushalot werden nicht mehr unterstützt.
Warum das Ganze? Nun, hier mal eine Auflistung der Vorteile gegenüber dem Aufrufen der Push-Dienste in einzelnen Programmen und Skripten.
- Die Änderung von API-Keys muss nur noch an einer einzigen Stelle vorgenommen werden.
- Automatische UTF-8-Konvertierung von Sonderzeichen, Umlauten und Leerzeichen in den zPNS-xx.
- Deutliche Vereinfachung der das zPNP aufrufenden Skripte mit entsprechend vereinheitlichter Struktur.
- Zentrale Nutzerverwaltung für den Fall, dass Push-Nachrichten an mehrere Empfänger verschickt werden sollen.
- Automatisches Aufteilen von überlangen Push-Nachrichten in mehrere Teilnachrichten.
- Möglichkeit zum Versenden bestimmter Push-Nachrichten an einzelne Empfänger (nicht bei Priorität 2).
- Kontrolle darüber, welche Empfänger Push-Nachrichten ab welcher Prio empfangen sollen.
- Möglichkeit zur Auswahl einzelner Push-Dienste für unterschiedliche Ereignisse.
- Möglichkeit zur generellen Deaktivierung von Push-Nachrichten mit einer Priorität < 2.
- Möglichkeit zur Unterbindung identischer Push-Nachrichten innerhalb eines definierbaren Zeitfensters (nicht bei Priorität 2).
- Möglichkeit zum Bilderversand.
- Bitte auf alle Fälle vermeiden, den Inhalt von Systemvariablen auf der WebUI-Startseite anzuzeigen, wenn diese HTML-Tags enthalten.
- Wer Bedenken hinsichtlich der Verwendung von Leerzeichen, Umlauten oder Sonderzeichen in Systemvariablen-Namen hat, der sollte die Namen entsprechend ändern. Auf meiner CCU hatte ich damit in den zurückliegenden Jahren noch nie irgendwelche Probleme. Es kann aber natürlich z.B. diverse Addons für die CCU geben, die damit Probleme haben. Keine Probleme gab es bisher mit den folgenden Addons: SSH-keydir, Programmedrucken CCU2, XML-API und CUx-Deamon.
Voraussetzungen
Zusatzsoftware
Auf der CCU muss CUxD installiert und das Gerät "CUxD.CUX2801001:1.CMD_EXEC" eingerichtet sein. Hier eine Kurzanleitung zur Einrichtung des CUxD-Geräts:
- Unter CUxD-Gerätetyp das Gerät "(28) System-Exec" auswählen und den Rest am besten unverändert lassen (Seriennummer: 1, etc.).
- Anschließend auf "Gerät auf CCU erzeugen!" klicken.
- Danach in WebUI in den Posteingang für neue Geräte gehen und den neuen Gerätetyp bestätigen.
- Zur Sicherheit CCU neu booten.
Das zPNP
Das zPNP selbst ist sehr trivial. Bei mir enthält es im "Wenn"-Zweig lediglich eine Abfrage über den Status der CCU. Diese Abfrage kann man theoretisch aber auch weglassen. Grundsätzlich empfehle ich jedoch, kein Programm oder besser noch keinen Programmzweig auf der CCU ohne Bedingung zu erstellen, der nicht per Zeitmodul getriggert wird, weil dieses sonst bei jedem Neustart der CCU ausgeführt wird.
Der Name des zPNP ("CCU PRG Push-Nachrichten") ist sehr wichtig, weil er in den aufrufenden Skripten verwendet wird. Natürlich kann dieser auch individuell gewählt werden. Aber dazu später mehr. Die von mir gewählte Nomenklatur basiert auf der Einrichtung meiner eigenen CCU. Und dort habe ich z.B. sämtlichen Programmen den Zusatz "PRG", sämtlichen Systemvariablen den Zusatz "SV" und sämtlichen virtuellen Schaltern den Zusatz "VT" verpasst. Somit kann ich einem Gerät und einer dazu gehörenden Systemvariablen ansonsten identische Namen geben. Aber dies nur am Rand.
Unter "Aktivität" sind die gewünschten zPNS-xx sowie ein kleines, aber zwingend erforderliches Skript zPNP-Reset zum Setzen der Systemvariablen "CCU SV Push Text Ref" und zum Zurücksetzen einiger anderer Systemvariablen einzufügen.
Systemvariablen
Die benötigten Systemvariablen werden automatisch erzeugt, sofern nicht vorhanden. Die Namen der Systemvariablen können in den zPNS-xx nach eigenen Wünschen angepasst werden. Der Einfachheit halber gehe ich von den im nachfolgenden Code-Block des zPNS-xx verwendeten Namen aus.
Code: Alles auswählen
! +++++ Namen der zwingend benötigten Systemvariablen +++++
string svPushText = "CCU SV Push Text"; ! Text der aktuell zu übertragenden Push-Nachricht, Voreinstellung: "CCU SV Push Text"
string svPushTextRef = "CCU SV Push Text Ref"; ! Text der vorherigen Push-Nachricht als Referenz, Voreinstellung: "CCU SV Push Text Ref"
! +++++ Namen der optionalen Systemvariablen (auf "" setzen, wenn nicht benötigt) +++++
string svPushPrio = "CCU SV Push Prio"; ! Prioritäten der Push-Nachrichten, Voreinstellung: "CCU SV Push Prio"
string svPushService = "CCU SV Push Dienst"; ! Push-Dienste, Voreinstellung: "CCU SV Push Dienst"
string svPushImage = "CCU SV Push Bild"; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), Voreinstellung: "CCU SV Push Bild"
string svPushUserList = ""; ! Empfängerlist für die Push-Nachrichten (z.B. "CCU SV Push Empfängerliste"), Voreinstellung: ""
string svPushoverSound = "CCU SV Pushover Sound"; ! Sound der Nachricht (z.B. "CCU SV Pushover Sound"), Voreinstellung: "CCU SV Pushover Sound"
Zwingend erforderlich für den Betrieb des zPNPs sind die beiden Systemvariablen "CCU SV Push Text" und "CCU SV Push Text Ref". "CCU SV Push Text" enthält den aktuell zu übertragenden Textinhalt der Push-Nachricht. "CCU SV Push Test Ref" dient als Referenz und ist wichtig für die Möglichkeit zur zeitweisen Sperrung identischer Push-Nachrichten. Auch dazu später mehr.
Um das zPNP mit mehreren Push-Diensten betreiben und möglichst variabel steuern zu können, empfiehlt sich die zusätzliche Einrichtung der Systemvariablen "CCU SV Push Prio" und "CCU SV Push Dienst".
Die optionale Systemvariable "CCU SV Push Empfängerliste" ermöglicht das Versenden einzelner Push-Nachrichten gezielt an bestimmte Empfänger. ACHTUNG: Die Empfängernamen dürfen keine Leerzeichen enthalten, weil diese zur Trennung der Empfängerschlüssel dienen und entsprechend vom zPNS-xx abgefragt werden!
Damit die Systemvariablen automatisch erzeugt werden, muss das zPNP einmal per Klick auf den Start-Button unter "Status und Bedienung | Programme" ausgeführt werden. Dies bitte auch durchführen, wenn eine Systemvariable neu angelegt werden soll, weil sie vorher noch nicht genutzt wurde oder weil sie gelöscht wurde.
Die optionalen Systemvariablen werden automatisch gelöscht, wenn sie nicht mehr gesetzt sind. Auf diese Weise kann sehr schnell ersichtlich werden, wenn jemand irrtümlich beim Update auf eine neue Version eine vorher gesetzte Systemvariable nicht mehr gesetzt hat.
Die Systemvariable "CCU SV Push Prio" dient zum Setzen der Priorität der Push-Nachrichten. Pushover nutzt Prioritäten von -2 bis 2. Pushsafer, Telegram und CallMeBot arbeiten eigentlich nicht mit Prioritäten. Bei Pushsafer kann man verschiedene Sounds, Icons, Titel und Vibrationen setzen. Bei Telegram lassen sich den Prioritäten entsprechende Bots definieren, die dann mit unterschiedlichen Sounds und/oder Icons auf Push-Nachrichten hinweisen. Zur einheitlichen Nutzung des zPNPs habe ich mich entschieden, auch für Pushsafer, Telegram und CallMeBot die obigen Prioritäten zu verwenden.
Bei Pushsaver habe ich mich für folgende Werte für den Sound (s), die Vibration (v) und das Icon (i) entschieden:
Prio -2: s=0, v=1, i=4
Prio -1, 0: v=1, i=4
Prio 1: v=1, i=5
Prio 2: v=1, i=6
Für Telegram sollten gemäß den Erläuterungen in einem der nachfolgenden Postings entsprechende Bots angelegt werden. Zudem wird bei Prio -2 die Ausgabe von Tönen mit dem Parameter "disable_notification=1" unterbunden.
Für CallMeBot erfolgt bei einer Prio von -2 kein Anruf, wohingegen bei einer Prio von -1 bis 1 einmalig und bei einer Prio von 2 mit einer Wiederholung angerufen wird.
"CCU SV Push Dienst" erlaubt zum einen, gezielt einen bestimmten Push-Dienst in einem das zPNP aufrufenden Programm bzw. Skript auswählen zu können. Zum anderen kann die Systemvariable auch mit einer anderen App, wie z.B. pocketControl, gesetzt werden. Um das Versenden von Push-Nachrichten generell zu unterdrücken, wählt man den Eintrag "aus" bzw. dessen Listenpostion 0. Hierbei gilt aber zu beachten, dass Push-Nachrichten der Priorität 2 (Alarm) niemals unterbunden werden. Mehr dazu in einem nachfolgenden Posting zum Aufruf des zPNP. "CCU SV Push Dienst" wird automatisch mit den Namen der Pushdienste in der Reihenfolge der zPNS-xx gemäß zPNP gefüllt, wobei die beiden ersten Einträge für "aus" und "alle" reserviert sind. Es spielt also keine Rolle, wie die zPNS-xx sortiert sind. Selbst später kann die Sortierung geändert werden, ohne dass es eine Einschränkung in der Funktionalität gibt. Das fangen die zPNS-xx automatisch auf.
Für Pushover und Pushsafer können noch jeweils zwei weitere Systemvariablen eingerichtet werden. "CCU SV Pushover Sound" bzw. "CCU SV Pushsafer Sound" erlaubt es, zwischen 15 (Pushover) bzw. 27 (Pushsafer) verschiedenen Sounds bei der Übertragung von Pushover- bzw. Pushsafer-Nachrichten zu wählen. Telegram ermöglicht, wie gesagt, die Verwendung unterschiedlicher Sounds in Abhängigkeit von den Bots oder auch von definierten Gruppen.
Mit den Systemvariablen "CCU SV Pushover Gerät" bzw. "CCU SV Pushsafer Gerät" hat man zudem die Möglichkeit, Pushover- bzw. Pushsafer-Nachrichten gezielt an ein unter pushover.net bzw. in der Pushsafer App definiertes Gerät (Device) zu senden.
Die Systemvariable "CCU SV Pushover Titel" erlaubt die Vergabe eine Titels für Pushover-Nachrichten.
Versand von Bildern
Neben Texten können auch Bilder direkt über die CCU versendet werden. Dazu dient die optionale Systemvariable "CCU SV Push Bild", die wie die obigen Systemvariablen automatisch angelegt wird, wenn sie beim Aufruf des zPNP bzw. der zPNS-xx noch nicht angelegt war. In die Systemvariable "CCU SV Push Bild" wird mit dem aufrufenden Skript der Pfad inkl. Namen der zu übertragenden Bilddatei eingetragen. Wurde zum Beispiel eine Datei Bild.jpg in das tmp-Verzeichnis der CCU gespeichert, dann muss "CCU SV Push Bild" auf "/tmp/Bildname.jpg" gesetzt werden. Es ist aber auch möglich, direkt Pfade auf eine Webcam oder dergleichen zu setzen. Per CallMeBot können naturgemäß keine Bilder übertragen werden.
Es ist möglich, die Übertragung von Bildern mit
Code: Alles auswählen
! +++++ Verzögerung zum Versenden von Bildern in Sekunden +++++
integer pictDelay = 3;
Übertragene Bilder werden über das Skript zPNP-Reset standardmäßig automatisch gelöscht.
Code: Alles auswählen
! ++++++ Löschen eines zu übertragenden Bildes (nur wirksam, wenn svPushImage gesetzt) +++++
boolean deleteImage = true; ! true: Bild löschen, false: Bild nicht löschen
integer delay = 5; ! Verzögerungszeit in Sekunden (muss größer sein, als der in den zPNS-xx gesetze Verzögerungswert)
Das Löschen des Inhalts von "CCU SV Push Bild" ist wichtig, damit das gespeicherte Bild nicht bei jeder nachfolgenden Push-Nachricht mitgesendet wird.
Die zPNS-xx
Kommen wir zum wesentlichen Bestandteil des zPNP, den zPNS-xx. Es ist möglich, bis zu 100 Empfänger pro Push-Dienst zu definieren. Dazu gibt es eine so genannte Master-Liste, die die durch Leerzeichen getrennten Keys für jeden User enthalten. Jedem Key ist dabei ein Identifyer "Empfängerxx|" vorangetellt. Wenn man also nur einen Empfänger hat, trägt man jeweils nur einen Key "Empfänger1|+++key1+++" ein. Hat man zwei Empfänger, trägt man zwei Keys "Empfänger1|+++key1+++ Empfänger2|+++++key2+++++" ein, die durch ein Leerzeichen getrennt sind. Bei drei Empfängern sind es drei Keys und so weiter. Achtung, es darf nur ein einziges Leezeichen zwischen den Keys eingetragen sein. Hier mal ein Beispiel für Pushover mit drei Empfängern:
Code: Alles auswählen
! +++++ User-Daten +++++
! In den nachfolgenden Listen die User-Daten durch "Empfänger|" einleiten und durch EINEN Leerschritt voneinander trennen.
string keyList = "Walter|<Walters_API_Schluessel> Frida|<Fridas_API_Schluessel> Elvira|<Elviras_API_Schluessel>"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Walter|<Walters_HMinfo_API_Schluessel> Frida|<Fridas_HMinfo_API_Schluessel> Elvira|<Elviras_HMinfo_API_Schluessel>"; ! API-Schlüssel für Info-Meldungen. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMwarnungList = "Walter|<Walters_HMwarnung_API_Schluessel> Frida|<Fridas_HMwarnung_API_Schluessel> Elvira|<Elviras_HMwarnung_API_Schluessel>"; ! optionale API-Schlüssel für Warnmeldungen
string HMalarmList = ""; ! optionale API-Schlüssel für Alarmmeldungen
string prioMinList = "Frida|0 Elvira|1"; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "Empfänger01|-2 Empfänger02|0"
Code: Alles auswählen
! +++++ User-Daten +++++
! In den nachfolgenden Listen die User-Daten durch "Empfänger|" einleiten und durch EINEN Leerschritt voneinander trennen.
string keyList = "Walter|<Walters_API_Schluessel> Frida|<Fridas_API_Schluessel> Elvira|<Elviras_API_Schluessel>"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Frida|<Fridas_HMinfo_API_Schluessel> Walter|<Walters_HMinfo_API_Schluessel> Elvira|<Elviras_HMinfo_API_Schluessel>"; ! API-Schlüssel für Info-Meldungen. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMwarnungList = "Walter|<Walters_HMwarnung_API_Schluessel> Frida|<Fridas_HMwarnung_API_Schluessel> Elvira|<Elviras_HMwarnung_API_Schluessel>"; ! optionale API-Schlüssel für Warnmeldungen
string HMalarmList = Elvira|<Elviras_HMwarnung_API_Schluessel>""; ! optionale API-Schlüssel für Alarmmeldungen
string prioMinList = "Frida|0 Elvira|1"; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "Empfänger01|-2 Empfänger02|0"
Mit prioMinList definiert man die Prioritäten, ab denen die einzelnen Empfänger Push-Nachrichten erhalten sollen. Wird für einen Empfänger kein Wert definiert, erhält er automatisch sämtlich Push-Nachrichten aller Prioritäten.
Für CallMeBot sieht der Aufruf ähnlich aus. Hier muss man lediglich für die einzelnen Empfänger die in Telegram definierten CallMeBot-Telefonnummern eintragen. Ebenso kann man die Prioritäten setzen, ab denen jeder Empfänger einen Anruf erhalten soll. Auch kann mit der lokalen Variablen "language" die Sprache und die Stimme gemäß angegebenen Link verändert werden. Mit der lokalen Variablen "filler" kann der Textnachricht ein beliebiges Füllwort vorangestellt werden, um ein Abschneiden des vorgelesenen Textes zu vermeiden.
Code: Alles auswählen
! +++++ User-Daten +++++
! In den nachfolgenden Listen werden die User-Daten durch "xx|" eingeleitet und durch EINEN Leerschritt voneinander getrennt.
string HMinfoList = "Empfänger01|+49xxxxxxxxxx"; ! Telefonnummern oder Nutzernamen (mit vorangestelltem "@") der Empfänger. Beispiel: "Empfänger01|+49xxxxxxxxx Empfänger02|@xxxxxxxxxx"
string prioMinList = "Empfänger01|-1"; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "Empfänger01|-2 Empfänger02|0"
! +++++ Sprache der CallMeBot-Anrufe +++++
string language = "de-DE-Wavenet-C"; ! Mögliche Spracheinstellungen: https://cloud.google.com/text-to-speech/docs/voices
Die drei Push-Dienste können einzeln oder in beliebiger Kombination genutzt werden. Sobald ein API-Schlüssel eingegeben wurde, wird der entsprechende Push-Dienst vorbehaltlich des Wertes der Systemvariablen "CCU SV Push Dienst" genutzt. Wird "CCU SV Push Dienst" nicht verwendet, gehen die eingebundenen zPNS-xx automatisch von ihrer Verwendung aus (default = 1 -> alle).
Überdies können noch verschiedene App- bzw. Bot-Tokens zur Unterscheidung von normalen Informationen (Prio -2, -1, 0), Warnungen (Prio 1) und Alarmmeldungen (Prio 2) eingerichtet und verwendet werden. Telegram bedingt die Verwendung von Bots, so dass hier nur einfach weitere API-Schlüssel für die zusätzlichen Bots hinzu kommen. Mehr dazu in einem der nachfolgenden Postings.
Updates der zPNS-xx
Wenn nicht explizit anders von mir erwähnt, zum Updaten am besten einfach alles unterhalb von
Code: Alles auswählen
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
ACHTUNG: Für Version 4.4 werden zwei weitere lokale Veriablen "msgLength" und "msgListInvert" benötigt. Daher zum Updaten am besten alles ab
Code: Alles auswählen
! +++++ Nachrichten auf mehrere Teilnachrichten aufteilen +++++
Wenn ein neuer Push-Dienst hinzugefügt oder ein bisher verwendeter entfernt werden soll, dann empfiehlt es sich, die Systemvariable "CCU SV Push Dienst" über das WebUI zu löschen und durch Aufruf des zPNP neu anlegen zu lassen. Bei Verwendung von CallMeBot wird jeder bisher verwendete Push-Dienst zusätzlich noch um einen Listeneintrag "+ CallMeBot" ergänzt. So kann man wählen, ob man nur Push-Nachrichten, nur Anrufe oder beides mit verschiedenen Push-Diensten erhalten möchte.
HTML-Tags
Pushover und Telegram bieten die Möglichkeit zur Verwendung so genannter HTML-Tags. Damit lassen sich Textteile von Push-Nachrichten in der App z.B. farbig oder fett hervorheben. Ein Problem ist jedoch, dass Pushsafer mit diesen HTML-Tags nichts anfangen kann und Telegram den HTML-Tag "<font color=...>...</font>" nicht versteht. Pushsafer verwendet zum Hervorheben von Texten statt HTML- sogenannte BBCode-Tags. Die einzelnen zPNS-xx wandeln jedoch etwaig verwendete HTML-Color-Tags automatisch in für sie nutzbaren Code um.
So erzeugt das zPNS-Tg aus "<font color=orange>Dies</font> ist ein <font color=red>Test</font>." automatisch den String "<b>Dies</b> ist ein <b>Test</b>.", während das zPNS-Ps ihn in "Dies ist ein Test." wandelt. Das zPNS-Po lässt den String dagegen unverändert.
Für CallMeBot werden automatisch sämtliche HTML-Tags entfernt.
Unterbindung aufeinander folgender, identischer Push-Nachrichten
Die zPNS-xx enthalten noch eine weitere Variable, über die man den Versand von Push-Nachrichten beeinflussen kann. Mit "stopRepeat" definiert man einen Zeitraum, innerhalb dem keine identischen Push-Nachrichten gesendet werden sollen. Sobald eine andere Push-Nachricht gesendet wurde, beginnt diese Sperrzeit wieder von vorne. Ich habe diese Variable eingeführt, weil ich gelegentlich mit Push-Nachrichten eines prellenden Sabotage-Kontakts eines Fenster-Drehgriffkontakts bombadiert wurde. Auch kann man damit recht gut Push-Nachrichten über das zu häufige Betätigen der Haustürklingel oder dergleichen unterbinden. Standardmäßig ist "stopRepeat" auf 10 Sekunden gesetzt, kann aber auch beliebig variiert werden. Will man zum Beispiel die Funktion der zPNS-xx testen, sollte "stopRepeat" auf 0 oder einen entsprechend geringen Wert gesetzt werden.
Wichtig: Damit das Unterbinden funktioniert, muss am Ende des zPNP das oben erwähnte, kleine Skript zum Setzen der Systemvariablen "CCU SV Push Text Ref" angefügt werden.
Übrigens können für jedes zPNS-xx unabhängig voneinander unterschiedliche Sperrzeiten definiert werden. Dies nur zur Info, falls es mal jemand benötigen sollte.
Automatisches Aufteilen überlanger Push-Nachrichten in Teilnachrichten
Fast alle Push-Dienste sind beschränkt auf eine maximale Nachrichtenlänge. So sind es bei Telegram und Pushover jeweils 1.000, bei Pushsafer 5.000 und bei CallMeBot lediglich 256 Zeichen. Gelegentlich kann es aber vorkommen, dass Push-Nachrichten jedoch länger sind. Dies ist insbesondere dann der Fall, wenn man viel mit HTML-Tags zur Hervorhebung von Texten arbeitet. Damit auch überlange Push-Nachrichten übertragen werden können, werden sie durch das zPNS-xx automatisch in mehrere Teilnachrichten aufgeteilt. die dann nacheinander übertragen werden.
Code: Alles auswählen
! +++++ Nachrichten auf mehrere Teilnachrichten aufteilen +++++
integer msgLength = 950; ! Länge der Teilnachrichten in Zeichen, default: 950
integer msgInterval = 2; ! Dauer zwischen zwei aufainenderfolgenden Nachrichten in Sekunden, default: 2
integer maxNumMsgs = 10; ! Maximale Anzahl aufeinander folgender Nachrichten, default: 10
boolean msgListInvert = false; ! Teilnachrichten invertieren (ja: true, nein: false)
Mit "msgInterval" legt man den Sendeabstand in Sekunden fest.
"maxNumMsgs" gibt die Anzahl der maximal nacheinander übertragenen Teilnachrichten an. Ist die Gesamtnachricht länger als die Summe aller Teilnachrichten, wird die letzte Teilnachricht einfach mit dem Hinweis ABBRUCH am Ende agebrochen. Weiterer Text wird dann nicht mehr übertragen.
Für CAllMeBot weichen die Namen der lokalen Variablen leicht ab. Ihre Bedeutung ist aber gleich.
Code: Alles auswählen
! +++++ Nachrichten auf mehrere Aunrufe aufteilen +++++
integer msgLength = 256; ! Länge der Teilnachrichten, default: 256
integer consInterval = 65; ! Dauer zwischen zwei aufeinanderfolgenden Anrufen in Sekunden, default: 65
integer maxNumCalls = 5; ! Maximale Anzahl aufeinander folgender Anrufe, default: 5
boolean msgListInvert = false; ! Reihenfolge der Teilnachrichten invertieren (ja: true, nein: false)
Die Push-Nachrichten werden nach folgender Prioriätenliste zerlegt.
- Zusammenhängende HTML- bzw. Code-Tags ("<....>TEXT<...>") werden nicht unterteilt, sofern die maximale Nachrichtenlänge dies zulässt. Somit werden Nachrichten immer vor dem letzten "<"-Zeichen eines vollständigen HTML-bzw. Code-Tags getrennt.
- Einzelne HTML- bzw. Code-Tags ("<....>") werden nicht unterteilt, sofern die maximale Nachrichtenlänge dies zulässt. Somit werden Nachrichten immer vor dem letzten "<"-Zeichen eines einzelnen HTML-bzw. Code-Tags getrennt.
- Einzelne "<"- und ">"-Zeichen werden ausgeklammert, sofern vor einem ">"- bzw. nach einem "<"-Zeichen ein Leerschritt steht.
- Unter Berücksichtigung von 1. und 2. werden Nachrichten nach dem letzten Zeilenumbruch "\n" unterteilt.
- Unter Berücksichtigung von 1., 2. und 4. werden Nachrichten nach dem letzten Leerschritt unterteilt.
- Die Systemvariable "CCU SV Push Dienst" steht noch auf "aus" oder auf dem falschen Push-Dienst. In dem Fall bitte "CCU SV Push Dienst" auf den gewünschten Push-Dienst einstellen.
- Es wurden andere Systemvariablen-Namen als die Standardwerte verwendet und nicht entsprechend in den Skripten angepasst.
- Es ist ein anderes CUxD-Gerät als "CUxD.CUX2801001:1.CMD_EXEC" definiert worden. In dem Fall im zPNS-xx das korrekte CUxD-Gerät einstellen.
- Es wurden nicht überall die korrekten API-Schlüssel eingetragen. Insbesondere für Pushover müssen sich die API-Basisschlüssel in der Skriptvariablen "keyList" und die API-Schlüssel für die Anwendungen "HM...List" unterscheiden.
- Es wurde vergessen, bei den API-Schlüsseln durchgehend die so genannten Identifyer "Empfängerxx|" zu verwenden. Diese sind jedoch wichtig für die Zuordnung der Schlüssel zu den jeweiligen Usern. Selbst für einen einzigen User muss stets der Identifyer "Empfängerxx|" verwendet werden.
- Die lokale Skriptvariable "stopRepeat" steht auf einem zu hohen Wert und unterdrückt das zeitnahe Hintereinandersenden identischer Push-Nachrichten. In dem Fall entweder "stopRepeat" auf 0 setzen oder zwei aufeinander folgende Push-Nachrichten unterschiedlichen Inhalts senden. Es genügt hier bereits ein geändertes Zeichen.
- Servicemeldungen auf Grundlage des Allinclusive-Skripts von Alchy.
- Skripte für Strom-, Gas- und Wasserzähler.
- Zentrales Programm und Skript zur Steuerung von Beschattungsgeräten (Rollläden, Markisen, Raffstore, Jalousien, etc.).
- Alarmmeldung bei Auslösen eines Rauchmelders.
- Meldung unverschlossener Fenster und Türen bei Änderung auf Abwesenheit und in Abwesenheit.
- Meldungen von Briefkasten-Einwürfen und der Leerung des Briefkastens.
- Ausschalten von Verbrauchern bei Abwesenheit.
- Sturmwarnungen.
- Meldung einer fertigen Waschmaschine und eines fertigen Trockners mittels HM-ES-PMSw1-Pl.
- Meldung über einen offenen Tagesriegel (analog auch auf Fenster und Türen anwendbar).
Thorsten
Versionshistorie
- Version 1.0
- Komplette Überarbeitung des bishirgen zPNS.
- Einbindung der drei Push-Dienste Pushover, Prowl und Pushalot.
- Version 1.1
- Überarbeitung des Prowl-Aufrufs
- Entfernung der Möglichkeit zum Zurücksetzen bestimmter Systemvariablen (push_reset)
- Version 1.2
- Hinzufügung von Telegram.
- Aufteilung des zPNS in einzelne zPNS-xx (zPNS-Po, zPNS-Pl, zPNs-Pa, zPNS-Tg).
- Umbenennung der Systemvariablen "CCU SV Push-Dienst" in "CCU SV Push Dienst".
- Umbenennung der Systemvariablen "CCU SV Push Sound" in "CCU SV Push Pushover-Sound".
- Version 1.3
- Neues Abschlussskript für das Setzen von "CCU SV Push Text Ref".
- Reihenfolge und Anzahl der zPNS-xx innerhalb des zPNP nun beliebig.
- Umbenennung der Systemvariablen "CCU SV Push Pushover-Sound" in "CCU SV Pushover Sound".
- Möglichkeit zur Einbindung von Devices in Pushover und Einführung der optionalen Systemvariablen "CCU SV Pushover Gerät".
- zPNS-xx 1.3.1: Deklaration der Variablen prio als Integer statt als String.
- Version 1.4
- Senden von Push-Nachrichten der Prio 2 unabhängig von der Systemvariablen "CCU SV Push-Dienst".
- Vermeidung der Unterdrückung identischer, aufeinander folgender Push-Nachrichten im Falle von Prio = 2.
- Unterdückung von Sounds für Telegram im Falle von Prio = -2.
- zPNS-xx 1.4.1: %-Zeichen als UTF-8-Code hinzugefügt.
- zPNS-xx 1.4.2: Umwandlung UTF-8-Codes angepasst (Bugfix).
- zPNS-xx 1.4.2: ²- und ³-Zeichen als UTF-8-Code hinzugefügt.
- zPNS-xx 1.4.3: Einfügen von ".ToInteger()" bei der Prioabfrage (Bugfix). Danke an Alchy für den Hinweis.
- zPNS-Tg 1.4.3.1: Ersetzen von "disable_notifications" durch "disable_notification" (Bugfix).
- Version 1.5
- Neue, vereinfachte User-Verwaltung für sämtliche zPNS-xx.
- Einführung von Pushsafer als neuen Push-Dienst.
- Version 1.6
- Definition einer maximalen Nachrichtenlänge zum Sicherstellen des Sendens.
- Umbenennung einiger lokaler Variablen.
- Version 2.0
- Automatische Erstellung der Systemvariablen.
- Version 2.1
- Einbindung der ".ToUTF8()"-Funktion zur Umwandlung von Sonderzeichen (erfordert mindestens WebUI 2.29.22).
- Verwendung von "dom.GetObject(ID_xxx).Get(yyy)" statt "dom.GetObject(yyy)".
- Automatisches, individuelles Umwandeln von HTML-Color-Tags in den einzelnen zPNS-xx (erfordert teilweise mindestens WebUI 2.29.22 wegen ".Replace()"-Funktion).
- zPNS-Po 2.1.2: Unterstützung von Titeln inkl. UTF-8-Codes.
- zPNS-Po 2.1.3: Automatisches Löschen von Titeln nach der Übertragung.
- Version 3.0
- Unterstützung der Bildübertragung im zPNS-Po, zPNS-Ps und zPNS-Tg
- Version 3.1/2.2
- alle zPNS-xx: Einbindung der ".UriEncode()"-Funktion zur Umwandlung von Sonderzeichen
- zPNS-Po 3.1.1: Umwandlung des Farbstrings "orange" in den Farbcode "#ffa500" für Android-Geräte
- Version 4.0
- Überarbeitete Nutzerverwaltung. Statt der zweistelligen Nummern als Indikatoren der API-Schlüssel können nun alphanumerische Folgen, also z.B. auch Namen verwendet werden. Dies ermöglicht zudem das Versenden von Push-Nachrichten an einzelne Nutzer. Die Verwendung der Devices unter Pushover bleibt davon unberührt.
- In Version 4.0.1 wurde das curl-Verzeichnis von CUxD von "extra/curl" in "/usr/bin/curl" geändert. Damit sollte das zPNP auch mit der aktuellen Firmware der CCU2 laufen.
- Version 4.1
- Automatisches Löschen der optionalen Systemvariablen, wenn diese nicht gesetzt sind.
- Version 4.2
- Zusätzliche Unterstützung von CallMeBot.
- Version 4.3
- Möglichkeit zum verzögerten Senden von Bildern.
- Farbcode-Konvertierungen für royalblue und yellowgreen ins zPNS-Po eingefügt.
- Version 4.4
- Automatisches Aufteilen von überlangen Push-Nachrichten in einzelne Teilnachrichten.