Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. JavaScript
  5. .MOTION der Kamera in Skript zählen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

.MOTION der Kamera in Skript zählen

Geplant Angeheftet Gesperrt Verschoben JavaScript
1 Beiträge 1 Kommentatoren 179 Aufrufe 1 Watching
  • Ä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.
  • X Offline
    X Offline
    Xanon
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    752

    Online

    32.4k

    Benutzer

    81.5k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    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