Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript für Bewegungsmelder

    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

    Skript für Bewegungsmelder

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

      Hallo zusammen,

      Diese Woche sind die neuen HM-IP Präsenzmelder angekommen und ich komme leider in deren Einbindung nicht weiter. 😞

      Also…beim Gerät selbst kann man ja einstellen, wie oft der Status gesendet bzw. auch aktualisiert wird. Siehe Bild.

      Das war mein Skript:

      on({id: 'hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', val: true}, function () {
         log('Bewegung im Bad EG erkannt');
      
      setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', true);
      
      timer_baddecke ();
      
      function timer_baddecke() {
          clearTimeout(Timeout1);
          setTimeout(Timeout1, 30000);
      }
      
          function Timeout1() {
             setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', false);
      
             log('Deckenlampen im Bad leuchten für 30s');
      }
      
      });
      
      

      Das Licht ging zwar an, aber auch wenn man sich im Bad aufgehalten hat, ging es aus und nicht mehr an. Denkfehler war wohl, dass der Präsenzmelder den Bewegungsstatus auf "true" setzt und diesen natürlich beibehält. Mein Skript aber nur gestartet wird, wenn der Status auf true gesetzt wird.

      Dann habe ich etwas daran gearbeitet und versucht, das Ganze mit "If" umzusetzen. Allerdings geht da gar nichts mehr. :?

      if('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', true) {
          log('Bewegung im Bad EG erkannt');
          setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', true);
          timer_baddecke ();
      
      function timer_baddecke() {
          setTimeout(Timeout1, 10000);
      }
      
          function Timeout1() {
             setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', false);
      
             log('Deckenlampen im Bad leuchten für 10s');
          }
      
      }
      

      Kann mir jemand helfen? Logischerweise soll bei jeder Bewegung der Lampen-Timer wieder auf die ursprüngliche Dauer gesetzt werden. Optimal auch nicht erst, wenn auf "true" gesetzt wird….sondern ob die Variable auf "true" steht.

      Dank euch und viele Grüße

      Tobias
      2771_pm.png

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Da der Bewegungsmelder so konfiguriert werden kann, dass er auch in einer Direkt-Vernüpfung richtig arbeitet (wenn der Aktor ein HMIP-Aktor wäre), sollte eine einfache Wertübertragung genügen:

        on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp) {
           if(dp.state.val) log('Bewegung im Bad EG erkannt');
           setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp.state.val);
        });
        
        
        1 Reply Last reply Reply Quote 1
        • P
          ple last edited by

          hab es so gelöst, vielleicht ein wenig hintenrum, aber es geht soweit.

          Habe den Status durch der CCU für 1 min auf true.

          Export Blockly

          ! ````
          <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="Tt_aFR+}(|M2`m-D~)pU" x="-562" y="-262"><mutation items="1"></mutation>
          <field name="CONDITION">ne</field>

          <value name="OID0"><shadow type="field_oid" id="}c1Lhyei/6mr.JOy^V}p"><field name="oid">hm-rpc.1.000C17099A02EF.1.PRESENCE_DETECTION_STATE</field></shadow></value> 
          <statement name="STATEMENT"><block type="controls_if" id="n/cMf5v~E-G+*w-(q`ur"><mutation elseif="1"></mutation>
              <value name="IF0"><block type="logic_compare" id=";NKhS5OJtRd{%uF0E%U8"><field name="OP">EQ</field>
                  <value name="A"><block type="get_value" id="=Hr1]HjyF]V7E-b{o#PH"><field name="ATTR">val</field>
                      <field name="OID">hm-rpc.1.000C17099A02EF.1.PRESENCE_DETECTION_STATE</field></block></value> 
                  <value name="B"><block type="logic_boolean" id="*6@2x0I(n)Z=J5]{TAf{"><field name="BOOL">TRUE</field></block></value></block></value> 
              <statement name="DO0"><block type="timeouts_cleartimeout" id=")ZQ`6}2]Z4vqI6*YY)Si"><field name="NAME">timeout</field>
                  <next><block type="controls_if" id="CiFNX[t_%75Wc7pbi^DB"><value name="IF0"><block type="logic_compare" id="gn6{X4h*fd|,k`?VLnUc"><field name="OP">EQ</field>
                          <value name="A"><block type="get_value" id="?I0x~E_9z~Mo3z_hyK.Y"><field name="ATTR">val</field>
                              <field name="OID">hm-rpc.0.MEQ1671045.1.STATE</field></block></value> 
                          <value name="B"><block type="logic_boolean" id="AfVb*KSt912SDI^#%+[*"><field name="BOOL">FALSE</field></block></value></block></value> 
                      <statement name="DO0"><block type="control" id="I@YxWw(Q#qq#)hyrxKeW"><mutation delay_input="false"></mutation>
                          <field name="OID">hm-rpc.0.MEQ1671045.1.STATE</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE"><block type="logic_boolean" id="f`SK@kHNp[035Vi[+D{H"><field name="BOOL">TRUE</field></block></value></block></statement> 
                      <next><block type="controls_if" id="!qnW^{X;*Xaj*s7CwSTb"><value name="IF0"><block type="logic_compare" id="klakKKDmo(_O0hm)1K0B"><field name="OP">EQ</field>
                              <value name="A"><block type="get_value" id="C=7N[RPg,WUh0`QcvCYq"><field name="ATTR">val</field>
                                  <field name="OID">hm-rpc.0.MEQ1673086.1.STATE</field></block></value> 
                              <value name="B"><block type="logic_boolean" id="2[T=dZyi+}V:dpo^j[t{"><field name="BOOL">FALSE</field></block></value></block></value> 
                          <statement name="DO0"><block type="control" id=".=:g@GttcX+n`%Cz(cbf"><mutation delay_input="false"></mutation>
                              <field name="OID">hm-rpc.0.MEQ1673086.1.STATE</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE"><block type="logic_boolean" id="~jpU(e%?c7+1tLUe?_~3"><field name="BOOL">TRUE</field></block></value></block></statement> 
                          <next><block type="controls_if" id="cMRz-%xQhC!rQ)AkVX5C"><value name="IF0"><block type="logic_compare" id="EUIE4/eJa12=wB^d-p,6"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="^5wvE73D+MllSdR]o?[e"><field name="ATTR">val</field>
                                      <field name="OID">hm-rpc.0.MEQ1670131.1.STATE</field></block></value> 
                                  <value name="B"><block type="logic_boolean" id="x;u6v(J6oX^DRBVg![0A"><field name="BOOL">FALSE</field></block></value></block></value> 
                              <statement name="DO0"><block type="control" id="wSI=d)]/jm-e*j{fx?DS"><mutation delay_input="false"></mutation>
                                  <field name="OID">hm-rpc.0.MEQ1670131.1.STATE</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE"><block type="logic_boolean" id="b7N{)@zBTB!x5~fT^,O("><field name="BOOL">TRUE</field></block></value></block></statement></block></next></block></next></block></next></block></statement> 
              <value name="IF1"><block type="logic_compare" id="usY|s`1v!s4|x)NVJp]j"><field name="OP">EQ</field>
                  <value name="A"><block type="get_value" id="Vv;y;SXY|%IbHnIL~]Ni"><field name="ATTR">val</field>
                      <field name="OID">hm-rpc.1.000C17099A02EF.1.PRESENCE_DETECTION_STATE</field></block></value> 
                  <value name="B"><block type="logic_boolean" id="%B6-9.G+6SCc-nQd7_;t"><field name="BOOL">FALSE</field></block></value></block></value> 
              <statement name="DO1"><block type="timeouts_settimeout" id="H{t.=N[?b[7OEf!1~3*g"><field name="NAME">timeout</field>
                  <field name="DELAY">10</field>
                  <field name="UNIT">sec</field>
                  <statement name="STATEMENT"><block type="control" id="g9zx/)rCg39%pRCa|fOi"><mutation delay_input="false"></mutation>
                      <field name="OID">hm-rpc.0.MEQ1670131.1.STATE</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE"><block type="logic_boolean" id="^:}?h0Nu^!!_]v6||_79"><field name="BOOL">FALSE</field></block></value> 
                      <next><block type="control" id="*;lQW@@*?AKz.4ZQ_o3."><mutation delay_input="false"></mutation>
                          <field name="OID">hm-rpc.0.MEQ1673086.1.STATE</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE"><block type="logic_boolean" id="0Q.042:5#8Jq:Fp{5G)J"><field name="BOOL">FALSE</field></block></value> 
                          <next><block type="control" id="w_}GjyuK;NN9@y?#gG}Z"><mutation delay_input="false"></mutation>
                              <field name="OID">hm-rpc.0.MEQ1671045.1.STATE</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE"><block type="logic_boolean" id="{NgB:jcEa~!c.%{lP]i8"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></statement></block></statement></block></statement></block></xml> 
          
          [1241_bildschirmfoto_2017-08-10_um_21.19.53.png](/assets/uploads/files/1241_bildschirmfoto_2017-08-10_um_21.19.53.png)
          1 Reply Last reply Reply Quote 0
          • S
            Seehofweg last edited by

            Servus!

            @ple -> hui…das sieht schon ziemlich aufwendig aus. :shock: Allerdings...

            @paul53 -> vielen Dank, das funktioniert so einwandfrei. Super. Da ich mich ja gerade erst an JavaScript langsam ran traue, wie kann ich dein Script nachvollziehen? KAnnst du es mir vielleicht kurz erklären. 😉 Muss ich z. B. den Funktionsname dp bei jedem Programm ändern, damit es zu keinen Problemen kommt?

            Kann man dieses Script auch verwenden, um eine Lampe/Gruppe gedimmt zu schalten? Hier könnte ich ja nicht einfach den Status weitergeben.

            Viele Grüße

            Tobi

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @Seehofweg:

              Muss ich z. B. den Funktionsname dp bei jedem Programm ändern, damit es zu keinen Problemen kommt? `
              Nein, dp ist der Name des an die Funktion übergebenen Objektes, der lokal (nur innerhalb dieser Funktion gültig) ist. Lokale Namen von Skriptvariablen können immer wieder lokal innerhalb des gleichen Skriptes verwendet werden.
              @Seehofweg:

              KAnnst du es mir vielleicht kurz erklären. `

              on('ID-String', function(dp) {
              

              löst bei Wertänderung aus, das Datenpunkt-Objekt des Auslösers wird unter dem Namen dp an die Callback-Funktion übergeben.

                 if(dp.state.val) log('Bewegung im Bad EG erkannt');
              

              Wenn der Wert des auslösenden Datenpunktes wahr ist, wird die Log-Ausgabe ausgeführt.

                 setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp.state.val);
              

              Der Wert des auslösenden Datenpunktes wird in den Datenpunkt mit der ID 'hue.1.Bridge-EG_2.a.Badezimmer(Decke).on'_ geschrieben.

              Eine ausfühliche Beschreibung der Funktion on(pattern, callback) findest Du auf https://github.com/ioBroker/ioBroker.javascript#on–-subscribe-on-changes-or-updates-of-some-state.
              @Seehofweg:

              Kann man dieses Script auch verwenden, um eine Lampe/Gruppe gedimmt zu schalten? Hier könnte ich ja nicht einfach den Status weitergeben. `
              Man muss es schon etwas abwandeln, z.B.

              var Dimmwert = 50;
              
              on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp) {
                 if(dp.state.val) {
                     log('Bewegung im Bad EG erkannt');
                     setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', Dimmwert);
                 }    
                 else setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', 0);
              });
              
              1 Reply Last reply Reply Quote 0
              • S
                smuxus last edited by

                Hi,

                ich nutze das Skript von Seehofweg in leicht abgewandelter Form um über einen Homematic IP Bewegungsmelder zwei HUEs zu schalten.

                Allerdings würde ich noch gerne die Helligkeit mit Abfragen. Im Prinzip müsste ja nur eine einfache IF Abfrage drumherum gebaut werden, in etwa "wenn Helligeit < 20, dann Skript ausführen…".

                Aber leider bekomme ich es im JS nicht hin ;(

                Hat jemand einen Tipp?

                on("hm-rpc.2.0009156xxxxxx.1.MOTION"/*BWM Flur:1.MOTION*/, function (dp) {
                   if(dp.state.val) {
                   log('Bewegung im Flur erkannt');
                   setState("hue.0.Philips_hue.Hue_white_lamp_2.level", 50);
                   }
                   else setState("hue.0.Philips_hue.Hue_white_lamp_2.level", 0);
                });
                
                on("hm-rpc.2.0009156xxxxxx.1.MOTION"/*BWM Flur:1.MOTION*/, function (dp) {
                   if(dp.state.val) {
                   log('Bewegung im Flur erkannt');
                   setState("hue.0.Philips_hue.Hue_white_lamp_3.level", 50);
                   }
                   else setState("hue.0.Philips_hue.Hue_white_lamp_3.level", 0);
                });
                
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                809
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                4
                6
                2448
                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