Die Variable 34126 ist die Counter Variable vom EKM-868 von dieser lese ich auch den Tages/Monats/Jahresverbrauch aus.
Ich wäre schon zufrieden wenn ich den Jahresverbrach aufsplitten könnte
Hierfür kann ich ja auch die Variable 34126 verwenden-oder? ( Counter EKM-868 )
Ich hab beim Script das „G“ auf „Y“ umgeändert.
$hour = intval(date('Y'));
Wenn ich das Script, jetzt starte, müsste ich dann nicht Rückwirkend den Aufgesplitteten Verbrauch Tag/Nacht erhalten?
Hier das ganze Script nochmals:
erhält $hour den Wert „2018“ (noch das ganze Jahr, ab nächstem Januar dann „2019“)
Das Skript schreibt dann also alles in Deine Variablen ID 11063 (weil 2018 nicht zwischen 6 und 18 liegt, greift die „else“-Bedingung)
Das erscheint mir jetzt ziemlich sinnfrei.
Zur Erinnerung nochmal, was das Skript macht:
In der ersten Zeile des Skriptes holst Du Dir die beiden letzten archivierten Werte des Counters. Nach Deiner Beschreibung also den aktuellen Wert und den von 30 Sekunden vorher.
In der zweiten Zeile wird die Differenz daraus gebildet.
Dann wird mit date(„G“) die aktuelle Stunde im 24h-Format bestimmt. (oder mit „Y“ das aktuelle Jahr)
In der IF-Abfrage wird bestimmt, welche Output-Variable beschrieben werden soll.
In der vorletzten Zeile wird der aktuelle Wert der eben ausgesuchten Outputvariable gelesen.
Und schließlich wird die oben ausgerechnete Differenz (der letzten 30 Sekunden) zum aktuellen Wert der Outputvariable addiert und dann der neue Wert in die Outputvariable geschrieben.
Das ist alles, was das Skript macht. Mir scheint, Du möchtest etwas anderes von ihm. Dann kommst Du aber mit diesem Skript nicht weiter.
Gruß
Frank
(der hier im Norden schon wieder wegtaut und deshalb jetzt in den nächsten See springt )
Hmm, verstehe. Hab ich grad gesehen das es so auch nicht funktioniert
Was soll, kann ich dann tun?
Mir würde es schon reichen wenn ich meinen jahresverbrauch aufsplitten kann
Was genau meinst du mit Jahresverbrauch aufsplitten? In der Aggregation wird ja bereits nach Jahren unterschieden. Und wenn du dir den dazugehörigen Grafen in einer Visualisierung anschaust, hast du für jedes Jahr einen Balken, welcher den Verbrauch in diesem Jahr darstellt.
Oder möchtest du das Jahr in verschiedene Teile einteilen, ähnlich wie du vorher den Tag in die zwei Tarifzeiten einteilst? Dann müsstest du dir nicht das Jahr, sondern den Monat (und eventuell zusätzlich den Tag, je nach Einteilung) holen und natürlich den if-Block je nach deinen Wünschen anpassen.
Du meinst damit die Strommenge, die du in deine Variablen für die Tag- und Nachttarife aufgeteilt hast? Falls dein Skript schon seit Anfang des Jahres läuft, dann kannst du dir einfach die jährliche Aggregation dieser Daten anschauen. Vielleicht ist es dann auch schön, einen entsprechenden Multigrafen zu erstellen.
Ich vermute aber mal, dass das Skript noch nicht seit Anfang dieses Jahres läuft. Dann müsstest du dir die entsprechenden Daten im Nachhinein aus dem Hauptzähler holen, was deutlich komplizierter wird und auch nicht mit deinem aktuellen Skript machbar ist.
Richtig, das Script läuft erst sein ein paar Wochen, hatte aber noch keine Zeit zum beobachten.
Wenn ich das Problem mit multigraphen lösen kann, wäre auch super.
Aber auch dafür brauch ich ja ein Script das wir die Werte aus dem Archiv holt (Tag/Nacht)?
<?
$archivID = 44061; // ID der Archivinstanz
$zaehlerID = 34126; // ID des geloggten Zählwertes
$tagtarifID = 17110; // hier kommen alle Werte von 7-19 rein
$nachttarifID = 11063; // hier kommt alles von 19-7 rein
// Zählerstand auf 0 setzen
SetValue($tagtarifID, 0);
SetValue($nachttarifID, 0);
// aggregierte Stundenwerte von Jahresanfang bis jetzt aus dem Archiv holen
$werte = AC_GetAggregatedValues($archivID, $zaehlerID, 0, mktime(0,0,0,1,1,date("Y")), time(), 0);
// jeden Archivwert durchgehen
foreach($werte as $wert) {
$hour = intval(date('G', $wert['TimeStamp'])); // Stunde aus dem Zeitstempel des Archiveintrags
if (($hour >= 7) && ($hour <= 18)) { // aggregierter Zeitstempel liegt zwischen 07:00:01 und 18:59:59
$outputVariableID = $tagtarifID;
} else { // aggregierter Zeitstempel liegt zwischen 19:00:00 und 7:00:00
$outputVariableID = $nachttarifID;
}
$currentValue = GetValue($outputVariableID);
SetValue($outputVariableID, $currentValue + $wert['Avg']);
}
?>
Bei mir gibt es einigermaßen plausible Werte raus. Ich habe meine 5.000 Datensätze allerdings nicht genau kontrolliert.
Dieses Skript solltest Du aber nicht alle 30 sek. ausführen . In dieser Form funktioniert es auch nur bis zum 31. Dezember 23:59:59 Uhr. Für Vorjahreswerte müssen Start- und Endzeitpunkt in Zeile 12 angepasst werden.
Ich denke das Konzept sollte es sein, die geloggten Daten für Tag- und Nachttarif zu löschen (NICHT die des Hauptzählers!), das „neue“ Skript auszuführen und danach weiterhin das „alte“ am Laufen zu haben.
Die erste Ausführung des „neuen“ Skriptes bringt Tag- und Nachttarif für das laufenden Jahr auf den korrekten Stand und danach pflegst du die Daten mit dem „alten“ Skript weiter, damit diese auf dem aktuellen Stand bleiben.
es scheint zu funktionieren
Sprich es passt mit dem aktuellen Jahreswert zusammen!
Ich hab es jedoch geändert das es nicht das ganze Jahr ausliest ( dauert ewig ) sondern nur den aktuellen Tag.
Müsst ich aber dann das Script um 00:00:01 Starten das der Variablenwert auf „0“ gesetzt wird?
Wobei das müsst ich doch nicht oder?
Wenn ich die beiden Variablen auch Logge, dann kann ich ja auch den Jahreswert in der Grafik (Multigrafik) anzeigen lassen ( zb. rot ist Tag und grün ist Nacht ).
Das „neue“ Skript setzt ja jedesmal die Tag- und Nachtvariablen auf 0 und zählt/addiert sie dann auf den aktuellen Stand hoch. Wenn Du die beiden dann loggst, wirst Du wohl auch im Log bei jeder Skriptausführung die Daten von 0 bis x innerhalb kürzester Zeit im Log stehen haben. Das sieht bestimmt lustig aus, macht aber eine Auswertung unmöglich.
Also: „Neues“ Skript einmal ausführen. Danach die Variablen loggen lassen und fortan das „alte“ Skript laufen lassen.
Die dann geloggten Daten enthalten nur die jeweils aktuellen Werte.
Ich glaube du musst das Logging VOR der Ausführung des neuen Skriptes aktivieren. Du möchtest ja das durch das Skript berechnete Delta mitloggen. Ansonsten möchte ich mich meinem Vorredner anschließen.
Das Logging der Zählervariable muss natürlich vor dem neuen Skript aktiviert werden.
Aber das Logging der Tag- und Nachtvariablen doch nicht, oder?
Mit dem neuen Skript schreibe ich doch innerhalb weniger Sekunden die aggregierten und aufaddierten Werte in die Tag- und Nachtvariable. Und alle Werte bekommen dann beim Logging den Zeitstempel zum Zeitpunkt der Skriptausführung.
Für die Auswertung oder die Grafik bringt das doch nur Chaos. Wenn michl jedoch die Altdaten (Jahresanfang bis Skriptausführung) auch grafisch darstellen will, wird das so nichts. Dann müsste das neue Skript ja jeden aufaddierten Stundenwert mit dem „originalen“ Zeitstempel im Archiv ablegen. Geht das? Da bin ich dann raus.
Man könnte natürlich statt der SetValue-Zeile im neuen Skript den Wert in eine „$outputvariableID.csv“-Datei schreiben.
Das müsste dann natürlich monatsweise in die db-Verzeichnisstruktur geschehen. Die Rohdaten haben ja nur das Format [timestamp,wert]. Beides liegt an dieser Stelle des Skripts ja vor.
Oder man schreibt die Daten in die „$outputvariableID_hour.csv“ und setzt die min- und max-Felder auf 0. Finde ich aber ein wenig „dreckig“.
Auf jeden Fall müsste man dafür Ahnung vom Dateihandling in php haben. Und schon bin ich wieder raus.