Automatische Bewässerung von Gewächshaus und Rasen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

Das ist aus dem von Dir geposteten Log leider nicht ersichtlich.
Ich habe den log nochmal angehängt und Farbig markiert, tatsächlich geht sie kurz an und geht dann wieder aus. Müsste hier auch ein Timer wie bei dem Item "Bewaesserung_1_STATE" hinterlegt werden?
Da die Rule allerdings kein Logging eingebaut hat, werden hierfür nur Fehler geloggt, die sich aus grob fehlerhaftem Code ergeben (so wie Script execution of rule with UID 'Badheizkoerper_an_Ueberschuss1' failed - das ist aber ein anderes Thema)
Wie gesagt bin ich zu doof dafür so ein schönes Logging zu hinterlegen :roll:

Der Logfehler Script execution of rule with UID 'Badheizkoerper_an_Ueberschuss1' failed ist kein Fehler. hier habe ich ein Switchitem erstellt womit ich einige Rules wie zb diese Badheizkoerper_an_Ueberschuss1 zu deaktivieren. in der UI unter enable and disable rules.
Was noch auffällt: Das Ventil wird eingeschaltet, aber aber anschließend wird das sekündlich wiederholt. Hast Du am Trigger der Bewässerungs-Rule etwas geändert (also außer aus der 9 eine 14 zu machen)? Hast am Ende etwa im Sekundenfeld einen Stern eingetragen? Das wäre katastrophal.
Tatsächlich habe ich vorne als erstes zwei Sternchen gesetzt... mein Fehler so war es
Time cron "* 52 * * * ? *" ------ das letzte Sternchen steht doch für Jahr oder ? und das erste für Sekunde
Jetzt ist es so und viel besser
Time cron "0 52 * * * ? *"


Lg Sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von udo1toni »

zinnik hat geschrieben: 28. Mai 2023 23:29Ich habe den log nochmal angehängt und Farbig markiert,
Sicher?
zinnik hat geschrieben: 28. Mai 2023 23:29 Der Logfehler Script execution of rule with UID 'Badheizkoerper_an_Ueberschuss1' failed ist kein Fehler.
Aber doch:

Code: Alles auswählen

==> /logs/openhab.log <==
2023-05-28 19:14:17.767 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Badheizkoerper_an_Ueberschuss1' failed: 
// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null
if(!(Aktuell_Live_Export.state instanceof Number))                              // gültige Zahl? Falls nicht
        return;                                                                     // Rule abbrechen
    val Number nPower = (Aktuell_Live_Export.state as Number).floatValue            // Messwert als Zahl ohne Einheit
    if(nPower < 1.10) {                                                             // Leistung unter 1.1kw
        tHeatStart?.cancel                                                          // stoppe Timer, falls vorhanden
        tHeatStart = null                                                           // entferne Timer
    }
    if(nPower < 0.1 && Badheizkoerper_Betrieb.state != OFF)                         // Leistung unter 0.1kw und Heizung an
        Badheizkoerper_Betrieb.sendCommand(OFF)                                     // Beende Heizen
    if(nPower > 1.10 && Badheizkoerper_Betrieb.state != ON && tHeatStart === null)  // Leistung über 1.1kw, Heizung aus und Timer läuft nicht
        tHeatStart = createTimer(now.plusMinutes(1), [|                             // Erzeuge Timer (Ausfühung in einer Minute)
            Badheizkoerper_Betrieb.sendCommand(ON)                                  // Schalte Heizung ein
            tHeatStart = null
        ])
   Cannot refer to the non-final variable tHeatStart inside a lambda expression; line 21, column 1359, length 10
Achte bitte auf den Beginn der Logzeile (beginnt mit dem Zeitpunkt des Logeintrags): Da steht ERROR.
Und in der letzten Zeile wird auch erklärt, was schief geht: Cannot refer to the non-final variable tHeatStart inside a lambda expression
Du kannst die Variable tHeatStart nicht innerhalb des Lambdas benutzen (das Lambda enthält den Code, der ausgeführt wird, wenn der Timer abläuft).
Der Grund hierfür ist, dass die Variable nicht final definiert ist, das heißt, sie ist in einem Kontext definiert, der nicht gültig ist, wenn der Code ausgeführt wird.
Und wenn Du die ersten Codezeilen betrachtest, wird das bestätigt. Du definierst die Variable lokal innerhalb der Rule, dabei steht sogar im Kommentar darüber, dass die Variable zu Beginn der Datei definiert werden muss, das heißt, außerhalb der Rules. Alle globalen Variablen müssen definiert werden, bevor die erste Rule definiert wird.
zinnik hat geschrieben: 28. Mai 2023 23:29 das letzte Sternchen steht doch für Jahr oder ? und das erste für Sekunde

Code: Alles auswählen

Time cron "0 0 9 * * ? *"
           ^ ^ ^ ^ ^ ^ ^
           | | | | | | |
           | | | | | | Jahr (kann entfallen)
           | | | | | Wochentag (Mon - Sun, 1 - 7, L, #)
           | | | | Monat (Jan - Dec, 1 - 12)
           | | | Tag im Monat (1 - 31, L, W)
           | | Stunde (0 - 23)
           | Minute (0 - 59)
           Sekunde (0 - 59)
* bedeutet jeder beliebige Wert,
0/5 bedeutet jeder fünfte Wert, beginnend mit 0 (entsprechend 7/13 jeder 13. Wert, beginnend mit 7)
4-9,13,17 bedeutet Die Werte 4 bis 9, 13 und 17. Da das Leerzeichen zwei Felder trennt, müssen alle Ausdrücke pro Feld ohne Leerzeichen geschrieben werden.
Es muss im cron-Ausdruck exakt ein Fragezeichen stehen, entweder beim Wochentag oder beim Tag im Monat. Man kann also keinen cron-Ausdruck formulieren, der nur am Freitag dem 13. auslöst.
Steht beim Tag im Monat ein W mit Zahl (z.B. 15W), so wird der Trigger am nächstgelegenen Werktag triggern (Montag - Freitag), also z.B. am 14, wenn der 15. ein Samstag ist, aber am 16., wenn der 15. ein Sonntag ist.
Beim Tag im Monat steht das L für den letzten Tag im Monat, also "1 1 1 L * ?" triggert immer am Monatsletzten, am 31. Januar, am 28. (im Schaltjahr 29.) Februar, am 31. März, am 30. April usw.
L-4 wäre der viertletzte Tag im Monat...
Im Wochentag funktioniert das L ähnlich... 1L ist der letzte Montag im Monat. 4#2 wäre der zweite Donnerstag im Monat.
zinnik hat geschrieben: 28. Mai 2023 22:36 wenn ich eine Rule über den Log verfolgen will wird mir aber immer nur der Dateiname als Rule angezeigt.
Rules erzeugen nur dann Logeinträge, wenn man mit einem logX() Befehl eine Ausgabe erzeugt. Dabei steht das X für Debug, Info, Warn oder Error, also z.B. logInfo("loggername","Meldung"). Über den Loggernamen kann man von der Karaf Konsole aus während openHAB läuft steuern, welche Meldungen ausgegeben werden. Z.B. die beiden Bewässerungsrules, mit Logging angereichert:

Code: Alles auswählen

rule "Bewässerung"
when
    Time cron "0 0 9 * * ?"  // täglich um 09:00:00 Uhr
then
    logDebug("watering","Cron-Job für Bewässerung gestartet")
    if(BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state instanceof Number) {                  // enthält das Item einen gültigen Zahlenwert?
        logInfo("watering","Item Bodenfeuchte liefert {}",BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state as Number)
        if((BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state as Number).floatValue >= 45) {   // größer oder gleich 45?
            logWarn("watering","Bodenfeuchtewert über 44, Abbruch")
            return;                                                                         // dann Rule abbrechen
        }
    }
    if(BodenfeuchtesensorBeet_Bodentemperatur.state instanceof Number) {                    // enthält das Item einen gültigen Zahlenwert?
        logInfo("watering","Item Bodentemperatur liefert {}",BodenfeuchtesensorBeet_Bodentemperatur.state.state as Number)
        if((BodenfeuchtesensorBeet_Bodentemperatur.state as Number).floatValue <= 1) {      // kleiner oder gleich 1?
            logWarn("watering","Temperatur unter 1, zu kalt, Abbruch")
            return;                                                                         // dann Rule abbrechen
        }
    }
    logInfo("watering","Ventil 1 einschalten und Timer starten")
    Bewaesserung_1_STATE.sendCommand(ON)                                                    // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                    // Timer für Bewässerungsdauer
        logInfo("watering","Ventil 1 mit Timer ausschalten")
        Bewaesserung_1_STATE.sendCommand(OFF)                                               // Ventil ausschalten
    ])
end

rule "Bewässerung Quelle"
when
    Member of gVentile changed or                                                           // Ventil wurde geschaltet
    Item Fuellstandssensor_Regenfass_Fuellstand changed                                     // Wasserstand hat sich geändert
then
    logDebug("watering","Bewässerungsquelle wählen")
    var Integer iRegenfass = 0                                                              // Initialwert Regentonne
    var swHW = OFF                                                                          // Initialwert Switch Hauswasser
    var swRT = OFF                                                                          // Initialwert Switch Regentonne
    if(Fuellstandssensor_Regenfass_Fuellstand.state instanceof Number)                      // Falls Wasserstand gültig
        iRegenfass = (Fuellstandssensor_Regenfass_Fuellstand.state as Number).intValue      // setze Füllstand
    logInfo("watering","Ermittelter Füllstand {}",iRegenfass)
    if(gVentile.members.filter[v|v.state == ON].size > 0) {                                 // Falls Bewässerung aktiv
        logInfo("watering","Mindestens ein Ventil geöffnet")
        if(iRegenfass > 20)                                                                 // Falls Füllstand über 20 %
            swRT = ON                                                                       // Regentonne aktivieren
        else                                                                                // sonst
            swHW = ON                                                                       // Hauswasser aktivieren
    }
    logInfo("watering","Sollzustand Quellventil Hauswasser: {} Regenfass: {}",swHW,swRT)
    if(shellyplugsWandprojektion192168180_Betrieb.state != swHW) {                          // Falls Soll von Ist abweicht
        logInfo("watering","Schalte Quellventil Hauswasser auf {}",swHW)
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(swHW.toString)               // sende Schaltbefehl
    }
    if(FRITZDECT210_Steckdose.state != swRT) {
        logInfo("watering","Schalte Quellventil Regenfass auf {}",swRT)
        FRITZDECT210_Steckdose.sendCommand(swRT.toString)
    }
end
Nun kannst Du über die Karaf Konsole das Logging feingranular steuern:

Code: Alles auswählen

log:set DEBUG org.openhab.core.model.script.watering
lässt alle Logmeldungen ausgeben

Code: Alles auswählen

log:set INFO org.openhab.core.model.script.watering
läst die DEBUG-Meldungen aus

Code: Alles auswählen

log:set WARN org.openhab.core.model.script.watering
gibt nur die Warnmeldungen aus

Code: Alles auswählen

log:set ERROR org.openhab.core.model.script.watering
unterdrückt alles, bis auf ERROR, haben wir hier nicht, also gibt es keine Log-Meldungen mehr (diese beiden Rules betreffend).
Man kann auch noch OFF, TRACE und DEFAULT angeben, Ersteres unterdrückt auch noch die ERROR Meldungen, Letzteres übernimmt die Einstellung des Parent-Elements (hier org.openhab.core.model.script).
TRACE gibt es nur beim Core und den Bindings, in Zusammenhang mit Rules ist das wirkungslos.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

Aber doch:
CODE: ALLES AUSWÄHLEN

==> /logs/openhab.log <==
2023-05-28 19:14:17.767 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Badheizkoerper_an_Ueberschuss1' failed:
// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null
if(!(Aktuell_Live_Export.state instanceof Number)) // gültige Zahl? Falls nicht
return; // Rule abbrechen
val Number nPower = (Aktuell_Live_Export.state as Number).floatValue // Messwert als Zahl ohne Einheit
if(nPower < 1.10) { // Leistung unter 1.1kw
tHeatStart?.cancel // stoppe Timer, falls vorhanden
tHeatStart = null // entferne Timer
}
if(nPower < 0.1 && Badheizkoerper_Betrieb.state != OFF) // Leistung unter 0.1kw und Heizung an
Badheizkoerper_Betrieb.sendCommand(OFF) // Beende Heizen
if(nPower > 1.10 && Badheizkoerper_Betrieb.state != ON && tHeatStart === null) // Leistung über 1.1kw, Heizung aus und Timer läuft nicht
tHeatStart = createTimer(now.plusMinutes(1), [| // Erzeuge Timer (Ausfühung in einer Minute)
Badheizkoerper_Betrieb.sendCommand(ON) // Schalte Heizung ein
tHeatStart = null
])
Cannot refer to the non-final variable tHeatStart inside a lambda expression; line 21, column 1359, length 10
Achte bitte auf den Beginn der Logzeile (beginnt mit dem Zeitpunkt des Logeintrags): Da steht ERROR.
Und in der letzten Zeile wird auch erklärt, was schief geht: Cannot refer to the non-final variable tHeatStart inside a lambda expression
Du kannst die Variable tHeatStart nicht innerhalb des Lambdas benutzen (das Lambda enthält den Code, der ausgeführt wird, wenn der Timer abläuft).
Der Grund hierfür ist, dass die Variable nicht final definiert ist, das heißt, sie ist in einem Kontext definiert, der nicht gültig ist, wenn der Code ausgeführt wird.
Und wenn Du die ersten Codezeilen betrachtest, wird das bestätigt. Du definierst die Variable lokal innerhalb der Rule, dabei steht sogar im Kommentar darüber, dass die Variable zu Beginn der Datei definiert werden muss, das heißt, außerhalb der Rules. Alle globalen Variablen müssen definiert werden, bevor die erste Rule definiert wird.
Ich hatte die Rule damals so übernommen wo du mir geholfen hattest meine rule sieht so aus.

Code: Alles auswählen

// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null

rule "Überschuss heizen Badheizkörper"
when
    Item Aktuell_Live_Export changed
then
    if(!(Aktuell_Live_Export.state instanceof Number))                                                  // gültige Zahl? Falls nicht
        return;                                                                                                               // Rule abbrechen

    val Number nPower = (Aktuell_Live_Export.state as Number).floatValue                   // Messwert als Zahl ohne Einheit
    if(nPower < 1.10) {                                                                                                  // Leistung unter 1.1kw
        tHeatStart?.cancel                                                                                              // stoppe Timer, falls vorhanden
        tHeatStart = null                                                                                                 // entferne Timer
    }

    if(nPower < 0.1 && Badheizkoerper_Betrieb.state != OFF)                                       // Leistung unter 0.1kw und Heizung an
        Badheizkoerper_Betrieb.sendCommand(OFF)                                                       // Beende Heizen

    if(nPower > 1.10 && Badheizkoerper_Betrieb.state != ON && tHeatStart === null)    // Leistung über 1.1kw, Heizung aus und Timer läuft nicht
        tHeatStart = createTimer(now.plusMinutes(1), [|                                                 // Erzeuge Timer (Ausfühung in einer Minute)
            Badheizkoerper_Betrieb.sendCommand(ON)                                                    // Schalte Heizung ein
            tHeatStart = null
        ])
end

So jetzt noch der Log hatte ich vergessen. Von dem Einschaltverhalten der Regenwasserpumpe
events_log.rar
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von udo1toni »

openHAB sendet offensichtlich keinen Befehl zum Item, es wird lediglich die Rückmeldung geloggt. Da es kein received command OFF gibt, möchte ich behaupten, dass hier ein Kommunikationsproblem mit der Schaltsteckdose vorliegt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

udo1toni hat geschrieben: 29. Mai 2023 13:03 openHAB sendet offensichtlich keinen Befehl zum Item, es wird lediglich die Rückmeldung geloggt. Da es kein received command OFF gibt, möchte ich behaupten, dass hier ein Kommunikationsproblem mit der Schaltsteckdose vorliegt.
Ja das habe ich mir auch schon überlegt. denn ab und zu schaltet sie verzögert ein.
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

zu den Problem mit dem Error Log vom Badheizkörper habe ich jetzt die andere variable auch oben reingeschrieben ist das richtig?

den Fehler habe ich noch imer im log

Code: Alles auswählen

// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null
val Number nPower = (Aktuell_Live_Export.state as Number).floatValue 

rule "Überschuss heizen Badheizkörper"
when
    Item Aktuell_Live_Export changed
then
    if(!(Aktuell_Live_Export.state instanceof Number))                                                  // gültige Zahl? Falls nicht
        return;                                                                                                               // Rule abbrechen

   // val Number nPower = (Aktuell_Live_Export.state as Number).floatValue                   // Messwert als Zahl ohne Einheit
    if(nPower < 1.10) {                                                                                                  // Leistung unter 1.1kw
        tHeatStart?.cancel                                                                                              // stoppe Timer, falls vorhanden
        tHeatStart = null                                                                                                 // entferne Timer
    }

    if(nPower < 0.1 && Badheizkoerper_Betrieb.state != OFF)                                       // Leistung unter 0.1kw und Heizung an
        Badheizkoerper_Betrieb.sendCommand(OFF)                                                       // Beende Heizen

    if(nPower > 1.10 && Badheizkoerper_Betrieb.state != ON && tHeatStart === null)    // Leistung über 1.1kw, Heizung aus und Timer läuft nicht
        tHeatStart = createTimer(now.plusMinutes(1), [|                                                 // Erzeuge Timer (Ausfühung in einer Minute)
            Badheizkoerper_Betrieb.sendCommand(ON)                                                    // Schalte Heizung ein
            tHeatStart = null
        ])
end
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von udo1toni »

Nein, das ist nicht richtig.
Diese lokale Konstante (nicht Variable...) wird ausschließlich innerhalb der Rule verwendet. Die Konstante wird auch nicht angemeckert.

Ist das die einzige Rule in der Datei?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

udo1toni hat geschrieben: 1. Jun 2023 15:38 Nein, das ist nicht richtig.
Diese lokale Konstante (nicht Variable...) wird ausschließlich innerhalb der Rule verwendet. Die Konstante wird auch nicht angemeckert.

Ist das die einzige Rule in der Datei?
Ja das ist die einzigste. Sie macht auch was sie soll. Der Badheizkörper geht an wenn Überschuss ab 1.1kw erzeugt wird und geht wieder aus wenn Überschuss 0,1kw ist.

Lg Sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

zinnik hat geschrieben: 1. Jun 2023 16:20
udo1toni hat geschrieben: 1. Jun 2023 15:38 Nein, das ist nicht richtig.
Diese lokale Konstante (nicht Variable...) wird ausschließlich innerhalb der Rule verwendet. Die Konstante wird auch nicht angemeckert.

Ist das die einzige Rule in der Datei?
Ja das ist die einzigste. Sie macht auch was sie soll. Der Badheizkörper geht an wenn Überschuss ab 1.1kw erzeugt wird und geht wieder aus wenn Überschuss 0,1kw ist.

Lg Sven
Hast du noch eine Idee dazu?
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von zinnik »

Und ich habe auch nochmal zu dieser Rule eine frage. Wenn ich das Hauswasserventil (shellyplugsWandprojektion192168180_Betrieb) manuell anschalte zb. über die Sitemap dann geht es jetzt immer nach kurzer Zeit aus. Wenn ich die Rule deaktiviere funktioniert es.

Kann man das so abändern das es unabhängig von der Rule geschalten werden kann?

Code: Alles auswählen

rule "Bewässerung"
when
    Time cron "0 0 9 * * ?"  // täglich um 09:00:00 Uhr
then
    logDebug("watering","Cron-Job für Bewässerung gestartet")
    if(BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state instanceof Number) {                  // enthält das Item einen gültigen Zahlenwert?
        logInfo("watering","Item Bodenfeuchte liefert {}",BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state as Number)
        if((BodenfeuchtesensorBeet_Bodenfeuchtigkeit.state as Number).floatValue >= 45) {   // größer oder gleich 45?
            logWarn("watering","Bodenfeuchtewert über 44, Abbruch")
            return;                                                                         // dann Rule abbrechen
        }
    }
    if(BodenfeuchtesensorBeet_Bodentemperatur.state instanceof Number) {                    // enthält das Item einen gültigen Zahlenwert?
        logInfo("watering","Item Bodentemperatur liefert {}",BodenfeuchtesensorBeet_Bodentemperatur.state.state as Number)
        if((BodenfeuchtesensorBeet_Bodentemperatur.state as Number).floatValue <= 1) {      // kleiner oder gleich 1?
            logWarn("watering","Temperatur unter 1, zu kalt, Abbruch")
            return;                                                                         // dann Rule abbrechen
        }
    }
    logInfo("watering","Ventil 1 einschalten und Timer starten")
    Bewaesserung_1_STATE.sendCommand(ON)                                                    // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                    // Timer für Bewässerungsdauer
        logInfo("watering","Ventil 1 mit Timer ausschalten")
        Bewaesserung_1_STATE.sendCommand(OFF)                                               // Ventil ausschalten
    ])
end

rule "Bewässerung Quelle"
when
    Member of gVentile changed or                                                           // Ventil wurde geschaltet
    Item Fuellstandssensor_Regenfass_Fuellstand changed                                     // Wasserstand hat sich geändert
then
    logDebug("watering","Bewässerungsquelle wählen")
    var Integer iRegenfass = 0                                                              // Initialwert Regentonne
    var swHW = OFF                                                                          // Initialwert Switch Hauswasser
    var swRT = OFF                                                                          // Initialwert Switch Regentonne
    if(Fuellstandssensor_Regenfass_Fuellstand.state instanceof Number)                      // Falls Wasserstand gültig
        iRegenfass = (Fuellstandssensor_Regenfass_Fuellstand.state as Number).intValue      // setze Füllstand
    logInfo("watering","Ermittelter Füllstand {}",iRegenfass)
    if(gVentile.members.filter[v|v.state == ON].size > 0) {                                 // Falls Bewässerung aktiv
        logInfo("watering","Mindestens ein Ventil geöffnet")
        if(iRegenfass > 20)                                                                 // Falls Füllstand über 20 %
            swRT = ON                                                                       // Regentonne aktivieren
        else                                                                                // sonst
            swHW = ON                                                                       // Hauswasser aktivieren
    }
    logInfo("watering","Sollzustand Quellventil Hauswasser: {} Regenfass: {}",swHW,swRT)
    if(shellyplugsWandprojektion192168180_Betrieb.state != swHW) {                          // Falls Soll von Ist abweicht
        logInfo("watering","Schalte Quellventil Hauswasser auf {}",swHW)
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(swHW.toString)               // sende Schaltbefehl
    }
    if(FRITZDECT210_Steckdose.state != swRT) {
        logInfo("watering","Schalte Quellventil Regenfass auf {}",swRT)
        FRITZDECT210_Steckdose.sendCommand(swRT.toString)
    }
end
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Antworten