Gartenbewässerung Fehler in Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Gartenbewässerung Fehler in Rule

Beitrag von ollis112 »

Hallo,

ich möchte meinen Rasen bewässern, wenn es seit 60 Stunden nicht mehr geregnet hat.
Dafür haben ich ein Item erstellt "LastRain", indem die Zeit festgehalten wird, wann der Regen aufhört.

Dann habe ich folgende rule erstellt:

Code: Alles auswählen

rule "regner"
 
when 
Time cron "0 0 19 ? * MON-SUN"
 
then     
    if(LastRain.changedSince(now.minusHours(60)) == false) {
    	Regner1.sendCommand (ON)
	Regner2.sendCommand (ON)
	Regner3.sendCommand (ON)
    }
end
Das Problem ist, obwohl es vor weniger als 60 Stunden geregnet hat (also der Status von LastRain sich geändert hat)
Gehen die Regner um 19:00 Uhr an.
Wo liegt mein Fehler?

Wäre dankbar für einen Tipp

Ach ja, rrd4j Persistence habe ich installiert mit der Config

Code: Alles auswählen

// persistence strategies have a name and a definition and are referred to in the "Items" section
 
 
Strategies {
   everyMinute	: "0 * * * * ?"
   everyHour    : "0 0 * * * ?"
   everyDay     : "0 0 0 * * ?"
   default = everyChange
}
 
 
Items {
   LastRain : strategy = everyChange, restoreOnStartup

mit

Gruß
Oliver
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

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

Re: Gartenbewässerung Fehler in Rule

Beitrag von udo1toni »

Eventuell geht da irgendwas mit dem Vergleich schief. Nicht, dass er generell falsch wäre, aber normalerweise formuliert man diesen Vergleich anders.
Hast Du rrd4j als Default Persistence gesetzt? Ansonsten musst Du den Service mit angeben (das schadet auch nicht, falls es sich um den Default Service handelt).
Sinnvoll wäe auf jeden Fall auch, entsprechendes Logging einzubauen.

Code: Alles auswählen

rule "Regner"
when 
    Time cron "0 0 19 * * ?" // täglich 19 Uhr
then
    logInfo("sprinkler","Regner Rule getriggert!")
    if(!(LastRain.changedSince(now.minusHours(60),"rrd4j"))) {
        logInfo("sprinkler","Regenpause erkannt! Regner starten...")
    	Regner1.sendCommand(ON)
	Regner2.sendCommand(ON)
	Regner3.sendCommand(ON)
    }
end
Die Rule wird (falls es mal korrekt funktioniert) übrigens mindestens in einem Fall nicht korrekt funktionieren, nämlich, wenn openHAB weniger als 60 Stunden läuft.
restoreOnStartup erzeugt ein changed-Ereignis, womit das changedSince dann nicht true sein dürfte. Das kannst Du nur abfangen, indem Du den konkreten Wert vergleichst, der in dem Item gespeichert ist. Ic hgehe davon aus, dass LastRain ein DateTime Item ist. Dann ist der vergleich machbar, aber nicht einfach so, sondern Du musst vorher den Typ passend wandeln. Im englischen Forum gibt es ein paar sehr gute Beispiele und Tutorials, wie das richtig gemacht wird.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Re: Gartenbewässerung Fehler in Rule

Beitrag von ollis112 »

Hallo Udo,
ich habe das jetzt anders gelöst.
Die Regenmenge schaltet ein Item "Trockenheit" als "ON", wenn die Regenmenge länger als X Stunden bei "0" steht. (Mit einem Timer gelöst.)
Dann wird die Beregnung zu einer bestimmten Uhrzeit gestartet, aber nur wenn die Trockenheit auf "ON" steht.
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

Antworten