Impulse von Stromzähler zuordenbar? ( 2 Tarife vorhanden )

Hallo michl,

das siehst Du völlig richtig. Das funktioniert bei mir auch genau so. Und bei allen Ungenauigkeiten muss trotzdem die Summe stimmen.

Ich bin etwas überfragt, warum bei Dir dann die falschen Werte entstehen.

Moment mal:

Muss ich wenn ich die Zeiten erodieren muss die Variable des Tagesgesamtverbrauches Loggen und diese auslesen?

Ja, ist denn die Variable des Tagesgesamtverbrauchs nicht die geloggte 34126?

Daran könnte es liegen.

Gruß
Frank

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 :slight_smile:
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:


   $logged = AC_GetLoggedValues(44061 /*[Archiv]*/, 34126 /*[Hardware IPS\EKM-868 Bezug\Energiezähler\Counter]*/, 0, 0, 2); 
    $difference = $logged[0]['Value'] - $logged[1]['Value']; 
     
    $hour = intval(date('Y')); 
     
    if (($hour >= 6) && ($hour <= 18)) { 
        $outputVariableID = 17110 /*[Energie Haus\Strom Bezug EVU aktuell	est 7-19]*/; 
    } else { 
        $outputVariableID = 11063 /*[Energie Haus\Strom Bezug EVU aktuell	est 19-7]*/; 
    } 
     
    $currentValue = GetValue($outputVariableID); 
     
    SetValue($outputVariableID, $currentValue + $difference);  
?>

Hallo michl,

mit

$hour = intval(date(‚Y‘));

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 :cool:)

Hmm, verstehe. Hab ich grad gesehen das es so auch nicht funktioniert :frowning:
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.

Ich möchte das ich vom diesjährigen Jahr, sprich Jahresverbrauch die Tarifzeiten erfahren kann.

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.

Ja das meine ich.Aufteilung Tag-Nacht.

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)?

Mir schwebt da spontan etwas mit

GetValueAggregated()

vor.
Bin aber momentan etwas im Stress. Mal sehen, vielleicht heute nachmittag.

Gruß
Frank

Vielen Danke :slight_smile:

Hallo michl,

versuche es doch einmal damit:


<? 
   $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 :wink: . 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.

Gruß
Frank

Vielen Dank Frank.
Ich werde es die Tage testen :slight_smile:

Es genügt mir wenn ich es einmal die Stunde starte.
Das heißt wenn der 1.Jänner 2019 ist, muss i h das Script ändern?
Oder läuft es weiter?
Danke

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.

Hallo,

es scheint zu funktionieren :slight_smile:
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?


$werte = AC_GetAggregatedValues($archivID, $zaehlerID, 0, strtotime("today 00:00"), time(), 0);

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 ).

Dem kann ich mich nur anschließen.

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.

Gruß
Frank

Ok, nochmal zum Verständnis:
-Ich brauche beide Scripte

-Das neue Script Starte ich nur einmal, bzw. wenn ich die Verbrauchsdaten Tag/Nacht sehen möchte. Oder wenn ich die Daten aktualisieren möchte.

-Muss ich dann die Daten loggen in dem das neue Script die Daten ausgibt?
Die vom counter werden auch geloggt.

-Das alte Script muss trotzdem ausgeführt werden, wenn sich die Variable des Counter ändert?

-Welche Daten kann ich dann für die Grafik verwenden? Das ich seh Zb. Gestern Tag 2 kWh und Nacht 1 kWh?

Danke

ja

Das neue Script Starte ich nur einmal

ja

bzw. wenn ich die Verbrauchsdaten Tag/Nacht sehen möchte. Oder wenn ich die Daten aktualisieren möchte.

nein und nein

Muss ich dann die Daten loggen in dem das neue Script die Daten ausgibt?
Die vom counter werden auch geloggt.

ja, aber erst nach Ausführung des neuen Skripts!

Das alte Script muss trotzdem ausgeführt werden, wenn sich die Variable des Counter ändert?

ja, auch das ist richtig. Sonst werden neu eingehende Impulse nicht oder nicht richtig erfasst.

Welche Daten kann ich dann für die Grafik verwenden? Das ich seh Zb. Gestern Tag 2 kWh und Nacht 1 kWh?

Die geloggten Tag- und Nachtvariablen sind dann auch für Grafiken verwendbar.

Gruß
Frank

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“. :frowning:

Auf jeden Fall müsste man dafür Ahnung vom Dateihandling in php haben. Und schon bin ich wieder raus.

Grüße
Frank