Ankündigung

Einklappen
Keine Ankündigung bisher.

Regenschutz Rasenmäher Rule

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Regenschutz Rasenmäher Rule

    Hallo zusammen,

    ich habe mir die folgende Rule gebaut:

    Code:
    rule "Rasenmäherroboter Regenschutz Timer"
    when
    Item ws_regen changed
    then
    tMower?.cancel
    if(ws_regen.state == CLOSED)
    tMower = createTimer(now.plusHours(3), [|
    mower_enable.sendCommand(ON)
    ])
    else
    mower_enable.sendCommand(OFF)
    end
    
    
    rule "Rasenmäherroboter Regenschutz"
    when
    Item mower_enable changed
    then
    val boolean bOk = au_rmr_aktivitaet.state=="OK_CUTTING" || au_rmr_aktivitaet.state=="OK_CUTTING_TIMER_OVERRID DEN" || au_rmr_aktivitaet.state=="OK_LEAVING" || au_rmr_aktivitaet.state=="PARKED_TIMER" || au_rmr_aktivitaet.state=="OK_SEARCHING" || au_rmr_aktivitaet.state=="OK_CHARGING"
    if (au_rmr_regenschutz.state==ON){
    if(mower_enable.state == ON && au_rmr_aktivitaet.state.toString == "PARKED_PARK_SELECTED") {
    sendBroadcastNotification("Der Rasenmäherzeitplan wird fortgesetzt, da es nicht mehr regnet!")
    au_rmr_maehen_zeitplan.sendCommand(ON)
    }
    if(mower_enable.state == ON && bOk)
    sendBroadcastNotification("Der Rasenmäher mäht weiter oder setzt den Zeitplan fort, da es nicht mehr regnet!")
    if(mower_enable.state == OFF && bOk) {
    sendBroadcastNotification("Da es regnet, wurde der geparkte Rasenmäherroboter auf Parken und Pausieren gesetzt.")
    au_rmr_maehen_zeitplan_pausieren.sendCommand(ON)
    }
    }
    end
    Hiermit wird realisiert, dass der Rasenmäherroboter bei Regen in die Garage fährt und auf den Status "PARKED_PARK_SELECTED" geht.

    Nach 3 Stunden wird dann geprüft ob noch immer Regen vorliegt und entsprechend wieder auf den Zeitplan umgestellt.

    Irgendwie springt die Rule aber bei Regen nicht an.

    Ich habe die zu prüfenden Strings im EventLog geprüft. Das sind genau die, die ich auch abprüfe.

    Jemand eine Idee ob es an etwas anderem liegen kann.

    Viele Grüße
    Sascha


    #2
    Die Frage ist erst mal, an welcher Stelle es nicht funktioniert, da Du ja die eine Rule durch die andere Rule triggern lässt (was schon ok ist...)
    Ein erster Ansatz wäre also, ein paar logInfo() Befehle einzubauen, in beiden Rules, um zu beobachten, wo es scheitert.

    Hast Du tMower als globale Timer Variable definiert?
    .sendCommand() sendet einen Befehl. changed triggert auf einen Statuswechsel. Nun ist das normale Verhalten von openHAB, den Status eines Items aus einem gesendeten Befehl abzuleiten. Trotzdem wäre es besser, das Item mittels .postUpdate() auf den passenden Status zu ziehen, es sei denn, es gibt noch eine weitere Rule, welche auf received command triggert.

    Der Ansatz mit bOk ist nicht schlecht, ließe sich aber noch vereinfachen:
    Code:
    val boolean bOk = ("OK_CUTTING OK_CUTTING_TIMER_OVERRIDDEN OK_LEAVING PARKED_TIMER OK_SEARCHING OK_CHARGING").contains(au_rmr_aktivitaet.state.toString)
    .contains(str) steht als Methode für das String Objekt zur Verfügung und ist wahr, wenn str im Objekt enthalten ist. Man könnte auch die Leerzeichen zwischen den einzelnen Teilstrings weg lassen oder andere Trennzeichen nutzen.
    Gibt es noch weitere Aktivitäts-Strings (außer PARKED_PARK_SELECTED)? Falls nicht, könnte die 1. Abfrage z.B. so formuliert werden:
    Code:
    if(mower_enable.state == ON && !bOk)
    Zuletzt geändert von udo1toni; 06.06.2020, 05:34.

    Kommentar


      #3
      Es funktioniert doch. Es ist nur so, dass die Rule erstmal in den 3 Stunden Timer springt und dann dort verweilt.

      Da es gestern den ganzen Tag geregnet hat, wurde dieser Timer auch immer wieder erneuert.

      Nachdem es dann 3 Stunden geregnet hatte, kam dann auch die ensprechende Push Nachricht.

      Danke Euch.

      Kommentar


        #4
        Dann ist die Regel verkehrt herum. Oder ich habe Deine Beschreibung falsch verstanden.
        Mein Verständnis: das Item ws_regen wechselt auf OPEN, sobald es beginnt zu regnen. In der Folge wird mower_enable sofort auf OFF gesetzt, was umgehend zum Parken und Pausieren des Mowers führt.
        Wenn es aufhört zu regnen, wechselt ws_regen auf CLOSED (evtl. dauert das etwas, da der Sensor evtl. erst trocknen muss). In der Folge wird der Timer gestartet, der nach drei Stunden mower_enable auf ON setzt, was dann zum Fortsetzen des Mähvorgangs (bzw. zur Bereitschaft zum Mähen über Timer) führt. Der Timer wird nur dann gestartet, wenn es aufhört zu regnen, er wird allenfalls in einer Übergangszeit mehrfach neu angelegt, wenn der Sensor während des Trockenvorgangs mehrfach kippt.

        Kommentar


          #5
          Es funktioniert wie es soll, vielleicht habe ich es nur falsch beschrieben Danke Euch.

          Kommentar

          Lädt...
          X