Shelly Verbrauchswerte Speichern

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Ein weiterer Vorteil der time cron, man spart Rechenleistung. Macht ja schon einen Unterschied, ob man in 15 Minuten eine Rechenoperation hat oder 1000.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

nur zur Info. Shelly hat nach Update seinen Stand wieder auf 0 gesetzt und die Summe passt noch.

Danke nochmal für die Hilfe, aber dass es wirklich daran liegt dass das System den Change nicht mitbekommt, hätte ich nicht gedacht.

Das mit der Rechenleistung ist sicher auch noch ein Vorteil, zumal man ja so gut wie keine Information verliert.

Grüße
Daniel

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Also es kommt auch darauf an welchen Shelly man verwendet.
Hier sind es 6 x Shelly 2.5 für die Rollläden.
Wenn der entsprechende Rollladen gefahren wurde dauert es einen kleinen Moment bis der aktuelle Wert über MQTT reinkommt.
Und dann läuft die Rule. Funktioniert sehr gut!

Code: Alles auswählen

rule "Shellies25 kWh aggregation"                         // Berechne den Shelly-kWh-Verbrauch basierend auf den kWh-Werten der Shelly
when
    Member of gShellyConsumption changed                  // Gruppe mit Consumption Member
then
    logInfo("ShellykWh", "Es gibt {} Member in der Consumption Gruppe.", gShellyConsumption.members.size)

    val iSink = gShellykWh.members.filter[i|i.name.split("_").get(1) == triggeringItem.name.split("_").get(1)].head

    val Number nDelta = (triggeringItem.deltaSince(now.minusMinutes(15)).floatValue) / 60000

    logInfo("ShellykWh", "Quelle: {}, Ziel: {}, Delta: {}, before update: {}", triggeringItem.name, iSink.name, nDelta, iSink.state)

    if(nDelta <= 0)                                        // falls nDelta kleiner oder gleich 0
        return;                                            // Abbruch der Rule
    if(!(iSink.state instanceof Number))                   // Falls keine Zahl geliefert wird
        iSink.postUpdate(nDelta)                           // nDelta als Wert setzen
    else                                                   // ansonsten
        iSink.postUpdate((iSink.state as Number) + nDelta) // nDelta zum aktuellen Wert addieren
end
- OpenHab 2.4
#PWRUP

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Ich denke es kommt eher darauf an WO man den Shelly einsetzt. Bei einem Rolladen werden nicht so häufig changes kommen wie direkt an der Unterverteilung. Würde ich nen 3 EM spaßeshalber hinter ne Lampe hängen wird er nicht so häufig Änderungen melden, wie wenn ich den 3 EM direkt an Wohnungseinspeisung messen lasse.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Hallo

Mir ist jetzt wieder ein Fall untergekommen, der bei meiner Herangehensweise doch zu einem Problem führt.
Ich schaue ja immer 15 Minuten zurück. Jetzt ist mein Server mal für 4 Stunden ausgefallen, diese 4 Stunden fehlen jetzt natürlich. Hier wäre schon gut wenn man au den Change triggern würde, weil der letzte wert vor dem Change ja auch die vier Stunden alt wäre und damit auch das delta.

Leider führt das zu den eingangs erwähnten Problemen.

Kellerkind, hattest du das Thema auch mal und wie gehst du damit um? Ich habe die Werte halt manuell nachgezogen, aber das kann man ja auch nicht immer machen.

Danke
Daniel

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

mmmhhhh....

Das würde ich dann bei system started abfangen. Mach doch einfach ein Proxyitem welches immer nur den letzten Wert speichert.

Code: Alles auswählen

Number Shelly_last (gMapdb)
Das ganze könnte dann so aussehen:

Code: Alles auswählen

rule "Shelly current State speichern"
when
    Item Shelly changed
then
    if(!(Shelly.state instanceof Numbers)){
        logWarn("Shelly","liefert keinen gültigen Zahlenwert.")
        return;
    }

    var previouskwh = (Shelly.state as Number).floatValue()

    Shelly_last.postUpdate(previouskwh)
end
Der erste Teil der Rule, fängt einen ungültigen Zustand des Shellys ab, die Rule arbeitet nur wenn der auch wirklich ein gültiger Zahlenwert ankommt.

So damit hast du den letzten Wert immer gespeichert, wichtig das Item muss persistiert werden, damit es beim Neustart von openHAB verfügbar ist, denn es ist ein ungebundenes Item.

Jetzt kommt der Neustart:

Code: Alles auswählen

rule "System gestartet"
when
	System started
then
	var Shelly_old = Shelly_last.state as Number
	var Shelly_new = Shelly.state as Number.floatValue()
	var Number Shelly_delta = Shelly_new - Shelly_old

	if(Shelly_delta >= 0){								//Nur wenn das Delta im positiven Zahlenbereich ist
		Shelly_delta.postUpdate(Shelly_new - Shelly_old)
	}
end
Das wäre jetzt mal meine Idee. Was diese Rule nicht abfangen kann, ist ein Ausfall beider Systeme... Mir fällt auch kein Weg ein, wie man das bewerkstelligen könnte (Stromausfall z.Bsp.), außer mit Average zu arbeiten, aber das wäre dann mehr raten.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Achtung "System Started" wird aber auch "getriggert" wenn man eine "Items" Datei Speichert...
- OpenHab 2.4
#PWRUP

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

PeterA hat geschrieben: 7. Feb 2022 19:44 Achtung "System Started" wird aber auch "getriggert" wenn man eine "Items" Datei Speichert...
Zumindest wenn man neue anlegt oder? Naja, ist ja in dem Fall nicht ganz so schlimm, es wird ja nur das Delta ermittelt, man kann das ja dann noch gegenchecken.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

danke für die Idee

Jede Eventualität wird man sowieso nicht abfangen können, aber damit wäre mir sicher schon geholfen. Stromausfall gibt es bei uns eigentlich so gut wie nie - kann mich gar nicht dran erinnern wann einer war. Warum mein Server da vier Stunden offline war, kann ich zwar auch nicht erklären, weil mein 2.5 läuft seit zwei Jahren 24/7 und der Server mit 3.x hat dann öfter mal einen Hänger - aber das ist ein anderes Thema.

Ärgerlich finde ich, dass man diese ganzen Kopfstände eigentlich nur machen muss, weil die Zähler nicht einfach den Gesamtwert immer speichern.
Bei den plugs verstehe ich das ja vielleicht noch irgendwie, aber das die 3em auch mal ihren Wert verlieren ärgert mich wahnsinnig und sollte meiner Meinung nach nicht sein.

Grüße
Daniel

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Nein, das ist einfach erklärbar.
Der Zähler müsste ja ständig (nicht nur, wenn openHAB danach fragt) aktuell gespeichert werden. Und was nutzen die Hersteller für persistente Daten? Flash Memory. Eine Speicherzelle hat dabei vielleicht einige tausend Schreibzyklen (eher einige hundert), allerdings werden immer Blöcke von Speicherzellen beschrieben, wegen der notwendigen Löschens der alten Werte. Ein immer aktueller Zählerstand im persistenten Speicher würde also die Lebensdauer eines solchen Geräte extrem verkürzen. Die einzig sinnvolle Möglichkeit, damit umzugehen, wäre, einen Puffer mit SRAM einzubauen (SRAM braucht viel weniger Strom als DRAM). Blöderweise kostet SRAM richtig Geld (so ca. Faktor 100 bis 1000), und auch wenn man ja nur wenige Bytes braucht, es also nur um wenige Cent geht, muss da ziemlich viel drumherum entwickelt werden, die Pufferbatterie mit Ladeschaltung wird gebraucht, und was soll das Teil machen, wenn es mal länger ohne Strom ist? Ein Shelly würde dann locker 60 bis 80 EUR kosten statt 20 EUR, wer wäre bereit, diese Summe zu zahlen, nur um ein besseres Zählwerk zu haben?

Die korrekte Lösung wäre also, überhaupt auf den Zähler zu verzichten und stattdessen ausschließlich Zählimpulse weiterzugeben. Fällt der Strom aus, so kann es auch keinen Verbrauch geben. Ist Strom da, so kann ein beteiligter Datensammler die Impulse auch verarbeiten. Handelsübliche Stromzähler arbeiten z.B. mit 1.000 Impulsen pro kWh, man könnte auch gerne 10.000 oder 36.000 Impulse pro kWh umsetzen, das würde einem Datensammler immer noch reichlich Zeit geben, dutzende oder gar hunderte Datenquellen aufzuzeichnen. Blöd halt, dass man sich da mit anderen Herstellern zusammensetzen müsste, um sowas umzusetzen...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten