Hauptmenü

Wasserzähler

Begonnen von Damian, 17 Dezember 2020, 18:48:46

Vorheriges Thema - Nächstes Thema

Damian

Hier mal ein Beispiel für einen Wasserzähler mit Visualisierung:

Der Wasserzähler wurde über ESPEeasy eingebunden. Die Verbräuche können täglich, wöchentlich, monatlich und jährlich geloggt werden.

defmod Wasserzaehler DOIF { [00:02];;\
  set_Reading("tagesverbrauch",get_Reading("heute"),1);;\
  set_Reading("gesamt",get_Reading("heute")+get_Reading("gesamt"));;\
  set_Reading("woche",get_Reading("heute")+get_Reading("woche"),$wday == 1 ? 1 : 0);;\
  set_Reading("monat",get_Reading("heute")+get_Reading("monat"),$mday == 1 ? 1 : 0);;\
  set_Reading("jahr",get_Reading("heute")+get_Reading("jahr"),$yday == 1 ? 1 : 0);;\
  set_Reading("heute",0);;\
  set_Reading("woche",0) if ($wday == 1);;\
  set_Reading("monat",0) if ($mday == 1);;\
  set_Reading("jahr",0) if ($yday == 1);;\
}\
reset {\
my $Wasseruhr=318334;;\
set_Reading ("gesamt",$Wasseruhr);;\
set_Reading ("heute",0);;\
#set_Reading ("woche",0);;\
#set_Reading ("monat",0);;\
#set_Reading ("jahr",0);;\
}\
\
{\
  set_Reading("heute",get_Reading("heute")+([ESPEasy_ESP_Wasser_Wasserzaehler:Count]/2),0);;\
}\

attr Wasserzaehler group Aktuell
attr Wasserzaehler room Wasser,DOIF
attr Wasserzaehler uiTable {package ui_Table;;\
$TC{0..3}="style='padding-left: 3px;;padding-right: 3px'"\
}\
bar([$SELF:tagesverbrauch],0,600,"Vortag",120,0,"l",undef,80)|\
bar([$SELF:heute],0,600,"heute",120,0,"l",undef,80)|\
bar([$SELF:woche]/1000,0,4,"Woche",120,0,"m²",undef,80)|\
bar([$SELF:monat]/1000,0,15,"Monat",120,0,"m²",undef,80)|\
bar([$SELF:jahr]/1000,0,100,"Jahr",120,0,"m²",undef,80)


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rischbiter123

Moin,

sieht ja richtig gut aus. Aber müsste es nicht m3 heißen?

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Damian

Zitat von: rischbiter123 am 17 Dezember 2020, 19:03:29
Moin,

sieht ja richtig gut aus. Aber müsste es nicht m3 heißen?

LG

Andreas

klar, ist mir noch gar nicht aufgefallen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Hallo Damian,

ich habe das natürlich auch gleich ausprobiert. Schaut toll aus. Danke.

Eine Frage hätte ich aber bitte zu Deinem Wasserzähler auf Basis ESPEasy.
Ich versuche mich auch damit, weiß aber nicht, welche Parameter ich dort für den Durchflussmesser eingeben muss.
https://forum.fhem.de/index.php/topic,114088.msg1083480.html#msg1083480

Kannst Du mir da vielleicht helfen?
Ich komme da einfach nicht weiter.

Danke, lg, Gerhard

Damian

Bei mir ist das relativ primitiv mit einem Puls Counter gelöst. Daher muss ich bei mir gar nichts umrechnen, höchstens durch zwei teilen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe jetzt mehr Vergleichsdaten der jeweiligen Vorgänger reingepackt und anders dargestellt:

defmod Wasserverbrauch DOIF { [00:02];;\
  set_Reading("tagesverbrauch",get_Reading("heute"),1);;\
  set_Reading("gesamt",get_Reading("heute")+get_Reading("gesamt"));;\
  set_Reading("woche",get_Reading("heute")+get_Reading("woche"));;\
  set_Reading("monat",get_Reading("heute")+get_Reading("monat"));;\
  set_Reading("jahr",get_Reading("heute")+get_Reading("jahr"));;\
  set_Reading("heute",0);;\
  if ($wday == 1){\
    set_Reading("wochenverbrauch",get_Reading("woche"),1);;\
    set_Reading("woche",0);;\
  }\
  if ($mday == 1) {\
    set_Reading("monatsverbrauch",get_Reading("monat"),1);;\
    set_Reading("monat",0);;\
   \
  }\
  if ($yday == 1) {\
    set_Reading("jahresverbrauch",get_Reading("jahr"),1);;\
    set_Reading("jahr",0);;\
  }\
}\
reset {\
my $Wasseruhr=329325;;\
set_Reading ("gesamt",$Wasseruhr);;\
set_Reading ("heute",0);;\
set_Reading ("woche",0);;\
set_Reading ("monat",0);;\
set_Reading ("jahr",0);;\
}\
\
{\
  set_Reading("heute",get_Reading("heute")+([ESPEasy_ESP_Wasser_Wasserzaehler:Count]/2),0);;\
}\

attr Wasserverbrauch group Aktuell
attr Wasserverbrauch room Wasser,DOIF
attr Wasserverbrauch uiTable {package ui_Table;;\
$TC{0..3}="style='padding-left: 3px;;padding-right: 3px'"\
}\
cylinder("Tag",0,600,"l",undef,undef,undef,1,[$SELF:tagesverbrauch],30,"letzter",[$SELF:heute],60,"aktuell")|\
cylinder("Woche",0,4,"m³",undef,undef,undef,1,[$SELF:wochenverbrauch]/1000,30,"letzte",[$SELF:woche]/1000,60,"aktuell")|\
cylinder("Monat",0,15,"m³",undef,undef,undef,1,[$SELF:monatsverbrauch]/1000,30,"letzter",[$SELF:monat]/1000,60,"aktuell")|\
cylinder("Jahr",0,150,"m³",undef,undef,undef,1,[$SELF:jahresverbrauch]/1000,30,"letztes",[$SELF:jahr]/1000,60,"aktuell")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Und so sieht es aus, wenn man noch den Durchschnittsverbrauch dazu nimmt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rischbiter123

Moin Damian,

nach welcher Anleitung hast Du den Counter gebaut? Würde den nämlich auch gerne bauen. Mit g..gle habe ich zwar verschiedene gefunden, würde aber natürlich gerne eine nehmen, von der ich sicher sein kann, daß sie auch mit Fhem funktioniert.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Damian

Zitat von: rischbiter123 am 19 Dezember 2020, 19:49:52
Moin Damian,

nach welcher Anleitung hast Du den Counter gebaut? Würde den nämlich auch gerne bauen. Mit g..gle habe ich zwar verschiedene gefunden, würde aber natürlich gerne eine nehmen, von der ich sicher sein kann, daß sie auch mit Fhem funktioniert.

LG

Andreas

Nach eigener Anleitung ;)

Ich habe den hier gekauft: TCRT5000

Wichtig ist noch: zwischen ,,D0" und ,,A0" einen 100kOhm Widerstand anlöten, sonst zählt er zu oft.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Hier noch der passende Code mit Durchschnittsberechnung (siehe https://forum.fhem.de/index.php/topic,116814.msg1112313.html#msg1112313):

defmod Wasserverbrauch DOIF { [00:02];;\
  set_Reading("tagesverbrauch",get_Reading("heute"),1);;\
  set_Reading("gesamt",get_Reading("heute")+get_Reading("gesamt"));;\
  set_Reading("zaehler",get_Reading("heute")+get_Reading("zaehler"));;\
  set_Reading("tage",1+get_Reading("tage"));;\
  set_Reading("tagesdurchschnitt",get_Reading("gesamt")/get_Reading("tage"));;\
  set_Reading("wochendurchschnitt",get_Reading("tagesdurchschnitt")*7/1000);;\
  set_Reading("monatsdurchschnitt",get_Reading("tagesdurchschnitt")*30.5/1000);;\
  set_Reading("jahresdurchschnitt",get_Reading("tagesdurchschnitt")*365/1000);;\
  set_Reading("woche",get_Reading("heute")+get_Reading("woche"));;\
  set_Reading("monat",get_Reading("heute")+get_Reading("monat"));;\
  set_Reading("jahr",get_Reading("heute")+get_Reading("jahr"));;\
  set_Reading("heute",0);;\
  if ($wday == 1){\
    set_Reading("wochenverbrauch",get_Reading("woche"),1);;\
    set_Reading("woche",0);;\
  }\
  if ($mday == 1) {\
    set_Reading("monatsverbrauch",get_Reading("monat"),1);;\
    set_Reading("monat",0);;\
   \
  }\
  if ($yday == 1) {\
    set_Reading("jahresverbrauch",get_Reading("jahr"),1);;\
    set_Reading("jahr",0);;\
  }\
}\
reset {\
set_Reading ("zaehler",329325);;\
set_Reading ("gesamt",0);;\
set_Reading ("tage",0);;\
#set_Reading ("heute",0);;\
#set_Reading ("woche",0);;\
#set_Reading ("monat",0);;\
#set_Reading ("jahr",0);;\
}\
\
{\
  set_Reading("heute",get_Reading("heute")+([ESPEasy_ESP_Wasser_Wasserzaehler:Count]/2),0);;\
}\

attr Wasserverbrauch group Aktuell
attr Wasserverbrauch room Wasser,DOIF
attr Wasserverbrauch uiTable {package ui_Table;;\
$TC{0..3}="style='padding-left: 3px;;padding-right: 3px'"\
}\
cylinder("Tag",0,600,"l",undef,undef,undef,1,[$SELF:tagesdurchschnitt],120,"Durchschnitt",[$SELF:tagesverbrauch],30,"letzter",[$SELF:heute],60,"aktuell")|\
cylinder("Woche",0,4,"m³",undef,undef,undef,1,[$SELF:wochendurchschnitt],120,"Durchschnitt",[$SELF:wochenverbrauch]/1000,30,"letzte",[$SELF:woche]/1000,60,"aktuell")|\
cylinder("Monat",0,15,"m³",undef,undef,undef,1,[$SELF:monatsdurchschnitt],120,"Durchschnitt",[$SELF:monatsverbrauch]/1000,30,"letzter",[$SELF:monat]/1000,60,"aktuell")|\
cylinder("Jahr",0,150,"m³",undef,undef,undef,1,[$SELF:jahresdurchschnitt],120,"Durchschnitt",[$SELF:jahresverbrauch]/1000,30,"letztes",[$SELF:jahr]/1000,60,"aktuell")

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

carlos

Hallo,
Leider sieht das mit dem Flex style so aus.
Ist nicht nutzbar, das habe ich auch schon bei dem Abfall doif festgestellt.
Liegt mit Sicherheit am Flex style, aber wo kann man hier ansetzen um das anzupassen?
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Damian

Zitat von: carlos am 20 Dezember 2020, 13:45:03
Hallo,
Leider sieht das mit dem Flex style so aus.
Ist nicht nutzbar, das habe ich auch schon bei dem Abfall doif festgestellt.
Liegt mit Sicherheit am Flex style, aber wo kann man hier ansetzen um das anzupassen?
Gruß

Carlos

keine Ahnung, ich verwende die Standard-Styles (f18)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CQuadrat

Wie wird denn das reset getriggert?

Irgendwie ist mir das DOIF-Perl nicht so ganz einleuchtend....
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

Damian

#13
Zitat von: CQuadrat am 21 Dezember 2020, 09:53:57
Wie wird denn das reset getriggert?

Irgendwie ist mir das DOIF-Perl nicht so ganz einleuchtend....

reset ist ein Block, den man selbst per set nach Bedarf ausführen kann - es gibt hier keinen Trigger.

DOIF-Perl-Syntax ist hier beschrieben: https://fhem.de/commandref_DE.html#DOIF_Perl_Modus

Hier findet man Syntax für das uiTable-Attribut für die Visualisierung: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#14
Ich habe die Farben jetzt etwas wasserähnlicher genommen. Durchschnitt soll sich aber wegen der möglichen Überlappungen etwas abheben:

{package ui_Table;
$TC{0..3}="style='padding-left: 3px;padding-right: 3px'"
}
cylinder("Tag",0,600,"l",undef,undef,undef,1,[$SELF:tagesdurchschnitt],30,"Durchschnitt",[$SELF:tagesverbrauch],220,"letzter",[$SELF:heute],180,"aktuell")|
cylinder("Woche",0,4,"m³",undef,undef,undef,1,[$SELF:wochendurchschnitt],30,"Durchschnitt",[$SELF:wochenverbrauch]/1000,220,"letzte",[$SELF:woche]/1000,180,"aktuell")|
cylinder("Monat",0,15,"m³",undef,undef,undef,1,[$SELF:monatsdurchschnitt],30,"Durchschnitt",[$SELF:monatsverbrauch]/1000,220,"letzter",[$SELF:monat]/1000,180,"aktuell")|
cylinder("Jahr",0,150,"m³",undef,undef,undef,1,[$SELF:jahresdurchschnitt],30,"Durchschnitt",[$SELF:jahresverbrauch]/1000,220,"letztes",[$SELF:jahr]/1000,180,"aktuell")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF