Stromzähler ablesen in Fhem

Begonnen von Tommy82, 27 Februar 2019, 20:58:18

Vorheriges Thema - Nächstes Thema

Maista

@Damian

danke für die Beispiele.
Ich hatte anfangs ebenfalls vor meine Wasseruhr mit einer Lichtschranke zu erfassen.
Hatte mir dazu das hier https://www.stall.biz/project/intelligenter-impulsgeber-w-mit-s0-schnittstelle-zum-nachruesten-fuer-konventionelle-wasserzaehler
bestellt. Nach dem ich nach einiger Zeit auf der Seite war hat mich der Hinweis zum Thema "Algenbildung" aber wieder davon abgebracht.
Verwende nun die ESP32CAM-Lösung.

Der eHZ wird bei mir nun wie bei Dir abgefragt. Leider stellt mein Versorger nur die Momentane Leistung und den Zählerstand zur Verfügung :(

Jetzt werde ich erst einmal versuchen deine Lösung umzusetzen  :D

Gruss Gerd

Damian

#46
Zitat von: Maista am 20 März 2022, 16:03:02
@Damian

danke für die Beispiele.
Ich hatte anfangs ebenfalls vor meine Wasseruhr mit einer Lichtschranke zu erfassen.
Hatte mir dazu das hier https://www.stall.biz/project/intelligenter-impulsgeber-w-mit-s0-schnittstelle-zum-nachruesten-fuer-konventionelle-wasserzaehler
bestellt. Nach dem ich nach einiger Zeit auf der Seite war hat mich der Hinweis zum Thema "Algenbildung" aber wieder davon abgebracht.
Verwende nun die ESP32CAM-Lösung.

Der eHZ wird bei mir nun wie bei Dir abgefragt. Leider stellt mein Versorger nur die Momentane Leistung und den Zählerstand zur Verfügung :(

Jetzt werde ich erst einmal versuchen deine Lösung umzusetzen  :D

Gruss Gerd

Unser Stromzähler liefert auch nur Momentanleistung und Zählerstände - das reicht. Beim Stromversorger habe ich die dazugehörige PIN zum Zähler nach Beantragung erhalten, mit der man die Genauigkeit der Angaben erhöhen kann.

Für den S0-Zähler kann man sich relativ einfach aus den Impulsen nicht nur den Stromverbrauch, sondern über userReadings auch die momentane Leistung errechnen:

power_pv {OldReadingsAge($name,"SENSOR_COUNTER_C1",0) == 0 ? 0 : (ReadingsVal($name,"SENSOR_COUNTER_C1",0)-OldReadingsVal($name,"SENSOR_COUNTER_C1",0))*3.6/OldReadingsAge($name,"SENSOR_COUNTER_C1",0)}

Die Wasserzählerlösung hat mich nicht mal 2 Euro gekostet :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

Zitat von: Damian am 20 März 2022, 10:38:55
Ich habe es nun geschafft alle meine Zähler in einem esp8266 unterzubringen.

Ich habe zwei Counter S0-Zähler für Wasser und PV und einen Zweirichtungszähler eingebunden.

Damit konnte ich einen ELV Stromzähler EM 1000-S und einen Lesekopf über serielle Schnittstelle zum Raspi mit OBIS-Stromzähler-Device in Rente schicken.

Die Daten werden über MQTT an FHEM geschickt.

Die erforderlichen Bauteile (esp8266, Fototransistor, Neodym-Magnet) hatte ich noch in der Grabbelkiste. Den Wasserzähler über TCRT5000 Infrarot-Reflexionsschalter hatte ich zuvor über espeasy eingebunden gehabt.

Visualisierung erfolgt hierrüber:

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler

Sehr cool, vielen Dank dafür.
Aber hilf bitte einem alten Mann mal, diese Fehlermeldung bekomme ich condition c02: syntax error, line 1, at EOF...
Weiss aber garnicht, wo der zweite Timer versteckt ist. Zum Test habe ich erstmal nur einen Zähler (PV) eingebunden.

"mid" ist doch der erste Timer... und dann ?

mid {[00:01];;                          ## Sicherung der Daten um Mitternacht
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;
  }
}

init {                                ## initialisierung aller Readings
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert
    init_readings($_counter[$i][0],$_counter[$i][1]);;
  }
}

DEF TPL_stat (
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten
                    ##  $1 Zählerdevice, $2 Zählerreading

    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;
    if ($diff < 0 and get_Reading("$1.$2.last_counter",0) > 0  or $diff > 0 and get_Reading("$1.$2.last_counter",0) < 0) {  ## Wenn der Zähler zurückgesetzt wurde, dann Zählerstände zurückrechnen
      set_Reading("$1.$2.day_counter",-(get_Reading("$1.$2.day",0)));;
      set_Reading("$1.$2.month_counter",-(get_Reading("$1.$2.month",0)));;
      set_Reading("$1.$2.year_counter",-(get_Reading("$1.$2.year",0)));;
    }
    set_Reading ("$1.$2.last_counter",[$1:$2,0]);;
    set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;
    set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;
    set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;
  }
)

## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Du zeigst mir aber nicht die ganze Definition?

Es gibt nur einen Timer, der kümmert sich um all deine Devices ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

Nope, war nur der Abschnit der IMO den Timer beinhaltete. Weil die Fehlermeldung sich auf C02 bezieht.

Hier die ganze Definition:  :-[

subs {
##                     Device        Reading   
  push (@{$_counter},["Shelly.DachbodenPV","TagesErtragPV"]);;         ## Solarenergie
 
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt
  my ($device,$reading,$mday,$yday)=@_;;
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));;   
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);;
  set_Reading("$device.$reading.day",0,1);;
  if ($mday == 1) {
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;
    set_Reading("$device.$reading.last_month",get_Reading("$device.$reading.month",0),1);;
    set_Reading("$device.$reading.month",0,1);;
  }
  if ($yday == 1) {
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;
    set_Reading("$device.$reading.last_year",get_Reading("$device.$reading.year",0),1);;
    set_Reading("$device.$reading.year",0,1);;
  }
}

sub init_readings {
  my ($device,$reading)=@_;;
  if (get_Reading("$device.$reading.day_counter","") eq "") {   ## Initialisierung der Readings
    ## aktuellen Zählerstand initialisieren
    set_Reading("$device.$reading.last_counter",ReadingsVal($device, $reading,0));;
    set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));;
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;
 
    set_Reading ("$device.$reading.day",0);;           ## aktueller Tagesverbrauch
    set_Reading ("$device.$reading.month",0);;         ## aktueller Monatsverbrauch
    set_Reading ("$device.$reading.year",0);;          ## aktueller Jahresverbrauch
    set_Reading ("$device.$reading.last_day",0);;      ## Verbrauch des letzten Tages
    set_Reading ("$device.$reading.last_month",0);;    ## Verbrauch des letzten Monats
    set_Reading ("$device.$reading.last_year",0);;     ## Verbrauch des letzten Jahres
## Log definieren
fhem ("defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.last_(day|month|year):.*");;
    fhem ("attr log.counter.$device.$reading room Filelogs");;
}

}
} ## Ende subs-Block

mid {[00:01];;                          ## Sicherung der Daten um Mitternacht
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;
  }
}

init {                                ## initialisierung aller Readings
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert
    init_readings($_counter[$i][0],$_counter[$i][1]);;
  }
}

DEF TPL_stat (
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten
                    ##  $1 Zählerdevice, $2 Zählerreading

    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;
    if ($diff < 0 and get_Reading("$1.$2.last_counter",0) > 0  or $diff > 0 and get_Reading("$1.$2.last_counter",0) < 0) {  ## Wenn der Zähler zurückgesetzt wurde, dann Zählerstände zurückrechnen
      set_Reading("$1.$2.day_counter",-(get_Reading("$1.$2.day",0)));;
      set_Reading("$1.$2.month_counter",-(get_Reading("$1.$2.month",0)));;
      set_Reading("$1.$2.year_counter",-(get_Reading("$1.$2.year",0)));;
    }
    set_Reading ("$1.$2.last_counter",[$1:$2,0]);;
    set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;
    set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;
    set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;
  }
)

## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Du hast dir da was verbastelt, damit geht es, als RAW-Definition:

defmod di_counter_new DOIF subs {\
##                     Device        Reading   \
  push (@{$_counter},["Shelly.DachbodenPV","TagesErtragPV"]);; ## Wasserzähler\
  \
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt\
  my ($device,$reading,$mday,$yday)=@_;;\
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));;   \
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);;\
  set_Reading("$device.$reading.day",0,1);;\
  if ($mday == 1) {\
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_month",get_Reading("$device.$reading.month",0),1);;\
    set_Reading("$device.$reading.month",0,1);;\
  }\
  if ($yday == 1) {\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_year",get_Reading("$device.$reading.year",0),1);;\
    set_Reading("$device.$reading.year",0,1);;\
  }\
}\
\
sub init_readings {\
  my ($device,$reading)=@_;;\
  if (get_Reading("$device.$reading.day_counter","") eq "") {   ## Initialisierung der Readings\
    ## aktuellen Zählerstand initialisieren\
    set_Reading("$device.$reading.last_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));; \
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
  \
    set_Reading ("$device.$reading.day",0);;           ## aktueller Tagesverbrauch\
    set_Reading ("$device.$reading.month",0);;         ## aktueller Monatsverbrauch\
    set_Reading ("$device.$reading.year",0);;          ## aktueller Jahresverbrauch\
    set_Reading ("$device.$reading.last_day",0);;      ## Verbrauch des letzten Tages\
    set_Reading ("$device.$reading.last_month",0);;    ## Verbrauch des letzten Monats\
    set_Reading ("$device.$reading.last_year",0);;     ## Verbrauch des letzten Jahres\
## Log definieren\
fhem ("defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.last_(day|month|year):.*");;\
    fhem ("attr log.counter.$device.$reading room Filelogs");;\
}\
\
}\
} ## Ende subs-Block\
\
mid {[00:01];;                          ## Sicherung der Daten um Mitternacht\
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\
  }\
}\
\
init {                                ## initialisierung aller Readings\
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert\
    init_readings($_counter[$i][0],$_counter[$i][1]);;\
  }\
}\
\
DEF TPL_stat (\
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten\
                    ##  $1 Zählerdevice, $2 Zählerreading\
\
    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;\
    if ($diff < 0 and get_Reading("$1.$2.last_counter",0) > 0  or $diff > 0 and get_Reading("$1.$2.last_counter",0) < 0) {  ## Wenn der Zähler zurückgesetzt wurde, dann Zählerstände zurückrechnen\
      set_Reading("$1.$2.day_counter",-(get_Reading("$1.$2.day",0)));;\
      set_Reading("$1.$2.month_counter",-(get_Reading("$1.$2.month",0)));;\
      set_Reading("$1.$2.year_counter",-(get_Reading("$1.$2.year",0)));;\
    }\
    set_Reading ("$1.$2.last_counter",[$1:$2,0]);;\
    set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;\
    set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;\
    set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;\
  }\
)\
\
## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert\
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

#51
Wow, vielen lieben Dank Schaue ich mir morgen im Detail mal an, damit ich vielleicht auch verstehe was ich falsch gemacht habe...

Edith: Sch... Sommerzeit, kann nicht einschlafen, also Zeit versucht sinnvoll zu nutzen.
Fehler gefunden... habe Deinen Code zuerst in Notepad++ kopiert, darin editiert, und nicht gemerkt das jedes Semikolon verdoppelt wurde......

Jetzt habe ich auch direkt meinen Strombezugszähler + Ölzähler eingebunden. Bin gespannt.
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

#52
Hier noch mal ein Update zu meiner Zählerlösung hier: https://forum.fhem.de/index.php/topic,97959.msg1214276.html#msg1214276

Überrascht war ich, dass bei Tasmota auch die einfachen Counter im Gegensatz zu EspEasy offenbar ihren Stand ohne Stromversorgung behalten, allerdings werden sie natürlich nicht weiter gezählt, wenn der Stecker abgezogen ist.

Falls man einen einfachen Counter für Strom, Gas, Wasser benötigt, auf den man sich auch beim Stromausfall verlassen kann, weil man seine Zählerstände nicht dauerhaft anpassen will, so kann man sich das Leben recht einfach machen.

Ich habe eine kaum benutzte USV-Minipowerbank (Werbegeschenk) in der Schublade gefunden, aufgeladen, dazwischen geschaltet und mit Stromausfall getestet - funktioniert.

Rein rechnerisch sollte eine Unterbrechung der Stromversorgung von 10 Stunden und mehr nun kein Problem darstellen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Klaus_R

Zitat von: Damian am 06 April 2022, 18:15:41
Ich habe eine kaum benutzte USV-Minipowerbank (Werbegeschenk) in der Schublade gefunden, aufgeladen, dazwischen geschaltet und mit Stromausfall getestet - funktioniert.

Rein rechnerisch sollte eine Unterbrechung der Stromversorgung von 10 Stunden und mehr nun kein Problem darstellen :)

Sehr interressant! Hab auch schon versucht meinen Wemos so mit Strom zu versorgen. Hintergrund: Wollte in der Dusche Temperatur und Luftfeuchtigkeit über Fhem loggen. Hab dort keine Steckdose mit Dauerstrom. Netzteilversorgung fällt also flach. Hat auch grundsätzlich funktioniert aber... die Hygrometerwerte eines DHT22 fielen immer als erstes aus. Reagiert dieser evtl sehr empfindlich auf Unterversorgung? Dann ging alles nicht mehr obwohl die Anzeige der PB nach einigen Stunden Laufzeit immer noch "Halbvoll" anzeigte. Meine Vermutung Powerbank schält ab da zuwenig Stromentnahme (hab sowas gelesen). Hab dann vorläufig aufgegeben :(

Gibt es das bei Dir nicht? Würde mir Mut machen noch einen Versuch zu starten.
Gruss Klaus
Linux Mint, Raspi-OSMC, Raspi-fhem, WemosD1, Shelly, CUL

Damian

Zitat von: Klaus_R am 07 April 2022, 09:43:57
Sehr interressant! Hab auch schon versucht meinen Wemos so mit Strom zu versorgen. Hintergrund: Wollte in der Dusche Temperatur und Luftfeuchtigkeit über Fhem loggen. Hab dort keine Steckdose mit Dauerstrom. Netzteilversorgung fällt also flach. Hat auch grundsätzlich funktioniert aber... die Hygrometerwerte eines DHT22 fielen immer als erstes aus. Reagiert dieser evtl sehr empfindlich auf Unterversorgung? Dann ging alles nicht mehr obwohl die Anzeige der PB nach einigen Stunden Laufzeit immer noch "Halbvoll" anzeigte. Meine Vermutung Powerbank schält ab da zuwenig Stromentnahme (hab sowas gelesen). Hab dann vorläufig aufgegeben :(

Gibt es das bei Dir nicht? Würde mir Mut machen noch einen Versuch zu starten.
Gruss Klaus

Naja, meine Lösung ist gerade mal einen Tag alt. Da muss ich einfach Erfahrungen sammeln. Meine Strommessungen beim Laden und beim geladenen Akku waren zufriedenstellend. Einen langen Stromausfall müsste ich noch simulieren.

Ebenso verhalten sich Powerbanks unterschiedlich. Ich habe noch eine andere Powerbank, die den Strom unterbricht, wenn sie selbst nach einem Stromausfall Strom bekommt.

Wie schon im Nebenthread erwähnt, braucht ein ESP einfach zu viel Strom, um ihn lange Zeit mit einem Akku zu versorgen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#55
Da die meisten Stromzähler/Gaszähler eine Impulsauswertung (S0) ermöglichen, lässt sich sehr preisgünstig eine zuverlässige Lösung realisieren, siehe: https://forum.fhem.de/index.php/topic,127127.msg1217452.html#msg1217452

Mit ESP8266 mit Tasmota-Counter und einer Powerbank erfüllt sie folgende Bedingung:

-zählt beim Stromausfall

-zählt, wenn FHEM nicht läuft

-behält sogar den Zählerstand, selbst wenn die Powerbank versagen würde

-Momentanleistung lässt sich leicht über UserReadings oder DOIF_Readings ermitteln

-keine Kabelverbindung zum FHEM-Server nötig

-preisgünstig

-kombinierbar mit weiteren S0/D0-Zählern über einen ESP

Auch wenn mein Gaszähler einen M-Bus besitzt (https://forum.fhem.de/index.php/topic,124838.msg1194082.html#msg1194082), habe ich mich für diese Lösung entschieden, weil sie sehr einfach zu realisieren und billig war und wenn ein ESP bereits drei Zähler bedient, dann kann er auch einen vierten ohne Probleme aufnehmen und die Zählerstände per MQTT zum FHEM-Server übertragen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nobbynews

Zitat von: Damian am 09 April 2022, 10:14:00
-zählt beim Stromausfall
Dumme Frage:
Was soll denn bei Stromausfall noch funktionieren und damit die Zählerstände verändern??

Damian

Zitat von: Nobbynews am 09 April 2022, 10:46:19
Dumme Frage:
Was soll denn bei Stromausfall noch funktionieren und damit die Zählerstände verändern??

Es geht hier um eine allgemeine Lösung, es gibt auch Zähler, die ohne Strom laufen, z. B. Wasserzähler :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nobbynews

Zitat von: Damian am 09 April 2022, 10:57:27
, z. B. Wasserzähler :)
Stimmt, den hatte ich für diese Lösung nicht auf dem Schirm.
Das ist ein Punkt.

Damian

Zitat von: Nobbynews am 09 April 2022, 11:02:13
Stimmt, den hatte ich für diese Lösung nicht auf dem Schirm.
Das ist ein Punkt.

Das ist ja nur ein Punkt, viel entscheidender ist aber, dass ein Zähler seinen Zählerstand dauerhaft behalten kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF