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. Letzte Bewegung erkannt im Raum …

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    890

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Letzte Bewegung erkannt im Raum …

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 3 Kommentatoren 769 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 bin noch nicht so lange dabei, daher sitze ich nun schon eine ganze weile vor einem Problem, welches ich scheinbar nicht lösen kann.

    Ich möchte mir die letzte Bewegung eines Bewegungsmelders in eine Variable speichern und in VIS anzeigen lassen.

    Ich hab zwar ein script gefunden, welches die letzte Bewegung erkennt und mir auch die Meldung gibt, in welchem Raum diese stattgefunden hat, allerdings wird Sie (wenn der Bewegungsmelder seinen Status verändert) wieder gelöscht.

    Nun möchte ich diesen Wert (Raumname) in eine Variable speichern, um auch nach einiger Zeit sehen zu können, wo die letzt Bewegung stattgefunden hat.

    Ich weiss nur nicht, wie ich das ganze anfangen soll.

    Hab mich schon an Blockly versucht, aber das bekomme ich einfach nicht hin.

    Gruß

    Marcus

    1 Antwort Letzte Antwort
    0
    • 0 Offline
      0 Offline
      0018
      schrieb am zuletzt editiert von
      #2

      Hi,

      wenn es dir nur um eine reine VIS Anzeige geht, die anzeigen soll wann das letzte mal eine Bewegung war, könnte dir vielleicht auch das Vis-Widget "Last-Change Timestamp" helfen.

      viewtopic.php?t=375

      Mfg
      0018

      1 Antwort Letzte Antwort
      0
      • X Offline
        X Offline
        Xanon
        schrieb am zuletzt editiert von
        #3

        Hallo 0018,

        vielen Dank für deine Antwort.

        Ja es geht mit Primär um die VIS Anzeige.

        Allerdings will ich mir nicht anzeigen lassen, wann ein Bewegungsmelder ausgelöst wurde, sondern in welchem Raum zuletzt eine Bewegung erkannt wurde.

        Das Skript zeigt diesen ja auch schon an, verschwindet allerdings wieder, wenn sich der Status vom Bewegungsmelder von "true" auf "false" ändert.

        Zurück bleibt eine leere Variable und somit kann ich nicht mehr sehen, wo die letzte Bewegung stattgefunden hat.

        Anbei mal das Skript, von welchem ich die ganze Zeit spreche / schreibe.

        /* 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 = false;
        
        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
        

        Ahhhhhh :idea:

        während ich diese Zeilen geschrieben habe, ist mir eine Idee gekommen, wie man das ganz einfach lösen kann.

        Also Antworte ich mir hier mal selbst ;) bzw. vielleicht braucht das ja noch jemand. :)

        Einfach einen Datenpunkt erstellen (bei mir "letzte Bewegung")

        und dann folgendes Blockly erstellen.

        Damit trigger ich nur, wenn eine Bewegung erkannt wurde und schreibe den Wert von "Räume mit Bewegung" in die Variable "Letzte Bewegung".

        Wenn der Bewegungsmelder nun wieder auf "False" geht, bleibt der Wert trotzdem erhalten.
        1895_bildschirmfoto_2019-01-23_um_01.26.43.png

        Gruß

        Marcus

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          martinschm
          schrieb am zuletzt editiert von
          #4

          Hi,

          ich nutze das Skript auch, vielen Dank dafür. Ich würde mir aber gerne noch bei den Räumen ausgeben lassen wann die letzte Bewegung war.

          Wie ginge das ?

          Bin da etwas planlos

          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

          650

          Online

          32.6k

          Benutzer

          82.1k

          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