Wie überprüfe ich ein Reading bzgl Dauer eines Wertes?

Begonnen von Kulli, 07 April 2025, 18:52:12

Vorheriges Thema - Nächstes Thema

Kulli

Hi

Ich komme an einer Stelle nicht weiter, vermutlich eine blöde Frage, weil das wohl schon jeder mal gemacht hat:
Ich möchte z.B wissen WIE LANGE ein Reading eine Wert < 55 hatte.
Readingsage funktioniert nicht weil der Wert sich jede Minute ändert, aber alle Werte liegen < 55.

Gibt es dazu einn Perlbefehl oder muss ich mir das als Funktion in myUtils bauen?


cetri

Gemacht habe ich es noch nicht aber ich würde mir ein userreading erstellen das bei Werten <55 den Wert 1 bekommt und ansonsten 0.

Gisbert

Hallo Kulli,

vermutlich wird die Definition in #1 nicht reichen, könnte aber als Basis für ein HourCounter-Device dienen.
Damit bekommst du eine Zeitangabe auf Tagesbasis und eine Gesamtzeitangabe, bei der dein Reading kleiner oder größer 55 ist, je nachdem, wie du den HourCounter definiert hast

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Kulli

Moin
Das Problem ist, das es nicht immer 55 sind, sonst könnte ich in der Tat ein userreading nehmen.

Man müsste theoretisch mit dem DBLog die Abfrage hinbekommen, aber das wird vermutlich alles asynchron laufen.

Vielleicht ist mein Ansatz auch falsch angedacht. Ich muss noch einmal darüber nachdenken...

betateilchen

Zitat von: Kulli am 08 April 2025, 12:25:57Vielleicht ist mein Ansatz auch falsch angedacht.

Du beschreibst hier nicht funktionierende Lösungen (bzw. Lösungen, deren Umsetzung Dir noch unklar ist) anstatt zu beschreiben, was Du bezweckst.

Beschreibe doch einmal die konkrete Aufgabe, die Du mit dem Konstrukt lösen möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Kulli

Ich habe eine PV Anlage und beziehe nur aus dieser unserem Strom (Inselanlage). Sie besteht aus 8,4KWp PV und 30KWh Batterien. Wir haben eine paar Heizungen im Haus verteilt, die nur dann aktiviert werden, wenn wir zu viel Strom haben.
"Zu viel Strom bei PV": Ich habe eine MiniPV (0,4W) mit der ich die maximal mögliche Leistung ausrechne. Die Heizungen werden also nur dann aktiviert wenn:
die theoretisch Verfügbare Leistung - aktuellem Verbrauch - Batterieeinlagerung > Threshold ist.
Gegen Abend wird das aber schwierig wegen Abschattungen durch palmen usw.
Daher hatte ich noch so etwas wie "Wenn SOC der Batterien >= 99%" drin.
Der Zustand < 100% kommt nur öfters vor wolkig und Microwelle und Kaffeemaschine an, usw.
Das aber nur für zb 15min, danach steht wieder Leistung bereit und lädt die Batterien wieder auf.

Daher kam mir die Idee, nicht auf x >=99% zu prüfen, sondern auf die Zeit, wie lange denn die Batterie schon unter 99% liegt.
Also kleiner als 15 Min in der Zeit von 8:00 - 15:00, alles Gut
Größer als 15 Minuten nach 15 Uhr, Heizungen aus...

Ein weiteres Problem habe ich mit der Solarheizung, wo ich Wasser von den Solarflächen entweder in den Waserspeicher fahre ODER in die Fußbodenheizung.
Ich messe quasi das dT zwischen Vorlauf und Rücklauf der Placas. Mit 70Grad will ich nicht den Fußboden ruinieren, daher blocke ich dann den Fußboden.
Aber auch da wäre es klüger zu fragen, wie lange denn der Rücklauf schon > 40 Grad ist. Kleine vorbeiziehende Wolken bringen quasi meine Steuerung zum schwingen, so das irgendwann das heiße Wasser aus dem Wasserspeicher den Vorlauf so weit erwärmen das der Fußboden wieder blockt.

Ein bisschen kompliziert zu erklären, dann musst du wohl mal für eine Woche vorbei kommen :-)

Naja, generell wäre eine Abfrage eines Readings bzgl des Signalzustandes über Zeit schon interessant. Das geht aber nur mit dem Log Modul denke ich.

LG
Uwe




rabehd

Warum nicht erst ein Thema angehen?
Warum kommst Du jetzt noch mit der Solarheizung, also Solarthermie?
Auch funktionierende Lösungen kann man hinterfragen.

Kulli


betateilchen

Zitat von: Kulli am 08 April 2025, 16:02:08Das geht aber nur mit dem Log Modul denke ich.

Von diesem Unsinn bist Du offenbar nicht abzubringen?

Du denkst m.E. viel zu kompliziert und es gibt eine ganze Reihe von simplen Lösungsansätzen.

Du schreibst den gewünschten Wert in ein userReading und läßt ihn dort so lange unverändert, wie der Wert innerhalb des gewünschten Bereichs bleibt. Dann kannst Du mit ReadingsAge() auf das userReading prüfen, wie lange die Bedingung schon erfüllt ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Kulli

Du meinst per notify checken und ins userreading schreiben, per timer dann userreading auswerten?
...
probiere ich mal aus...

betateilchen

Entweder notify ODER userReading - bitte nicht beides gleichzeitig.
Und was Du mit "per timer dann userReading auswerten" meinst, ist mir völlig unklar.

Lies halt erstmal die Dokumentation zu userReadings, vielleicht kommen wir dann weiter.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Kulli

Jaja, schon gut. Kenne mich mit userreadings aus.

rabehd

Zitat von: Kulli am 08 April 2025, 19:12:35Du meinst per notify checken und ins userreading schreiben, per timer dann userreading auswerten?
...
probiere ich mal aus...

Zitat von: Kulli am 08 April 2025, 19:35:44Jaja, schon gut. Kenne mich mit userreadings aus.


Ich sehe da einen Widerspruch.
Auch funktionierende Lösungen kann man hinterfragen.

Kulli

Ich nicht.
Ein nofify, getriggert durch Device->Event setzt ein reading im Timer.
Der Timer steuert meinen Regler.
Dort lese ich das reading aus.

Ach ich verstehe jetzt! Ich meinte ein Reading (was man mit setreding setzt) nicht ein userreading!
Mea culpa


cbl

Zitat von: Kulli am 08 April 2025, 21:52:02Ich nicht.
Ein nofify, getriggert durch Device->Event setzt ein reading im Timer.
Der Timer steuert meinen Regler.
Dort lese ich das reading aus.

Ach ich verstehe jetzt! Ich meinte ein Reading (was man mit setreding setzt) nicht ein userreading!
Mea culpa

Nach deiner Beschreibung des Problems nimmt dir das mittlerweile sehr ausgereifte Modul SolarForecast vermutlich alles Grübeln über Readingalter und Verteilung des Überschüsses inkl. vorausschauendem Einschalten bei erwarteten Überschuss ab.

Viele Grüße
Christian