- Laderegler BlueSolar
- SmartSolar
Code: Alles auswählen
/***************************************************************************/
// Statusmeldung senden, wenn der Status sich ändert.
$Datenbankname = $InfluxDBLokal;
$Measurement = "Service";
$Feldname = "Ladestatus";
//***************************************************************************
// 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 ($Regler == 4) {
// Victron Laderegler, jede Änderung wird gemeldet.
// Hier kann die Anzahl der Meldungen zusätzlich begrenzt werden.
//
// 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.
if ($rc["results"][0]["series"][0]["values"][0][1] != 0) {
$TimestampOn = $rc["results"][0]["series"][0]["values"][0][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 0:
$StatusText = " Keine Ladung";
break;
case 2:
$StatusText = " Fehler vorhanden!";
break;
case 3:
$StatusText = " normale Ladung";
break;
case 4:
$StatusText = " Nachladung";
break;
case 5:
$StatusText = " Erhaltungsladung";
break;
case 7:
$StatusText = " Ausgleichsladung";
break;
default:
$StatusText = " unbekannt";
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 );
}
}
}
}