13
Solaranzeige.de Informationen für Software Version 4.2.0 und höher Stand Januar 2019 Nachrichten mit PUSHOVER senden. Die Nachrichten werden mit dem Messenger Dienst pushover.net gesendet. Dieser Dienst kostet ca. 4,50 € einmalig pro Client.

Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

  • Upload
    hangoc

  • View
    225

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Solaranzeige.deInformationen

für Software Version 4.2.0 und höher

Stand Januar 2019

Nachrichten mit PUSHOVER senden.

Die Nachrichten werden mit dem Messenger Dienst

pushover.net

gesendet. Dieser Dienst kostet ca. 4,50 € einmalig pro Client.

Page 2: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem ich auch den nötigen API Token generiert habe.

Hier den Desktop Client auswählen:

Page 3: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Hier kann man sich registrieren. Nach der Registrierung hat man eine 7 Tage kostenlose Probezeit. Der Dienst kostet 4,99 $, das sind ungefähr 4,50 €

Bitte auf diesen Link drücken.

Page 4: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Hier irgend einen kurzen Namen eingeben. Z.B. HomeOffice oder Desktop oder Wohnhaus usw.

Damit ist dann die Registrierung abgeschlossen. Ein Client kann auch auf fast jedes Handy aufgespielt werden, um Nachrichten zu empfangen. Achtung! Pushover ist kein Kommunikations-Messenger wie Whatsapp. Mit Pushover kann man nur Nachrichten und Bilder empfangen. Man kann auf eine Nachricht nicht antworten. Dafür ist es aber sehr leicht, von unterschiedlichen Geräten Nachrichten zu versenden. Smart Home Zentralen nutzen auch vielfach Pushover. Nach der Registrierung kommt man zum PushoverDesktop. Auf der rechten Seite oben steht der User Key, der die Adresse darstellt, wie die Telefonnummerbei Whatsapp. Darunter ist zusätzlich eine eMail Adresse. Wenn man eine Nachricht an diese eMail Adresse sendet, empfängt der Client diese Nachricht.

Zum Test, schicken Sie bitte eine Testnachricht an diese eMail Adresse. Wie die dann empfangen wird zeige ich später.

Page 5: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Zuerst müssen wir einen API_Token für den Solaranzeige Raspberry Pi erstellen. Der dann in die /var/www/html/user.config.php eingetragen wird. Der User Key von oben rechts und eventuell der von Ihrem Handy wird hier dann auch eingetragen.

/******************************************************************************// MESSENGER MELDUNGEN MESSENGER MELDUNGEN MESSENGER******************************************************************************/// Es können Fehlermeldungen, Ereignisse oder Statistiken mit einem// Messenger übertragen werden. Dazu bitte Messenger = true eintragen// Genaue Informationen stehen im Dokument "Nachrichten_senden.pdf" sobald// diese Funktion freigeschaltet ist. (Voraussichtlich Anfang Dezember 2018)// (Diese Funktion ist noch nicht in Betrieb! Bitte nicht verändern)// true / false$Messenger = false;//// Die Solaranzeige müssen Sie bei Pushover registrieren und einen API Token// holen. Wie das geht, steht in dem Dokument "Messenger Nachrichten" auf dem// Support Server// Beispiel $API_Token = "amk4be851bcegnirhu1b71u6ou7uoh";$API_Token = "";//// Der User_Key ist die Pushover Empfänger Adresse. Es können bis zu// 9 Empfänger angegeben werden. $User_Key[1] bis $User_Key[9]// Am Ende jeden Eintrages das Semikolon nicht vergessen!// Beispiel: $User_Key[1] = "ub6c3wmw4a3idwk9b5ajgfs5a7aypt";$User_Key[1] = "";// $User_Key[2] = "";// $User_Key[3] = "";//

Page 6: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

//*****************************************************************************

Bitte als Name „Solaranzeige“ eintragen, da dieser Text dann auch als Absender der Nachrichten zu sehenist. Außerdem die Checkbox aktivieren. Das ist alles. Dann Create Application drücken. Sie bekommen dan den API Token per eMail zugesendet, der in die user.config.php eingetragen werden muss.

Jetzt möchten wir natürlich noch die Nachrichten empfangen. Das geht mit dem Handy oder auch hier mitdem Desktop Client. Dazu muss man sich in den Client „einloggen“. Dazu einfach den Link im nächsten Bild drücken.

Page 7: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

So sieht der Desktop Client aus. Links kann man auswählen von welchem Gerät die Nachrichten kommen.In diesem Fall von dem Raspberry „Solaranzeige“. Wählt man eine Nachricht aus, so sieht am auf der rechten Seite den gesamten Text, falls er etwas länger ist.

Page 8: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

In der Solaranzeige sind 2 unterschiedliche Nachrichten freigeschaltet.

1. Immer bei Sonnenuntergang kommt eine Nachricht, wie viele Wattstunden an diesem Tage erzeugt wurden.

2. Wenn ein Fehler im Gerät auftritt, kommt eine Fehlernachricht.

Diese beiden Nachrichtengruppen sind nur als Beispiel gedacht. In der Datei /var/www/html/meldungen_senden.php

können weitere Nachrichten programmiert werden. Dazu sind jedoch ein paar PHP Kenntnisse nötig.

Jede Nachricht besteht aus einem „Baustein“. Weitere standard Bausteine finden Sie hier in unserem Support Forum:

Anlagenüberwachung und Steuerung z.B mit HomeMatic - > Meldeblöcke für Pushover Meldungen

In der Datei /var/ww/html/meldungen_senden.php finden Sie diese Zeilen:

/****************************************************************************

// NACHRICHTEN BLOCK START NACHRICHTEN BLOCK START BLOCK START

// NACHRICHTEN BLOCK START NACHRICHTEN BLOCK START BLOCK START

// NACHRICHTEN BLOCK START NACHRICHTEN BLOCK START BLOCK START

****************************************************************************/

// Hier können weitere Blöcke eingefügt werden.

//

//

/****************************************************************************

// NACHRICHTEN BLOCK STOP NACHRICHTEN BLOCK STOP BLOCK STOP

// NACHRICHTEN BLOCK STOP NACHRICHTEN BLOCK STOP BLOCK STOP

// NACHRICHTEN BLOCK STOP NACHRICHTEN BLOCK STOP BLOCK STOP

****************************************************************************/

Zwischen diese Zeilen können Sie die Nachrichtenblöcke mit Kopieren und Einfügen platziert werden. Diese Standard-Bausteine, die Sie im Forum vorfinden einfach mit einem Editor an dieser Stelle einfügen. Wenn Sie später mehrere unterschiedliche Überwachungen haben möchten, dann die einzelnen Blöcke untereinander einfügen.

Page 9: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Der Nachrichtenblock. Wie funktioniert er?

Ich möchte das an Hand des Nachrichtenblocks „Unterspannung“ erklären:

1 /***************************************************************************/

2 // UNTERSPANNUNG BLOCK START UNTERSPANNUNG BLOCK START UNTERSPANNUNG

3

4 // Abfrage, wie hoch ist die Batteriespannung

5 // Funktioniert nur mit Solarreglern!

6 // Die Unterspannung muss mindestens 3 Minuten lang vorhanden sein.

7

8 $Unterspannung = "11,8"; // Hier die Spannung in Volt eintragen!

9 $MaxMeldungenProTag = 1; // Anzahl Meldungen insgesamt pro Tag.

10 $MaxMeldungenProStunde = 0; // Wenn 0, dann pro Stunde eine Meldung bis

11 // $MaxMeldungenProTag erreicht ist.

12 // Wenn > 0 dann Anzahl pro Stunde bis

13 // $MaxMeldungenProTag erreicht ist.

14 // *************************************************************************

15

16 $MeldungSenden = false;

17

18 if ($Regler < 5) {

19 $msg = messageControl("Unterspannung",0);

20 $funktionen->log_schreiben("Unterspannung Datum: ".date("d.m.Y",$msg[0])." Anzahl: ".$msg[1],"* ",4);

21

22 if ($msg === false or date("Ymd",$msg[0]) <> date("Ymd")) {

23 // Es wurde noch keine dieser meldung heute gesendet.

24 $MeldungSenden = true;

25 $msg[1] = 0;

26 }

27 elseif (date("Ymd",$msg[0]) == date("Ymd")) {

28 if ($msg[1] < $MaxMeldungenProTag) {

29 // Es sollen mehr dieser Nachrichten gesendet werden.

30 if (date("G") > 5){

31 // Alle weiteren Meldungen erst ab 6:00 Uhr am Tage

32 if ($MaxMeldungenProStunde <> 0) {

33 // Es sollen mehrer Nachrichten pro Stunde gesendet werden

34 $Zeitspanne = round((3600 / $MaxMeldungenProStunde),0);

35 if (time() > $msg[0]+$Zeitspanne) {

36 $MeldungSenden = true;

37 }

38 }

39 elseif (date("i") == "00") {

40 // Jede Stunde eine Meldung.

41 $MeldungSenden = true;

42 }

43 }

44 }

45 }

46 if ($MeldungSenden === true) {

47

48 $Unterspannung = str_replace(",",".",$Unterspannung);

49 $aktuelleDaten["Query"] = urlencode("select Spannung from Batterie where Spannung <= ".$Unterspannung." and time > ".$HeuteMitternacht."000000000 and time <= now() limit 5");

50 $rc = influxdb_lesen($aktuelleDaten);

51 $funktionen->log_schreiben(var_export($rc,1),"* ",10);

52

Page 10: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

53 if (isset($rc["results"][0]["series"][0])) {

54 // Die unterspannung wurde heute registriert.

55 // Wie oft steht in [series][0][value]

56 $TimestampOn = $rc["results"][0]["series"][0]["values"][0][0];

57

58 $Nachricht = "Achtung! Batterie hat Unterspannung! ".$rc["results"][0]["series"][0]["values"][0][1]." Volt.";

59

60 if (isset($rc["results"][0]["series"][0]["values"][3])) {

61 // Mindestens 3 mal Unterspannung gemessen.

62 $funktionen->log_schreiben($Nachricht,"* ",6);

63 for ($Ui = 1; $Ui <= count($User_Key); $Ui++) {

64 $rc = send_message($API_Token,$User_Key[$Ui],$Nachricht);

65 if ($rc) {

66 $funktionen->log_schreiben("Nachricht wurde versendet an User_Key[".$Ui."]","* ",6);

67 }

68 }

69 $msg = messageControl("Unterspannung",$msg[1]+1);

70 }

71 }

72 }

73 }

74 else {

75 $funktionen->log_schreiben("Dieses Gerät ist kein Solarregler.","* ",3);

76 }

77 // UNTERSPANNUNG BLOCK ENDE UNTERSPANNUNG BLOCK ENDE UNTERSPANNUNG

78 /***************************************************************************/

Sinn des Ganzen ist, dass der ungeübte Programmierer, die auf dem Support Server angebotenen „Nachrichten Blöcke“ mit Kopieren und Einfügen übernehmen kann. Deshalb habe ich die Datei in Blöcke aufgeteilt. Hier wird so ein Block einmal beschrieben, wie er funktioniert, damit der geübte Programmierer selber so einen Block, nach seinen Gegebenheiten, erstellen kann. Das obere Beispiel ist mit Zeilennummern versehen, damit die Beschreibung hier übersichtlicher wird.

Zeile 8:

Hier bitte die Variablen, die für jedes Mitglied unterschiedlich sein können, aufführen und setzen. In diesem Fall richtet sich die Unterspannung nach dem Batterietyp und der Batteriegröße. Sie muss unbedingt angepasst werden.

Zeile 9:

$MaxMeldungenProTag ist die Variable die die maximale Anzahl der Meldungen pro Tag (00:00 bis 24:00 Uhr) enthält. Ist die Anzahl erreicht, wird erst am nächsten Tag wieder eine Meldunggeschickt, solange bis die Störung behoben ist. Meldungen werden immer erst ab 6:00 Uhr versendet, außer die Erste. Die wird immer sofort versendet. Tritt ein Problem z.B. um 3:20 Uhr auf, so wird die erste Meldung um 3:21 Uhr versendet und die 2. um 6:00 Uhr usw.

Zeile 10:

$MaxMeldungenProStunde: Sollen mehr als 1 Meldung pro Stunde versendet werden, dann hier die Anzahl eintragen. Die Menge muss in der Anzahl $MaxMeldungenProTag mit enthalten sein.

Möchte man 4 Meldungen pro Stunde 10 Stunden lang erhalten, dann muss $MaxMeldungenProStunde = 4 und $MaxMeldungenProTag = 40 sein.

Page 11: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Zeile 18:

Diese Abfrage kann entfallen, wenn der Block mit jedem Regler / Wechselrichter funktioniert, bzw. ich den Block nur für mein Gerät geschrieben habe. Im Fall, eines Blocks für Jeden, muss hier abgefragt werden, ob der Regler/Wechselrichter überhaupt eine Batterie hat, die eine Unterspannung haben könnte.

Zeile 19:

Das ist nur eine Abfrage, wann für genau diese Meldung das letzte mal eine Nachricht gesendet wurde und wie oft. Der 1. Parameter ist ein „Meldungsname“. Jede unterschiedliche Meldung benötigt einen „Meldungsnamen“. In diesem Fall ist der Meldungsname „Unterspannung“Mit dem 2. Parameter kann ich angeben, wie viel mal ich die Meldung schon gesendet habe.Eine Besonderheit ist die „0“. Die besagt es soll nur abgefragt werden wann und wie oft die Meldung schon gesendet wurden. Es wird jedoch nichts gespeichert oder verändert. Wurde die Meldung noch nie gesendet, meldet die Unterroutine ein „false“ zurück. Wurde die Meldung schon einmal gesendet kommt ein Array wie folgt zurück.

Die Rückgabe ist: -------------------$msg[0] = Timestamp an dem die Meldung gesendet wurde.$msg[1] = Anzahl der gesendeten Meldungen.$msg[2] = Meldungsname. In diesem Fall "Unterspannung".

Mit dieser Unterroutine wird ermittelt ob die Meldung gesendet werden muss oder ob sie schon gesendet wurde. Da man auch den Parameter, wie oft sie schon gesendet wurde, zurück bekommt, kann man hier entscheiden ob die Meldung ein 2. oder 3. mal gesendet werden soll. In diesem Beispiel wird die Meldung nur einmal am Tage gesendet!

Zeile 22

[if ($msg === false or date("Ymd",$msg[0]) <> date("Ymd"))]Wenn die Meldung noch nie gesendet wurde kommt „false“ zurück. [$msg === false]Ist die Meldung schon einmal gesendet worden, dann steckt in der variable $msg[0] der Timestamp der letzten Meldung.

Zeile 24

Es wird festgehalten, dass die Meldung gesendet werden muss. In diesem Fall wird die Sendung sofort, ohne weitere Abfragen gesendet. Die erste Meldung für so einen Fall wird immer sofort nach dem Auftreten gesendet, also auch Nachts.

Zeile 25

Falls noch nie eine Meldung gesendet wurde,gibt es auch das Array $msg nicht, deshalb wird hier ein Dummy geschaffen. Wird für die weitere Verarbeitung benötigt.

Zeile 27

Es wurde schon eine Meldung gesendet, jetzt wird nachgesehen ob mehrere am Tage gesendet werden sollen.

Zeile 28

Ja, es sollen mehrere gesendet werden. Ist die maximale Anzahl pro Tag schon erreicht?

Zeile 30

Wenn mehrere Nachrichten gesendet werden sollen, sollten die im Allgemeinen ja nicht Nachts um 1:00 Uhr gesendet werden, sondern zu Zeiten in dem man auf solche Meldungen auch reagieren kann. Die Zeile 30 kann aber auch geändert werden, wenn man die ganze Nacht durch die Meldungen braucht / haben möchte. Man kann Sie auch außer kraft setzen indem man sie ändert in „ if (1==1) { „

Page 12: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Zeile 32

Möchte man mehrere Nachrichten pro Stunde? Dann wird in Zeile 34 errechnet wie groß die Zeitspanne in Sekunden zwischen den Meldungen sein soll. In Zeile 35 wird dann geprüft, ob die Zeitspannung schon verstrichen ist. Wenn ja, wird sich gemerkt, dass die Meldung gesendet werden soll.

Zeile 39

Nein, es sollen nicht mehrere Nachrichten pro Stunde gesendet werden. Also wird zu jeder vollen Stunde gesendet. Ist die volle Stunde erreicht? Wenn ja, dann merken, dass die Nachricht gesendetwerden soll.

Zeile 48

PHP kann die Komma Werte nur mit einem Punkt verarbeiten. Deshalb wird das Komma in einen Punkt geändert, falls jemand in Zeile 7 den Wert in deutscher Schreibweise eingegeben hat.11,8 wird zu 11.8 und kann so im PHP weiter verarbeitet werden. Ist der Wert schon als 11.8 eingetragen, passiert nichts.

Zeile 49 bis 50

Hier wird die Query für die Abfrage der Influx Datenbank erstellt. Wie man eine Abfrage richtig erstellt wird hier nicht beschrieben.

Zeile 53

Die Influx Datenbank gibt das Ergebnis im JSON Format zurück. In der Unterroutine wird die JSON Rückgabe mit dem PHP Befehl json_decode() in ein mehrstufiges Array gesteckt, dass im weiteren Verlauf dann benutzt wird. Ändert man Zeile 51 folgendermaßen ab, wird der gesamte Inhalt, den die Datenbank zurück gibt, in der LOG Datei /var/www/log/solaranzeige.log sichtbar:[$funktionen->log_schreiben(var_export($rc,1),"* ",1);] Die letzte Zahl besagt, bei welchem Tracelevel die Meldung in die LOG Datei geschrieben wird. Wenn ich hier 1 eintrage, wir sie immer in die LOG Datei geschrieben. Sollte aber im Betrieb wieder auf den Ursprungswert 10 zurück gesetzt werden.In Zeile 53 wird jetzt erst einmal abgefragt, ab es in diesem Array überhaupt den Parameter gibt. Liefert die Query keine gültige Antwort zurück, dann gibt es auch diesen Parameter nicht. In diesem Beispiel fragt die Query ab, ob Heute schon eine Unterspannung kleiner gleich 11,8 Volt gemeldet wurde. Wenn auch nur einmal diese Spannung Heute gespeichert wurde, ist die Bedingung wahr.

Zeile 58

Hier wird die Nachricht, die über Pushover gesendet wird, zusammengebaut. Sie darf maximal 1000 Zeichen lang sein und kann HTML Code enthalten.

Zeile 60

Jetzt wird es etwas Trickreich.

[if (isset($rc["results"][0]["series"][0]["values"][3]))]Mit dieser Zeile wird abgefragt, ob es mindestens 3 Einträge in der Datenbank gibt, die 11,8 Volt oder darunter haben. Der Zeitraum ist in der Query festgelegt. In diesem Beispiel[time > ".$HeuteMitternacht."000000000 and time <= now()] ist der Zeitraum zwischenMitternacht und jetzt. D.h. In diesem Zeitraum muss mindestens 3 mal eine Unterspannung von 11,8 Volt oder darunter registriert worden sein. Eine ganz kurzzeitige Unterspannung kann schon mal beim einschalten einer hohen Belastung vorkommen. Deshalb werden erst 3 Einträge abgewartet.

Zeile 63 bis 68

Es können ein Pushover Teilnehmer oder aber auch Mehrere in der „user.config.php“ angegeben werden. Mit dieser Schleife wird die Meldung an alle angegeben Teilnehmer gesendet.

Page 13: Nachrichten mit PUSHOVER senden. - solaranzeige.de Nachrichten.pdf · Damit man die gesendeten Nachrichten überprüfen kann, habe ich mir einen Desktop Client registriert, mit dem

Zeile 69

Jetzt muss noch festgehalten werden, dass die Nachricht versendet wurde. Der 1. Parameter ist wieder der „Meldungsname“, mit dem 2. Parameter gebe ich mit wie viel mal ich schon die Meldung an diesem Tage gesendet habe. Da in diesem Beispiel nur eine Nachricht pro Tag versendet wird, ist als 2. Parameter fest eine 1 eingetragen. Möchte ich mit zählen, wie oftdie Nachricht Heute schon gesendet wurde, muss der 2. Parameter so aussehen:[$msg = messageControl("Unterspannung",($msg[1]+1) )]$rc[1] kommt von Zeile 11 und dazu wird 1 addiert.

Wenn es noch weitere Fragen dazu gibt, bitte im SUPPORT FORUM stellen.

© Solaranzeige.de Nachdruck und Verbreitung nur mit unserer schriftlichen Genehmigung.