Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script: Alle Taster bzw. alle Bewegungsmelder abfragen

    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

    Script: Alle Taster bzw. alle Bewegungsmelder abfragen

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

      Hallo,

      ich habe nochmals festgestellt, dass ich einige Skripts aus CCU.IO nicht ohne weiteres in iobroker portieren kann. Die nächste Baustelle: Alarmanlage. Wenn die Alarmanlage scharf ist, soll jeder Tastendruck auf einem Wandtaster (PRESS_LONG und PRESS_SHORT) zu einer Pushnachricht führen. Wenn die Alarmanlage nicht scharf ist, dann soll nur geloggt werden.

      Bisher sah das in CCU.IO so aus (eigenes Gewerk "Taster"):

      var idAnwesenheit = 100000,   // CCU.IO Variable Anwesenheit (abwesend; anwesend)
          idAlarmanlage = 100003;      // CCU.IO Variable Alarmanlage ValueList: 'unscharf;scharf')
      
      subscribe( {
          deviceType: /HM-PB-4-WM|HM-PB-2-WM/,
          val: true
      }, function (obj) {
          var alarmanlage = getState(idAlarmanlage),
              room = obj.channel.roomNames[0],
              dauer,
              druck = obj.name,
              msg;
          if (alarmanlage == 1) { // Alarmanlage scharf (Teil 1)
              msg = obj.channel.name + ' wurde bei scharfer Alarmanlage gedrückt.';
              if (msg.indexOf('Statistik') != -1) { // "Statistik" im Namen enthalten
              } else { // "Statistik" NICHT im Namen enthalten
                  log(msg);
                  // ALARMIERUNG bei Bewegung und Abwesenheit
                  prowl.push(msg, 'CCU.IO Alarm', {
                      // providerkey: 'my-provider-key',
                      priority: 2,
                      // url: 'http://www.ccu.io'
                  }, function( err, remaining ){
                      if( err ) throw err;
                      log( 'Prowl Nachricht verschickt. In dieser Stunde können noch ' + remaining + ' Nachrichten verschickt werden.' );
                  });
                  email({
                      to: "xxx@xxxx.com",
                      subject: "Alarm - Einbruchmeldung",
                      text: 'Achtung! ' + msg
                  });
                  // Ende Alarmierung
              }
          } else if (alarmanlage == 0) { // Alarmanlage unscharf (Teil 2)
              if (druck.indexOf('PRESS_SHORT') != -1) {
                  dauer = 'kurz';
              } else if (druck.indexOf('PRESS_LONG') != -1) {
                  dauer = 'lang';
              }
              msg = obj.channel.name + ' wurde ' + dauer + ' gedrückt';
              if (msg.indexOf('Statistik') != -1) { // "Statistik" im Namen enthalten
              } else { // "Statistik" NICHT im Namen enthalten
                  log(msg);
                  // log('Datenpunkt-Name: '+obj.name);
                  // log('Kanal-Name: '+obj.channel.name);
                  // log('Geräte-Name: '+obj.device.name);
              }
          }
      });
      
      

      Wenn im Kanalnamen "Statistik" enthalten ist, handelt es sich um ein CUxD Wrapper State Device. Das soll nicht gemeldet werden, daher die Abfrage.

      Ich habe an anderer Stelle im Forum schon mal nach einem Skript zur Fensterüberwachung gefragt. Leider hilft es mir bei diesem Problem nicht weiter, da ich wissen möchte, wie ich an Kanalname, Devicename und Objektname herankomme.

      Das Skript wird dann später dupliziert und auf die Nutzung mit Bewegungsmeldern angepasst ( deviceType: /HM-Sec-MDIR|HM-Sen-MDIR-WM55/, name: /MOTION/, func: Sicherheit)

      Kann mir jemand helfen?

      Gruß

      Pix

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Habe nun mal selbst etwas rumgebastelt und bin ganz zufrieden. Fast. 😄

        createState('Optin_IR_melden', 0, {/*forceCreation: 'true', */name: 'Optin IR Bewegung melden', /*desc: 'Soll Bewegung bei scharfer Alarmanlage gemeldet werden?',*/ type: 'number', states:['nicht melden','melden']});
        
        var idAnwesenheit = "javascript.0.Anwesenheit"/*Status Anwesenheit*/, // (abwesend; anwesend)
            idAlarmanlage = "javascript.0.Alarmanlage"/*Status Alarmanlage (r)*/, // (unscharf;scharf)
            idMeldenPush = "javascript.0.Optin_IR_melden"/*Optin IR Bewegung melden*/; // (nicht melden;melden)
        
        $('channel[state.id=*.MOTION](functions=Sicherheit)').on(function (obj) {
            // log('New state ' + obj.id + ' = ' + obj.newState.val, 'info'); // Jede Status wird gemeldet (auch false)
            if (obj.newState.val === true) { // Wenn Bewegung erkannt
                var alarmanlage = getState(idAlarmanlage),
                    optin_push = getState(idMeldenPush),
                    nachricht = 'bisher undefiniert';
                if (alarmanlage == 1) { // Alarmanlage scharf
                    nachricht = 'Gerät '+ obj.id + ' hat Bewegung bei scharfer Alarmanlage erkannt';
                    if (optin_push == 1) {
                        // Alarmierung bei Bewegung und Alarmanlage scharf
                        sendTo("pushover", {
                            message: nachricht,
                            title: 'Alarm',
                            priority: 1
                        });
                    }
                    log(nachricht,'info');
                } else { // Alarmanlage unscharf -> nur Log
                    nachricht = 'Gerät '+ obj.id + ' hat Bewegung erkannt';
                    log(nachricht, 'info');
                    /* // Alter Code aus CCU.IO
                    log('Datenpunkt-Name: '+obj.name, 'info');
                    log('Kanal-Name: '+obj.channelName, 'info');
                    log('Geräte-Name: '+obj.deviceName, 'info');
                    */
                }
           } // Ende Bewegung erkannt
        });
        

        ergibt z.B. diesen Logeintrag:

        `2015-03-29 19:35:19.926  - [32minfo[39m: javascript.0 script.js.Alarm_PIR_Bewegung: Gerät hm-rpc.0.GEQ0007961.1.MOTION hat Bewegung erkannt[/code]`
        
        Ich möchte natürlich gern die Bezeichnung des Gerätes anzeigen lassen, nicht die id mit Seriennummer. Habe schon einiges probiert, aber komme nicht weiter. Was muss ich also statt _~~[i]~~obj.id[/i]_ nehmen?
        
        Gruß
        
        Pix
        
        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          obj.id gibt bei mir die id aus.

          Dann habe ich obj.name getestet, wie es bei Dir im auskommentierten Teil (ccu.io Script) steht.

          Dann wird bei mir der Name ausgegeben.

          In der hm-rega Instanz ist CUxD bei mir nicht angeklickt (nur rfd).

          $('channel[state.id=*.MOTION](functions=Bewegung)').on(function (obj) {
              // log('New state ' + obj.id + ' = ' + obj.newState.val, 'info'); // Jede Status wird gemeldet (auch false)
              if (obj.newState.val === true) { // Wenn Bewegung erkannt
                log('New state ' + obj.name + ' = ' + obj.newState.val, 'info'); 
                      }
              });
          

          Log mit obj.id:

          javascript-0 2015-04-18 12:47:59 info script.js.Bewegung: New state hm-rpc.0.GEQ0003759.1.MOTION = true

          Log mit obj.name:

          javascript-0 2015-04-18 12:59:19 info script.js.Bewegung: New state Gäste Bewegungsmelder Waschtisch:1.MOTION = true

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

          Support us

          ioBroker
          Community Adapters
          Donate

          410
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          2
          3
          2506
          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