Seite 2 von 2

Re: S0 Stromzähler in Openhab2 integrieren

Verfasst: 9. Feb 2021 10:59
von matze.lingen
Ok hab das nun so drin und warte auf ein paar Werte. Wofür benötige ich dann noch Count und Time?
Wenn das System neu startet, dann wird doch der Total Count genullt was mache ich den in dem Fall?
Vielen Dank.
Gruß
Matthias

Re: S0 Stromzähler in Openhab2 integrieren

Verfasst: 9. Feb 2021 17:15
von udo1toni
matze.lingen hat geschrieben: 9. Feb 2021 10:59 Wenn das System neu startet, dann wird doch der Total Count genullt was mache ich den in dem Fall?
Ah, das ist natürlich suboptimal. Da müsste man mal etwas drüber nachdenken...

So auf die Schnelle: lege eine Rule an, die bei jedem change triggert. Sende dann die Differenz alter/neuer Zählstand an ein Proxy Item, welches mit everyUpdate persistiert ist. Der Verbrauch ergibt sich dann aus Item.sumSince(now.withTimeAtStartOfDay).
Du legst nun also ein Item Zaehlpulse an

Code: Alles auswählen

Number Zaehlpulse // mit everyUpdate persistieren

Code: Alles auswählen

rule "Impulse zählen"
when
    Item Total changed
then
    if(!(previousState instanceof Number))                                   // Item war leer -> Abbbruch
        return;
    var diff = newState - previousState                                      // Anzahl Impulse seit letztem Update
    if(newState < previousState)                                             // Falls der Zähler genullt wurde
        diff = newState                                                      // stattdessen direkt den neuen Wert nehmen
    Zaehlpulse.postUpdate(diff)                                              // in der Persistence speichern
    Thread::sleep(300)                                                       // ein wenig warten
    Tagesverbrauch.postUpdate(Zaehlpulse.sumSince(now.withTimeAtStartOfDay)) // Tagesverbrauch auslesen
end
Jedes Mal, wenn sich Total ändert, errechnet die Rule die Differenz zwischen dem letzten und dem aktuellen Wert. Falls der alte Wert größer als der neue Wert ist, wurde der NodeMCU zwischendurch neu gestartet, dann muss also statt der Differenz einfach der neue Wert genommen werden.
Falls kein gültiger alter Wert vorhanden ist, wurde openHAB neu gestartet und das Item Total musste erst initialisiert werden. Entsprechend darf der Wert nicht aktualisiert werden und die Rule bricht ab.
Ansonsten wird die Differenz in das Proxy Item geschrieben, welches persistiert wird. Nach einer kleinen Pause, damit die Persistence Zeit hatte, ihre Arbeit zu erledigen, wird der neue Verbrauch ausgelesen und ins entsprechende Item geschrieben.

Re: S0 Stromzähler in Openhab2 integrieren

Verfasst: 13. Mär 2022 23:53
von barbarossa
Hallo, ich bin ganz neu bei OpenHab und mache so die ersten Gehversuche.
Der erste Zähler ist als S0 Zähler für den Gasverbrauch engerichtet und gibt auch artig die gezählten Pulse in der Grafik aus.
Mit der Anzeige der Leistung beiße ich mir aber die Zähne aus.
Ich habe die Persitenz mit RRD4j. Die Zählwerte sind als item ZaehlerGas als number vorhanden.
GasLeistung ist als item typ number vorhanden.
Die Differenz der Werte ZaehlerGas aktuell - ZaehlerGas vor 15 Min * 4 * 1000 sollen als neuer Wert GasLeistung erfasst werden.
Hier die Rule die ich mir aus dem angelesenen zusammen gebastelt habe:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: ZaehlerGas
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >-
        when 
            Item ZaehlerGas received update
        then
            GasLeistung.postUpdate(ZaehlerGas.deltaSince(now.minusMinutes(15))*4*1000)
        end
    type: script.ScriptAction
So funzt es aber nicht. Habe aber auch keine Idee wo der Fehler sein könnte. Habe schon Stunden damit zugebracht aber mir fehlt wohl zuviel.
Danke vorab für die Hilfe

Re: S0 Stromzähler in Openhab2 integrieren

Verfasst: 14. Mär 2022 01:36
von udo1toni
Herzlich willkommen im Forum!

Dies ist eine Rule, die über die UI angelegt wurde.

Punkt 1: UI Rules haben einen Trigger Part. Das ist bei der Text Konfiguration der Teil zwischen when und then. Entsprechend darf dieser Teil incl. der beiden Schüsselworte in der UI Rule gar nicht vorkommen, der Code ist vielmehr alles zwischen den Schlüsselworten then und end.
Punkt 2: Du nutzt hier Befehle der Rules DSL, hast Aber als Scriptsprache Javascript angegeben, das kann nicht funktionieren.