Probleme bei persistence Daten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Probleme bei persistence Daten

Beitrag von Heavy-Dee »

Ich habe mich in den letzten Wochen mit der Umsetzung des Projekts "Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff" viewtopic.php?f=8&t=686#p3079 von Cyrelian beschäftigt. Nach anfänglichen (Verständnis-)Problemen und der entsprechenden Forenhilfe nimmt es langsam Formen an.
Habe nun aber ein Problem (generell / am Bsp. Bewässerung) bei dem ich wieder auf Hilfe angewiesen bin.

Ich habe die Dummy-Item "RainToday" u. "RainYesterday" erstellt um verschiedene Werte in einer mySQL-Datenbank abzulegen.

Item:

Code: Alles auswählen

Number   RainToday              "Rain_today [%.2f mm]"
Number   RainYesterday          "Rain_lastday [%.2f mm]"
Persist:

Code: Alles auswählen

RainToday : strategy = everyChange, restoreOnStartup
RainYesterday : strategy = everyChange, restoreOnStartup
Jeden Tag um 23:59:30 soll die Gesamtmenge (vRainToday) in die Datenbank (RainYesterday) abgespeichert werden und somit als Wert für den folgetag zur Verfügung stehen. -> die Variable (vRainYesterday) hat die Gesamtmenge, aber diese wird nicht in die Datenbank (RainYesterday) eingetragen !!!

Jede Stunde sollen die Regenmenge (RAIN) zur Ermittlung der Gesamtmenge (vRainToday) vom Wetterdienst abgerufen (RainToday) und für die eine spätere Anzeige gespeichert werden. -> funktioniert !!!
RainYesterday soll für weitere Berechnungen in abgerufen werden! -> funktioniert nicht !!!

Rule:

Code: Alles auswählen

var Number vRainToday
var Number vRainYesterday
// -------------------------

rule "Update RainYesterday"
when
	Time cron "0 59 23 * * ?" //23:59:00
then
	RainYesterday.postUpdate(vRainToday)	// vRainToday als RainYesterday in DB speichern 
end

rule "Update RainToday"
when
	Time cron "30 0 0/1 * * ?" //alle Std + 30 sek
then  
	// Regen (Summe seit Tagesbeginn via persistence ermitteln)
	var Number vRainToday = 0 
	vRainToday = Rain.sumSince(now.withTimeAtStartOfDay, "mysql")  
	RainToday.postUpdate(vRainToday)	// vRainToday als RainToday in DB speichern  
	
	// Regen gestern (Summe seit Tagesbeginn via persistence ermitteln)
	var Number vRainYesterday = 0
	vRainYesterday = RainYesterday.historicState(now.withTimeAtStartOfDay, "mysql").state as DecimalType	// Abruf RainYesterday aus DB in 	
	vRainYesterday für weitere Berechnungen!

	
	logInfo(filename, "vRainYesterday (var): " + String::format("%.2f", vRainYesterday.floatValue))	
	logInfo(filename, "RainYesterday (item): " + (RainYesterday.state))
	logInfo(filename, "Rain: " + (Rain.state))
	logInfo(filename, "vRainToday (var): " + String::format("%.2f", vRainToday.floatValue))
	logInfo(filename, "RainToday (item): " + (RainToday.state))
end
Log:
2019-05-01 10:00:30.029 [INFO ] [e.smarthome.model.script.RULE Garten] - vRainYesterday (var): 3.38 :?:
2019-05-01 10:00:30.031 [INFO ] [e.smarthome.model.script.RULE Garten] - RainYesterday (item): 0.810000000000000053290705182007513940334320068359375 :?:
2019-05-01 10:00:30.033 [INFO ] [e.smarthome.model.script.RULE Garten] - Rain: 0.00
2019-05-01 10:00:30.042 [INFO ] [e.smarthome.model.script.RULE Garten] - vRainToday (var): 0.02
2019-05-01 10:00:30.045 [INFO ] [e.smarthome.model.script.RULE Garten] - RainToday (item): 0.02000000000000000041633363423443370265886187553405761718750

Fazit:
vRainYesterday ruft den letzten in die DB eingetragenen Wert ab (3.38 wurde von Hand in DB eingetragen da via rule nicht automatisch geschrieben.)
RainYesterday zeigt nicht den aktuellen Status des Items an

Fragen:
Warum werden die Werte um 23:59 nicht in die DB geschrieben ?
Warum zeigt RainYesterday nicht den selben Wert wie vRainYesterday an?

wäre schön wenn mir jnd helfen kann.
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Probleme bei persistence Daten

Beitrag von udo1toni »

Erstmal solltest Du besser everyUpdate als Strategie wählen, da es ja durchaus passieren kann, dass mehrere Tage hintereinander identische Werte geliefert werden (das gilt auch für RainToday, nur da halt stündlich).
restoreOnStartup ist eigentlich unnötig, solange Du nicht auf den zuletzt geschriebenen Wert vor dem Neustart verwenden willst.

Da Du für RainYesterday letztlich nicht anders vorgehst als für RainToday, solltest Du vielleicht noch ein wenig loggen, was Du konkret tust (also z.B. welchen Wert Du in die DB zu schreiben versuchst) - einfach, um sicherzugehen, dass die Rule auch das tut, was sie soll.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Probleme bei persistence Daten

Beitrag von Heavy-Dee »

Code: Alles auswählen

rule "Update RainYesterday"
when
   		Time cron "0 59 23 * * ?" //23:59:00
then
		RainYesterday.postUpdate(vRainToday)
		logInfo(filename, "RainYesterday (item): UPDATED")
end
Logfile gibt aus

...[INFO ] [e.smarthome.model.script.RULE Garten] - RainYesterday (item): UPDATED
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Probleme bei persistence Daten

Beitrag von Heavy-Dee »

Ich habe wohl ein Problem mit den Datentypen, aber ich finde keinen Fehler.

Ich glaube ich habe den Fehler.

Code: Alles auswählen

RainYesterday.postUpdate(vRainToday)
in

Code: Alles auswählen

RainYesterday.postUpdate(RainToday.state)
geändert.
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Probleme bei persistence Daten

Beitrag von udo1toni »

Na ja, das sollte eigentlich egal sein, schließlich sollte die Variable den fraglichen Wert enthalten. Aber wenn es so funktioniert...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten