Seite 1 von 1

Monatsauswertung

Verfasst: Sa 1. Okt 2022, 11:54
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) 918 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) 918 mal betrachtet
2022-10-01_11h43_07.png
2022-10-01_11h43_07.png (22.87 KiB) 918 mal betrachtet
2022-10-01_11h44_03.png
2022-10-01_11h44_03.png (16.21 KiB) 918 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) 918 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

Re: Monatsauswertung

Verfasst: Di 29. Nov 2022, 15:49
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

Re: Monatsauswertung

Verfasst: Fr 30. Dez 2022, 09:36
von kai9555
Gerd hat geschrieben:
Sa 1. Okt 2022, 11:54
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

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_11h43_07.png

2022-10-01_11h44_03.png

Damit der Batch automatisch zum Monatsletzten ausgeführt wird hier der Cronjob

2022-10-01_11h48_53.png

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
Hallo Gerd, auch mich würde die Monatsauswertung interessieren. Könntest du die Anleitung noch etwas Anfängersicherer gestalten? Wo soll z.B. der Cronjob gespeichert werden? Ich würde mich über eine kleine stichpunktartige Anleitung freuen.Grundkenntnisse sind natürlich vorhanden, sonst würde meine Multiregleranlage nicht laufen :)

Danke dir