Ankündigung

Einklappen
Keine Ankündigung bisher.

OH2: Mähroboter Rule

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

  • JoergA
    antwortet
    Zitat von udo1toni Beitrag anzeigen
    Ehrlich gesagt, nach fast einem Jahr... ?!?
    Das passiert, wenn man(n) ein Thema aus dem Augen verliert und dann wieder darauf gestoßen wird. Da der Robby offline war, konnte ich nix testen, daher hatte ich andere Dinge umgesetzt

    Zitat von udo1toni Beitrag anzeigen
    Vermutlich hat mich dabei gestört, dass stumpf minütlich geprüft wird, ob der Mower losgefahren ist und ebenso minütlich eine Nachricht per Push gesendet wird, falls er nicht fährt.
    Dies war in erster Linie zum testen, später wollte ich die Werte hoch setzen. Aber wenn eine While eine Rule ‚blockiert‘, ist dies sicher der falsche Weg. Ich denke ich gehe über den Trigger, ob der Akku geladen wird oder nicht und wenn dann die Zeit in einer gewissen Spanne ist. Aber erst muss ich einen Weg für den Kantenschnitt finden, sonst macht das keinen Sinn

    Gruß, Jörg

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Ehrlich gesagt, nach fast einem Jahr... ?!?

    Vermutlich hat mich dabei gestört, dass stumpf minütlich geprüft wird, ob der Mower losgefahren ist und ebenso minütlich eine Nachricht per Push gesendet wird, falls er nicht fährt.

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Zitat von udo1toni Beitrag anzeigen
    Allerdings denke ich nicht, dass die Rule - in welcher Form auch immer - zielführend ist
    Dies hat mich den ganzen Winter immer mal wieder beschäftigt, aber da das Schaaf im Winterschlaf war habe ich dies aufgehoben (nicht geschoben ) und derzeit habe ich den Garten etwas zerlegt und daher fährt es immer noch nicht Aber bald soll es soweit sein und daher fangen die Überlegungen an und pünktlich wurde der Threat "wiederbelebt" bzw in meine Erinnerung gerufen

    Warum findest Du dies nicht zielführend und was wäre Deine Idee??

    Regel: Bewässerung Morgens, mähen Abends. Somit sollten die sich nicht in die Quere kommen

    VG
    Jörg

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Zitat von udo1toni Beitrag anzeigen
    Beziehungsweise Du verzichtest komplett auf Antworten auf Deine Fragen. Schade, denn im allgemeinen helfen wir alle gerne, nur hapert es manchmal am Verstehen, und dann ist nix mit helfen...
    Dem ist nix hinzuzufügen

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Beziehungsweise Du verzichtest komplett auf Antworten auf Deine Fragen. Schade, denn im allgemeinen helfen wir alle gerne, nur hapert es manchmal am Verstehen, und dann ist nix mit helfen...

    Einen Kommentar schreiben:


  • billiboy
    antwortet
    Ach, da lasse ich Euch doch noch bissel überlegen was das ganze mit dem Mähroboter zu tun hat.
    Zuletzt geändert von billiboy; 27.05.2019, 06:53.

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Zitat von udo1toni Beitrag anzeigen
    Was meinst Du mit "das Script"?

    Was meinst Du mit "Das Mqtt"? (es gibt zwei verschiedene mqtt Addons in openHAB, Persistence mal nicht mitgerechnet)

    Was meinst Du mit "Die Abfragen"?

    Was hat das Ganze mit dem Mähroboter zu tun?
    Dies hatte ich mich auch gerade gefragt und noch keine Antwort dazu.

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Was meinst Du mit "das Script"?

    Was meinst Du mit "Das Mqtt"? (es gibt zwei verschiedene mqtt Addons in openHAB, Persistence mal nicht mitgerechnet)

    Was meinst Du mit "Die Abfragen"?

    Was hat das Ganze mit dem Mähroboter zu tun?

    Einen Kommentar schreiben:


  • billiboy
    antwortet
    Ich bin absolut flach auf dem ganzen Gebiet, habe jetzt ne Weile gebraucht bis ich das Script am laufen hatte. Jedenfalls läuft das Mqtt unter openhab2 jetzt. Wie kann ich jetzt z.B. die Abfragen unter openhab2 einfügen? Finde dazu nichts im Netz.

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Es ist eine ganz schlechte Idee, eine Rule mit langem Thread::sleep() schlafen zu lassen. Rules werden Event-gesteuert gestartet, in diesem Fall Montag bis Samstag um 21:58. Anschließend lebt diese Rule ewig, da die while-Bedingung immer erfüllt ist (now.getHourOfDay ist vom Typ Integer mit dem Wertebereich 0 bis 23)
    Am Samstag würde also die Rule sechsmal gleichzeitig laufen, wenn nicht der Scheduler nur 5 Threads für die Ausführung von Rules zur Verfügung stellen würde.
    Ab Freitag wird also keine einzige andere Rule mehr ausgeführt...

    Stattdessen sollte das Ganze als Timer angelegt werden (wenn man denn die Funktion so umsetzen will...)
    Code:
    var Timer teDolly = null
    
    rule"Mower Schedule"
    when
        Time cron "0 58 21 ? * MON-SAT"                                                                                                   //21:58:00 Uhr
    then
        pushNotification("eDolly: " + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") + " Scheduler")
        teDolly?.cancel                                                                                                                   // if(teDolly !== null) teDolly.cancel
        teDolly = createTimer(now, [|
            pushNotification("eDolly: "+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") +" Timer")
            if (Mower_StatusCode.state == 0 && Mower_ChargeState.state.toString == "false")
                pushNotification("eDolly: " + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") + " Ich bin zu Hause müsste losfahren")
            if (now.getMinuteOfDay < 1350)                                                                                               // 22:20 Uhr
                teDolly.reschedule(now.plusMinutes(1))
            else
                teDolly = null
        ])
    end
    Wo liegt nun der Unterschied?
    Die rule startet und legt einen Timer an. Anschließend ist die Rule zuende.
    Der Timer-Code wird unmittelber ein erstes Mal ausgeführt. Anschließend wird der Timer erneut geplant, diesmal eine Minute in der Zukunft. Nun wird kein Thread belegt, es gibt nur den Code im Scheduler. Der Scheduler führt den Code zur geplanten Zeit aus, bis 22:19 Uhr. Danach wir der Timer nicht erneut geplant und der Zeiger auf den Timer wird "genullt".

    Allerdings denke ich nicht, dass die Rule - in welcher Form auch immer - zielführend ist

    Einen Kommentar schreiben:


  • Don Stefano
    antwortet
    Hallo Jörg,

    du kannst auch beim Vollladen einen Event auslösen und ihn dann wieder losschicken, wenn die Zeit noch nicht um ist. Sprich, beim Start die geplante Endezeit ausrechnen in einer Variablen (am einfachsten ein virtuelles Item) zwischenspeichern und erst wenn er wieder geladen ist, prüfen, ob er nochmal los soll. Für die Endezeit müsste man sich dann etwas überlegen, dass er während des Mähens auch regelmäßig in eine Prüfroutine läuft.

    Update:
    Ich habe jetzt mal geprüft, welche Nachrichten er während des Mähens schickt. Das dauert ganz schön lange, bis er ein Update sendet. 10 Minuten ist schon eine recht geringe Auflösung. Man kann das Aktualisieren in der App aber manuell auslösen, indem man den refresh Button (die kreisenden Pfeile oben rechts) drückt.

    Mein Vorschlag zu deinem Problem: Du könntest ein Item für die aktuelle Zeit des Robbies (dateTime, in der App "Letzte Aktualisierung"). Dann eine Rule erstellen mit der du auf eine Änderung dieses Items reagierst. Sobald die Endezeit überschritten ist, Robby (oder bei dir das Schaf) nach Hause schicken. Alternativ eine Rule, die einfach jede Minute per cron getriggert wird und prüft, ob der Robby noch mäht und die Endezeit überschritten ist.

    Grüße
    Stefan
    Zuletzt geändert von Don Stefano; 14.07.2018, 21:09.

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Hallo Stefan,

    wenn das E-Schaaf zur gewünschten Zeit losfährt, soll es dann eben 2,5 Stunden auf der Weide bleiben.
    In der Regel ist nach ca. 1 Std. der Akku leer und Dolly fährt alleine nach Hause.
    Daher polle ich auf den Status des Akkus und wenn der in dem Zeit Fenster wieder voll wird (was normalerweise der Fall ist) dann soll Dolly eben wieder los.
    Wenn das Fenster abgelaufen ist, kommt dann der Rückruf und Dolly fährt heim.

    Ich könnte auch den Scheduler jeden Tag aufs neue setzen, aber für am liebsten auf die native App verzichten. Ein Punkt ist sicher auch noch der Kantenschnitt, den bekomme ich derzeit ohne die App auch noch nicht hin. Aber dies ist dann für später, nun möchte ich erst einmal die Steuerung in OH bekommen ;-)

    Gruß
    Jörg

    PS: Schön, dass Du es noch geschafft hast. Im Roboter Forum war jemand, der sich an ein Binding geben wollte, aber dies scheint wohl leider im Sande verlaufen zu sein :-(

    Einen Kommentar schreiben:


  • Don Stefano
    antwortet
    Hallo Jörg,

    hab die MQTT-Abindung von https://github.com/weweave/landroid-bridge. Jetzt hab ich es zum Laufen gebracht. Die Fehlermeldung kam von Zeile 46 der Datei landroid-cloud-2.js des IOBroker Bindings. Hier passt das IOBroker Binding anscheinend nicht zum übergeordneten Script. Das Problem lag an einem falschen Passwort. Das Script kann sich jetzt an der Cloud anmelden und bekommt alle Daten über meinen Robby. :sunglasses:

    Jetzt mal zu deinem Problem: Ich verstehe nicht, warum du unbedingt den Status pollen willst. Ich würde für das Beenden einfach eine neue Regel aufnehmen, die dann halt zur gewünschten Endezeit oder wenn die Bewässerung angeht den Landroid nach Hause schickt.

    Grüße
    Stefan

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Hallo noch einmal,

    ich bin doch noch nicht so weit

    Die Routine springt in die While Schleife, jedoch dann nicht mehr raus
    ich vermutet, dass While nicht "now.getHourOfDay <1350" interpretieren kann.
    Habt ihr eine Idee, wie ich eine Zeit in der While Schleife angeben kann?
    Ggfs. in der While Schleife zählen?

    Gruß,
    Jörg

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Hallo Stefan

    ich habe node.js laufen mit einem angepassten IOBroker script (aus dem Roboterforum)
    Dann noch Mosquitto für MQTT

    btw: Den Fehler habe ich gefunden und die While Schleife funktioniert nur ;-) Nun kann ich weiter testen.

    Viele Grüße,
    Jörg

    Einen Kommentar schreiben:

Lädt...
X