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. [Vorlage] UniFi WLAN Anwesenheitskontrolle

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

[Vorlage] UniFi WLAN Anwesenheitskontrolle

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascripttemplate
18 Beiträge 6 Kommentatoren 2.1k Aufrufe 10 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.
  • T Offline
    T Offline
    TobStar
    schrieb am zuletzt editiert von TobStar
    #1

    Hallo zusammen,

    hier einmal eine einfache Anwesenheitskontrolle über den UniFi Controller. Dieses wertet die im WLAN angemeldeten Geräte aus und prüft in meinem Fall ob das Handy im WLAN ist oder nicht.

    Zur Verwendung mit dem UniFi Adapter (ioBroker.unifi) von @braindead

    Die aktuellste Version auf GitHub: https://github.com/GodHunter/iobroker-unifi-presence

    // ************************************************************
    // KONFIGURATION
    //
    // pfad: Gibt an wo die Datenpunkte erstellt werden
    // json: Enthält die Konfigurationsdaten (Name d. Person, MAC Adresse des zu Überwachenden Geräts, Zeit in Minuten bis als Abwesend markiert)
    // telegram: Versendet bei Bedarf eine Nachricht via Telegram Adapter
    //
    // ************************************************************
    
    const pfad      = '0_userdata.0.Anwesenheit.';
    const json      = '{"person":[{"name":"PERSON1", "mac":"12:34:56:78:90:ab", "zeit":3},{"name":"PERSON2", "mac":"12:34:56:78:90:ab", "zeit":5}]}';
    const telegram  = true;
    
    // AB HIER KEINE ÄNDERUNGEN MEHR VORNHMEN
    on({id: 'unifi.0.info.connection', change: "any"}, function (obj){
    
        const now   = new Date();
        const array = JSON.parse(json);    
        var total   = array.person.length;
        
        createStates(array);
    
        array.person.forEach(function(person){
    
            var seen = new Date( getState('unifi.0.default.clients.'+ person.mac +'.last_seen').val );
    
            if( ( now.getTime() - seen.getTime() ) > ( person.zeit * 60000 ) ){
                
                if( getState(pfad + person.name).val === true) {
                    setState(pfad + person.name, false, true);
    
                    if(telegram){
                        setTimeout(function() {
                            send(person.name +' ist gegangen.');
                        }, 5000);
                    }
    
                }
    
                total = total -1;
    
            } else {
    
                if( getState(pfad + person.name).val === false ) {
                    setState(pfad + person.name, true, true);
                    if(telegram) {
                        setTimeout(function() {
                            send(person.name +' ist angekommen.');
                        }, 5000);
                    }
                }
    
            }
    
        })
    
        setState(pfad +'Anwesend', total, true);
        setState(pfad +'Abwesend', (array.person.length - total), true);
    
    });
    
    function send(nachricht){
        
        setTimeout(function() {
            nachricht = '<b>Anwesenheit</b>\r\n'+ nachricht;
        
            sendTo("telegram.0", "send", {
                "text": [nachricht].join(''),
                parse_mode: "HTML"
            });
    
        }, 2000);
    
    }
    
    function createStates(personen){
        
        createState(pfad +'Anwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen anwesend'});
        createState(pfad +'Abwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen abwesend'});
    
        personen.person.forEach(function(person){
            createState(pfad + person.name, false, {read:true, write:true, type:'boolean', def:false, desc:'Anwesenheitsstatus von '+ person.name});    
        });
    
    }
    
    C H 2 Antworten Letzte Antwort
    1
    • T TobStar

      Hallo zusammen,

      hier einmal eine einfache Anwesenheitskontrolle über den UniFi Controller. Dieses wertet die im WLAN angemeldeten Geräte aus und prüft in meinem Fall ob das Handy im WLAN ist oder nicht.

      Zur Verwendung mit dem UniFi Adapter (ioBroker.unifi) von @braindead

      Die aktuellste Version auf GitHub: https://github.com/GodHunter/iobroker-unifi-presence

      // ************************************************************
      // KONFIGURATION
      //
      // pfad: Gibt an wo die Datenpunkte erstellt werden
      // json: Enthält die Konfigurationsdaten (Name d. Person, MAC Adresse des zu Überwachenden Geräts, Zeit in Minuten bis als Abwesend markiert)
      // telegram: Versendet bei Bedarf eine Nachricht via Telegram Adapter
      //
      // ************************************************************
      
      const pfad      = '0_userdata.0.Anwesenheit.';
      const json      = '{"person":[{"name":"PERSON1", "mac":"12:34:56:78:90:ab", "zeit":3},{"name":"PERSON2", "mac":"12:34:56:78:90:ab", "zeit":5}]}';
      const telegram  = true;
      
      // AB HIER KEINE ÄNDERUNGEN MEHR VORNHMEN
      on({id: 'unifi.0.info.connection', change: "any"}, function (obj){
      
          const now   = new Date();
          const array = JSON.parse(json);    
          var total   = array.person.length;
          
          createStates(array);
      
          array.person.forEach(function(person){
      
              var seen = new Date( getState('unifi.0.default.clients.'+ person.mac +'.last_seen').val );
      
              if( ( now.getTime() - seen.getTime() ) > ( person.zeit * 60000 ) ){
                  
                  if( getState(pfad + person.name).val === true) {
                      setState(pfad + person.name, false, true);
      
                      if(telegram){
                          setTimeout(function() {
                              send(person.name +' ist gegangen.');
                          }, 5000);
                      }
      
                  }
      
                  total = total -1;
      
              } else {
      
                  if( getState(pfad + person.name).val === false ) {
                      setState(pfad + person.name, true, true);
                      if(telegram) {
                          setTimeout(function() {
                              send(person.name +' ist angekommen.');
                          }, 5000);
                      }
                  }
      
              }
      
          })
      
          setState(pfad +'Anwesend', total, true);
          setState(pfad +'Abwesend', (array.person.length - total), true);
      
      });
      
      function send(nachricht){
          
          setTimeout(function() {
              nachricht = '<b>Anwesenheit</b>\r\n'+ nachricht;
          
              sendTo("telegram.0", "send", {
                  "text": [nachricht].join(''),
                  parse_mode: "HTML"
              });
      
          }, 2000);
      
      }
      
      function createStates(personen){
          
          createState(pfad +'Anwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen anwesend'});
          createState(pfad +'Abwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen abwesend'});
      
          personen.person.forEach(function(person){
              createState(pfad + person.name, false, {read:true, write:true, type:'boolean', def:false, desc:'Anwesenheitsstatus von '+ person.name});    
          });
      
      }
      
      C Offline
      C Offline
      CruziX
      schrieb am zuletzt editiert von
      #2

      @TobStar Ich würde hier vielleicht empfehlen die States unter userdata anzulegen :+1:

      T 1 Antwort Letzte Antwort
      0
      • C CruziX

        @TobStar Ich würde hier vielleicht empfehlen die States unter userdata anzulegen :+1:

        T Offline
        T Offline
        TobStar
        schrieb am zuletzt editiert von
        #3

        @CruziX danke für den Hinweis, bislang speichere ich das alles unter Javascript.0 aber sobald der Adapter gelöscht werden würde wären die Datenpunkte weg.

        Gibt es noch weitere Gründe für das Userdata Verzeichnis?

        C 2 Antworten Letzte Antwort
        0
        • T TobStar

          @CruziX danke für den Hinweis, bislang speichere ich das alles unter Javascript.0 aber sobald der Adapter gelöscht werden würde wären die Datenpunkte weg.

          Gibt es noch weitere Gründe für das Userdata Verzeichnis?

          C Offline
          C Offline
          CruziX
          schrieb am zuletzt editiert von
          #4

          @TobStar Soweit ich weiß ist der Hauptgrund, wie von dir schon angemerkt, die bessere Persistierung.
          Wobei ich finde auch die Übersichtlichkeit profitiert davon.

          1 Antwort Letzte Antwort
          0
          • T TobStar

            Hallo zusammen,

            hier einmal eine einfache Anwesenheitskontrolle über den UniFi Controller. Dieses wertet die im WLAN angemeldeten Geräte aus und prüft in meinem Fall ob das Handy im WLAN ist oder nicht.

            Zur Verwendung mit dem UniFi Adapter (ioBroker.unifi) von @braindead

            Die aktuellste Version auf GitHub: https://github.com/GodHunter/iobroker-unifi-presence

            // ************************************************************
            // KONFIGURATION
            //
            // pfad: Gibt an wo die Datenpunkte erstellt werden
            // json: Enthält die Konfigurationsdaten (Name d. Person, MAC Adresse des zu Überwachenden Geräts, Zeit in Minuten bis als Abwesend markiert)
            // telegram: Versendet bei Bedarf eine Nachricht via Telegram Adapter
            //
            // ************************************************************
            
            const pfad      = '0_userdata.0.Anwesenheit.';
            const json      = '{"person":[{"name":"PERSON1", "mac":"12:34:56:78:90:ab", "zeit":3},{"name":"PERSON2", "mac":"12:34:56:78:90:ab", "zeit":5}]}';
            const telegram  = true;
            
            // AB HIER KEINE ÄNDERUNGEN MEHR VORNHMEN
            on({id: 'unifi.0.info.connection', change: "any"}, function (obj){
            
                const now   = new Date();
                const array = JSON.parse(json);    
                var total   = array.person.length;
                
                createStates(array);
            
                array.person.forEach(function(person){
            
                    var seen = new Date( getState('unifi.0.default.clients.'+ person.mac +'.last_seen').val );
            
                    if( ( now.getTime() - seen.getTime() ) > ( person.zeit * 60000 ) ){
                        
                        if( getState(pfad + person.name).val === true) {
                            setState(pfad + person.name, false, true);
            
                            if(telegram){
                                setTimeout(function() {
                                    send(person.name +' ist gegangen.');
                                }, 5000);
                            }
            
                        }
            
                        total = total -1;
            
                    } else {
            
                        if( getState(pfad + person.name).val === false ) {
                            setState(pfad + person.name, true, true);
                            if(telegram) {
                                setTimeout(function() {
                                    send(person.name +' ist angekommen.');
                                }, 5000);
                            }
                        }
            
                    }
            
                })
            
                setState(pfad +'Anwesend', total, true);
                setState(pfad +'Abwesend', (array.person.length - total), true);
            
            });
            
            function send(nachricht){
                
                setTimeout(function() {
                    nachricht = '<b>Anwesenheit</b>\r\n'+ nachricht;
                
                    sendTo("telegram.0", "send", {
                        "text": [nachricht].join(''),
                        parse_mode: "HTML"
                    });
            
                }, 2000);
            
            }
            
            function createStates(personen){
                
                createState(pfad +'Anwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen anwesend'});
                createState(pfad +'Abwesend', 99, {read:true, write:true, type:'number', desc:'Anzahl Personen abwesend'});
            
                personen.person.forEach(function(person){
                    createState(pfad + person.name, false, {read:true, write:true, type:'boolean', def:false, desc:'Anwesenheitsstatus von '+ person.name});    
                });
            
            }
            
            H Offline
            H Offline
            homecineplexx
            schrieb am zuletzt editiert von
            #5

            @TobStar
            hallo
            prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
            Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

            C T 2 Antworten Letzte Antwort
            0
            • T TobStar

              @CruziX danke für den Hinweis, bislang speichere ich das alles unter Javascript.0 aber sobald der Adapter gelöscht werden würde wären die Datenpunkte weg.

              Gibt es noch weitere Gründe für das Userdata Verzeichnis?

              C Offline
              C Offline
              CruziX
              schrieb am zuletzt editiert von
              #6

              @TobStar Gibt es einen Grund wieso du die Variable json als string und nicht als Objekt direkt verwendest?
              So wandelst du später unnötiger weise eh in ein Object

              T 1 Antwort Letzte Antwort
              0
              • H homecineplexx

                @TobStar
                hallo
                prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                C Offline
                C Offline
                CruziX
                schrieb am zuletzt editiert von CruziX
                #7

                @homecineplexx sagte in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                @TobStar
                hallo
                prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                Ich nutze Unifi (leider) nicht.
                Hab mir nur mal dein Skript angeschaut :)

                Edit: Wüsste jetzt nicht wieso man in userdata Änderungen später mitbekommen sollte :thinking_face:

                H 1 Antwort Letzte Antwort
                0
                • C CruziX

                  @homecineplexx sagte in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                  @TobStar
                  hallo
                  prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                  Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                  Ich nutze Unifi (leider) nicht.
                  Hab mir nur mal dein Skript angeschaut :)

                  Edit: Wüsste jetzt nicht wieso man in userdata Änderungen später mitbekommen sollte :thinking_face:

                  H Offline
                  H Offline
                  homecineplexx
                  schrieb am zuletzt editiert von homecineplexx
                  #8

                  @CruziX said in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                  @homecineplexx sagte in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                  @TobStar
                  hallo
                  prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                  Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                  Ich nutze Unifi (leider) nicht.
                  Hab mir nur mal dein Skript angeschaut :)

                  Ähm, ich hab auch TobStar angeschrieben ;-)

                  @CruziX und ich hab auch nicht geschrieben dass man die Änderungen in userdata.0 später mitbekommt. ich rede vom Unifi Adapter. Da müßte man alle 10 sekunden pollen
                  Lesen ist Macht ;-)

                  C 1 Antwort Letzte Antwort
                  0
                  • H homecineplexx

                    @CruziX said in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                    @homecineplexx sagte in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                    @TobStar
                    hallo
                    prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                    Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                    Ich nutze Unifi (leider) nicht.
                    Hab mir nur mal dein Skript angeschaut :)

                    Ähm, ich hab auch TobStar angeschrieben ;-)

                    @CruziX und ich hab auch nicht geschrieben dass man die Änderungen in userdata.0 später mitbekommt. ich rede vom Unifi Adapter. Da müßte man alle 10 sekunden pollen
                    Lesen ist Macht ;-)

                    C Offline
                    C Offline
                    CruziX
                    schrieb am zuletzt editiert von
                    #9

                    @homecineplexx Ach, hab ich gerade nicht drauf geachtet, sry :D

                    1 Antwort Letzte Antwort
                    0
                    • H homecineplexx

                      @TobStar
                      hallo
                      prinzipiell eine super Sache, aber wie oft holst du dir die Daten vom Unifi Controller?
                      Denn wenn die Zeitspanne recht groß eingetragen ist im Unifi Adapter, bekommst womöglich gar nicht oder recht spät eine Änderung mit oder?

                      T Offline
                      T Offline
                      TobStar
                      schrieb am zuletzt editiert von
                      #10

                      @homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter

                      H 1 Antwort Letzte Antwort
                      0
                      • T TobStar

                        @homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter

                        H Offline
                        H Offline
                        homecineplexx
                        schrieb am zuletzt editiert von
                        #11

                        @TobStar said in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                        @homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter

                        und was hast du eingestellt? hast du die Minute?

                        T 1 Antwort Letzte Antwort
                        0
                        • C CruziX

                          @TobStar Gibt es einen Grund wieso du die Variable json als string und nicht als Objekt direkt verwendest?
                          So wandelst du später unnötiger weise eh in ein Object

                          T Offline
                          T Offline
                          TobStar
                          schrieb am zuletzt editiert von
                          #12

                          @CruziX das ist eine berechtigte Frage :)
                          Ich werd's morgen nochmal auf Userdata umschreiben und die variable anpassen

                          1 Antwort Letzte Antwort
                          0
                          • H homecineplexx

                            @TobStar said in [Vorlage] UniFi WLAN Anwesenheitskontrolle:

                            @homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter

                            und was hast du eingestellt? hast du die Minute?

                            T Offline
                            T Offline
                            TobStar
                            schrieb am zuletzt editiert von
                            #13

                            @homecineplexx ja ich hab's auf einer Minute stehen.

                            1 Antwort Letzte Antwort
                            1
                            • T Offline
                              T Offline
                              TobStar
                              schrieb am zuletzt editiert von
                              #14

                              Hab das Script nun einmal bearbeitet und nochmal abgelegt (siehe oben). Es ist nun möglich eine Zeit zu definieren nachdem eine Person als abwesend markiert wird, sprich wenn Sie z.B. länger wie 3 Minuten nicht mehr im WLAN hängt.

                              1 Antwort Letzte Antwort
                              1
                              • D Offline
                                D Offline
                                DoMM
                                schrieb am zuletzt editiert von DoMM
                                #15

                                Hi, ich habe dein Script in den IOBroker integriert, habe es aber nicht zum Laufen bekommen. In der Kopfzeile habe ich den Namen und die MAC der zu überwachenden Geräte eingegeben.

                                Ich habe versucht die Warnmeldungen zur verstehen, und habe dabei z.B. die Variable last_seen im Unify Controller zu finden, diese ist auch vorhanden. Wo steckt der Fehler kannst du hier helfen @TobStar?

                                3d40f1b3-8386-43f8-bdd3-f8714c5242af-image.png

                                K 1 Antwort Letzte Antwort
                                0
                                • D DoMM

                                  Hi, ich habe dein Script in den IOBroker integriert, habe es aber nicht zum Laufen bekommen. In der Kopfzeile habe ich den Namen und die MAC der zu überwachenden Geräte eingegeben.

                                  Ich habe versucht die Warnmeldungen zur verstehen, und habe dabei z.B. die Variable last_seen im Unify Controller zu finden, diese ist auch vorhanden. Wo steckt der Fehler kannst du hier helfen @TobStar?

                                  3d40f1b3-8386-43f8-bdd3-f8714c5242af-image.png

                                  K Offline
                                  K Offline
                                  Kellerkind-86
                                  schrieb am zuletzt editiert von
                                  #16

                                  @TobStar
                                  verzeih mir...ich bin noch relativ frisch was sowas angeht..
                                  wo baue ich das script ein ?
                                  das würde mir so gefallen.
                                  gruß Marcell

                                  Gruß Marcell

                                  1 Antwort Letzte Antwort
                                  0
                                  • A Offline
                                    A Offline
                                    australien
                                    schrieb am zuletzt editiert von
                                    #17

                                    @TobStar
                                    Ich habe als neuling diese Script in gebrauch und funktioniert auch sehr gut.
                                    Nun hätte ich 2 Wünsche, wie kann man die Datenpunkte für Anwesend_seit (timestamp oder online Zeit) bzw Abwesend_seit (timestamp) anlegen?

                                    1 Antwort Letzte Antwort
                                    0
                                    • A Offline
                                      A Offline
                                      australien
                                      schrieb am zuletzt editiert von australien
                                      #18

                                      @TobStar @CruziX
                                      Ich will hier nocheinmal die Frage stellen.

                                      Ich es möglich die OnlineZeit (last_seen) bzw Abwesend_seit (last_seen - uptime) noch als Datenpunkt hinzuzufügen?

                                      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

                                      419

                                      Online

                                      32.5k

                                      Benutzer

                                      81.6k

                                      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