Mähroboter parken

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
maddin2020
Beiträge: 30
Registriert: 29. Sep 2019 11:21
Answers: 0

Mähroboter parken

Beitrag von maddin2020 »

Hi zusammen ich möchte meinen Mähroboter automatisch nach CRON starten und stoppen. Dazu habe ich mir nun folgende Rule überlegt... könnte die so klappen oder hab ich ein Syntaxfehler

Hier mein überlegter Ablauf für Dienstag, Donnerstag, Samstag

Garage Shelly öffnen wenn Regel auf Auto >>
30 sek warten dann Abfrage komplett offen wenn ja (100.0) >>
Rasenmäher starten bis Ende (07:45) >>
Rasenmäher parken >>
Rasenmäher geparkt ? >>
30 sekunden warten >>
Garage schliessen >>
Ende Meldung

Code: Alles auswählen

var Timer t_Garage_Laufzeit = null
val Garage_Laufzeit_sec  = 30   


rule "Rasenmaeher automatisch starten"
when Time cron "0 30 4 ? * TUE,THU,SAT *"      
then 
    if (Rule_Rasenmaeherroboter_Zeitplan_aktiv.state == ON) {
        ShellyGarageRoboterRollerControl.sendCommand(UP)
        sendPushoverMessage(pushoverBuilder("Robotergarage wird geöffnet"))
        t_Garage_Laufzeit?.cancel
        t_Garage_Laufzeit = createTimer(now.plusSeconds(Garage_Laufzeit_sec), [ |
        if (ShellyGarageRoboterRollerRollerpos.state as Number == 100){
            GardenaRobinHoodMowerCommandsStartSecondsToOverride .sendCommand(ON)
            sendPushoverMessage(pushoverBuilder("Robotergarage komplett geöffnet >> Mäher starten"))
        } 
        else {
        sendPushoverMessage(pushoverBuilder("Robotergarage wurde nicht richtig geöffnet"))    
        }
        ]       
    }
end

rule "Rasenmaeher automatisch parken"
when Time cron "0 45 7 ? * TUE,THU,SAT *"      
then 
    if (Rule_Rasenmaeherroboter_Zeitplan_aktiv.state == ON) {
        GardenaRobinHoodMowerCommandsParkUntilFurtherNotice.sendCommand(ON) 
        sendPushoverMessage(pushoverBuilder("Roboter wird geparkt"))
        if (GardenaRobinHoodMowerActivity.state.toString == "PARKED_PARK_SELECTED"){  
            t_Garage_Laufzeit?.cancel
            t_Garage_Laufzeit = createTimer(now.plusSeconds(Garage_Laufzeit_sec), [ |
            ShellyGarageRoboterRollerControl.sendCommand(DOWN)
            sendPushoverMessage(pushoverBuilder("Robotergarage wird geschlossen"))
            ]
            if (ShellyGarageRoboterRollerRollerpos.state as Number == 0){
                GardenaRobinHoodMowerCommandsStartSecondsToOverride.sendCommand(ON)
                sendPushoverMessage(pushoverBuilder("Robotergarage geschlossen >> Mähvorgang beendet"))
            }
        } 
    }
end


Eure Meinung wäre super ! DANKE VORAB

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

Re: Mähroboter parken

Beitrag von udo1toni »

Bis auf ein paar kleine Fehler sieht das grundsätzlich ok aus. Wenn Du in einer Bedingung ein Typecasting machst (as Number) dann musst Du den Ausdruck klammern, da das == sonst eventuell auf das Number bezogen wird. Leerzeichen zwischen Itemnamen und .sendCommand ist potentiell auch nicht erlaubt.

Was mich aber mehr umtreibt: Warum nutzt Du überhaupt einen Timer? Die Aufgabe ist doch eigentlich:
1. Öffne die Rasenmähergarage
2. Wenn die Garage vollständig geöffnet ist, lasse den Mäher losfahren.
2a. Mäher wird geparkt
3. Wenn der Mäher wieder in der Garage angekommen ist, lasse die Garage zufahren.

Ich habe keinen Mähroboter (noch nicht mal Rasen zum Mähen ;) ), deshalb eine Verständnisfrage: handelt es sich um eine exklusive Mährobotergarage, oder wird die Garage auch für andere Zwecke geöffnet?

Falls exklusiv, solltest Du einfach drei Rules machen, welche sich jeweils genau um einen der Punkte 1, 2 und 3 kümmern, also Rule 1 wird über Zeit gesteuert, Rule 2 wird über das geöffnete Garagentor getriggert, Rule 3 wird über die Ankunft in der Garage getriggert.

Die Rule 2a lasse ich hier außen vor, denn ich glaube, Du solltest besser dem Mäher direkt mitteilen, wie lange er mähen soll (ich kenne das nur in dieser Form aus anderen Berichten zu Mährobotern und es erscheint mir auch logischer, als den Roboter "manuell" - im Sinne von "von außen" - zu stoppen).

Falls nicht exklusiv, kannst Du es genauso erledigen, musst aber noch ein zusätzliches Item definieren, über welches Du in den Regeln abfragen kannst, ob die Garage für den Mäher oder für andere Zwecke geöffnet wurde (das setzt Du dann in der 1. Rule und setzt es am Ende der 3. Rule wieder zurück).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten