Meldung wenn Akku voll

Hier werden Meldeblöcke, die man in die Datei "meldungen_senden.php" übernehmen kann, veröffentlicht.

Moderator: Ulrich

Antworten
alwiz79
Beiträge: 3
Registriert: Mi 21. Sep 2022, 11:15
Hat sich bedankt: 1 Mal

Meldung wenn Akku voll

Beitrag von alwiz79 »

Hallo Zusammen!
Erst einmal vielen Dank für dieses tolle Projekt.
ich habe alles soweit aufgesetzt, stoße aber bei den Pushover Meldungen an meine Grenzen.

Ich würde gerne bei folgenden Szenario eine Pushmeldung erhalten und habe keine Idee was ich tun muss im Nachrichtenblock:

- Akku ist bei 100%
- die PV produziert Strom
- im Haus wird nicht genug Strom abgenommen, es "droht" Einspeisung

Kann mir da jemand auf die Sprünge helfen?

SVW2
Beiträge: 2
Registriert: So 19. Nov 2023, 23:31

Re: Meldung wenn Akku voll

Beitrag von SVW2 »

Hallo,

hier mal eine Umsetzung für den Status wenn der Accu leer oder 100% gefüllt ist. Die Meldung soll aber erst wieder gesendet werden wenn der Accu in der Zwischenzeit einmal auf mindestens 6% geladen wurde oder auf 90% Ladestand gesunken ist.

Code: Alles auswählen

  /****************************************************************************
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  //  NACHRICHTEN BLOCK  START      NACHRICHTEN BLOCK  START      BLOCK  START
  //  Auswertung wenn die Batterie leer ist. Die Nachricht soll aber nur versendet werden wenn die Batterie 
  //  zwischendurch einmal mindestens 6 % Ladung hatte
  //  Hier kann Ihre Abfrage stehen. Diese Datei wird bei einem
  //  Update nicht ueberschrieben.
  ****************************************************************************/
  $rc = $funktionen->po_messageControl( "Batterie_Leer", 0, $GeraeteNummer, $Messengerdienst[1] );
  if ($rc === false or date( "YmdHi", $rc[0] ) <> date( "YmdHi" )) {

    // holen des aktuellen Baterieladezustandes
    $aktuelleDaten["Query"] = "db=".$InfluxDBLokal."&q=".urlencode( "select last(SOC) from Batterie");
    $rc = $funktionen->po_influxdb_lesen( $aktuelleDaten );
    $Meldungen["Batterie_Ladung"] = $rc["results"][0]["series"][0]["values"][0][1];
    $Meldungen["Batterie_Ladung_Time"] = $rc["results"][0]["series"][0]["values"][0][0];	

    // holen des letzten Baterieladezustands bevor leer
    if($Meldungen["Batterie_Ladung"] == 100){
       $letzteDaten["Query"] = "db=".$InfluxDBLokal."&q=".urlencode( "select last(SOC) from Batterie where SOC <= 90");
       $Nachricht = "Haus-Info: Batterie Ladezustand = ".$Meldungen["Batterie_Ladung"]."%. Batterie ist voll"; 	
    }else{
       $letzteDaten["Query"] = "db=".$InfluxDBLokal."&q=".urlencode( "select last(SOC) from Batterie where SOC >= 6");
       $Nachricht = "Haus-Info: Batterie Ladezustand = ".$Meldungen["Batterie_Ladung"]."%. Batterie ist leer";	
    }
    $rc_last = $funktionen->po_influxdb_lesen( $letzteDaten );
    $Meldungen["Batterie_Ladung_Last_Loaded"] = $rc_last["results"][0]["series"][0]["values"][0][1];
    $Meldungen["Batterie_Ladung_Time_Last_Loaded"] = $rc["results"][0]["series"][0]["values"][0][0];	
	
    if (isset($rc["results"][0]["series"][0])) {
        //  Die Query liefert ein Ergebnis, das wird an dieser JSON Variable erkannt.
      if(($Meldungen["Batterie_Ladung"] <=5 or $Meldungen["Batterie_Ladung"] == 100) and $Meldungen["Batterie_Ladung_Time_Last_Loaded"] > $Meldungen["Batterie_Ladung_Time"]){
	$funktionen->log_schreiben( "Batterie ".$Nachricht, "   ", 7 );
      	$funktionen->log_schreiben( strip_tags( $Nachricht ), "*  ", 6 );
  	    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 );
               }
            $funktionen->log_schreiben( $aktuelleDaten["Query"], "*  ", 9 );
            $rc = $funktionen->po_messageControl( "Batterie_Leer", 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
  ****************************************************************************/
Wichig ist bei der DB Abfrage die Groß- und Kleinschreibung.

Seb01
Beiträge: 45
Registriert: Mo 20. Mär 2023, 11:11
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: Meldung wenn Akku voll

Beitrag von Seb01 »

Hallo SV2,

kannst Du Dein Script ein wenig erklären?

Ich habe es installiert, aber bei mir scheint es nicht zu funktionieren.

Ich glaube zu lesen:
1) es wird der Batteriestand ausgelesen (% und Timestamp des Wertes) [$rc]
2a) Wenn 100% dann 90% Wert
2b) Sonst wird 6% wert genommen
3) Batteriestand aus 2) wird gelesen (% und Timestamp des Wertes) [$rc_last]
4) If-Schleife: wenn <6% oder =100% und Timestamp(6/90)>Timestamp(jetzt) jetzt dann "Nachricht senden"

Liege ich falsch, das dann nie gesendet wird, da Timestamp(6/90)>Timestamp(jetzt) nie erfüllt wird? Die Vergangenheit ist immer kleiner als jetzt...

Und: muss in der Zeile

Code: Alles auswählen

$Meldungen["Batterie_Ladung_Time_Last_Loaded"] = $rc["results"][0]["series"][0]["values"][0][0];
nicht die "$rc_last" genommen werden(der Zeitpunkt, als es 90% oder 6% war)?

Gruss Seb

Antworten

Zurück zu „Meldeblöcke für Messenger Meldungen“