Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. WORX Landroid S Steuerung Regen und Feiertage

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    WORX Landroid S Steuerung Regen und Feiertage

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      Expertman last edited by

      Re: Offizielle Worx Landroid-S Smarthome Schnittstelle

      Hallo liebe iobroker-Gemeinde,

      ich möchte Euch hier meine Lösung in iobroker/Blockly zu o.g. Thema vorstellen.
      Ausgangssituation war, dass ich mit der Firmware-Version 3.45 meines Landroid S (WR110MI) weiterhin die manuelle Programmierung über den Mähplan via App nutzen möchte.
      Nur das Verhalten an Feiertagen und die Ausfahrt aus der Mähroboter-Garage bei Regen (die Überdachung des Mähers in der Station setzt bekanntlich den Regensensor dort faktisch außer Funktion) wollte ich zusätzlich steuern.

      Hier die im Blockly-Script von mir verwendeten Adapter bzw. Instanzen:

      • Send emails (V1.0.4)

      • Deustche Feiertage (V1.0.11)

      • Worx Landroid S (V2.5.5)

      • openweathermap.org (V0.1.0) mit kostenloser API

      Mein Mähroboter soll sich unter Weiterverwendung des Mähplanes der WORX Landroid-App wie folgt verhalten:

      • grundlegend kein Ausfahren an Feiertagen

      • kein Ausfahren aus der Station bei Regen, nach dem Regen Aktivierung einer Regenverzögerung von 180 Minuten

      Als Trigger zum Start meines Skriptes habe ich parallel die Änderung des Objektes "feiertage.0.heute.b oolean" mit Namen "Feiertag heute?" oder von "openweathermap.0.forecast.current.title" namens "Actual title" verwendet.
      Dazu frage ich die aktuelle Wettersituation bei openweathermap mittels Zeitplanung in der zugehörigen Instanz mit einem CRON-Zeitplan "Alle 5 Sekunden", Anzeige "*/5 * * * * *" ab. Damit vermeide ich dann auch nahezu vollständig, dass mein Robi losläuft, obwohl es regent.

      Zum Verbleib des Mähroboters in der Station bin ich den dankenswerten Empfehlungen anderer gefolgt (z.B. [https://forum.iobroker.net/topic/9526/offizielle-worx-landroid-s-smarthome-schnittstelle/27] und setze dazu im manuellen Mähplan die prozentuale Erhöhung/Verringerung der wöchentlichen Arbeitszeit mit dem Objekt "landroid-s.2.calendar.mowTimeExtend" namens "Mowing times exceed" auf den Wert "-100 %".
      Soll der Märoboter wieder ungehindert nach dem manuellen Mähplan arbeiten, so wird der Wert auf "0 %" zurückgesetzt.

      Nach jeder Änderung des Mäherstatus wir eine eMail mit entsprechender Info versendet.

      Hier mein Blockly-Skript zum gefälligen Importieren:

      <xml xmlns="http://www.w3.org/1999/xhtml">
        <variables>
          <variable type="undefined" id="timeout_Niederschlag">timeout_Niederschlag</variable>
        </variables>
        <block type="on_ext" id="cBc$NdcdHpi.Q@JAn%}." x="-237" y="-1087">
          <mutation items="2"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="Vq{y=@#fae!,_?nA8m2b">
              <field name="oid">openweathermap.0.forecast.current.title</field>
            </shadow>
          </value>
          <value name="OID1">
            <shadow type="field_oid" id="!0e%juk95{ZAd}1;NEyZ">
              <field name="oid">feiertage.0.heute.boolean</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="-RmuH*i]zgNt_kPWih_/">
              <mutation elseif="1"></mutation>
              <value name="IF0">
                <block type="logic_compare" id="BGXc^;UP.3I]?]C4eCRX">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="get_value" id="z!W|)+.%5.BN)!@9vhda">
                      <field name="ATTR">val</field>
                      <field name="OID">feiertage.0.heute.boolean</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id="k*|.}/F^M!eU^o-NKN|%">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="timeouts_cleartimeout" id="ye$Q9`RiIsjPMg;O]`P5">
                  <field name="NAME">timeout_Niederschlag</field>
                  <next>
                    <block type="control" id="}*9UNSVy-c3M?Q*bC#ws">
                      <mutation delay_input="false"></mutation>
                      <field name="OID">landroid-s.2.calendar.mowTimeExtend</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="text" id="2dj3hB)p$={:LhBVDG?y">
                          <field name="TEXT">-100</field>
                        </block>
                      </value>
                      <next>
                        <block type="email" id="U]%N)X/|gyQ7pn~Q7djr">
                          <field name="INSTANCE"></field>
                          <field name="IS_HTML">FALSE</field>
                          <field name="LOG"></field>
                          <value name="TO">
                            <shadow type="text" id="Y*Y+)Q{pY[=Vxo7;a+FJ">
                              <field name="TEXT">xy@web.de</field>
                            </shadow>
                          </value>
                          <value name="TEXT">
                            <shadow type="text" id="`@Al.-sY!)0-OXF]FQa[">
                              <field name="TEXT">Heute ist Feiertag. Rasenmäher pausiert.</field>
                            </shadow>
                          </value>
                          <value name="SUBJECT">
                            <shadow type="text" id="QsQ+!lj9mL4gJ.lS/HE^">
                              <field name="TEXT">ioBroker - FEIERTAG</field>
                            </shadow>
                          </value>
                          <value name="FROM">
                            <block type="text" id="Slc!dGbsoIh;TC{JC@oz">
                              <field name="TEXT">xy@web.de</field>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
              <value name="IF1">
                <block type="logic_compare" id="_hM/Y-{i/AP^eG]?7DpM">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="get_value" id="y^y,~/~@K1zEx]K7tQLo">
                      <field name="ATTR">val</field>
                      <field name="OID">feiertage.0.heute.boolean</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id="Q3_B{)*)rZ.Uf?{j8f?}">
                      <field name="BOOL">FALSE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO1">
                <block type="controls_if" id="?7cwGUv$m/Ia](Dhec8T">
                  <mutation elseif="1"></mutation>
                  <value name="IF0">
                    <block type="logic_operation" id="o:$fx%Sk~Uxyp[=MN;1-">
                      <field name="OP">OR</field>
                      <value name="A">
                        <block type="logic_compare" id="Q:kRa#4(v-HO|d]DbUH(">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="$AL/Ji+?iutDx=!);528">
                              <field name="ATTR">val</field>
                              <field name="OID">openweathermap.0.forecast.current.title</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="text" id="yd_W(}W$D?A|,i*-v$Yn">
                              <field name="TEXT">Rain</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="~?+Dk,h_Pm`u@-^.hyb-">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="(?}-=6dj^KTk#%.FuU^b">
                              <field name="ATTR">val</field>
                              <field name="OID">openweathermap.0.forecast.current.title</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="text" id="x@*9Q`xb9z*{l.]cp0T8">
                              <field name="TEXT">Snow</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="timeouts_cleartimeout" id="g1PohIClF9;5wuw4ZARE">
                      <field name="NAME">timeout_Niederschlag</field>
                      <next>
                        <block type="control" id="k0p`o[}5wt|NsH*gT5;1">
                          <mutation delay_input="false"></mutation>
                          <field name="OID">landroid-s.2.calendar.mowTimeExtend</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="text" id="Zsh,X%tv?tO#f.b+6,hB">
                              <field name="TEXT">-100</field>
                            </block>
                          </value>
                          <next>
                            <block type="email" id="8ypST%Q!}O_A/wMk^$k(">
                              <field name="INSTANCE"></field>
                              <field name="IS_HTML">FALSE</field>
                              <field name="LOG"></field>
                              <value name="TO">
                                <shadow type="text" id="~~d=D?icG}oV)}Nx7$%3">
                                  <field name="TEXT">xy@web.de</field>
                                </shadow>
                              </value>
                              <value name="TEXT">
                                <shadow type="text" id="fHMyek=SJJ+vqH?AHT=E">
                                  <field name="TEXT">Niederschlag zu Hause. Rasenmäher pausiert.</field>
                                </shadow>
                              </value>
                              <value name="SUBJECT">
                                <shadow type="text" id="IyG%~YD=f_=#b!~QWK+?">
                                  <field name="TEXT">ioBroker - NIEDERSCHLAG</field>
                                </shadow>
                              </value>
                              <value name="FROM">
                                <block type="text" id="Mg;9VP,.%?U%Z0qg+y2g">
                                  <field name="TEXT">xy@web.de</field>
                                </block>
                              </value>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                  <value name="IF1">
                    <block type="logic_operation" id="/+[?mbe}NKe!|%3dCV%^">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_compare" id="{d*xRm9(059-jTm(]-j/">
                          <field name="OP">NEQ</field>
                          <value name="A">
                            <block type="get_value" id="~s|7yP$hVf!/Xq)j?2+I">
                              <field name="ATTR">val</field>
                              <field name="OID">openweathermap.0.forecast.current.title</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="text" id="I+=wECecK]isD5VerJQr">
                              <field name="TEXT">Rain</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="6`F_aR%,n=RIh[dZea8s">
                          <field name="OP">NEQ</field>
                          <value name="A">
                            <block type="get_value" id="qC5fgV/N@,W[g2mSd@z4">
                              <field name="ATTR">val</field>
                              <field name="OID">openweathermap.0.forecast.current.title</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="text" id="cZXB$q3VYxXV:])}Zt%m">
                              <field name="TEXT">Snow</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO1">
                    <block type="controls_if" id="Z32{8F5g,HIyMy}O!!yq">
                      <mutation else="1"></mutation>
                      <value name="IF0">
                        <block type="logic_compare" id=")z4RlJ`zw~NhOQ8`8kC`">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="CXSUCLiv8UtGCJ;6LG*x">
                              <field name="ATTR">val</field>
                              <field name="OID">landroid-s.2.calendar.mowTimeExtend</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="text" id="7Z(_8F$-9j18F3VdLgzF">
                              <field name="TEXT">-100</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <statement name="DO0">
                        <block type="email" id="~6H$Q`:/0R,.X%-2HY9`">
                          <field name="INSTANCE"></field>
                          <field name="IS_HTML">FALSE</field>
                          <field name="LOG"></field>
                          <value name="TO">
                            <shadow type="text" id="F-LP_E+mXOP,;ZiWD*Kv">
                              <field name="TEXT">xy@web.de</field>
                            </shadow>
                          </value>
                          <value name="TEXT">
                            <shadow type="text" id="sZ4HBxBO!d1Bu$3L+UqJ">
                              <field name="TEXT">Zu Hause Ende Niederschlag. Rasenmäher pausiert noch 3h.</field>
                            </shadow>
                          </value>
                          <value name="SUBJECT">
                            <shadow type="text" id="ERD9]q{/G${/VKS~bFl@">
                              <field name="TEXT">ioBroker - ENDE Niederschlag</field>
                            </shadow>
                          </value>
                          <value name="FROM">
                            <block type="text" id=":%_@p5h5(O__.SU?8Srh">
                              <field name="TEXT">xy@web.de</field>
                            </block>
                          </value>
                          <next>
                            <block type="timeouts_cleartimeout" id="GUyr!KCoGW#@).@2gl1`">
                              <field name="NAME">timeout_Niederschlag</field>
                              <next>
                                <block type="timeouts_settimeout" id="6iLIaT@cB;$yf/.JQ+Qs">
                                  <field name="NAME">timeout_Niederschlag</field>
                                  <field name="DELAY">180</field>
                                  <field name="UNIT">min</field>
                                  <statement name="STATEMENT">
                                    <block type="control" id="hhJ`}s7Wk4):py!+mg-4">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">landroid-s.2.calendar.mowTimeExtend</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="text" id="iWY?H|Y{f/E`Aa]3./AI">
                                          <field name="TEXT">0</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="email" id="s]7eA(pdZ~Q%0tXq6Bjj">
                                          <field name="INSTANCE"></field>
                                          <field name="IS_HTML">FALSE</field>
                                          <field name="LOG"></field>
                                          <value name="TO">
                                            <shadow type="text" id="uP!GFhCOKC;l[VD6RJ]h">
                                              <field name="TEXT">xy@web.de</field>
                                            </shadow>
                                          </value>
                                          <value name="TEXT">
                                            <shadow type="text" id="YKVNWwL;8r:*}DylTAY~">
                                              <field name="TEXT">Rasen zu Hause wieder trocken. Rasenmäher aktiviert.</field>
                                            </shadow>
                                          </value>
                                          <value name="SUBJECT">
                                            <shadow type="text" id="j(|x)JM78-+ox^L4Orf!">
                                              <field name="TEXT">ioBroker - TROCKEN</field>
                                            </shadow>
                                          </value>
                                          <value name="FROM">
                                            <block type="text" id="}Fl;{3^GMHmo`/*Ng;W5">
                                              <field name="TEXT">xy@web.de</field>
                                            </block>
                                          </value>
                                        </block>
                                      </next>
                                    </block>
                                  </statement>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </statement>
                      <statement name="ELSE">
                        <block type="timeouts_cleartimeout" id="ogyCa$U+d@%dO{cj0pTN">
                          <field name="NAME">timeout_Niederschlag</field>
                          <next>
                            <block type="control" id="z.f+V53dMlSbB$q(?;#-">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">landroid-s.2.calendar.mowTimeExtend</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="text" id="7L2|:y36szT=st)feaXv">
                                  <field name="TEXT">0</field>
                                </block>
                              </value>
                            </block>
                          </next>
                        </block>
                      </statement>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      Besonders kniffelig fand ich die timeout-Funktion zur Realisierung der Regenverzögerung. Insbesondere war hier darauf zu achten, dass das Skript nicht in eine Endlosschleife verfällt. Dies konnte ich durch einen jeweils vorgelagerten "stop timeout" Befehl an verschiedenen Stellen erreichen.

      Ich freue mich auf Kommentare.

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      944
      Online

      31.6k
      Users

      79.4k
      Topics

      1.3m
      Posts

      1
      1
      1413
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo