Shelly Stromverbrauch bei Stromausfall sichern

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von PeterA »

Also,

meine derzeitige Rule sieht wie folgt aus:

Code: Alles auswählen

rule "Shelly25_01 kWh"
 
when
Item Shellyswitch25_745118_energy received update
then
Shellyswitch25_745118_kWh.
postUpdate(Shellyswitch25_745118_energy.state as DecimalType / 60000)
end
Die macht erst mal nix anderes als den Wert den der Shelly (über Mqtt angebunden) in das Item _energy schreibt in kWh um zu rechnen.
Und das Item _kWh persistiere ich dann mit rrd4j.
Nach einem Stromausfall z.b setzt sich dieser Zähler auf Null und würde dann im Chart auch wieder bei Null beginnen und langsam wieder steigen.
Wie sähe denn eine "Auffsummierungs" rule aus die solche "Rücksetzungen" abfängt ?

Gruß
Peter
- OpenHab 2.4
#PWRUP

Benutzeravatar
Detlef
Beiträge: 189
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von Detlef »

Hallo
nach langen hin und her wird der momentan Stromverbrauch aufgerechnet.
Habe noch ein Problem bezüglich der 0 in der Rules vom Udo!! Ich habe aus der 0 die 0,0 gemacht, da die rrd4j Daten mit den Punkt ausliefert.

Code: Alles auswählen

rule "Stromerfassung Pumpe 1 und Pumpe 2 Momentverbrauch übergeben"
when
         //Time cron "0 46 18 ? * *" 
         //Item Gartenpumpe_1_Momentverbrauch received update or
    Item Gartenpumpe_2_Momentverbrauch received update // MomentverbrauchP1 
then
    val Number nStrom1 = if(Gartenpumpe_1_Momentverbrauch.state instanceof Number) (Gartenpumpe_1_Momentverbrauch.state as Number).floatValue else 0.8
    val Number nStrom2 = if(Gartenpumpe_2_Momentverbrauch.state instanceof Number) (Gartenpumpe_2_Momentverbrauch.state as Number).floatValue else 0.0
   
        Strom_Pumpe_moment.postUpdate(nStrom1 + nStrom2)
end
 
Zum Problem 1 ".floatValue else 0.0" habe die 0 auf 0.0 in der Rules geändert. Jetzt wird erstmal aufgerechnet.
Zum problem 2 im 2. Item " Item Gartenpumpe_1_Momentverbrauch " ist ein ständiger verbrauch von 0.8 Watt bis 0.9 Watt.
Den ständigen verbrauch von 0.8 braucht nicht berücksichtigt werden. Der verbrauch kann aber auch auf 1.5 Watt steigen.
Dies könnte ein Bewegungsmelder mit der Beleuchtung sein.

Frage Das " .floatValue else 0.8 ändern??" oder 0.0
Danke Udo läuft so langsam aber sicher.
Wenn jetzt am Shelly ein Stromausfall ist habe ich den Stromverbrauch.
Wie lange wird der Wert in der rrd4j aufgerechnet???
Danke

Code: Alles auswählen

Strategies
{
   everyMinute  : "0 * * * * ?"
   everyHour    : "0 0 * * * ?"
   everyDay     : "0 0 0 * * ?"
   default = everyMinute
}

Items
{

       Strom_Pump1_Garten: strategy = everyDay,restoreOnStartup // Gesamtwet Stromverbrauch P 1 u.P 2
       //Strom_Pumpe_moment.sumSince(AbstractInstant) 
       //Aufrechnen des Monetverbrauch. Aber wie?????
       Strom_Pumpe_moment:strategy = everyMinute, restoreOnStartup
       Sommer_Winter: strategy = everyDay, restoreOnStartup
       Rule_Betriebsart: strategy = everyDay, restoreOnStartup
       EG_Stairwell_Heating: strategy = everyHour, restoreOnStartup
       Doris_Bad_Temperatur_Soll_Setpoint: strategy = everyHour, restoreOnStartup
      }
Mit freundlichen Grüße aus Recklinghausen

Benutzeravatar
udo1toni
Beiträge: 13859
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von udo1toni »

rrd4j speichert die Daaten default für ein Jahr. rrd4j macht das in mehreren Stufen, damit sind die Daten in der unmittelbaren Vergangenheit sehr fein aufgelöst, je länger die Messung her ist, desto mehr werte werden zu einem Wert zusammengefasst (Mittelwert, gültig für einen größeren Zeitbereich). Damit gibt es einen Kompromiss zwischen (zeitlicher) Genauigkeit und Speicherbedarf.
Mit sumSince(dateTimeType timestamp) kannst Du die kummulierten Werte anzeigen lassen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Detlef
Beiträge: 189
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von Detlef »

Hallo
schade ich habe gedacht das funktionier mit den überbrücken bei Stromausfall am Shelly 1 PM und den Stromverbrauchs Aufzeichnung.
Habe jetzt viel probiert und am Ende kam nicht heraus.
Grüße
Ich werde mir eine andere Lösung für das o.g. Problem suchen.
Ich habe "2 Moment verbrauche" und "2 Gesamtverbräuche" die bei Stromausfall von 0 wieder aufaddieren.

Danke
Mit freundlichen Grüße aus Recklinghausen

Benutzeravatar
Detlef
Beiträge: 189
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von Detlef »

Hallo und guten Tag
brauche nochmals Hilfe bezüglich die RRD4J Daten auslesen.

Zwei Zähler zusammen darstellen funktionier super. Danke

Code: Alles auswählen

rule "Stromerfassung 2 Zähler -Moment- übergabe item Strom_Pumpe_moment"
when
     
     Item Gartenpumpe_2_Momentverbrauch received update
 
     then
        val Number nStrom1 = if(Gartenpumpe_1_Momentverbrauch.state instanceof Number) (Gartenpumpe_1_Momentverbrauch.state as Number).floatValue else 0
        val Number nStrom2 = if(Gartenpumpe_2_Momentverbrauch.state instanceof Number) (Gartenpumpe_2_Momentverbrauch.state as Number).floatValue else 0
                   Strom_Pumpe_moment.postUpdate(nStrom1 + nStrom2)
end

Jetzt komme ich an die Daten des Momentverbrauch nicht eingelesen.

Diese Rule -unten- läuft überhaupt nicht. Hatte ich 100 mal geändert und getestet. Kann jemand einen oder zwei Tipps geben.
Daten kommen nicht aus der RRD4J Datenbank.

Code: Alles auswählen

rule "rule Power Gesamt Last"
when
    Time cron "0 25 15 ? * *" 

then
        //Strom_Pumpe_moment_Power.postUpdate (Strom_Pumpe_moment.state as Number)
        //Strom_Pumpe_moment_Power.postUpdate (Strom_Pumpe_moment.sumSince.state as Number)

        //Strom_Pumpe_moment.sumSince.stat as DecimalType,"rrd4j")
end
Mit freundlichen Grüße aus Recklinghausen

Benutzeravatar
udo1toni
Beiträge: 13859
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von udo1toni »

Was willst Du denn genau erreichen?

Code: Alles auswählen

rule "rule Power Gesamt Last"
when
    Time cron "0 25 15 ? * *" 
then
Die Rule triggert exakt um 15:25:00 Uhr, täglich. Soll das so sein?

Code: Alles auswählen

        //Strom_Pumpe_moment_Power.postUpdate (Strom_Pumpe_moment.state as Number)
        //Strom_Pumpe_moment_Power.postUpdate (Strom_Pumpe_moment.sumSince.state as Number)

        //Strom_Pumpe_moment.sumSince.stat as DecimalType,"rrd4j")
end
Nee. So funktioniert das sumSince nicht. Du musst der Methode sumSince schon mitteilen, welchen Zeitraum Du betrachten willst. Der Hinweis, aus welcher Datenbank die Daten kommen sollen(rrd4j) ist schon gut, allerdings gehört auch dieser zur Methode. Der korrekte Aufruf, um die Summe der letzten 24 Stunden aus dem Item Strom_Pumpe_moment in das Item Strom_Pumpe_moment_Power einzutragen, sähe so aus:

Code: Alles auswählen

Strom_Pumpe_moment_Power.postUpdate(Strom_Pumpe_moment.sumSince(now.minusDays(1),"rrd4j"))
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Detlef
Beiträge: 189
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von Detlef »

Danke das läuft wie geschnitten Brot. Die Daten sind aus der RRD4J ausgelesen.
Jetzt nur noch die Feinarbeiten.
Also die erste Rule zählt die Zähler zusammen.

Code: Alles auswählen

rule "Stromerfassung 2 Zähler -Moment- übergabe item Strom_Pumpe_moment"
when
     
     Item Gartenpumpe_2_Momentverbrauch received update
 
     then
        val Number nStrom1 = if(Gartenpumpe_1_Momentverbrauch.state instanceof Number) (Gartenpumpe_1_Momentverbrauch.state as Number).floatValue else 0
        val Number nStrom2 = if(Gartenpumpe_2_Momentverbrauch.state instanceof Number) (Gartenpumpe_2_Momentverbrauch.state as Number).floatValue else 0
                   Strom_Pumpe_moment.postUpdate(nStrom1 + nStrom2)
end
Die 2. Rule bringt mir die Gesamtzahl aus der RRD4J.

Code: Alles auswählen

rule "rule Power Gesamt Last"
when
    Time cron "0 54 18 ? * *" 

then
        Strom_Pumpe_moment_Power.postUpdate(Strom_Pumpe_moment.sumSince(now.minusDays(1),"rrd4j"))
      end 
Die Daten aus der RRD4J brauche ich aber für 365 Tage als Gesamtzahlen. Nicht für 1 Tag.
Ich werde mal das jetzt erst einmal testen und melde mich dann.

Das mit Time cron "0 54 18 ? * *" kann ich jetzt noch nicht beurteilen. Daten sollten nur täglich aktuell sein.

Danke nochmal.
Mit freundlichen Grüße aus Recklinghausen

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von PeterA »

Es ist aber auch Richtig:

Wenn ich mit rrd4j die kWh vom Shelly Persistiere, der Shelly nach einem Stromausfall wieder bei Null beginnt ich
mit "sumSince" ebenfalls den Energieverbrauch habe ?
- OpenHab 2.4
#PWRUP

Benutzeravatar
Detlef
Beiträge: 189
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von Detlef »

Hallo
Ich werte das testen und melde mich.
Wichtig ist den momentanen Verbrauch zu erfassen.
Da gehen die Shelly Zähler immer wieder auf null. Aber die Leistungsdaten werden in der RRD4J geschrieben und erfasst. Und zum Schluss werden eben diese Daten aus der RRD4J nach Wunsch wieder ausgelesen.
Ich werde testen testen und Strom abschalten und melde mich.
Wir aber so schon klappen. Nur ob die Daten genau genug sind ..
Grüße
Mit freundlichen Grüße aus Recklinghausen

Benutzeravatar
udo1toni
Beiträge: 13859
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Stromverbrauch bei Stromausfall sichern

Beitrag von udo1toni »

Wenn Du die Summe immer aktualisiert haben willst, dann wirst Du vermutlich ein Jahr lang immer auf das gleiche Datum verweisen wollen (meinetwegen den 1. Januar des laufenden Jahres). Dann nimmst Du halt nicht now.minusDays(1) sondern new DateTypeType(jahr,monat,tag), die genaue Schreibweise muss ich aber auch nachschauen...
Die Berechnung erfolgt aber potenziell sekundengenau, das heißt: a) der Bezugspunkt muss mit Zeitstempel angegeben werden, wenn man es genau haben will. und b) die Summierung muss natürlich entweder minütlich upgedatet werden oder aber z.B. um Mitternacht., um einen fixen Bezugspunkt zu haben.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten