ElectricityCalculator: Unterschied zwischen den Versionen

Aus FHEMWiki
K (R1F800 verschob die Seite Benutzer:R1F800 nach FHEMWiki:R1F800: neuer WiKi Artikel zum Electricity counter)
K (Neue Seite GasCalculator verlinkt)
 
(13 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Infobox Modul|
{{Infobox Modul
|ModPurpose=Berechnung der Energiekosten
|ModPurpose=Berechnung der Energiekosten
|ModType=h
|ModType=h
|ModCmdRef=ElectricityCounter
|ModForumArea=Unterstützende Dienste
|ModForumArea=https://forum.fhem.de/index.php/topic,57106.0.html
|ModFTopic=57106
|ModFTopic=
|ModTechName=73_ElectricityCalculator.pm
|ModTechName=73_ElectricityCounter.pm
|ModOwner={{Link2FU|4705|Sailor}}
|ModOwner=Sailor
}}
[[ElectricityCalculator]] ist ein Modul zur Berechnung von Energiemengen.


}}
[[ElectricityCounter]] ist ein Modul zur Berechnung von Energiemengen.
https://forum.fhem.de/index.php/topic,57106.0.html
== Features / Funktionen ==
== Features / Funktionen ==
Die Haupteigenschaften des ElectricityCounter Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter).  
Die Haupteigenschaft des ElectricityCalculator Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter).  
 
Für Gas gibt es nun ein eigenes Modul, den [[GasCalculator]].
 
Das Modul als solches ist kein Zählermodul, sondern nur eine Berechnungsinstanz, die einen eigenen fhem Zähler bzw. Wert aus dem DS2343 erfordert. commandref:" It is not a counter module itself but it requires"


Es gibt hierbei zwei grundlegende Möglichkeiten
Somit gibt es zwei grundlegende Möglichkeiten
* Direkter Anschluss an einem GPIO um eine aktive Impulsverarbeitung zu nutzen
* Direkter Anschluss an einen GPIO, um eine aktive Impulsverarbeitung zu nutzen (Zählerinstanz liegt auf dem GPIO)
* Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter
* Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter (Zählerinstanz liegt im DS2343) oder IR Lesekopf eingebunden über OBIS Modul


== Hinweise zum Betrieb mit FHEM ==
== Hinweise zum Betrieb mit FHEM ==
=== Direkter Betrieb ===
=== Direkter Betrieb ===
<br>Für den direkten Betrieb benötigt man z.B. einen Drehstromzähler eltako DSZ12E-80 der mittels Impulsen zu jedem Watt dem Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh)
Für den direkten Betrieb benötigt man einen Stromzähler der in der Lage ist, die Zählimpulse abzugeben.
Da der GPIO an einem PI jedoch die Spannung von 3V3 nicht übersteigen darf gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen. (Notwendiges Modul: RPI_GPIO)
Als Beispiel sei hierbei der Drehstromzähler eltako DSZ12E-80 erwähnt, der mittels Impulsen zu jedem Watt den Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh = 0,001kWh)
<br><br>'''''Definition des GPIOs :'''''
<br>defmod GPIO26 RPI_GPIO 26
<br>attr GPIO26 active_low no
<br>attr GPIO26 direction Input
<br>attr GPIO26 event-on-change-reading .*
<br>attr GPIO26 event-on-update-reading .*
<br>attr GPIO26 interrupt falling


[[Datei:GPIO.png|mini]]
Diese Impulse müssen dann zunächst importiert werden. In diesem Beispiel verwenden wir den Raspberry Pi auf dem auch das fhem System betrieben wird.
Da der GPIO an einem PI jedoch die Spannung von 3,3 V nicht übersteigen darf, gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen.
Dies bedeutet, das man die Impulse erst mittels einer externen Schaltung (Spannungsteiler) wandeln muss.<BR>
[[Datei:GPIO.png|mini|Anschlussbelegung / Schaltung]]
Anschließend werden diese Impulse mittels des Moduls RPI_GPIO in fhem eingebunden.
(Notwendiges Modul: RPI_GPIO)
<BR>
<BR>
'''''Definition des GPIOs :'''''
<pre>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 interrupt falling
</pre>
Wichtig sind hierbei die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" da ansonsten das ElectricityCalculator - Modul nicht reagiert.


=== Indirekter Betrieb ===
=== Indirekter Betrieb ===
tbd.
Wenn der Stromzähler sich nicht in direkter Nähe zum fhem - System befindet, bleibt einem nur die Möglichkeit einen externen Zähler per Funkt oder LAN/WLAN dazwischenzuschalten.
Als Lösung kann hierbei der Homematic HM-ES-TX-WM zum Einsatz kommen. Siehe [[HM-ES-TX-WM Zählersensor für Strom- und Gaszähler|HM-ES-TX-WM Zählersensor für Strom- und Gaszähler]].
<BR>
Auch bei dessen Definition ist auf die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" zu achten, da ansonsten das ElectricityCalculator - Modul nicht reagiert.


=== Allgemeine Moduldefinition ===
=== Allgemeine Moduldefinition ===
<br>''defmod MEINZAEHLER ElectricityCalculator REGEXP''
:<code>defmod MEINZAEHLER ElectricityCalculator REGEXP</code>
<br>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.* ( bei mir funktioniert auch GPIO26.*)
:<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*</code>
<br>
(bei mir funktioniert auch GPIO26.*)
<br>Sofern das Modul korrekt angelegt wurde sollte man die Definitionen
 
Sollte es Readings geben, welche auch mit GPIO26.Counter beginnen, sollte auf ein genaues Reading verwiesen werden.
 
Beispiel GPIO26.Counter und GPIO26.Counter2
 
In diesem Fall würde der Energy Counter für beide Readings für die Callculation nutzen.
 
Somit wären eine Menge Readings angelegt, welche Falsch sind.
 
Um dem Modul nun zu sagen, welchen Werte er genau nutzen soll, im Beispiel wollen wir GPIO26.Counter nehmen,
 
muss das Define wie folgt aussehen.
 
Unterscheid ist hier der : (Doppelpunkt), somit wird nur genau das GPIO26.Counter Device für die Berechnung herangezogen.
 
<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter:.*</code>
 
 
 
 
Sofern das Modul korrekt angelegt wurde, sollte man die Attribute (attr)
* BasicPricePerAnnum
* BasicPricePerAnnum
* Currency  
* Currency  
Zeile 45: Zeile 79:
* ElectricityPricePerKWh
* ElectricityPricePerKWh
* MonthlyPayment
* MonthlyPayment
<br>
 
setzen, damit die Berechnung korrekt durchgeführt werden kann.
 
Zusätzlich kann man vermeiden, dass man bis zu 12 Monate warten muss, bis alle Werte in den Readings korrekt sind, diese Readings manuell setzen:
 
<DestinationDevice>_<SourceCounterReading>_CounterDay1st,<BR>
<DestinationDevice>_<SourceCounterReading>_CounterMonth1st,<BR>
<DestinationDevice>_<SourceCounterReading>_CounterYear1st und<BR>
<DestinationDevice>_<SourceCounterReading>_CounterMeter1st<BR>
<BR>
 
<code>setreading <Device> <Reading> <WERT></code>
 
 
Beispiel:
 
<code>setreading <Device> <DestinationDevice>_<SourceCounterReading>_CounterDay1st 12506142</code>
 
== Attribute ==
 
Damit die Berechnung überhaupt durchgeführt werden kann, müssen dem Modul noch einige Daten angegeben werden.
 
Ein Übersicht erhält man in der commandref.
 
===Hinweis===
Das Attribut <code>MonthOfAnnualReading</code> gibt an wann der Zähler abgelesen wird.
 
Sollte nun am 31.12 der Zählerstand für die Abbrechnung genutzt werden, so ist im Attribute der Monat 1 einzutragen.
 
Wird nun am 31.4 abgelesen, so ist im Attribute der Monat 5 einzutragen.
 
 
== Bekannte Probleme ==
== Bekannte Probleme ==
<br>  
===Keine Funktion / Berechnung===
<u>'''Beschreibung / Ursache:'''</u>
 
Der ElectricityCalculator führt keine Berechnung durch bzw. funktioniert nicht obwohl der Counter definiert ist und auch zählt.
 
<u>'''Lösung:'''</u>
 
Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.
Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.
<br>Sofern keine initialen Werte dem Modul mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die ganzen Readings des Moduls angelegt werden. (siehe device specific help bzw. comandref)
 
===Falsche Werte===
<u>'''Beschreibung / Ursache:'''</u>
 
Die Werte passen nicht zu der Änderung, die unmittelbar per set-Befehl vorgenommen wurde.
 
<u>'''Lösung:'''</u>
 
Sofern dem Modul keine initialen Werte mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die Readings des Moduls angelegt werden (siehe device specific help bzw. commandref).
 
===Die Grafik mit den Werten oszilliert===
<u>'''Beschreibung / Ursache:'''</u>
 
Wenn man sich den Graphen der aufgezeichneten Werten anschaut, dann stellt man fest, dass diese um den vermeintlich realen Wert oszilliert. Der Grund ist das Problem der Digitalisierung analoger Werte. Siehe https://de.wikipedia.org/wiki/Digitale_Messtechnik<nowiki/>Dieser Fehler tritt inbesondere bei Zählern mit einer niedrigen Impulsrate wie bei Analogen Drehstromzählen mit 75 Umdrehungen je kWh in Kombination mit kurzen Messintervallen und/oder kleinen Leistungswerten auf.
 
<u>'''Lösung:'''</u>
 
Um den Fehler der digitalen Messung möglichst klein zu halten, müssen pro Messintervall insbesondere bei kleinen Leistungen möglichst viele Impulse "eingesammelt" werden. Dies kann nur erfolgen, wenn das Countermodul (nicht der ElectricityCalculator) entsprechend geduldiger eingestellt wird. Sollte am CounterModul kein Zeitintervall einzustellen sein, so muß man die Counterwerte über ein "at" an einen "dummy" mit einem entsprechen großen Zeitraum liefern und auf diesen dummy dann den ElectricityCalculator definieren.


== Weblinks ==
== Weblinks ==
* [https://forum.fhem.de/index.php/topic,57106.0.html Diskussionsthread zum Modul]
* {{Link2Forum|Topic=57106|LinkText=Diskussionsthread zum Modul}}
* [https://www.eltako.com/fileadmin/downloads/de/Prospekte/Drehstrom-und-Wechselstromzaehler-Katalog_high-res.pdf Drehstromzähler eltako mit S0 Ausgang]
* [https://www.eltako.com/fileadmin/downloads/de/Prospekte/Drehstrom-und-Wechselstromzaehler-Katalog_high-res.pdf Drehstromzähler eltako mit S0 Ausgang]
<br>Mit nachfolgendem Produkt Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!!!
 
Mit nachfolgendem Produkt ist Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!
* [https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter DualCounter von tm3d.de mit Anschluss am USB <> 1Wire]
* [https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter DualCounter von tm3d.de mit Anschluss am USB <> 1Wire]
* [https://wiki.fhem.de/wiki/Interfaces_für_1-Wire 1 Wire Interfacesammlung]
* [https://wiki.fhem.de/wiki/Interfaces_für_1-Wire 1 Wire Interfacesammlung]
* [https://www.amazon.de/MOD-36-Z-USB-1-wire-converter-DS2480B-FT231XS/dp/B01BTV52YC/ref=sr_1_fkmr1_2?ie=UTF8&qid=1538745242&sr=8-2-fkmr1&keywords=1wire+USB+master Bezugsquelle 1 Wire USB-Bus Master ]
* [https://www.amazon.de/MOD-36-Z-USB-1-wire-converter-DS2480B-FT231XS/dp/B01BTV52YC/ref=sr_1_fkmr1_2?ie=UTF8&qid=1538745242&sr=8-2-fkmr1&keywords=1wire+USB+master Bezugsquelle 1 Wire USB-Bus Master]
[[Kategorie:XYZ Modul]]
 
[[Kategorie:Energieverbrauchsmessung]]

Aktuelle Version vom 17. November 2023, 18:01 Uhr

ElectricityCalculator
Zweck / Funktion
Berechnung der Energiekosten
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Unterstützende Dienste
Modulname 73_ElectricityCalculator.pm
Ersteller Sailor
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

ElectricityCalculator ist ein Modul zur Berechnung von Energiemengen.

Features / Funktionen

Die Haupteigenschaft des ElectricityCalculator Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter).

Für Gas gibt es nun ein eigenes Modul, den GasCalculator.

Das Modul als solches ist kein Zählermodul, sondern nur eine Berechnungsinstanz, die einen eigenen fhem Zähler bzw. Wert aus dem DS2343 erfordert. commandref:" It is not a counter module itself but it requires"

Somit gibt es zwei grundlegende Möglichkeiten

  • Direkter Anschluss an einen GPIO, um eine aktive Impulsverarbeitung zu nutzen (Zählerinstanz liegt auf dem GPIO)
  • Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter (Zählerinstanz liegt im DS2343) oder IR Lesekopf eingebunden über OBIS Modul

Hinweise zum Betrieb mit FHEM

Direkter Betrieb

Für den direkten Betrieb benötigt man einen Stromzähler der in der Lage ist, die Zählimpulse abzugeben. Als Beispiel sei hierbei der Drehstromzähler eltako DSZ12E-80 erwähnt, der mittels Impulsen zu jedem Watt den Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh = 0,001kWh)

Diese Impulse müssen dann zunächst importiert werden. In diesem Beispiel verwenden wir den Raspberry Pi auf dem auch das fhem System betrieben wird. Da der GPIO an einem PI jedoch die Spannung von 3,3 V nicht übersteigen darf, gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen. Dies bedeutet, das man die Impulse erst mittels einer externen Schaltung (Spannungsteiler) wandeln muss.

Anschlussbelegung / Schaltung

Anschließend werden diese Impulse mittels des Moduls RPI_GPIO in fhem eingebunden. (Notwendiges Modul: RPI_GPIO)

Definition des GPIOs :

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 interrupt falling

Wichtig sind hierbei die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" da ansonsten das ElectricityCalculator - Modul nicht reagiert.

Indirekter Betrieb

Wenn der Stromzähler sich nicht in direkter Nähe zum fhem - System befindet, bleibt einem nur die Möglichkeit einen externen Zähler per Funkt oder LAN/WLAN dazwischenzuschalten. Als Lösung kann hierbei der Homematic HM-ES-TX-WM zum Einsatz kommen. Siehe HM-ES-TX-WM Zählersensor für Strom- und Gaszähler.
Auch bei dessen Definition ist auf die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" zu achten, da ansonsten das ElectricityCalculator - Modul nicht reagiert.

Allgemeine Moduldefinition

defmod MEINZAEHLER ElectricityCalculator REGEXP
defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*

(bei mir funktioniert auch GPIO26.*)

Sollte es Readings geben, welche auch mit GPIO26.Counter beginnen, sollte auf ein genaues Reading verwiesen werden.

Beispiel GPIO26.Counter und GPIO26.Counter2

In diesem Fall würde der Energy Counter für beide Readings für die Callculation nutzen.

Somit wären eine Menge Readings angelegt, welche Falsch sind.

Um dem Modul nun zu sagen, welchen Werte er genau nutzen soll, im Beispiel wollen wir GPIO26.Counter nehmen,

muss das Define wie folgt aussehen.

Unterscheid ist hier der : (Doppelpunkt), somit wird nur genau das GPIO26.Counter Device für die Berechnung herangezogen.

defmod WPVerbrauch ElectricityCalculator GPIO26.Counter:.*



Sofern das Modul korrekt angelegt wurde, sollte man die Attribute (attr)

  • BasicPricePerAnnum
  • Currency
  • ElectricityKwhPerCounts
  • ElectricityPricePerKWh
  • MonthlyPayment

setzen, damit die Berechnung korrekt durchgeführt werden kann.

Zusätzlich kann man vermeiden, dass man bis zu 12 Monate warten muss, bis alle Werte in den Readings korrekt sind, diese Readings manuell setzen:

<DestinationDevice>_<SourceCounterReading>_CounterDay1st,
<DestinationDevice>_<SourceCounterReading>_CounterMonth1st,
<DestinationDevice>_<SourceCounterReading>_CounterYear1st und
<DestinationDevice>_<SourceCounterReading>_CounterMeter1st

setreading <Device> <Reading> <WERT>


Beispiel:

setreading <Device> <DestinationDevice>_<SourceCounterReading>_CounterDay1st 12506142

Attribute

Damit die Berechnung überhaupt durchgeführt werden kann, müssen dem Modul noch einige Daten angegeben werden.

Ein Übersicht erhält man in der commandref.

Hinweis

Das Attribut MonthOfAnnualReading gibt an wann der Zähler abgelesen wird.

Sollte nun am 31.12 der Zählerstand für die Abbrechnung genutzt werden, so ist im Attribute der Monat 1 einzutragen.

Wird nun am 31.4 abgelesen, so ist im Attribute der Monat 5 einzutragen.


Bekannte Probleme

Keine Funktion / Berechnung

Beschreibung / Ursache:

Der ElectricityCalculator führt keine Berechnung durch bzw. funktioniert nicht obwohl der Counter definiert ist und auch zählt.

Lösung:

Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.

Falsche Werte

Beschreibung / Ursache:

Die Werte passen nicht zu der Änderung, die unmittelbar per set-Befehl vorgenommen wurde.

Lösung:

Sofern dem Modul keine initialen Werte mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die Readings des Moduls angelegt werden (siehe device specific help bzw. commandref).

Die Grafik mit den Werten oszilliert

Beschreibung / Ursache:

Wenn man sich den Graphen der aufgezeichneten Werten anschaut, dann stellt man fest, dass diese um den vermeintlich realen Wert oszilliert. Der Grund ist das Problem der Digitalisierung analoger Werte. Siehe https://de.wikipedia.org/wiki/Digitale_MesstechnikDieser Fehler tritt inbesondere bei Zählern mit einer niedrigen Impulsrate wie bei Analogen Drehstromzählen mit 75 Umdrehungen je kWh in Kombination mit kurzen Messintervallen und/oder kleinen Leistungswerten auf.

Lösung:

Um den Fehler der digitalen Messung möglichst klein zu halten, müssen pro Messintervall insbesondere bei kleinen Leistungen möglichst viele Impulse "eingesammelt" werden. Dies kann nur erfolgen, wenn das Countermodul (nicht der ElectricityCalculator) entsprechend geduldiger eingestellt wird. Sollte am CounterModul kein Zeitintervall einzustellen sein, so muß man die Counterwerte über ein "at" an einen "dummy" mit einem entsprechen großen Zeitraum liefern und auf diesen dummy dann den ElectricityCalculator definieren.

Weblinks

Mit nachfolgendem Produkt ist Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!