Stromzähler NT HT Niedrigtarig / Hochtarif abbilden

Begonnen von jnewton957, 25 Januar 2020, 18:16:48

Vorheriges Thema - Nächstes Thema

jnewton957

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
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

amenomade

Zeig bitte ein "list" von deinem esa2000 Device
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Aurel_B

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.