Hallo,
ich habe zu Niedritraif bzw. Hochtarifzähler über die Suche nichts gefunden.
Da ich Wärmepumpenzähler habe, habe ich diesen über esa2000WZ in FHEM eingebunden.
Als reading habe ich mit base1 = HT und base2=NT den Start 1.1.2020 für Hochtarif und Niedrigtarif gem. STromzähler als Basis eingestellt.
NT wird am Stromzähler ab 21.00 Uhr bis etwa 6.00 Uhr und dann HT angezeigt.
Mit 1000 ticks /kwH bekomme ich auch recht gute Werte für actual (Momentanleistung) und auch day (Tagesverbrauch) ausgelesen.
Wie kann ich aber nun bei 1000 ticks/kwH jeweils ein usereading für NT und HT bauen?
Wie kann ich denn auch einen Zählerstand NT und Zählerstand HT ausgehend vom base erzeugen. Also quasi die Zählerstände am Stromzähler nachbilden?
Wenn es nicht als userreading geht, nehme ich auchgerne eine Idee für ein dummy an. (dummy fragt nach dummy - schönes Wortspiel)
Danke
Jörg
Zeig bitte ein "list" von deinem esa2000 Device
Auch wenn es ein uralter Thread ist antworte ich mal da er der einzige Thread zu diesem Thema zu sein scheint und ich eine Lösung für Hoch-/Niedertarif habe die ich gerne präsentieren möchte:
Ich greife den Tarif vom Tarifausgang des Stromzählers des EWs ab (ganz offiziell), schlussendlich wird ein Pin des Raspberry Pi auf low/high geschaltet abhängig vom Tarif. Man könnte das auch via Zeitschaltuhr in FHEM realisieren falls die Tarifzeiten bekannt sind, der Stromzähler aber keinen Tarifausgang hat. Ich habe dann 2 Dummys, Hochtarif und Niedertarif die entsprechend den aktuellen Zustand signalisieren. Eine Routine aus "my_utils" wird dann via einem notify mit einem Reading verknüpft für welches eben Hoch- und Niedertarifreadings generiert werden sollen. Ich brauch das z.B. für meinen Wechselrichter um die täglichen Erträge aufzuteilen in Hoch- und Niedertarif damit meinem Ertragsrechnungen entsprechend korrekt sind.
Hier die entsprechenden Codestücke, beginnend mit den Tarifdummies:
defmod GPIO_Tarif RPI_GPIO 18
attr GPIO_Tarif direction input
attr GPIO_Tarif event-on-change-reading state
attr GPIO_Tarif icon mdt-crosshairs-gps
attr GPIO_Tarif interrupt both
attr GPIO_Tarif room Strom
defmod n_Get_Tarif notify GPIO_Tarif set Hochtarif $EVENT;; set Niedertarif $EVENT;;
attr n_Get_Tarif icon mdt-exclamation-thick
attr n_Get_Tarif room Strom
defmod Niedertarif dummy
attr Niedertarif group Tarif
attr Niedertarif icon mdt-arrow-down-thin-circle-outline
attr Niedertarif room Strom
defmod Hochtarif readingsProxy Niedertarif:state
attr Hochtarif group Tarif
attr Hochtarif icon mdt-arrow-up-thin-circle-outline
attr Hochtarif room Strom
attr Hochtarif setFn {($CMD eq "on")?"off":"on"}
attr Hochtarif valueFn {($VALUE eq "on")?"off":"on"}
Die Routine in "my_utils" sieht dann wie folgt aus:
# Generiert Hoch- und Niedertarifreadings inkrementell abhängig vom momentan aktiven Tarif. Argumente: $device, $reading
sub Tarif_Reading($$) {
my ( $device, $reading ) = @_;
my $currVal = ReadingsVal($device, $reading, 0);
my $oldVal = ReadingsVal($device, $reading."_Oldval", 0);
my $diff = $currVal - $oldVal;
# Falls $diff negativ == Zähler wurde zurückgesetzt -> HT/NT Zähler ebenfalls zurücksetzen
if ($diff < 0) {
fhem("setreading ".$device." ".$reading."_HT 0");
fhem("setreading ".$device." ".$reading."_NT 0");
} else {
# Tarifreading gemäss aktuellem Tarif erhöhen
if (Value('Hochtarif') eq 'on') {
my $val = ReadingsVal($device, $reading."_HT", 0) + $diff;
fhem("setreading ".$device." ".$reading."_HT ".$val);
} elsif (Value('Niedertarif') eq 'on') {
my $val = ReadingsVal($device, $reading."_NT", 0) + $diff;
fhem("setreading ".$device." ".$reading."_NT ".$val);
}
}
fhem("setreading ".$device." ".$reading."_Oldval ".$currVal);
return;
}
Und schlussendlich noch das entsprechende notify:
defmod n_Kostal_Tagesertrag_Tarifschaltung notify Kostal:Ertrag_Tag:.* {Tarif_Reading("Kostal", "Ertrag_Tag")}
attr n_Kostal_Tagesertrag_Tarifschaltung icon mdt-exclamation-thick
attr n_Kostal_Tagesertrag_Tarifschaltung room Photovoltaik
Da es ein Tageszähler ist setze ich die Zählerstände in der Nacht in einem at auf 0 zurück:
fhem("setreading Kostal Ertrag_Tag_HT 0");
fhem("setreading Kostal Ertrag_Tag_NT 0");
Im Anhang seht ihr, wie das aussehen kann.