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

Guten Abend zusammen,

wollt mal fragen ob es mittels eins Scriptes möglich ist die Impulse die mir der Stromzähler ausgibt unterschiedlich zu loggen?

Sprich ich habe einen Wärmepumpentarif mit 2 Tarifen HT von 8-20 Uhr und einen NT von 20-8 Uhr.
Momentan logge ich alles in eine Variable, sprich Hoch und Niedertarif sind nicht getrennt!

Gibt es eine Möglichkeit, mittels Script, das ich ab 20 Uhr in eine andere Variable loggen kann?

Oder kann ich mir die Werte aus dem Archiv importieren ( zb 8-20 Uhr)? Ist vermutlich einfacher?
Wie macht Ihr das?

Danke

Du könntest mit einem Event auf Änderungen der Zähler-Variable reagieren. In dem dazugehörigem Skript prüfst du die aktuelle Uhrzeit und entscheidest so, welcher Tarif aktuell greift. Dann addierst du die aktuelle Differenz auf eine zusätzliche Zählervariable des entsprechenden Zeitintervalls. Dafür bräuchtest du also 2 zusätzliche Variablen und hast dann eine für den Gesamtzähler (wie vorher) und zwei neue für die verschiedenen Zeitintervalle.

Alternativ kannst du via stündlicher Aggregation für einen einzelnen Tag die Daten in den entsprechenden Intervallen auslesen. Mit einer Schleife kann man dann über eine beliebige Anzahl von Tagen gehen. Der Vorteil im Vergleich zur ersten Variante wäre, dass hier keine zusätzlichen Daten geloggt werden. Allerdings ist hierfür ein erhöhter Rechenaufwand erforderlich, wenn die Daten abgefragt werden.

Abend,

also ich benutze folgendes Script um den Jahreswert aus der geloggten Variable ( Bezug Strom Wärmepumpe kwh ) auszulesen:


$jahr=date("Y");
$timestamp = mktime(0,0,0,1,1,$jahr);
$werte=AC_GetAggregatedValues(44061 /*[Archiv]*/,53017 /*[Hardware IPS\EKM-868 Wärmepumpe\Energiezaehler \Counter]*/,4,$timestamp, time(),0);
SetValue(20036 /*[Energie Wärmepumpe \Ausseneinheit Wärmepumpe Vitocal 200 S\Jahresverbrauch]*/ , $werte[0] ['Avg']);


Könnt ich in dieses Script noch die Zeit einbauen?
Sodas ich die Jahreswerte von 8-20 Uhr und von 20-8 Uhr bekomme?

Das ist möglich, aber leider nicht sehr einfach. Die Idee würde der Variante 2 aus meinem letzten Beitrag entsprechen, du müsstest also für jeden Tag die Intervalle aus der stündlichen Aggregation abgreifen und die Summe dann in die passenden Variablen schreiben.

Ok, danke!
Das hab ich mir fast gedacht :’( was Scripte angeht, bin ich eher nicht so gut unterwegs.

Würde deine Variante 1 einfacher zum umsetzen sein?

Ich denke ja. Diese würde zwar auch ein Skript erfordern, das wäre allerdings wohl nicht so komplex wie in Variante 2.

Könntest du mir hierbei behilflich sein :slight_smile:
-Ich benötige 2 Zusätzliche Float Variablen.

Nur wie funktioniert das mit dem Script?
Der Zähler gibt seine Impulse ab, aber wie weis das Script wenn es 20 Uhr, oder 8 Uhr ist?

Die Zuordnung heist dann, wenn 20 Uhr, dann in Variable Nr. 20111 speichern.
Nur muss dann der Wert ja noch addiert werden, zum alten Wert?

Danke!

Die Infos über die aktuelle Stunde kannst du ähnlich wie das aktuelle Jahr über die date-Funktion bekommen: PHP: date - Manual

Ansonsten habe ich aber auch einfach mal ein kleines Skript für dich gebastelt:


	$logged = AC_GetLoggedValues(59960 /*[Archiv]*/, 41511 /*[Testing\Energie]*/, 0, 0, 2);
	$difference = $logged[0]['Value'] - $logged[1]['Value'];
	
	$hour = intval(date('G'));
	
	if (($hour >= 8) && ($hour <= 20)) {
		$outputVariableID = 24583; /*[Testing\EnergieTag]*/
	} else {
		$outputVariableID = 51958; /*[Testing\EnergieNacht]*/
	}
	
	$currentValue = GetValue($outputVariableID);
	
	SetValue($outputVariableID, $currentValue + $difference);

Du müsstest dann noch die IDs entsprechend anpassen und dann sollte es laufen.

Danke Dr.Niels,

ich werde es heute ausprobieren! :slight_smile:

Hallo Dr.Niels,

so wie ich das jetzt mit deinem Script verstanden habe, wird immer die Differenz dazugezählt je nachdem welcher Tarif aktuell laut „hour“ Eingestellt wurde.

Dann muss ich am 1.Jänner immer die Variable Tag und Nacht auf „null“ setzen? Ist das Richtig?
Sonst zählt das Script ja weiter?

Um das Jahr abzufragen, müsste statt dem „G“



    $hour = intval(date('G')); 

ein „Y“ rein?

Das Y ist korrekt an der Stelle.

Aber du musst die Variable eigentlich gar nicht zurücksetzen. Wenn du die Variable als Zähler loggst, dann werden alle positiven Differenzen geloggt. Wenn du die also die Aggregation für ein Jahr ausgibst, dann bekommst du den Verbrauch in diesem Jahr zurück und musst die Variable dafür nicht zurücksetzen.

Hmm, bei mir stimmen die Werte nicht die ich Auslese?
Ich wollte die Werte immer vom Vortag Auslesen?

Ist die Variable auch als Zähler geloggt? Denk daran, dass du für den Tagesverbrauch auch die aggregierten Werte des Tages auslesen musst. Wenn diese nicht stimmen, was passt dabei denn nicht?

Denk daran, dass alle positiven Deltas summiert werden. Das ist also nicht einfach die Differenz zwischen dem ersten und letzten Wert des Tages, insbesondere dann nicht, wenn dieser mal auf 0 zurückgesetzt wird.

Hallo Dr.Niels,

ich versuch es genauer zu erklären:
Der aktuelle Tarif meines EVU ist Tarif 1 von 19-7Uhr / 7-19Uhr.
Hierfür möchte ich das ich erkennen kann wann ich wieviel Strom benötige der verbrauch jeweils in eine separate Variable geschrieben wird.

Variable 19-7 Uhr ist die 11063
Variable 7-19 Uhr ist die 17110

Das Archiv ist 44061

Die Variable 34126 ist die Variable ich als Zähler Logge, das ist die Variable wo von 0-24 Uhr geloggt wird.
Von dieser muss ich ja die Daten abfragen?

Anbei das Script( für die Tagesabfrage ):


<?
   $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('G')); 
     
    if (($hour >= 7) && ($hour <= 19)) { 
        $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,

ich habe Dein Skript noch nicht ausprobiert, aber die Abfrage

if (($hour >= 7) && ($hour <= 19)) {

ruft im Zweifelsfall Deinen Verbrauch bis 19:59 Uhr auf.
Ist das vielleicht schon Deine Ungenauigkeit? Dann vielleicht mal die 19 in eine 18 tauschen.
Je nachdem wann der erste Zählerstand ab bzw. der letzte vor 07:00 Uhr geloggt wurde hast Du natürlich auch noch einen Verbrauchsanteil vor 7:00 Uhr im Tagesverbrauch mit drin. Dasselbe gilt natürlich auch für abends.

Gruß
Frank

Danke für die Info.
Hab eher das Problem das wenn ich jetzt das Script Starte 17:00, ich dann in der Variable 7-19 folgendes Stehen habe: 0,02 kWh?

Ich hab’s jetzt bei mir mal ausprobiert. Das Skript macht alles, was es soll.

Variable 7-19 hat den Wert 14000
Letzte Archiveinträge in der Zählervariablen: 14667,89 und 14668,05

Skript um 07:44 ausgeführt

Neuer Wert von Variable 7-19: 14000,16

Was steht/stand denn in Deinen Variablen?

Gruß
Frank

Ich versteh das nicht!
Ich lese ja aus der Variable meinen Tagesverbrauch aus-dieser passt!

Aktueller Tagesgesamtverbrauch 1,97 Kwh

Davon von 19-7…0,02 Kwh
7-19…0,17 Kwh

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

Hallo michl,

Wann wird denn bei Dir das Skript ausgeführt?

Für richtiges funktionieren sollte es jedesmal ausgeführt werden, wenn sich die geloggte Zählervariable (bei Dir die ID 34126) ändert. Dann prüft das Skript die aktuelle Uhrzeit (Stunde) und addiert den Verbrauch seit letzter Ausführung zu der jeweiligen Tages- oder Nachtvariable hinzu.

Was ich nicht weiß: Wann kommen bei Dir die Daten an der ID 34126 an, bzw. wie wird der Zähler ausgelesen?

Wird der Zähler zu festen Zeiten gelesen, z.B. immer zur vollen Stunde, dann ist es einfach. Kommen die Daten jedoch unregelmäßig wird es schwieriger. Kritisch sind da besonders die Zeiten um die Umschaltzeitpunkte 07:00 und 19:00 Uhr.

Das führt dann zur Ungenauigkeit, wie von mir schon beschrieben: z.B. Zählerauslesung um 6:53 Uhr, nächste Auslesung um 7:03 Uhr -> Das Skript schreibt die Differenz (den Verbrauch) zwischen diesen Zeitpunkten in die Variable 7-19. Ein Teil des Verbrauches fand aber bereits vor 07:00 Uhr statt. Wie groß dieser Teil ist, weiß niemand.

Je nach Größe Deines Ausleseintervalls und Höhe Deines Verbrauchs (insbesondere in den Zeiten um 7 und 19 Uhr), kannst Du diese Ungenauigkeit selbst abschätzen und entscheiden, ob Du damit leben kannst.

Gruß
Frank

Hallo Frank,

das Script wird dann gestartet, wenn sich die Variable 34126 ändert.

Der Zähler S0 wird bei mir alle 30 Sekunden ausgelesen. ( wegen Momentanverbrauch W ).

Der Tag/Nacht Wert muss ja dann addiert den Tageswert ergeben?