Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Skript für Bewegungsmelder

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    983

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.5k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    6.0k

Skript für Bewegungsmelder

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 4 Kommentatoren 2.8k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Seehofweg
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      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);
      });
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

      1 Antwort Letzte Antwort
      1
      • P Offline
        P Offline
        ple
        schrieb am zuletzt editiert von
        #3

        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)

        Intel Nuc + Proxmox

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Seehofweg
          schrieb am zuletzt editiert von
          #4

          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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @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);
            });
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              smuxus
              schrieb am zuletzt editiert von
              #6

              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 Antwort Letzte Antwort
              0

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              255

              Online

              33.0k

              Benutzer

              83.6k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2026
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe