NEWS
.MOTION der Kamera in Skript zählen
-
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: LogikwertHabe 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: BewegungSkript 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 weitAnbei 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