Seite 7 von 8

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

Verfasst: 19. Sep 2023 22:16
von zinnik
Das Item liefert den richtigen Wert
Screenshot (378).png

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

Verfasst: 20. Sep 2023 00:01
von udo1toni
Vorsicht! Da steht erst mal nur 75 %. Die Frage ist, in welchem Format dieser Wert im Item gespeichert ist. Wie ist die Unit im Item definiert?
Was passiert, wenn Du in der Rule den Wert noch mit loggst:

Code: Alles auswählen

rule "Bewässerung dynamisch Blumenbeet"
when
    Time cron "0 0 20 * * ?"  // täglich um 20:00:00 Uhr "0 0 9 * * ?"      Test Minuten nach der vollen Stunde"0 06 * * * ? *"
then
    logInfo("watering", "Bewässerung dynamisch Blumenbeet gestartet- geplante Startzeit 20 Uhr")
    if(Sensor_6_Bodenfeuchtigkeit.state instanceof Number) {                  // enthält das Item einen gültigen Zahlenwert?
        logInfo("watering","Bodenfeuchte {} als Zahl {}",Sensor_6_Bodenfeuchtigkeit.state,(Sensor_6_Bodenfeuchtigkeit.state as Number).floatValue)
        if((Sensor_6_Bodenfeuchtigkeit.state as Number).floatValue >= 45)     // größer oder gleich 45?
            return;                                                                         // dann Rule abbrechen
    }
...
Tipp am Rande: Die log-Befehle erwarten zwei Strings. Dabei ist der erste String der Loggername, der zweite String ist die Logger Meldung. Sehr viele User missverstehen den ersten String als "Überschrift", das ist aber nicht der Fall. Stattdessen wird der Loggername genutzt, um das Logverhalten zu steuern. Deshalb sollte der Loggername möglichst
  • kurz sein
  • keine Sonderzeichen, Leerzeichen oder Umlaute enthalten
  • am besten CamelCase verwenden
Der Logger befindet sich in einer Baumstruktur, der String ist nur der letzte Teil des Loggernamens. Für alle DSL Rules lautet der erste Teil des Loggernamens org.openhab.core.model.script., erst dann folgt der angegebene String. Der vollständige Loggername der Logbefehle oben lautet also org.openhab.core.model.script.watering und mit diesem Namen kann man von der Karaf Konsole aus einfach per Befehl

Code: Alles auswählen

log:set WARN org.openhab.core.model.script.watering
verhindern, dass die Logbefehle irgendeine Ausgabe erzeugen (das Level WARN liegt über dem gewünschten INFO Level)

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

Verfasst: 20. Sep 2023 05:26
von zinnik
Ok kann ich probieren aber ich denke das es nicht an dem Itemwert liegt.

Denn dann würden die einachen erstellten rule nicht funktionieren habe noch weitere rules die ich aber dann deaktiviere wenn die dynamischen laufen sollen. zb hier

Code: Alles auswählen

rule "Bewässerung über Hauswasser Blumenbeet"
when
    Time cron "0 0 20 * * ?"  // täglich um 20:00 Uhr ab 40%
then
    if(Sensor_6_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((Sensor_6_Bodenfeuchtigkeit.state as Number).floatValue >= 45)     // größer oder gleich 45?
            return;                                                                         // dann Rule abbrechen
            
    if(Sensor_6_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((Sensor_6_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                         // dann Rule abbrechen
    
       shelly_pug_s_31_shellyplugsa7558f192168131_Betrieb.sendCommand(ON)                   // Gartenwasser Ventil einschalten
       Bewaesserung_1_STATE.sendCommand(ON)                                                 // Ventil einschalten
    // GartenpumpeHomematicSteckdose_State.sendCommand(ON)                                  // Pumpe einschalten
    createTimer(now.plusSeconds(1200), [|                                                    // Timer für Bewässerungsdauer
    // GartenpumpeHomematicSteckdose_State.sendCommand(OFF)                                 // Pumpe ausschalten
       Bewaesserung_1_STATE.sendCommand(OFF)                                                // Ventil ausschalten
       shelly_pug_s_31_shellyplugsa7558f192168131_Betrieb.sendCommand(OFF)                  // Gartenwasser Ventil ausschalten
    ])
end

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

Verfasst: 20. Sep 2023 10:36
von udo1toni
Ah. Ok, ja, dann wird der Wert schon passen.
Es wäre so schön gewesen...

Alllerdings... Die Rule, die Du da zeigst, ist ja quasi identisch zu der von oben (also abgesehen von den zu schaltenden Elementen)
Insbesondere verwendet sie den identischen Trigger.

Identische Trigger bedeuten, man kann (und sollte) die Rules zu einer Rule zusammenfassen, soweit das möglich ist.
Der einzige Unterschied zwischen den beiden Rules ist ja, dass bei der einen noch zusätzlich das Item shelly_pug_s_31_shellyplugsa7558f192168131_Betrieb mit gesteuert wird. (übrigens kein guter Name für ein Item, in jeglicher Hinsicht...)

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

Verfasst: 21. Sep 2023 23:33
von zinnik
Hallo ja die sind auch fast identisch laufen aber nicht beide zusammen.


Momentan habe ich nur die Rule im Einsatz "Bewässerung über Hauswasser Blumenbeet"

Diese würde ich aber deaktivieren wenn die andere Rule "Bewässerung dynamisch Blumenbeet" und "Bewässerung dynamisch Blumenbeet Quelle"

richtig laufen würden.

Zum testen ist auch immer die "Bewässerung über Hauswasser Blumenbeet" deaktiviert.

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

Verfasst: 25. Mär 2024 21:42
von zinnik
Hallo

wie kann man die Rule erweitern indem man mehrere Sensoren abfragt und der, der die geringste bodenfeuchte hat soll die rule dann ablaufen lassen.

macht man das mit dem "oder" Befehl?

zb. für Sensor_3_Bodenfeuchtigkeit.state und Sensor_4_Bodenfeuchtigkeit.state

Die Bodentemperatur muss nicht zwingend abgefragt werden da sie ja schon vorhanden ist und in die Sensoren sich in der gleichen Umgebung liegen.

Code: Alles auswählen

rule "Bewässerung über Tank Topfpflanzen"
when
    Time cron "0 45 18 * * ?"  // täglich um 18:45 Uhr ab 55%
then
    if(Sensor_2_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((Sensor_2_Bodenfeuchtigkeit.state as Number).floatValue >= 60)     // größer oder gleich 60?
            return;                                                                                  // dann Rule abbrechen

    if(Sensor_2_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((Sensor_2_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                                  // dann Rule abbrechen

        shelly_plug_s_80_shellyplugsde4aaa192168180_Betrieb.sendCommand(ON)                          // Ventil am Tank einschalten
        GartenpumpeHomematicSteckdose_State.sendCommand(ON)                                          // Regenwasser Pumpe einschalten
    createTimer(now.plusSeconds(1200), [|                                                             // Timer für Bewässerungsdauer
        GartenpumpeHomematicSteckdose_State.sendCommand(OFF)                                         // Regenwasser Pumpe ausschalten
        shelly_plug_s_80_shellyplugsde4aaa192168180_Betrieb.sendCommand(OFF)                         // Ventil am Tank ausschalten
    ])
end

Danke

Lg Sven

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

Verfasst: 25. Mär 2024 23:49
von udo1toni
Es ist ja schon eine weile her... bist Du nur die ganze Zeit nicht dazu gekommen (bzw. wegen Jahreszeit unnötig...)?

Was ist der eigentliche Wunsch? (Ich bin zu faul, den ganzen Thread von vorne zu lesen)

Welche Sensoren (und wie viele genau) willst Du auswerten?
Was soll konkret gesteuert werden?
Gibt es mehrere gleichartige Steuerungen (also z.B. immer ein Messwert soll einen Aktor steuern)?

Deine Frage mit dem oder "Befehl" verstehe ich nicht so ganz. Im gezeigten Code wird die Rule ja per Zeit gesteuert, nicht durch Sensorwerte.

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

Verfasst: 26. Mär 2024 00:12
von zinnik
Hi ja genau wegen der Jahreszeit war es unnötig. ;)
In der rule die ich gepostet habe wird ja der Sensor_2_Bodenfeuchtigkeit überwacht.
Ich möchte die rule so erweitern das in der rule noch weitere sensoren überwacht werden zb sensor3 und sensor4.
Die bewässerung soll starten wenn einer der drei sensoren 2,3 oder 4 zb . 50% Feuchtigkeit haben.

Lg sven

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

Verfasst: 26. Mär 2024 00:40
von udo1toni
Dann bilde Gruppen. Z.B.

gBodenfeuchte_1 ist die Gruppe aller Sensoren für die erste Pflanze. Du kannst wahlweise die Gruppe mit einem berechneten Status versehen, hier z.B. MIN, dann musst Du lediglich den Status der Gruppe prüfen.
Oder Du kannst in der Rule auch so abfragen:

Code: Alles auswählen

var minimum = 100
gBodenfeuchte_1.members.filter[s|s.state instanceof Number].forEach[i|
    if((i.state as Number).floatValue< minimum) 
        minimum = (i.state as Number).floatValue
]
if(minimum < 50)
...
Das Ganze kann man auch so gestalten, dass mehrere Gruppen von Sensoren für mehrere Ventile (oder ähnliches) individuell zuständig sind.

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

Verfasst: 26. Mär 2024 02:19
von zinnik
Ok das mit den Gruppen ist mir bisschen zu kompliziert da es sein kann das die die Sensoren auch mal die Pflanze wechseln. Ist es nicht möglich die anderen sensoren einfach in die bestehende rule ei zu fügen. Zb.

Wenn Sensor2 oder Sensor3 oder Sensor4 eine Feuchtigkeit von kleiner 50% dann starte die rule?
Mit gruppen da sind sie ja wieder fest einer Gruppe zu geordnet :roll:
Lg Sven