NEWS
[Vorlage] UniFi WLAN Anwesenheitskontrolle
-
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}); }); } -
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}); }); } -
@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?
-
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}); }); }@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? -
@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?
-
@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?@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:
-
@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:
@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 ;-) -
@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 ;-)@homecineplexx Ach, hab ich gerade nicht drauf geachtet, sry :D
-
@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?@homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter
-
@homecineplexx per Default wird hier jede Minute der Controller abgefragt. Aber ja grundsätzlich ist das abhängig von den Einstellungen im unifi Adapter
@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?
-
@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 -
@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?
@homecineplexx ja ich hab's auf einer Minute stehen.
-
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?

-
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?

@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 -
@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?