Autor Thema: Stromverbrauch per DOIF?  (Gelesen 6290 mal)

Offline Franz Tenbrock

  • Hero Member
  • *****
  • Beiträge: 1421
  • trotz 1000 Beiträgen immer noch Anfänger :-(
Antw:Stromverbrauch per DOIF?
« Antwort #45 am: 07 Dezember 2022, 17:45:37 »
Hallo Damian
2 Wochen lief dein doif super gut
heute morgen hatte ich aber Probleme mit meiner WP,
hatte gestern was an den Einstellungen geändert, zu, Dank heute morgen dann Störung
da ich eh mit der Zeit knapp war, schnell Sicherung raus dann wieder an  etc.

nun sind die Werte alle durcheinander.

Gibt es eine einfache Möglichkeit alle Werte auf 0 zu setzen?
zB
setreading di_counter_new  MQTT2_HeishaMo*.* 0

Sorry für den Code sicher falsch ;-)

   
aktueller_Wert:     723..Watt    passt
 
heute:    -109511.5..Wh   eher der letzte Wert

gestern:  12332..Wh         ok
 
Monat:       46364.00..Wh     ok

Vor_Monat: 27264..Wh         ok
 
Jahr:          7823.50..Wh       ev von heute


cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #46 am: 07 Dezember 2022, 18:31:29 »
ja, du kannst einfach die Readings, die mit "counter" enden mit setreading überschreiben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline der-Lolo

  • Hero Member
  • *****
  • Beiträge: 1880
Antw:Stromverbrauch per DOIF?
« Antwort #47 am: 17 Dezember 2022, 10:21:12 »
Guten Morgen Damian,
sag mal ist es auch möglich auf vorhandene Werte in einem DB Log zurückzugreifen?

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #48 am: 17 Dezember 2022, 10:34:13 »
Guten Morgen Damian,
sag mal ist es auch möglich auf vorhandene Werte in einem DB Log zurückzugreifen?

z. Zt. nicht. Das Modul sammelt selbst über die Zeit die Daten und legt sie intern in Readings ab.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 922
Antw:Stromverbrauch per DOIF?
« Antwort #49 am: 17 Dezember 2022, 11:08:37 »
sag mal ist es auch möglich auf vorhandene Werte in einem DB Log zurückzugreifen?
das würde mich auch brennend interessieren ;D
Einfacher FHEM Anwender auf Intel®NUC

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #50 am: 17 Dezember 2022, 12:03:30 »
das würde mich auch brennend interessieren ;D

Bereits Post vorher beantwortet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline der-Lolo

  • Hero Member
  • *****
  • Beiträge: 1880
Antw:Stromverbrauch per DOIF?
« Antwort #51 am: 17 Dezember 2022, 12:42:27 »
Ist das ein riesiger umbau?
Der kompakte Card-Style gefällt mir doch sehr sehr gut....

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #52 am: 17 Dezember 2022, 13:00:45 »
Ist das ein riesiger umbau?
Der kompakte Card-Style gefällt mir doch sehr sehr gut....

z. Zt. ja. Ich bin noch dabei das hier zu realisieren: https://forum.fhem.de/index.php/topic,130437.msg1246847.html#msg1246847

Danach werde ich mir Gedanken machen, wie man Daten aus bestehenden Logs übernehmen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline der-Lolo

  • Hero Member
  • *****
  • Beiträge: 1880
Antw:Stromverbrauch per DOIF?
« Antwort #53 am: 17 Dezember 2022, 13:30:06 »
Auch das schaut sehr gut aus - also ich bin sehr interessiert an einer DB-Log anbindung.

Offline Sany

  • Full Member
  • ***
  • Beiträge: 461
Antw:Stromverbrauch per DOIF?
« Antwort #54 am: 02 Januar 2023, 11:35:15 »
Hallo Damian,

hier passt das wohl am besten:
Es war der Jahreswechsel und ich hatte mich schon gefreut, dem DOIF** (quasi) zuzuschauen, wie es die Daten verschiebt und das neue Jahr zu zählen beginnt.....

Hat aber nicht geklappt, folgendes hab ich dann rausgefunden:
es wird in der midnight-sub auf $mday und $yday geprüft. Das sind ja Perl-Variablen in fhem, die nicht "angepasst" sind, wie z.B. $year oder $month (->1...12). Ich habe dann in "perldoc -f localtime" nachgesehen und dort steht: $mday is the day of the month, also 1...Monatsende, das passt auch, aber $yday: is the day of the year, in the range 0..364 (or 0..365 in leap years.) Hat am 1.1. auch 0 ergeben. Damit wurde natürlich der Teil, der "midnight" am 1.1. ausführen soll, nicht abgearbeitet. Hier muss dann wohl auf $yday==0 geprüft werden.
Da ich 2 der DOIFs eingerichtet habe, habe ich nur bei einem das so geändert und die Werte händisch korrigiert, das 2te habe ich gelassen und gehofft, es läuft dann heute Nacht. Auch wieder nicht, Problem hier: die subs haben keine eindeutigen Namen, und es gilt ja immer die letzte geänderte Version, das war dann die mit dem $yday==0, also kanns am 2.1. ($yday=1) auch nicht gehen....
Hab ich mir dann auch korrigiert, sollte dann nächstes Jahr korrekt laufen.
Und ich hab noch die Jahresprüfung in die Klammer der Monatsprüfung geschoben, dann wird das nur jeden 1. des Monats und nicht täglich geprüft.

sub $SELF_midnight { ## Diese Funktion wird um Mitternacht ausgeführt
  my ($device,$reading,$mday,$yday)=@_;
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,1));   
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);
  set_Reading("$device.$reading.day",0,1);
  set_Reading ("$device.$reading.month",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.month_counter",0)))*1000)/1000,1);
  set_Reading ("$device.$reading.year",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.year_counter",0)))*1000)/1000,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 == 0) {
    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);
  }
  }

Vielleicht ist das ja hilreich.

Noch ne Frage zu der Art, wie Du das geschrieben hast: Beim Aufruf der sub wird $mday und $yday übergeben, das sind ja die fhem-perl Variablen. In der sub nimmst Du aber die selben Bezeichnungen, deklarierst diese aber neu (my(...$mday,$yday)=@_
Ist das üblich? Ich hätte hier vermutlich eigene Namen genutzt, allerdings gilt die Deklaration nur innerhalb der sub, von daher kann die Variable heissen wie sie will....

Gruß


Sany

** 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
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit deConz(ZigBee), MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #55 am: 02 Januar 2023, 13:37:48 »
Danke für das Feedback - ist mir gestern noch gar nicht aufgefallen.

Ich habe die Änderung im Wiki nachgetragen.

Lokale Variablen, und das sind auch die Übergabeparameter, überlagern die globalen Variablen. Das ist in allen mir bekannten Programmiersprachen so.

Man kann ja auch Variablen in einem if-block definieren oder in einer for-Schleife, die leben noch kürzer und überlagern auch die vorherigen.

Ob man die jetzt gleich nennt oder nicht ist eher Geschmacksache.

Es gibt heute eine neue DOIF-Version. Mir ist gestern aufgefallen, dass bei großen Zeiträumen, wie im letzten Jahresdiagramm der Plot etwas verschoben war.

Allerdings ist ja die Darstellung der kumulierten Größen immer um einen Tag bzw. Monat verschoben - das ist zwar prinzipbedingt, aber suboptimal. Daher bastle ich schon fleißig an der card-bars-Darstellung, die für kumulierte Größen besser geeignet ist.
« Letzte Änderung: 02 Januar 2023, 13:41:18 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Per

  • Hero Member
  • *****
  • Beiträge: 1776
Antw:Stromverbrauch per DOIF?
« Antwort #56 am: 02 Januar 2023, 16:05:53 »
Man kann ja auch Variablen in einem if-block definieren oder in einer for-Schleife, die leben noch kürzer und überlagern auch die vorherigen.
Perl ist immer für eine Überraschung gut. Wieder was gelernt!

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #57 am: 02 Januar 2023, 20:49:33 »
Perl ist immer für eine Überraschung gut. Wieder was gelernt!

Du kannst in Perl an beliebiger Stelle sogar einen Block mit eigenen Variablen definieren:

...
{my $var="test";print ($var)}
...
« Letzte Änderung: 02 Januar 2023, 21:18:31 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Hilfreich Hilfreich x 1 Liste anzeigen

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1266
Antw:Stromverbrauch per DOIF?
« Antwort #58 am: 24 Januar 2023, 15:08:18 »
Hallo,

ich habe einige Shellys, die den aktuellen Verbrauch messen.
Und ich habe es endlich geschafft, das DOIF von Damian anzupassen.
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

Soweit ich verstanden habe, wird hier die Energie und nicht die Leistung anzugeben.
Das wäre also das Reading "energy" aus dem Shelly.
Zusätzlich habe ich dort noch ein UserReading angelegt "relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum("$name","relay_0_energy",0)}".

Im Shelly für den Kühlschrank steht z.B.
energy     17776
energy_total    251159

Wenn ich nun im DOIF di_counter_new das Reading energy verwende, dann bekomme ich eine Anzeige von "157 kWh".

Welches Reading der Shelly muss ich verwenden (oder eventuell ein UserReading anlegen)?

Danke im Voraus
lg, Gerhard

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:Stromverbrauch per DOIF?
« Antwort #59 am: 24 Januar 2023, 15:28:37 »
Hallo,

ich habe einige Shellys, die den aktuellen Verbrauch messen.
Und ich habe es endlich geschafft, das DOIF von Damian anzupassen.
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

Soweit ich verstanden habe, wird hier die Energie und nicht die Leistung anzugeben.
Das wäre also das Reading "energy" aus dem Shelly.
Zusätzlich habe ich dort noch ein UserReading angelegt "relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum("$name","relay_0_energy",0)}".

Im Shelly für den Kühlschrank steht z.B.
energy     17776
energy_total    251159

Wenn ich nun im DOIF di_counter_new das Reading energy verwende, dann bekomme ich eine Anzeige von "157 kWh".

Welches Reading der Shelly muss ich verwenden (oder eventuell ein UserReading anlegen)?

Danke im Voraus
lg, Gerhard

Wenn der Shelly die Energie (es ist ein Zählerwert der immer aufsteigend sein muss) liefert, dann kannst du doch direkt das Reading vom Shelly angeben und braucht nicht userReading anlegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

 

decade-submarginal