Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Alle zusätzlichen Module, die in die Solaranzeige integriert wurden, wie den Wetterbericht, die Solarprognose, der Messenger Pushover, Sun & Moon, aWATTar Strompreise und weitere Module.

Moderator: Ulrich

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Wie bekomme ich das hin, dass per Whatsapp oder lieber noch per xmpp eine Benachrichtigung gesendet wird wenn meine WR von Batterie Mode in Line Mode gehen.
Eine Mail würde im Notfall auch gehen.

MfG
Marco

Benutzeravatar
Ulrich
Administrator
Beiträge: 5505
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 152 Mal
Danksagung erhalten: 877 Mal
Kontaktdaten:

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von Ulrich »

Ist das eine Frage oder ein Statement?
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Sorry, der hatte wohl vorhin beim Erstellen woanders den Anfang geschrieben. Habe mal den Satz richtig gestellt. :)

Benutzeravatar
Ulrich
Administrator
Beiträge: 5505
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 152 Mal
Danksagung erhalten: 877 Mal
Kontaktdaten:

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von Ulrich »

Lese dir einfach mal das Dokument durch:
download/Messenger_Nachrichten.pdf
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Ich habe nun mal Whatsapp und pushover eingerichtet aber es kommen einfach keine Infos bei beiden nicht.
In die user.config.php habe ich folgendes drin:

Code: Alles auswählen

$Messenger = true;
//
//  Welcher Messengerdienst soll benutzt werden?
//  Pushover / Signal / WhatsApp
$Messengerdienst[1] = "Pushover";   //  Pushover, Signal oder WhatsApp
//  Die Solaranzeige müssen Sie bei Pushover / Signal oder WhatsApp
//  registrieren und einen API Token holen. 
//  Wie das geht, steht in dem Dokument "Messenger_Nachrichten" auf dem
//  Support Server
//  Pushover Beispiel $API_Token = "amk4be851bcegnirhu1b71u6ou7uoh";
//  Signal Beispiel $API_Token = "999999";
$API_Token[1] = "as.........";
//
//  Der User_Key ist die Messeger Empfänger Adresse. Bei Pushover können bis zu
//  9 Empfänger angegeben werden. $User_Key[1]  bis  $User_Key[9]
//  Am Ende jeder Zeile das Semikolon nicht vergessen!
//  Pushover Beispiel: $User_Key[1] = "ub6c3wmw4a3idwk9b5ajgfs5a7aypt";
//  Siehe Dokument "Nachrichten_senden.pdf"
//  Bei WhatsApp und Signal kann nur ein Empfänger angegeben werden, da der Token 
//  zur Rufnummer passen muss.
//  Signal Beispiel: $User_Key[1] = "+491769000000";
$User_Key[1] = "uk.........";
//
//  ------------------------------------------------------------------------
//  Und jetzt eventuell für weitere Personen:
//
$Messengerdienst[2] = "WhatsApp";     // Pushover, WhatsApp oder Signal
$API_Token[2] = "tocken, ist eine zahl";
$User_Key[2] = "+491 meine nummer";
//
//  $Messengerdienst[3] = "";     / Pushover, WhatsApp oder Signal
//  $API_Token[3] = "";
//  $User_Key[3] = "";
//
//*****************************************************************************
Die Datei /var/www/html/meldungen_senden.php

Code: Alles auswählen

<?php

/******************************************************************************
//  Solaranzeige Projekt             Copyright (C) [2015-2018]   [Ulrich Kunz]
//
//  Dieses Programm ist freie Software. Sie können es unter den Bedingungen
//  der GNU General Public License, wie von der Free Software Foundation
//  veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß
//  Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
//  Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
//  Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne
//  die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
//  BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
//
//  Ein original Exemplar der GNU General Public License finden Sie hier:
//  http://www.gnu.org/licenses/
//
//  Dies ist ein Programmteil des Programms "Solaranzeige"
//
//  Es dient dem Übertragen von Meldungen an den Messenger Pushover, Signal
//  oder WhatsAPP
//  Detail Informationen finden Sie im Dokument "Nachrichten_senden.pdf"
//
//  Welche Meldungen und wann übertragen werden, wird hier festgelegt.
//  Dieses ist nur als Beispiel zu sehen. Da Jeder ganz bestimmte Meldungen
//  übertragen möchte, müssen Sie hier selber die Programmierung
//  übernehmen. Vielleicht hilft auch der Eine oder Andere im Support Forum.
//
//  Diese Funktion ist nur eingeschaltet, wenn in der user.config.php
//  $Meldungen = true  eingetragen ist.
//  Zur Unterscheidung kann die Variable $GeraeteNummer benutzt werden.
//
******************************************************************************/
//  $Tracelevel = 10;  //  1 bis 10  10 = Debug
//  Ist der Standort in der user.config.php angegeben?
//  Wenn nicht dan Standort Frankfurt nehmen
if (isset($Breitengrad)) {
  $breite = $Breitengrad;
}
else {
  $breite = 50.1143999;
 }
if (isset($Laengengrad)) {
  $laenge = $Laengengrad;
}
else {
  $laenge = 8.6585178;
}

/******************************************************************************
//  Es werden die wichtigsten Daten auf der Influx Datenbank gelesen, die für
//  die Versendung der Messenger Nachrichten benötigt werden.
//
******************************************************************************/
if ($InfluxDB_local === true) {
  //
  //  Wann ist Mitternacht?
  $HeuteMitternacht = strtotime( 'today midnight' );
  $funktionen->log_schreiben( "Mitternacht: ".date( "d.m.Y H:i:s", $HeuteMitternacht )." Timestamp: ".$HeuteMitternacht, "*  ", 9 );
  //
  //  Sonnenaufgang und Sonnenuntergang berechnen (default Standort ist Frankfurt)
  $now = time( );
  $gmt_offset = 1 + date( "I" );
  $zenith = 50 / 60;
  $zenith = $zenith + 90;
  $Sonnenuntergang = date_sunset( $now, SUNFUNCS_RET_TIMESTAMP, $breite, $laenge, $zenith, $gmt_offset );
  $Sonnenaufgang = date_sunrise( $now, SUNFUNCS_RET_TIMESTAMP, $breite, $laenge, $zenith, $gmt_offset );

  /****************************************************************************
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  ****************************************************************************/
  //**************************************************************************
  //  SONNENUNTERGANG      SONNENUNTERGANG      SONNENUNTERGANG      SONNEN
  //  Nach Sonnenuntergang wird der Ertrag von Heute gesendet.
  //
  //**************************************************************************
  //  Step 1
  //  Es wird abgefragt, ob die Meldung Heute schon einmal gesendet wurde.
  //  In dem Beispiel wird davon ausgegangen, dass die Meldung nur einmal am
  //  Tage gesendet wird. Ist der 2. Parameter eine 0 dann wird nichts
  //  verändert sondern nur abgefragt. Ist es eine Zahl größer 0 dann wird
  //  Der Zähler gespeichert. Damit kann man die Anzahl der Meldungen
  //  für eine bestimmte Nachricht steuern.
  //  Die Rückgabe ist:
  //  -------------------
  //  $rc[0] = Timestamp an dem die Meldung gesendet wurde.
  //  $rc[1] = Anzahl der gesendeten Meldungen.
  //  $rc[2] = Meldungsname. In diesem Fall "Sonnenuntergang"
  $rc = $funktionen->po_messageControl( "Sonnenuntergang", 0, $GeraeteNummer, $Messengerdienst[1] );
  $funktionen->log_schreiben( "Eintrag: Sonnenuntergang  Datum: ".date( "d.m.Y", $rc[0] )." Anzahl: ".$rc[1], "*  ", 8 );
  if ($rc === false or date( "Ymd", $rc[0] ) <> date( "Ymd" )) {
    //  Entweder es wurde noch nie der Ertrag gesendet oder es wird geprüft
    //  ob Heute schon gesendet wurde. Man könnte hier auch die Anzahl der Nachrichten abfragen,
    //  wenn man mehrmals am Tage diese Meldung schicken möchte.
    //  In diesem Beispiel wird nur eine Nachricht pro Tag versendet.
    //
    //  Step 2
    //  Hier wird die Meldung generiert!
    //  Das kann über die Datenbank geschehen, es können aber auch direkt die Variablen
    //  des Hauptspripts "§aktuelleDaten["..."] benutzt werden.
    //  In diesem Beispiel wird die Datenbank aus der user.config.php [$InfluxDBLokal] benutzt.
    $aktuelleDaten["Query"] = "db=".$InfluxDBLokal."&q=".urlencode( "select last(Wh_Heute) from Summen where time > ".$HeuteMitternacht."000000000  and time <= now() limit 5" );
    if (($Sonnenuntergang + 600) < time( )) {
      //  10 Minuten nach Sonnenuntergang.
      //  Ertrag senden ...
      // Die Influx Datenbank abfragen, ob ein bestimmtes Ereignis passiert ist.
      $rc = $funktionen->po_influxdb_lesen( $aktuelleDaten );
      $funktionen->log_schreiben( var_export( $rc, 1 ), "*  ", 9 );
      $funktionen->log_schreiben( $aktuelleDaten["Query"], "*  ", 9 );
      // Der Wert "Wh_Heute" muss in der Datenbank "solaranzeige" im Measurement "Summen" vorhanden sein!
      $Meldungen["Wh_Heute"] = $rc["results"][0]["series"][0]["values"][0][1];
      $Meldungen["Timestamp"] = $rc["results"][0]["series"][0]["values"][0][0];
      $funktionen->log_schreiben( print_r( $Meldungen, 1 ), "*  ", 9 );
      //  Step 3
      //  Die Nachricht, die gesendet werden soll, wird hier zusammen
      //  gebaut.
      $Nachricht = "Solaranzeige Gerät: ".$GeraeteNummer."  \nSonnenuntergang: Heute am ".date( "d.m.Y H:i", $Sonnenuntergang )." wurden ".$Meldungen["Wh_Heute"]." Wh erzeugt. ";
      //
      //  Step 4
      //  Liefert die Datenbank die nötigen Daten?
      if (isset($rc["results"][0]["series"][0])) {
        //  Die Query liefert ein Ergebnis, das wird an dieser JSON Variable erkannt.
        $funktionen->log_schreiben( strip_tags( $Nachricht ), "*  ", 6 );
        //  Step 5
        //  Soll die Nachricht an mehrere Empfänger gesendet werden?
        //  Das kann auch an Pushover, Signal und WhatsApp gemischt gesendet werden.
        for ($Ui = 1; $Ui <= count( $User_Key ); $Ui++) {
          //  Die Nachricht wird an alle Empfänger gesendet, die in der
          //  user.config.php stehen.
          $funktionen->log_schreiben( "Nachricht wird bald versendet an User_Key[".$Ui."] ".$User_Key[$Ui], "*  ", 9 );
          $rc = $funktionen->po_send_message( $API_Token[$Ui], $User_Key[$Ui], $Nachricht, 0, "", $Messengerdienst[$Ui] );
          if ($rc) {
            $funktionen->log_schreiben( "Nachricht wurde versendet an ".$Messengerdienst[$Ui]." mit Rufnummer: ".$User_Key[$Ui]." und Key: ".$API_Token[$Ui], "   ", 6 );
          }
        }
        //  Step 6
        //  Es wird festgehalten, wann die Nachricht gesendet wurde und eventuell
        //  das wievielte mal. (2. Parameter) In dem Beispiel gibt es nur eine
        //  Meldung pro Tag.
        $rc = $funktionen->po_messageControl( "Sonnenuntergang", 1, $GeraeteNummer, $Messengerdienst[1] );
      }
    }
  }

  /****************************************************************************
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  ****************************************************************************/


  /****************************************************************************
  //  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 kann Ihre Abfrage stehen. Diese Datei wird bei einem
  //  Update nicht ueberschrieben.
  ****************************************************************************/


  
  /***************************************************************************/
  //  Statusmeldung senden, wenn der Status sich ändert.
  $Datenbankname = "licom1";
  $Measurement = "Service";
  $Feldname = "Modus";
  //***************************************************************************
  //  Die Rückgabe ist:
  //  -------------------
  //  $rc[0] = Timestamp an dem die Meldung gesendet wurde.
  //  $rc[1] = Anzahl der gesendeten Meldungen.
  //  $rc[2] = Meldungsname. In diesem Fall "Statusmeldung"
  $rc = $funktionen->po_messageControl( "Statusmeldung", 0, $GeraeteNummer, $Messengerdienst[1] );
  //  Abfrage, ist die Statusmeldung schon einmal gesendet?
  if ($rc <> false) {
    $funktionen->log_schreiben( "Statusmeldung letzte Nachricht gesendet: ".date( "d.m.Y H:i", $rc[0] ), "   ", 7 );
  }
  if (($rc === false or date( "YmdHi", $rc[0] ) <> date( "YmdHi" )) and $GeraeteNummer == 1) {
    //  Entweder es wurde noch nie der Ertrag gesendet oder es wird geprüft
    //  ob Heute schon in dieser Stunde gesendet wurde.
    //
    //  Meldung wird nur pro Stunde einmal versendet.
    //  Step 2
    //  Hier wird die Meldung generiert!
    $aktuelleDaten["Query"] = "db=".$Datenbankname."&q=".urlencode( "select difference(".$Feldname.") from ".$Measurement." where time > now() -2m " );
    // Die Influx Datenbank abfragen, ob ein bestimmtes Ereignis passiert ist.
    $rc = $funktionen->po_influxdb_lesen( $aktuelleDaten );
    $funktionen->log_schreiben( print_r($rc,1), "*  ", 9 );
    if (isset($rc["results"][0]["series"][0]) or isset($rc["results"][0]["statement_id"])) {
      //  Die Query liefert ein Ergebnis, das wird an dieser JSON Variable erkannt.
      $TimestampOn = $rc["results"][0]["series"][0]["values"][0][0];
      if ($rc["results"][0]["series"][0]["values"][0][1] != 0) {
        //  Ja, der Status hat sich geändert.
        //  Zahl ist Statusänderung  0 = keine Änderung
        //  +1, +2, +3, -3, -2
        //  Neuen Status erfragen:
        $aktuelleDaten["Query"] = "db=".$Datenbankname."&q=".urlencode( "select last(".$Feldname.") from ".$Measurement." where time > now() -2m " );
        $rc = $funktionen->po_influxdb_lesen( $aktuelleDaten );
        $funktionen->log_schreiben( print_r($rc,1), "*  ", 9 );
        if (isset($rc["results"][0]["series"][0])) {

          //  Step 3
          //  Die Nachricht, die gesendet werden soll, wird hier zusammen
          //  gebaut.
          $AktuellerStatus = $rc["results"][0]["series"][0]["values"][0][1];

          switch($AktuellerStatus) {
            case 1:
                   $StatusText = "B";
            break;
            case 2:
                   $StatusText = "L";
            break;
            case 4:
                   $StatusText = "P";
            break;
            default:
                   $StatusText = "F";
            break;
           case B:
                   $StatusText = "Inselbetrieb (keine Panik bitte)";
           break;
          case L:
                   $StatusText = "Bypass Achtung Strom aus Leitung";
            break;
          }

          $Nachricht = "Der Status hat sich geändert. Neuer Status: ".$StatusText." ";
        //
        //  Step 4
        //  Wann soll die Nachricht gesendet werden? Hier kann man noch eine bestimmte Uhrzeit einbauen oder eine Zeitspanne.
        //  In unserem Fall: sofort senden ...
        $funktionen->log_schreiben( $Nachricht, "*  ", 6 );
        //  Step 5
        //  Soll die Nachricht an mehrere Empfänger gesendet werden?
        for ($Ui = 1; $Ui <= count( $User_Key ); $Ui++) {
          //  Die Nachricht wird an alle Empfänger gesendet, die in der
          //  user.config.php stehen.
          $rc = $funktionen->po_send_message( $API_Token[$Ui], $User_Key[$Ui], $Nachricht, 0, "", $Messengerdienst[$Ui] );
          if ($rc) {
            $funktionen->log_schreiben( "Nachricht wurde versendet an ".$Messengerdienst[$Ui]." mit Rufnummer: ".$User_Key[$Ui]." und Key: ".$API_Token[$Ui], "   ", 6 );
          }
        }
        //  Step 6
        //  Es wird festgehalten, wann die Nachricht gesendet wurde und eventuell
        //  das wievielte mal. (2. Parameter) In dem Beispiel gibt es nur eine
        //  Meldung pro Ereignis.
        $rc = $funktionen->po_messageControl( "Statusmeldung", 1, $GeraeteNummer, $Messengerdienst[1] );
        }
        else {
          $funktionen->log_schreiben( "Fehler! Status nicht in der Datenbank.", "   ", 2 );
        }
      }
    }
  }


  /****************************************************************************
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  //  NACHRICHTEN BLOCK  STOP      NACHRICHTEN BLOCK  STOP      BLOCK  STOP
  ****************************************************************************/
}
else {
  $funktionen->log_schreiben( "Die lokale Datenbank ist ausgeschaltet. Die Messengerdienste stehen dadurch nicht zur Verfügung.", "*  ", 3 );
}
return;
?>
Es kommen überhauptkeine Nachrichten weder Sonnenuntergang noch meine Abfrage nach den Status des Modus (also ob Inverterbetrieb oder Netz).
Weiß jemand was da schief läuft?

Benutzeravatar
Ulrich
Administrator
Beiträge: 5505
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 152 Mal
Danksagung erhalten: 877 Mal
Kontaktdaten:

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von Ulrich »

Ich gehe einmal davon aus, dass du Regler 7 konfiguriert hat.

Bitte setze den Tracelevel in der Datei ax_wechselrichter.php von 7 vorübergehend auf 8. Nach ein paar Minuten schaue einmal in die LOG Date:
/var/www/log/solaranzeige.log

Dort muss eine Meldung stehen "Nachrichten senden..." und danach Informationen, was dann passiert. Wenn du nicht weiterkommst, mache ein Ticket auf. Eine eMail an hilfe [ät]solaranzeige Punkt de
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Ich hatte die Daten bei dem Wechselrichter der über die Licom Box dran ist also Regler 77 eingegeben, nun aber zusätzlich bei einem der direkt per usb dran ist auch eingegeben. Tracelevel ist jetzt auf 8 ich warte mal nee weile und schau dann ins log.

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Im Log finde ich

Code: Alles auswählen

18.08. 13:15:52    -Nachrichten versenden...
18.08. 13:15:52 *  -Eintrag: Sonnenuntergang  Datum: 09.09.2001 Anzahl: 0
18.08. 13:15:52    -OK. Datenübertragung erfolgreich.
18.08. 13:15:52    -Solarleistung: 336 Watt -  WattstundenGesamtHeute: 3032.52
Bei Whatsapp kommt nichts an im Moment. Es scheint auch der Modus zu Fehlen.

Benutzeravatar
Ulrich
Administrator
Beiträge: 5505
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 152 Mal
Danksagung erhalten: 877 Mal
Kontaktdaten:

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von Ulrich »

Der Script "meldungen_senden.php" wird also durchlaufen. Das heißt, dass dein Script nicht so funktioniert, wie du es möchtest. Wird wohl von der Logik her was nicht in Ordnung sein. Baue doch in den Script einfach LOG Meldungen ein, sodass du in der LOG Datei nachsehen kannst was da so abläuft.
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

lugau45
Beiträge: 78
Registriert: So 12. Sep 2021, 07:42

Re: Effekta Benachrichtigung wenn von Batterie Mode auf Line Mode geht und zurück

Beitrag von lugau45 »

Mirg geht es mehr darum das ich sofort benachrichtigt werde sobald sich der Modus von B in L ändert und zurück. Deswegen mache ich das alles eigentlich.

Antworten

Zurück zu „Wetterdaten, Börsenstrompreise, Solarprognose, Nachrichtendienst usw.“