Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. .MOTION der Kamera in Skript zählen

    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

    .MOTION der Kamera in Skript zählen

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

      Hallo,
      ich habe eine Logitech Circle2 im Einsatz.
      Diese zeigt mir in Apple HomeKit einen Bewegungsmelder.
      Dieses Bewegungsmelder möchte ich gerne in dem Skript "Status Zahl Bewegung und Name Raum" nutzen. (Skript im Anhang)

      Da mir der integrierte Bewegungsmelder der Kamera nicht in iobroker angezeigt wird, habe ich mir eine Variable erstellt:

      Name/ID: "BWM-Kamera-Eingang-io"
      Typ: Datenpunkt
      Datenpunkttyp: Logikwert

      Habe danach den Namen in "BWM-Kamera-Eingang-io.MOTION" umbenannt und diese in Yahka als switch integriert. Nun habe ich eine "Automation" in Homekit erstellt und den Bewegungsmelder der Kamera mit der Variable verknüpft.
      (Wenn Bewegung Kamera -> BWM-Kamera-Eingang-io.MOTION = true)
      (Wenn keine Bewegung Kamera -> BWM-Kamera-Eingang-io.MOTION = false)
      Diese Variable wird auch zuverlässig geschaltet.
      Funktioniert also.

      Nun möchte ich, wie schon erwähnt diese Variable aber auch in dem Skript benutzen.
      Habe also die Variable erweitert mit:
      Rolle: sensor.motion
      Raum: Eingang
      Funktion: Bewegung

      Skript neugestartet aber die neue Variable wird in dem Skript nicht beachtet.
      Wahrscheinlich mache ich hier irgendetwas falsch oder übersehe etwas.
      Könnte mir da vielleicht mal jemand unter die Arme greifen?
      Oder Funktioniert das so gar nicht.
      Bin im Skripten noch nicht so weit 😬

      Anbei noch mal das Skript.

      /* Status Zahl Bewegung
      
      zählt die Bewegung in allen Räumen und meldet die Eingeschalteten namentlich
      Daten kommen vom Gewerk "Bewegung"
      
      23.12.2016 Script von pix; geändert von Bahnuhr auf Bewegung
      */
      var logging = true;
      
      var idAnzahlEin = 'javascript.0.Status.Bewegung.Anzahl_ein',
      idAnzahl = 'javascript.0.Status.Bewegung.Anzahl',
      idRaum = 'javascript.0.Status.Bewegung.Raum';
      
      // Ab hier nix mehr ändern
      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Bewegung
      type: 'number',
      name: 'Anzahl aller Bewegung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idAnzahlEin, { // Anzahl der Bewegung, die auf sind als Variable unter Javascript.0 anlegen
      type: 'number',
      name: 'Anzahl der vorhandenen Bewegung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idRaum, {
      type: 'string',
      name: 'Räume mit Bewegung',
      desc: 'Namen der Räume, in denen Bewegung ist',
      def: ' ',
      role: 'value'
      });
      
      var cacheSelectorState = $('channel[state.id=*.MOTION](functions="Bewegung")'); // Gewerk Bewegungsmelder
      
      function checkDevices(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Bewegung auf 0
      var anzahlBewegungAn = 0;
      var anzahlBewegung = 0;
      var textRaum = [];
      if (logging) {
      log('++++++ Bewegung Anzahl ++++ ');
      log('#### SCHALTER ##### ');
      }
      cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Bewegung
      var obj = getObject(id);
      var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
      var raumname = getObject(id, "rooms"); 
      
      if (logging) {
      log('-------');
      log('Kanal: ' + name);
      log('Status: ' + status); 
      }
      if (status) { // wenn Zustand = true, dann wird die Anzahl der Bewegung hochgezählt
      ++anzahlBewegungAn; 
      textRaum.push(raumname.enumNames); 
      }
      ++anzahlBewegung; // Zählt die Anzahl der vorhandenen Bewegung unabhängig vom Status
      });
      
          // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
      function deleteDuplicates(arr) { 
          var temp = {}; 
          for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
          var r = []; 
          for (var k in temp) r.push(k); 
          return r;
      }
      
      textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
      
      // Array mit Bewegungsmeldernamen sortieren
      textRaum.sort(); 
      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
      if (logging) log("Anzahl Bewegung: " + anzahlBewegung + " # davon Bewegung an: " + anzahlBewegungAn);
      // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      setState(idAnzahl, anzahlBewegung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Bewegung
      setState(idAnzahlEin, anzahlBewegungAn); 
      setState(idRaum, textRaum.join(', ')); // Räume, in denen Bewegung ist
      }
      
      // Trigger
      cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Bewegung
      if (logging) log('Auslösende Bewegung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
      checkDevices();
      });
      
      function main() {
      setTimeout(function(){
      if (logging) log('Auslöser Skriptstart');
      checkDevices();
      }, 2000);
      }
      
      main(); // Skriptstart-Auslöser
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      424
      Online

      31.8k
      Users

      80.0k
      Topics

      1.3m
      Posts

      1
      1
      147
      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