Neues Modul: ElectricityCalculator

Begonnen von Sailor, 26 August 2016, 21:05:35

Vorheriges Thema - Nächstes Thema

R1F800

Ich bin jetzt total verwirrt ...
Heute Morgen habe ich in fhem nochmal reingeschaut ... und siehe da, die Readings sind da.

Zur Komplettierung meiner Posts nun die funktionierende definition des Moduls mit GPIO Anbindung:
GPIO Definition
defmod GPIO26 RPI_GPIO 26
attr GPIO26 active_low no
attr GPIO26 direction input
attr GPIO26 event-on-change-reading .*
attr GPIO26 event-on-update-reading .*
attr GPIO26 group Verbrauch
attr GPIO26 interrupt falling
attr GPIO26 room Electric Energy Counter

ElectricityCounter
defmod WPVerbrauch ElectricityCalculator GPIO26.*
attr WPVerbrauch BasicPricePerAnnum 0
attr WPVerbrauch Currency €
attr WPVerbrauch ElectricityCounterOffset 0
attr WPVerbrauch ElectricityKwhPerCounts 0.001
attr WPVerbrauch ElectricityPricePerKWh 0.31
attr WPVerbrauch MonthOfAnnualReading 5
attr WPVerbrauch MonthlyPayment 0
attr WPVerbrauch ReadingDestination CalculatorDevice
attr WPVerbrauch SiPrefixPower W
attr WPVerbrauch room Electric Energy Counter
attr WPVerbrauch stateFormat kW



So, dann begebe ich mich mal an die Qualitätssicherung, ob die Werte stimmen.

@ Sailor
Da ich es nicht verstanden habe, was bewirken denn genau die nachfolgenden Anttribute / Anpassungen:

attr GPIO26 event-on-change-reading .*
attr GPIO26 event-on-update-reading .*


defmod WPVerbrauch ElectricityCalculator GPIO26.*

Ich bekomme häufig zwar sehr gute Tips, aber mir fehlken die Zusammenhänge, und somit das Verständnis.

VG
Ingo

Sailor

Hallo Ingo

Zitat von: R1F800 am 04 Oktober 2018, 07:10:17
Ich bin jetzt total verwirrt ...
Heute Morgen habe ich in fhem nochmal reingeschaut ... und siehe da, die Readings sind da.

Na so was!  ;)

Zitat von: R1F800 am 04 Oktober 2018, 07:10:17
Zur Komplettierung meiner Posts nun die funktionierende definition des Moduls mit GPIO Anbindung:
defmod WPVerbrauch ElectricityCalculator GPIO26.*
Da ich im letzten Post erst gesehen habe, hinter welchem Reading dein Zähler sich versteckt, müsste deine korrekte Definition wie folgt lauten:
defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*
Du brauchst nämlich einen kontinuierlich wachsenden Zähler für deine gezählten Zählimpulse.


Zitat von: R1F800 am 04 Oktober 2018, 07:10:17
Da ich es nicht verstanden habe, was bewirken denn genau die nachfolgenden Anttribute / Anpassungen:
attr GPIO26 event-on-change-reading .*
attr GPIO26 event-on-update-reading .*

Ich bekomme häufig zwar sehr gute Tips, aber mir fehlen die Zusammenhänge, und somit das Verständnis.
Das sogenannte event ist das A und O bei der fhem-Steuerung.
Ein "event" ist eine Nachricht an alle: "Bei mir hat sich was getan". Module können dann darauf reagieren oder es lassen.
Wird dieses event nicht gesetzt, dann bekommt keiner mit, dass dein toller GPIO26 was neues hat.

"GPIO26 event-on-update-reading .*" bedeutet "Nachricht an alle hier GPIO26: Irgendeines meiner Readings wurde mit einem neuen Zeitstempel versehen. Egal ob Wert sich geändert hat oder nicht"
"GPIO26 event-on-change-reading .*" bedeutet "Nachricht an alle hier GPIO26: Irgendeines meiner Readings hat einen neuen Wert (und Zeitstempel)

".*" ist in RegEx ein sogennater WildCard der bedeutet

"."= ein beliebiges Zeihen
und
"*" = Der Operator links neben mir beliebig oft
somit
".*" = Beliebiges Zeichen beliebig oft = alles.

Mein Modul reagiert mittels der generell von fhem vordefinierten Funktion "X_Notify" und reagiert somit (nur) auf events.

Und werden diese nicht getriggert... Katze-in-den-Schwanz-beiß

Gruss
    Sailor
******************************
Man wird immer besser...

majorshark

Zitat von: Sailor am 04 Oktober 2018, 21:36:43
Du brauchst nämlich einen kontinuierlich wachsenden Zähler für deine gezählten Zählimpulse.

So meinte ich das auch. Und ich suche und suche nach dem neuen Feature.  ;)
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

R1F800

Zitat von: Sailor am 04 Oktober 2018, 21:36:43

defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*
Du brauchst nämlich einen kontinuierlich wachsenden Zähler für deine gezählten Zählimpulse.

defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*

Vielen Dank für die Erklärungen !
So wird ein Schuh draus.

Genau dieser Hinweis, den auch majorshark hatte ist der Schlüssel. Hier wäre ein Hinweis / auführliche Beschreibung bestimmt sinnvoll so Unwissenden wie mir beim erstmaligen anlegen einen Hinweis zu geben.
Im WiKi hatte ich jetzt noch nichts gefunden, vielleicht mache ich mich mal an einen Kleinen Beitrag.

OT
Gibt es diese Zusammenhänge wie z.B. das Thema Wildcard .* irgendwo in Gänze für alle Attribute / Möglichkeiten und Synthax nachzulesen? Oder ist das PERL Spezifika? 

Ich komme eher aus der Assembler und Großrechnerwelt und fange gerade mit JAVA an. Von daher wären genau solche Feinheiten super.
Auch um die Formatierungen "stateFormat" etc. korrekt anzuwenden. Ich glaube für jedes Problem gibt es jeweils eine passende Antwort, aber eine allgem, eingültige Formulierung ist dann das, was mir bei dem nächsten Problem wieder fehlt. Vllt. habe ich da zu hohe Erwartungen :-) Ich bin IBM Handbücher der mainframe COBOL, DB2 etc. gewohnt ...

EndOT

Sailor

Hallo Ingo

Zitat von: R1F800 am 05 Oktober 2018, 08:19:58
Vielen Dank für die Erklärungen !
So wird ein Schuh draus.
Siehste!


Zitat von: R1F800 am 05 Oktober 2018, 08:19:58
Im WiKi hatte ich jetzt noch nichts gefunden, vielleicht mache ich mich mal an einen Kleinen Beitrag.

Wiki, was fürn Wiki - Wer hat das denn geschrieben?

Zitat von: R1F800 am 05 Oktober 2018, 08:19:58
Gibt es diese Zusammenhänge wie z.B. das Thema Wildcard .* irgendwo in Gänze für alle Attribute / Möglichkeiten und Synthax nachzulesen? Oder ist das PERL Spezifika? 
Ich komme eher aus der Assembler und Großrechnerwelt und fange gerade mit JAVA an. Von daher wären genau solche Feinheiten super.
Auch um die Formatierungen "stateFormat" etc. korrekt anzuwenden. Ich glaube für jedes Problem gibt es jeweils eine passende Antwort, aber eine allgem, eingültige Formulierung ist dann das, was mir bei dem nächsten Problem wieder fehlt. Vllt. habe ich da zu hohe Erwartungen :-) Ich bin IBM Handbücher der mainframe COBOL, DB2 etc. gewohnt ...

RegEx sind in sehr vielen Programmiersprachen unter Verwendung.
Erster Einstieg hier: https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

Gruss
    Sailor
******************************
Man wird immer besser...

R1F800

Zitat von: Sailor am 05 Oktober 2018, 21:21:53


Wiki, was fürn Wiki - Wer hat das denn geschrieben?

Ich bin gerade dabei :-)
Da steht auch dann Dein Username als Autor... keine Sorge ;-) Lob wem Lob gebührt ...

netbus

Ich habe eine Frage zu ESPEasy_Strom_Strom_Count_CounterCurrent.
Laut Commandref sollte es doch der "Aktueller Zählerstand am mechanischen Zähler..." sein.
Nach dem ich den Wert gesetzt habe wird er Sekunden später wieder umgeschrieben auf 0.600 oder was auch immer. Warum?

Interpretiere ich das richtig, dass ElectricityKwhPerCounts in meinem Fall 0.150 sind? Auf meinem Zähler sind nämlich 150 Umdrehungen ein 1kWh

Sailor

Hallo netbus

Zitat von: netbus am 07 Oktober 2018, 19:55:33
Laut Commandref sollte es doch der "Aktueller Zählerstand am mechanischen Zähler..." sein.
Nach dem ich den Wert gesetzt habe wird er Sekunden später wieder umgeschrieben auf 0.600 oder was auch immer. Warum?
Das stimmt schon, aber an den aktuellen Readings sollst du ja auch nicht rumfummeln!  ;)

Deine Freunde sind die Attribute

ElectricityCounterOffset :
Eine gültige float-Zahl für den Unterschied = Offset (Nicht der Unterschied zwischen Zählimpulsen) zwischen dem am mechanischen Elektrizitätszählern und dem angezeigten Wert im Reading dieses Device.
        Der Offset-Wert wird wie folgt ermittelt: WOffset = WMechanisch - WModule
        Der Standard-Wert ist 0.00

ElectricityKwhPerCounts :
Eine gültige float-Zahl für die Menge kWh pro Zählimpulsen.
        Der Wert ist durch das mechanische Zählwerk des Elektrizitätszählern vorgegeben. ElectricityKwhPerCounts = 0.001 bedeutet, dass jeder Zählimpuls ein Tausendstel einer kWh ist (=Wh).
        Einige elektronische Zähler (Bsp.: HomeMatic HM-ES-TX-WM) stellen die gezählte Menge an elektrischer Energie als Wh bereit.
        Aus diesem Grund muss dieses Attribut auf 0.001 gesetzt werden um eine korrekte Transformation in kWh zu ermöglichen.
        Der Standard-Wert ist 1


Zitat von: netbus am 07 Oktober 2018, 19:55:33
Interpretiere ich das richtig, dass ElectricityKwhPerCounts in meinem Fall 0.150 sind? Auf meinem Zähler sind nämlich 150 Umdrehungen ein 1kWh

Nein. Siehe oben: 1kWh / 150 = 0,00666666666666666666666666666667

Nach den ersten Einlesungen musst du dann den Offset (siehe oben) errechnen und anschliessend setzen.
Dann noch ein bisschen warten bis sich die ganzen Messungen gefüllt haben.
(1ne weitere Messung, 1nen Tag, 1nen Monat, 1 Jahr)

Gruss
    Sailor
******************************
Man wird immer besser...

netbus

Zitat von: Sailor am 07 Oktober 2018, 20:11:21
Das stimmt schon, aber an den aktuellen Readings sollst du ja auch nicht rumfummeln!  ;)
Am Reading habe ich auch nicht gefummelt sondern habe mit set den Wert .*CounterCurrent versucht zu setzten.
Wo genau kann ich dann den aktuellen Zählerstand eingeben? Und was ist dann "WModule"?

Sailor

Zitat von: netbus am 07 Oktober 2018, 22:34:29
Am Reading habe ich auch nicht gefummelt sondern habe mit set den Wert .*CounterCurrent versucht zu setzten.
Wo genau kann ich dann den aktuellen Zählerstand eingeben? Und was ist dann "WModule"?

WModule = CounterCurrent vor der Korrektur mit dem Offset

Wenn der Offset richtig gesetzt ist, dann sind CounterCurrent und mechanischer Zähler identisch.

Gruss
    Sailor
******************************
Man wird immer besser...

oetti77

#385
Hallo zusammen,

ich habe einen ESP inkl. ESPEasy wie hier (https://forum.fhem.de/index.php/topic,61731.msg531547.html#msg531547) beschrieben, an einem DSZ12E (800 Imp/kWh) hängen.
Da ich den Calculator gerade erst teste, habe ich 2 Fragen dazu.

1. Auf welchen Wert "Count" oder "Total" sollte denn getriggert werden?
2. Der nächtliche Reboot des ESPs ist beim Einsatz des Calculators wohl eher kontraproduktiv, da alle Werte wieder auf 0 zurückgesetzt werden, und sollte diesbzgl. deaktiviert werden - oder?

Anbei mal ein list vom ESP

Internals:
   DEF        10.10.122.62 80 espBridge ESP01_Hausstrom
   ESP_BUILD  20103
   ESP_BUILD_GIT mega-20181220
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID 17: ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   HOST       10.10.122.62
   IDENT      ESP01_Hausstrom
   INTERVAL   60
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     66
   NAME       ESPEasy_ESP01_Hausstrom
   NOTIFYDEV  global
   NR         676
   NTFY_ORDER 50-ESPEasy_ESP01_Hausstrom
   PORT       80
   STATE      Cou: 28 Tim: 2047 Tot: 2295
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.39
   espBridge_MSGCNT 66
   espBridge_TIME 2018-12-28 22:27:02
   READINGS:
     2018-12-28 22:27:02   Count           28
    2018-12-28 22:27:02   Time            2047
     2018-12-28 22:27:02   Total           2295
     2018-12-28 22:26:57   presence        present
     2018-12-28 22:27:02   state           Cou: 28 Tim: 2047 Tot: 2295
   helper:
     fpc        1546027002.11508
     pm:
       Encode     1
       JSON       1
     received:
       Count      1546032422.54046
       Time       1546032422.54052
       Total      1546032422.54039
Attributes:
   IODev      espBridge
   Interval   60
   event-min-interval .*:300
   event-on-change-reading .*
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   verbose    0


Danke & Gruss
oetti
FHEM 5.8 (CentOS 7 auf ESXi 6.5), HM-CC-RT-DN, HM-Sec-Sc, HM-WDS40-TO, HM-LC-SW1-FM, HM-LC-Bl1PBU-FM, Sonos, Alexa, Nest Protect 2, Tradfri

Module: HUE, Lightify, ECOTOUCH, TelegramBot, Sonos, Alexa, Pushover, Enigma2

Sailor


Hallo Oetti

Zitat von: oetti77 am 28 Dezember 2018, 22:30:52
1. Auf welchen Wert "Count" oder "Total" sollte denn getriggert werden?
In deinem Fall scheint mir das auch nicht ganz klar hervor zu gehen, da beide Readings scheinbar den gleichen Wert haben.
Was sagt denn deine Bedienungsanleitung vom ESPEasy dazu?


Zitat von: oetti77 am 28 Dezember 2018, 22:30:52
2. Der nächtliche Reboot des ESPs ist beim Einsatz des Calculators wohl eher kontraproduktiv, da alle Werte wieder auf 0 zurückgesetzt werden, und sollte diesbzgl. deaktiviert werden - oder?
Das ist korrekt. Der Wert muss bestehen bleiben, ansonsten gibt es Kuddelmuddel in der Statistik. Ich empfehle daher den Counter mit einer Batterie zu puffern!

Gruss
Sailor
******************************
Man wird immer besser...

MisterBeats

Hallo zusammen,

ich habe das Modul nun auch entdeckt und wollte es für meine AVM DECT 200 Steckdosen einsetzen. Die Werte werden auch korrekt ausgelesen, jedoch wird der Preis falsch berechnet.

Die DECT 200 Steckdosen rechnen in Wh und irgendwie berechnet das Modul die Wh * den kWh Preis

Dies sind die Attribute:
Attributes:
   BasicPricePerAnnum 0
   Currency   €
   ElectricityCounterOffset 0
   ElectricityKwhPerCounts 1
   ElectricityPricePerKWh 0.2567
   MonthOfAnnualReading 5
   MonthlyPayment 0
   ReadingDestination CalculatorDevice
   SiPrefixPower W
   alias      Kosten Steckdose KG Wohnraum
   disable    0
   group      Stromkosten
   room       93_Kosten
   stateFormat {"Heute: " . sprintf("%.2f kWh - %.2f €", ReadingsVal($name, "KG.StromWohnraum_energy_EnergyDay",0), ReadingsVal($name,"KG.StromWohnraum_energy_EnergyCostDay",0))}


Und das Berechnet mir das Modul:

Zitat2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyCostDay 1.540
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyCostMeter 1.540
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyCostMonth 1.540
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyCostYear 1.540
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyDay 6.000
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyMeter 6.000
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyMonth 6.000
     2019-01-04 13:42:43   KG.StromWohnraum_energy_EnergyYear 6.000

Mach ich irgendwas falsch? Ich habe noch andere Steckdosen, keine DECT 200 und dort wird alles korrekt berechnet.

Sailor

Hallo MisterBeats

Zitat von: MisterBeats am 04 Januar 2019, 13:46:52
ich habe das Modul nun auch entdeckt und wollte es für meine AVM DECT 200 Steckdosen einsetzen. Die Werte werden auch korrekt ausgelesen, jedoch wird der Preis falsch berechnet.
Die DECT 200 Steckdosen rechnen in Wh und irgendwie berechnet das Modul die Wh * den kWh Preis
Mach ich irgendwas falsch? Ich habe noch andere Steckdosen, keine DECT 200 und dort wird alles korrekt berechnet.

Also, dein Attribut "ElectricityKwhPerCounts 1" sagt aus, das jede Stelle vor dem Komma eine kWh entspricht.
Wenn die Steckdose aber die Werte in Wh ausgibt, dann muss der Wert auf 0.001. Das jede Wh ist ein tausendstel einer kWh.  ;)

In der Commandref steht übrigends:
ZitatElectricityKwhPerCounts :
   Eine gültige float-Zahl für die Menge kWh pro Zählimpulsen.
Der Wert ist durch das mechanische Zählwerk des Elektrizitätszählern vorgegeben. ElectricityKwhPerCounts = 0.001 bedeutet, dass jeder Zählimpuls ein Tausendstel einer kWh ist (=Wh).
Einige elektronische Zähler (Bsp.: HomeMatic HM-ES-TX-WM) stellen die gezählte Menge an elektrischer Energie als Wh bereit.
Aus diesem Grund muss dieses Attribut auf 0.001 gesetzt werden um eine korrekte Transformation in kWh zu ermöglichen.
Der Standard-Wert ist 1


Ich vermute die anderen Steckdosen geben den Wert in kWh aus.
Ist das evtl. Einstellungssache?



Gruss
    Sailor
******************************
Man wird immer besser...

MisterBeats

Hallo Sailor,

ja das war das Problem gewesen.

Danke

Gruß