Meldung wenn Akku voll
Moderator: Ulrich
Meldung wenn Akku voll
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?
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?
Re: Meldung wenn Akku voll
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.
Wichig ist bei der DB Abfrage die Groß- und Kleinschreibung.
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
****************************************************************************/
-
- Beiträge: 53
- Registriert: Mo 20. Mär 2023, 11:11
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 6 Mal
Re: Meldung wenn Akku voll
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 <5% 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 nicht die "$rc_last" genommen werden(der Zeitpunkt, als es 90% oder 6% war)?
Gruss Seb
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 <5% 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];
Gruss Seb
Re: Meldung wenn Akku voll
Hallo,
das ganze hatte dann doch nicht so funktioniert wie ich es mir gedacht hatte.. Ich hatte das irgendwie nicht in meine derzeitige Umsetzung via IOBroker einpassen können. Somit hatte ich mich entschieden das ganze via IOBroker-Skipt umzusetzen. Das Einspielen der entsprechenden Werte in den IOBroker war per mqtt kein Problem. Zur Zeit ist es so das ich immer eine Meldung erhalte wenn der Accu den Status 100% bzw 5% erreicht hat...
Ich bin mit dem jetzigen Stand der Umsetzung recht zufrieden.
Sorry das ich dir da nicht weiter helfen kann
das ganze hatte dann doch nicht so funktioniert wie ich es mir gedacht hatte.. Ich hatte das irgendwie nicht in meine derzeitige Umsetzung via IOBroker einpassen können. Somit hatte ich mich entschieden das ganze via IOBroker-Skipt umzusetzen. Das Einspielen der entsprechenden Werte in den IOBroker war per mqtt kein Problem. Zur Zeit ist es so das ich immer eine Meldung erhalte wenn der Accu den Status 100% bzw 5% erreicht hat...
Ich bin mit dem jetzigen Stand der Umsetzung recht zufrieden.
Sorry das ich dir da nicht weiter helfen kann
-
- Beiträge: 53
- Registriert: Mo 20. Mär 2023, 11:11
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 6 Mal
Re: Meldung wenn Akku voll
Zum Sneaken...
Code: Alles auswählen
/***************************************************************************/
// Batteriemeldung BLOCK START
// Sendet bei bedarf Meldungen über Batterie leer / voll.
// Werte sind einstellbar. Wiederholungssendungen erst, Nachdem bestimmte
// Pegel überschritten/unterschritten sind.
$Batterieleer = 6; // % SOC, wenn Batteriemeldung "leer" kommt
$Batterievoll = 100; // % SOC, wenn Batteriemeldung "voll" kommt
$Batterieneuvoll = 90; // pro Wert muss immer kleiner als "voll" sein
// Wenn unterschritten, dann bei "voll" neue Meldung
$Batterieneuleer = 10; // pro Wert muss immer größer als "leer" sein
// Wenn überschritten, dann bei "leer" neue Meldung
// *************************************************************************
/*****************************************************************************
// Die Status Datei wird dazu benutzt, um die Variablen
// speichern.
//*****************************************************************************/
$StatusFile = $Pfad."/database/".$GeraeteNummer.".Meldungen_var.txt";
if (file_exists( $StatusFile )) {
/***************************************************************************
// Daten einlesen ...
***************************************************************************/
$variable = file( $StatusFile );
$variable[0] = (trim($variable[0])); // Das \n herausschmeissen
if ($variable[0] == "false1") { // Untere Grenze für "leer"
$untenneu = false; // false = über $Batterineuleer
}
else {
$untenneu = true;
}
if ($variable[1] =="true2") { // Obere Grenze für "voll"
$obenneu = true; // false = unter $Batterieneuvoll
}
else {
$obenneu = false;
}
}
else {
/***************************************************************************
// Inhalt der Status Datei anlegen.
***************************************************************************/
$rc = file_put_contents( $StatusFile, "false1\nfalse2" );
if ($rc === false) {
$funktionen->log_schreiben( "Konnte die Datei Meldungen_var.txt nicht anlegen.", " ", 5 );
}
}
//*****************************************************************************
// Statusdatei fertig ausgelesen
//*****************************************************************************/
$rc = $funktionen->po_messageControl( "Batteriemeldung", 0, $GeraeteNummer, $Messengerdienst[1] );
// holen des aktuellen Baterieladezustandes
$aktuelleDaten["Query"] = "db=".$InfluxDBLokal."&q=".urlencode( "select last(SOC) from Batterie");
$rc = $funktionen->po_influxdb_lesen( $aktuelleDaten );
$Meldungen["SOC"] = $rc["results"][0]["series"][0]["values"][0][1]; // $Meldungen[SOC] ist die Batterie %
if (isset($rc["results"][0]["series"][0])) { // Die Query liefert ein Ergebnis, das wird an dieser JSON Variable erkannt.
if (($Meldungen[SOC] > $Batterieneuleer)and($Meldungen[SOC] < $Batterieneuvoll)) { // oberhalb $Batterieneuleer und unterhalb $Battrieneuvoll
$rc = file_put_contents( $StatusFile, "false1\nfalse2" ); //beispielsweise mehr als 10% und weniger als 90%
// wird für das Neusetzen des Triggers benötigt (false1 und false2)
}
}
if ($Meldungen[SOC] <= $Batterieleer) { // Battrie ist leer
if ($untenneu === false) { // wir kommen von oberhalb $Batterieneuleer
$Nachricht = "Info: Batterie Ladezustand leer: ".$Meldungen["SOC"]."%.";
$funktionen->log_schreiben( "Batteriemeldung ".$Nachricht, "* ", 6 );
$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( "B-Nachricht wurde versendet an ".$Messengerdienst[$Ui]." mit Rufnummer: ".$User_Key[$Ui]." und Key: ".$API_Token[$Ui], " ", 5 );
}
$funktionen->log_schreiben( $aktuelleDaten["Query"], "* ", 9 );
$rc = $funktionen->po_messageControl( "Batterie_Leer", 1, $GeraeteNummer, $Messengerdienst[1] );
}
$rc = file_put_contents( $StatusFile, "true1\nfalse2" ); //Meldung wurde gesendet, also true1, bis es wieder über $Batterieneuleer ist
}
}
if ($Meldungen[SOC] == $Batterievoll) { // Batterie ist voll
if ($obenneu === false) { // wir kommen von unterhalb $Batterieneuvoll
$Nachricht = "Info: Batterie Ladezustand voll: ".$Meldungen["SOC"]."%.";
$funktionen->log_schreiben( "Batteriemeldung ".$Nachricht, "* ", 6 );
$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( "B-Nachricht wurde versendet an ".$Messengerdienst[$Ui]." mit Rufnummer: ".$User_Key[$Ui]." und Key: ".$API_Token[$Ui], " ", 5 );
}
$funktionen->log_schreiben( $aktuelleDaten["Query"], "* ", 9 );
$rc = $funktionen->po_messageControl( "Batterie_Leer", 1, $GeraeteNummer, $Messengerdienst[1] );
}
$rc = file_put_contents( $StatusFile, "false1\ntrue2" ); //Meldung wurde gesendet, also true2, bis es wieder unter $Batterieneuvoll ist
}
}
// Batteriemeldung BLOCK ENDE Batteriemeldung BLOCK ENDE
/***************************************************************************/