Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
julianpe
Beiträge: 42
Registriert: 28. Sep 2020 11:38
Answers: 0

Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Beitrag von julianpe »

Hallo zusammen,

ich möchte die Soll/Ist Temperaturen von allen Räumen in einer InfluxDB2 Datenbank speichern.
Ich verwende Openhab3 in einer Dockerinstanz im Raspberry Pi 4 (8GB, RPiOs 64 Bit).

Ich habe die Rules wie folgt erstellt:
temperature.rules

Code: Alles auswählen

rule "Temperatur Büro"
 
when
Item Ist_Temperatur_Buero received update
then
Ist_Temperatur_Buero.postUpdate(Ist_Temperatur_Buero.state) 
Soll_Temperatur_Buero.postUpdate(Soll_Temperatur_Buero.state)
end

rule "Temperatur Kind Süd"
 
when
Item Ist_Temperatur_Kind_Sued received update
then
Ist_Temperatur_Kind_Sued.postUpdate(Ist_Temperatur_Kind_Sued.state) 
Soll_Temperatur_Kind_Sued.postUpdate(Soll_Temperatur_Kind_Sued.state)
end


rule "Temperatur Kind Nord"
 
when
Item Ist_Temperatur_Kind_Nord received update
then
Ist_Temperatur_Kind_Nord.postUpdate(Ist_Temperatur_Kind_Nord.state) 
Soll_Temperatur_Kind_Nord.postUpdate(Soll_Temperatur_Kind_Nord.state)
end

rule "Temperatur Bad OG"
 
when
Item Ist_Temperatur_Bad_OG received update
then
Ist_Temperatur_Bad_OG.postUpdate(Ist_Temperatur_Bad_OG.state) 
Soll_Temperatur_Bad_OG.postUpdate(Soll_Temperatur_Bad_OG.state)
end

rule "Temperatur Schlafen"
 
when
Item Ist_Temperatur_Schlafen received update
then
Ist_Temperatur_Schlafen.postUpdate(Ist_Temperatur_Schlafen.state) 
Soll_Temperatur_Schlafen.postUpdate(Soll_Temperatur_Schlafen.state)
end

rule "Temperatur Küche"
 
when
Item Ist_Temperatur_Kueche received update
then
Ist_Temperatur_Kueche.postUpdate(Ist_Temperatur_Kueche.state) 
Soll_Temperatur_Kueche.postUpdate(Soll_Temperatur_Kueche.state)
end

rule "Temperatur Wohnzimmer"
 
when
Item Ist_Temperatur_Wohnzimmer received update
then
Ist_Temperatur_Wohnzimmer.postUpdate(Ist_Temperatur_Wohnzimmer.state) 
Soll_Temperatur_Wohnzimmer.postUpdate(Soll_Temperatur_Wohnzimmer.state)
end

rule "Temperatur Arbeiten"
 
when
Item Ist_Temperatur_Arbeiten received update
then
Ist_Temperatur_Arbeiten.postUpdate(Ist_Temperatur_Arbeiten.state) 
Soll_Temperatur_Arbeiten.postUpdate(Soll_Temperatur_Arbeiten.state)
end

rule "Temperatur Gäste-WC"
 
when
Item Ist_Temperatur_Gaeste_WC received update
then
Ist_Temperatur_Gaeste_WC.postUpdate(Ist_Temperatur_Gaeste_WC.state) 
Soll_Temperatur_Gaeste_WC.postUpdate(Soll_Temperatur_Gaeste_WC.state)
end

rule "Temperatur Flur"
 
when
Item Ist_Temperatur_Flur received update
then
Ist_Temperatur_Flur.postUpdate(Ist_Temperatur_Flur.state) 
Soll_Temperatur_Flur.postUpdate(Soll_Temperatur_Flur.state)
end

rule "Temperatur HWR"
 
when
Item Ist_Temperatur_HWR received update
then
Ist_Temperatur_HWR.postUpdate(Ist_Temperatur_HWR.state) 
Soll_Temperatur_HWR.postUpdate(Soll_Temperatur_HWR.state)
end
Und die Speicherlogik influxdb.persist:

Code: Alles auswählen

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
every2Minutes : "0 */2 * ? * *"
default=everyChange
}
 
Items {
HouseSumConsumption: strategy = everyMinute, restoreOnStartup
Stromzaehler_Verbrauch_Aktuell : strategy = everyMinute, restoreOnStartup
Stromzaehler_Verbrauch_Tag : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Buero : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Buero : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Kind_Sued : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Kind_Sued : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Kind_Nord : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Kind_Nord : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Bad_OG : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Bad_OG : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Schlafen : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Schlafen : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Kueche : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Kueche : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Wohnzimmer : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Wohnzimmer : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Arbeiten : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Arbeiten : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Gaeste_WC : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Gaeste_WC : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_HWR : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_HWR : strategy = everyMinute, restoreOnStartup
Ist_Temperatur_Flur : strategy = everyMinute, restoreOnStartup
Soll_Temperatur_Flur : strategy = everyMinute, restoreOnStartup
}

Die Daten bekomme ich über das KNX Bussystem.
Nun habe ich das Gefühl, dass Openhab mit den Rules überfordert ist, denn der Container läuft mit tlw. 300% CPU Last (lt. Portainer Darstellung)
CPU_Usage.png
Overview_Rules.png
Edit:

Wenn ich die Temperatur rule deaktiviere und die Einträge aus der persist Datei entferne, geht die CPU Last auf ca 7% zurück
CPU_danach.png
Was sagt ihr dazu?

Danke und Gruß
Julian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Beitrag von int5749 »

Evtl. verstehe ich die Rule nicht, aber die triggern sich doch alle permanent? Da ist eine hohe Proz-Last kein Wunder.
Rule trigget und in der Rule triggerst Du diese wieder und wieder und ....

Zum persistieren braucht es doch keine zusätzliche Rule? Was soll die Rule bewirken? Du setzt nach einem Trigger dem gleichen Item den state des gleichen Items?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

julianpe
Beiträge: 42
Registriert: 28. Sep 2020 11:38
Answers: 0

Re: Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Beitrag von julianpe »

Ich dachte, dass durch den Funktionsaufruf .postUpdate erst die Daten geschrieben werden.
Stattdessen kann ich einfach die Variablen in der persistence Datei lassen, die werden dann minütlich in die Datenbank geschrieben?

Benutzeravatar
itsego1990
Beiträge: 14
Registriert: 21. Nov 2017 23:27
Answers: 1
Wohnort: BW

Re: Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Beitrag von itsego1990 »

hi,
wie int5749 schreibt , braucht man keine Rule um werte in die datenbank zuschreiben.
Stattdessen kann ich einfach die Variablen in der persistence Datei lassen, die werden dann minütlich in die Datenbank geschrieben?
Genau in der persistence Datei stellst du ein wie oft der wert aktuallisert wird bzw, welche variable überhaupt in der Datenbank erfasst wird.
Aber wenn ein wert öfter aktuallisert bedeutet das auch mehr Leistung wird vom Server benötigt auf dem Openhab läuft. Bei ein paar Werten ist das nicht spürbar aber wenn man viele hat wo oft aktualsoert werden macht das schon was aus. Es bedeutet auch viel Schreib und Lese zugriffe auf die SD-Karte auf der die Datenbank läuft.

Ich loge z.b. meine Soll-werte mit dem Befehl everyChange. weil die änderen sich ja nicht so oft.
die Ist-werte von der Temperatur reichen mir auch alle 5min .

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

Rule für Soll/Ist Temperatur speichern richtig umgesetzt?

Beitrag von udo1toni »

Wie schon geschrieben braucht es zum Persistieren der Werte gar keine Rule.

Es geht aber noch weiter... Du brauchst nur zwei Zeilen in der *.persist Datei für das Persistieren, das wären

Code: Alles auswählen

gSollTemp* : strategy = everyMinute,everyChange,restoreOnStartup
gIstTemp*  : strategy = everyMinute,everyChange
Und dann packst Du alle Solltemperaturitems in die Gruppe gSollTemp und die Isttemperaturitems Gruppe gIstTemp.
Du möchtest die Isttemperaur nicht beim Programmstart aus den persistierten Daten wiederherstellen. Bei der Solltemperatur kann man auch drüber streiten, ob es nicht sinnvoller wäre, diese aus den RTR auszulesen.
Auf jeden Fall möchtest Du aber, dass die Persistence nicht nur minütlich, sondern auch bei Wertänderungen persistiert.

EveryMinute ist nur bei rrd4j zwingend notwendig, wenn ein anderes Backend eingesetzt wird (z.B. MySQL oder InfluxDB) so kann das wiederholte Schreiben immer identischer Werte komplett entfallen.


Gesendet von iPad mit Tapatalk
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten