Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. AutoStart von Neato in verbindung mit Homematic

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    UNSOLVED AutoStart von Neato in verbindung mit Homematic

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      Jan1 @Thomas Berkermann last edited by

      @Thomas-Berkermann
      Ja genau das und bei action dürften bei Dir auch Zahlen drin stehen. Was da was ist sollte in der Doku des Adapter zu finden sein.
      Das mit dem Trigger ist eigentlich einfach, spiel doch mal durch was da abläuft, dann merkst, dass der innere Trigger nur funktionieren kann wenn gleichteitig das äußere Trigger Signal und das innere kommen, sehr enge bis unmögliche Geschichte.

      1 Reply Last reply Reply Quote 0
      • Thomas Berkermann
        Thomas Berkermann last edited by

        Hi @Jan1,

        ich komme mit dem Blockly nicht zurecht.
        ich möchte folgendes:

        wenn ich Abwesend bin, also dir Anwesenheitsvariable der Homeatic auf Abwesend springt,
        und das Änderungsdatum von Action ist älter als 20h
        und "Action ungleich 1 (clean) ist
        und state = 1 (bereit) dann clean; oder wenn state = 3 (pause) dann resume
        If state = 4 dann Message via pushover mit Fehlertext

        Wenn ich abwesend bin und die Homematic "Anwesenheit" von abwesend auf anwesend springt
        und der Akku (charge) größer als 30%
        dann Pause
        Wenn ich abwesend bin und die Homematic "Anwesenheit" von abwesend auf anwesend springt
        und der Akku (charge) kleiner als 30%
        dann stop & return to Base

        Wenn ich Anwesend bin, und sich der Statuts 24h nicht geändert hat
        dann state = clean
        If state = 4 dann Message via pushover mit Fehlertext

        Kannst du mir dabei helfen?
        Ich schnall das nicht...

        Danke

        J 1 Reply Last reply Reply Quote 0
        • J
          Jan1 @Thomas Berkermann last edited by

          @Thomas-Berkermann
          Das bekommen wir hin, obwohl @paul53 hier der fittere wäre, was Blockly schnell und elegant angeht.

          Du willst reichlich viel und ich habe ein anderes Gerät, was schon mal bisschen komplizierter wird.
          Deshalb meine Empfehlung, eins nach dem anderen. Mein Blockly wie ich es gepostet habe, macht schon einiges von dem was Du haben möchtest.
          Bau das einfach mal mit Deinen DPs nach und schau ob es läuft, wenn das funktioniert, dann gehts an die nächste Funktion.
          hier mal mein Blockly zum im portieren:

          <xml xmlns="http://www.w3.org/1999/xhtml">
           <variables>
             <variable type="" id="*(3zQ(:otG,Xx5wM{8H;">Reinigung_ausstehend</variable>
             <variable type="undefined" id="timeout">timeout</variable>
             <variable type="undefined" id="timeout2">timeout2</variable>
           </variables>
           <block type="schedule" id=":@XSrK:A(xs4_+#/[[%k" x="-462" y="-537">
             <field name="SCHEDULE">0 11 * * 1,3,5</field>
             <statement name="STATEMENT">
               <block type="controls_if" id="p|OX526Dn{+[N6y2g~7z">
                 <mutation else="1"></mutation>
                 <value name="IF0">
                   <block type="get_value" id=",K0)C[~c*UU+M;(oAz^M">
                     <field name="ATTR">val</field>
                     <field name="OID">javascript.0.Anwesenheit</field>
                   </block>
                 </value>
                 <statement name="DO0">
                   <block type="variables_set" id="o/G:d!SfBY?%Z-*L_OBv">
                     <field name="VAR" id="*(3zQ(:otG,Xx5wM{8H;" variabletype="">Reinigung_ausstehend</field>
                     <value name="VALUE">
                       <block type="logic_boolean" id="Jd@)x1Y.}BGFQuT[|q8h">
                         <field name="BOOL">TRUE</field>
                       </block>
                     </value>
                   </block>
                 </statement>
                 <statement name="ELSE">
                   <block type="control" id="dTG?zbRRO,^Bsv5TG_,K">
                     <mutation delay_input="false"></mutation>
                     <field name="OID">vr200.0.Staubie.commands.eco</field>
                     <field name="WITH_DELAY">FALSE</field>
                     <value name="VALUE">
                       <block type="logic_boolean" id="|d]{=OEa=erb]NeGC]k}">
                         <field name="BOOL">FALSE</field>
                       </block>
                     </value>
                     <next>
                       <block type="control" id="8)T6=-yaHVA.PDy_bp1-">
                         <mutation delay_input="true"></mutation>
                         <field name="OID">vr200.0.Staubie.commands.clean</field>
                         <field name="WITH_DELAY">TRUE</field>
                         <field name="DELAY_MS">1</field>
                         <field name="UNIT">sec</field>
                         <field name="CLEAR_RUNNING">FALSE</field>
                         <value name="VALUE">
                           <block type="logic_boolean" id="cFJIdo7t:bh:;yiLn]UU">
                             <field name="BOOL">TRUE</field>
                           </block>
                         </value>
                       </block>
                     </next>
                   </block>
                 </statement>
               </block>
             </statement>
             <next>
               <block type="on" id="T`R~VHnVS1QaN*L-ABC-">
                 <field name="OID">javascript.0.Anwesenheit</field>
                 <field name="CONDITION">ne</field>
                 <field name="ACK_CONDITION"></field>
                 <statement name="STATEMENT">
                   <block type="controls_if" id="MKLMUkQ]Haz0~8ZGo0W%">
                     <value name="IF0">
                       <block type="logic_operation" id="KX?!f8@wF51noA,%j]+#" inline="false">
                         <field name="OP">AND</field>
                         <value name="A">
                           <block type="logic_negate" id="=mt-4B:lb00[cx*6]YuY">
                             <value name="BOOL">
                               <block type="on_source" id="kap(jom7~m6i~?W,{TKz">
                                 <field name="ATTR">state.val</field>
                               </block>
                             </value>
                           </block>
                         </value>
                         <value name="B">
                           <block type="variables_get" id="rs9KhRBz-},Ggmx)fL|x">
                             <field name="VAR" id="*(3zQ(:otG,Xx5wM{8H;" variabletype="">Reinigung_ausstehend</field>
                           </block>
                         </value>
                       </block>
                     </value>
                     <statement name="DO0">
                       <block type="control" id="^}*p/Wcca1[Q}[u%+iOL">
                         <mutation delay_input="false"></mutation>
                         <field name="OID">vr200.0.Staubie.commands.eco</field>
                         <field name="WITH_DELAY">FALSE</field>
                         <value name="VALUE">
                           <block type="logic_boolean" id="@%m^zkFQPwR%~Y26/C*a">
                             <field name="BOOL">FALSE</field>
                           </block>
                         </value>
                         <next>
                           <block type="control" id="84TurGVzBe31AfrpaE,t">
                             <mutation delay_input="true"></mutation>
                             <field name="OID">vr200.0.Staubie.commands.clean</field>
                             <field name="WITH_DELAY">TRUE</field>
                             <field name="DELAY_MS">1</field>
                             <field name="UNIT">sec</field>
                             <field name="CLEAR_RUNNING">FALSE</field>
                             <value name="VALUE">
                               <block type="logic_boolean" id="l83dH~^1;M=r746ipFW*">
                                 <field name="BOOL">TRUE</field>
                               </block>
                             </value>
                             <next>
                               <block type="timeouts_cleartimeout" id="kr3-UX[uNVVt0#xR,f%*">
                                 <field name="NAME">timeout2</field>
                                 <next>
                                   <block type="timeouts_settimeout" id="JJ/F?%r}B=~X5(Zy]5yc">
                                     <field name="NAME">timeout2</field>
                                     <field name="DELAY">10</field>
                                     <field name="UNIT">sec</field>
                                     <statement name="STATEMENT">
                                       <block type="variables_set" id="iz~kMR,^HvZgyDjr.m+v">
                                         <field name="VAR" id="*(3zQ(:otG,Xx5wM{8H;" variabletype="">Reinigung_ausstehend</field>
                                         <value name="VALUE">
                                           <block type="logic_boolean" id="NDjKYM~mc4}6?LvgfFVL">
                                             <field name="BOOL">FALSE</field>
                                           </block>
                                         </value>
                                       </block>
                                     </statement>
                                   </block>
                                 </next>
                               </block>
                             </next>
                           </block>
                         </next>
                       </block>
                     </statement>
                   </block>
                 </statement>
                 <next>
                   <block type="on" id=".PujgfHwbO1)xewiH{uF">
                     <field name="OID">vr200.0.Staubie.status.action</field>
                     <field name="CONDITION">ne</field>
                     <field name="ACK_CONDITION"></field>
                     <statement name="STATEMENT">
                       <block type="timeouts_cleartimeout" id="aL)`d9b[Xg%_Oj)}w8xj">
                         <field name="NAME">timeout</field>
                         <next>
                           <block type="timeouts_settimeout" id="`wib25F_%wCMDzf=U)Ll">
                             <field name="NAME">timeout</field>
                             <field name="DELAY">1000</field>
                             <field name="UNIT">ms</field>
                             <statement name="STATEMENT">
                               <block type="controls_if" id="rVlNwz0oQS)mc*dqt]Lg">
                                 <value name="IF0">
                                   <block type="logic_compare" id="my+-JZH}NozBae(ctdLA">
                                     <field name="OP">EQ</field>
                                     <value name="A">
                                       <block type="on_source" id="wvsI*Y6_D|u5~cG_JI/G">
                                         <field name="ATTR">state.val</field>
                                       </block>
                                     </value>
                                     <value name="B">
                                       <block type="math_number" id="6?rvbP=eF~z}Lw(I#LTd">
                                         <field name="NUM">6</field>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                                 <statement name="DO0">
                                   <block type="variables_set" id="yuQD?kZ0iy1BKDQtwB4P">
                                     <field name="VAR" id="*(3zQ(:otG,Xx5wM{8H;" variabletype="">Reinigung_ausstehend</field>
                                     <value name="VALUE">
                                       <block type="logic_boolean" id="eLlnlv}E=CsZyX.oM?pj">
                                         <field name="BOOL">FALSE</field>
                                       </block>
                                     </value>
                                   </block>
                                 </statement>
                               </block>
                             </statement>
                           </block>
                         </next>
                       </block>
                     </statement>
                   </block>
                 </next>
               </block>
             </next>
           </block>
          </xml>
          

          1 Reply Last reply Reply Quote 0
          • Thomas Berkermann
            Thomas Berkermann last edited by

            Danke @Jan1 ,

            ich hab das jetzt mal importiert und gucke mir das mal an.
            b1614d0e-d46c-4c21-8df4-74177a5aa3c1-image.png
            wobei ich immer noch nicht weiß warum das aufgebaut ist, wie es aufgebaut ist.
            Warum macht mach erst ein Stop Timeout und dann ein Timeout?
            Warum gehen keine 2 Trigger?
            Und warum macht su Anwesenheit Ändern? Statt an und abwesend?

            Und warum fragst du nicht den Last Acrion Status ab?
            Ach.. so viele Fragen.. sorry..
            Ich muss erst Blockly lernen. gibt da irgendwo ein Tutorial?

            H J 2 Replies Last reply Reply Quote 0
            • H
              HeliosFan @Thomas Berkermann last edited by

              @Thomas-Berkermann said in AutoStart von Neato in verbindung mit Homematic:

              Ich muss erst Blockly lernen. gibt da irgendwo ein Tutorial?

              Zu Blockly gibt es viele Tutorials.
              Einfach mal googeln. Du findest sowohl Text als auch Video Anleitungen zu Blockly. (YouTube)

              1 Reply Last reply Reply Quote 0
              • J
                Jan1 @Thomas Berkermann last edited by

                @Thomas-Berkermann
                Das Script macht das was ich will und deshalb habe ich da auch nicht weiter Verbesserungen gearbeitet 😊
                Dann will ich mal Deine Fragen beantworten.
                Der Timeout wird immer so aufgebaut, damit es nicht zum Start mehrere Timeouts kommen kann, wird der vorher eben gestoppt (falls schon einer läuft). Der ist auch nur drin , damit es die Variable nicht zurücksetzt bevor die abgearbeitet ist, könnte auch ohne funktionieren, aber so ist es einfach sicherer.

                Man kann Trigger verwenden so viel man will, oder benötigt, nur Trigger im Trigger ist eben blöd, weil der interne eben nur aktiv werden kann wenn der äußere bereits aktiv ist, sonst macht der nichts. Deshalb nimmt man für interne Zwecke eben den Falls Block und kein Trigger, ist eben so und wenn Du die Logik durchspielst, merkst auch wann was überhaupt ablaufen kann.

                Anwesenheit ist bei mir ein DP den ich mit einem anderen Script über die WLAN Erkennung von Handy erstelle und geändert deshalb, damit die Aktion erst gestartet wird, wenn ich weg bin, da sich dann der Statuts von Anwesend auf "false" ÄNDERT. Sonst bräuchte ich noch ein Trigger der auf die Änderung reagiert und darin dann eine Auswertung ob "true" oder "false". Ist so eben wesentlich einfacher.

                Für was sollte ich den "Latest Action" Status denn abfragen? Zumal ich den DP nicht habe. Bei mir gibts eben nur "action" und der zeigt auch an was gemacht wurde. 6 sagt eben aus, das gereinigt wurde und somit kann ich auch eine "ausstehende Reinigung" löschen, weil zweimal ist unnötig.

                Das Script macht folgendes:
                3 mal die Woche um 11Uhr (Mo, Mi, Fr) eine Reinigung, wenn niemand da ist.
                Ist jemand zu Hause wird die Reinigung so lange verschoben, bis der Letzte gegangen ist und in der Zwischenzeit keine manuelle Reinigung gestartet wurde.

                Das ist schon alles was das Script macht. Den Ladezustand abfragen, ist überflüssig, weil er eh nicht loslegt, bevor der voll ist und da nur 3 mal die Woche man davon ausgehen kann, dass er voll ist.
                Das zurück zur Basis fahren ist beim VR200 zwar möglich aber etwas komplizierter zu erledigen, deshalb mach ich das nicht (wäre aber möglich).

                1 Reply Last reply Reply Quote 0
                • Thomas Berkermann
                  Thomas Berkermann last edited by

                  Hallo @Jan1 ,

                  Danke für die Erklärung..
                  JETZT kommt ich langsam dahinter.
                  Jetzt verstehe ich auch die 6 🙂

                  Alles klar..
                  vielen Dank für die Erleuchtung 🙂
                  Ich lasse dein Script einfach mal jetzt laufen und gucke was passiert 🙂
                  Ich hoffe ich darf mich nach der vielen Kommunikation immer noch bei dir melden 🙂 🙂 🙂
                  Danke
                  Thomas

                  1 Reply Last reply Reply Quote 0
                  • Thomas Berkermann
                    Thomas Berkermann last edited by

                    Hi @Jan1
                    dann muss ich dein Script leider umbauen.
                    weil der Status 6 ist bei mir so nicht vorhanden.

                    <u>NeatoBotvacAction</u>
                    
                    ! createState('Neato.BotvacAction', 'Nichts'); ! var codesToMessage = { '0' : "Keine Aktion", '1' : "Haus-Reinigung", '2' : "Spot-Reinigung", '3' : "Manuelle Reinigung", '4' : "Docking", '5' : "User Menu aktiv", '6' : "Reinigung ausgesetzt", '7' : "Updating", '8' : "Logs kopieren", '9' : "Position ermitteln", '10' : "IEC Test", }; ! on("botvac.0.flusi.status.action"/*action*/, function (obj) { log(obj.state.val); if (codesToMessage.hasOwnProperty(obj.state.val)) { log('->' + codesToMessage[obj.state.val]); setState('Neato.BotvacAction', codesToMessage[obj.state.val], true); } else { setState('Neato.BotvacAction', obj.state.val); } }); !
                    

                    Kann ich statt dessen "lastResult" mit Antwort OK einsetzten?
                    Sollte ja klappen.
                    Ich hab das mal geändert mit "text" ich hoffe das klappt:
                    448659b5-1603-4906-90c0-c20b151d642e-image.png

                    J 1 Reply Last reply Reply Quote 0
                    • J
                      Jan1 @Thomas Berkermann last edited by

                      @Thomas-Berkermann
                      Da musst in der Doku von Deinem Adapter schauen, was da der 6 bei meinem entspricht, wobei ich erst noch mal bei meinem Adapter schauen müsste was 6 war😎
                      War irgendwas mit Reinigung gerade beendet, oder eben etwas mit dem man feststellen kann, das gereinigt wurde.
                      Den Anwesenheits DP musst natürlich auch an Deine Anwesenheitserkennung anpassen,genau so wie der clean Befehl.

                      1 Reply Last reply Reply Quote 0
                      • Thomas Berkermann
                        Thomas Berkermann last edited by

                        Ja, das habe ich glaube ich ich alles gemacht.
                        Ich habe nur das Mathe feld gegen ein textfeld ausgetauscht...
                        was dann auf "LastResult" state State zugreift.
                        Meine Frage, war, ob ich das so machen kann.

                        Danke

                        J A 2 Replies Last reply Reply Quote 0
                        • J
                          Jan1 @Thomas Berkermann last edited by

                          @Thomas-Berkermann
                          eigentlich schon, wenn die DPs zu Deinen passen

                          1 Reply Last reply Reply Quote 0
                          • A
                            aj.mambo @Thomas Berkermann last edited by

                            @Thomas-Berkermann
                            hallo erstmal, ich habe meinen Neato mit dieser Hilfe erfolgreich zum laufen gebracht, vielleicht Hilft es Dir ja auch.

                            Hilfe Seite

                            Ich habe eine Fritzbox zuhause wo ich als Anwesenheitstrigger die WLAN Verbindung genommen habe.
                            Das heißt sind Handys im WLAN Eingebucht Saugt er nicht, erst wenn alle Handy Ausgebucht sind.
                            Dann startet er den Script vom Neato jedoch auch nur wenn noch nicht gesaugt worden ist wenn er schon gesaugt hat dann dann tut er es nicht ein zweites mal.

                            Vielleicht hilft es Dir ja.

                            J 1 Reply Last reply Reply Quote 0
                            • J
                              Jan1 @aj.mambo last edited by

                              @aj-mambo
                              Na exakt das macht mein Blockly auch, nur dass es unnötig ist Funktionen bei so nem kleinen Blockly zu verwenden wie es in dem Link von Dir getan wird. Der Rest ist identisch.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              381
                              Online

                              31.9k
                              Users

                              80.3k
                              Topics

                              1.3m
                              Posts

                              6
                              33
                              1670
                              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