Monatsauswertung

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Antworten
Gerd
Beiträge: 140
Registriert: Di 6. Aug 2019, 22:06
Hat sich bedankt: 6 Mal
Danksagung erhalten: 7 Mal

Monatsauswertung

Beitrag von Gerd »

nachdem ich mich die letzten Tage erneut über die unglückliche „Monatsauswertung“ ein wenig geärgert habe.
Das Problem das vorherrscht, liegt an unserer Datenbank, die keine Abgrenzung nach Monaten kann.
Sondern kennt nur vier Wochen oder alternativ 30 Tage. Was zu einer täglichen Verfälschung der Ergebnisse in die Vergangenheit führt.
2022-09-27_11h48_27 (2).png
So habe ich mich gestern hingesetzt und eine für mich einfache Lösung geschrieben.
An dieser möchte ich euch teilhaben lassen.

Da ich wirklich kein PHP beherrsche, könnte dieses kleine Script vielleicht auch eine Anregung an unsere Künstler hier sein.

Hier die Zeilen, die mir die Informationen in eine DB schreiben
Das komplette Script, findet ihr später unten im Anhang.

Code: Alles auswählen

$date = new DateTime(date('Y-m-01'));  		//Tag auf den 1st des Monats setzten

$query .= "longM-0=\"".$date->format('Y-m-d')."\"";
$query .= ",medM-0=\"".$date->format('m-d')."\"";
$query .= ",shortM-0=\"".$date->format('My')."\"";

for ($i = 1; $i <= 12; $i++ )
  {
	$fieldN1 = ",longM-". $i;
  	$fieldN2 = ",medM-". $i;
  	$fieldN3 = ",shortM-". $i;
	
	$date->modify("-1 month");
	
	$query .= $fieldN1 . "=\"".$date->format('Y-m-d')."\"";	//  2022-09-01
	$query .= $fieldN2 . "=\"".$date->format('m-d')."\"";	//  09-01
	$query .= $fieldN3 . "=\"".$date->format('My')."\"";	//  Sep22
	
  }	

$query .= "/n";

// echo $query;

  $result = writeData($query, $InfluxPar);
   log_schreiben("Lokal: ".$result,"|* ",$Tracelevel);

// Echo $result;

return;

  function writeData($postData, $InfluxPar )  {

Über die Variablen, die man in Grafana anlegen kann, stehen diese Zeitbereiche für Abfragen zur Verfügung.
2022-10-01_11h38_55.png
2022-10-01_11h38_55.png (25.83 KiB) 262 mal betrachtet
Im Grafana Editor können diese Variablen in der Abfrage als auch Alias verwendet werden.
2022-10-01_11h37_32.png
Diese Lösung läuft seit gestern auf meinem Testsystem.
Jetzt nach dem Monatswechsel sieht es schon mal nicht so schlecht aus ;)

Es lassen sich auch zur Beschriftung unterschiedliche Arten verwenden, die ihr auch selbst anpassen könnt.
2022-10-01_11h42_35.png
2022-10-01_11h42_35.png (20.06 KiB) 262 mal betrachtet
2022-10-01_11h43_07.png
2022-10-01_11h43_07.png (22.87 KiB) 262 mal betrachtet
2022-10-01_11h44_03.png
2022-10-01_11h44_03.png (16.21 KiB) 262 mal betrachtet
Damit der Batch automatisch zum Monatsletzten ausgeführt wird hier der Cronjob
2022-10-01_11h48_53.png
2022-10-01_11h48_53.png (2.07 KiB) 262 mal betrachtet
Die Endung ".txt" der Anhängenden Datei entfernen und in euer "html" Verzeichnis unter : ../var/www/html speichern.

Zum testen und zum Anlegen der Variablen, einmalig ausführen ...und schon kann es losgehen

CU
Dateianhänge
myPeriod.php.txt
(4.86 KiB) 45-mal heruntergeladen
Cu Gerd
My Coffee is always #000000!

Benutzeravatar
ps1304@fn.de
Beiträge: 60
Registriert: Mi 7. Okt 2020, 17:59
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Monatsauswertung

Beitrag von ps1304@fn.de »

Hallo Gerd, php kopiert und gestartet - Werte wurden in DB geschrieben. Varaiablen angelegt:
php-variable.png
Mit folgender Abfrage:
SELECT integral("Verbrauch",1h) FROM "AC" WHERE time >= '$(shortM_1)' AND time < '$(shortM_0)' tz('Europe/Berlin')
stoße ich auf einen Fehler:
InfluxDB Error: invalid operation: time and *influxql.StringLiteral are not compatible

Hast Du ne Idee?

Gruß Peter

Antworten