// September 2019 @liv-in-sky durch viel vorarbeit von @thewhobox (api verbindung) //Vordefinierte Vouchers für one-click-create - wird hier etwas geändert BITTE DATENPUNKT (Vouchers_StandardList) LÖSCHEN vor Scriptstart!!!! //BITTE alle Werte eingeben - für nichtbenutzte wie up-, download und nmb_begrenzung eine 0 eintragen // Pflichteinträge sind dauer, anzahl, multiuse und notiz !!! const standardVouchers = {"Vier Tage" : {dauer: 240, anzahl: 1, multiuse: 1, upload: 0, download:0, mb_begrenzung: 500, notiz:"MB Begrenzung 500 - 4 Tage"}, "Sieben Tage" : {dauer: 10080, anzahl: 1, multiuse: 1, upload: 300, download:300, mb_begrenzung: 500, notiz:"MB Begrenzung 500 - 7 Tage"}, "99 Minuten" : {dauer: 99, anzahl: 2, multiuse: 1, upload: 0, download:200, mb_begrenzung: 500, notiz:"Dauer 99 Minuten - Anzahl 2"}} //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen der clients wieder normal const clientPauseConst = 200000; //1000 bedeutet 1 Sekunde - das braucht Zeit !!! // Abfragezyklus definieren const abfragezyklus =20000; // es ist nicht zu empfehlen unter 20000 (20 sekunden) zu gehen const abfageoffset = 15000; // zu schnelle Abmeldungen können hier eingestellt weren - > erhöhen (15000 = 15 sek.) //HIER Einstellungen : EIN-AUSSCHALTEN Vouchers, iqontrol-Datei erstellen, anwesenheitskontrolle-clientpflege let iqontrol = true; let anwesenheit = true; // beim setzen von true auf false die verzeichnisstruktur unter iobroker-objects "von hand" löschen let vouchers = false; let apInfo = true; let problemWLAN=false; //bei problemen mit APs die über WLAN angebuden sind let countFalseSetting=2; //2 bedeutet : einmal einen abfragezyklus auslassen bevor auf false gesetzt wird: Formel: n-1 let aliasname=false; //FARBEN für IQontrol und VIS //die farbe für die tabellen in der vis wird im widget eingestellt //color_vis_text_client_in_table //color_vis_text_voucher_in_table let color_iqontrol_text_client_in_table= "black"; let color_iqontrol_text__client_disconnected="#01A9DB"; let color_iqontrol_client_gradient1= "lightblue"; let color_iqontrol_text_voucher_in_table= "black"; let color_iqontrol_voucher_gradient1= "lightblue"; let color_iqontrol_text__client_letzteAenderung="#848484"; let color_iqontrol_text__voucher_ueberschrift="lightblue"; let schriftart="Helvetica"; //möglich: Helvetica,Serif //-----------------AB HIER NICHTS MEHR ÄNDERN------------------------------------------------------ const dpPrefix = "javascript."+ instance +"."; // Hier Definition iqontrol-Style für Popup const format = "Voucher"; const format2 = "Clients
"; const format3 = "
"; const format6 ="" const apHead = "Voucher" const apTable = "
"; const tableAus = "
"; const request = require('request-promise-native').defaults({ rejectUnauthorized: false }); var fs = require('fs') const datei = "/opt/iobroker/iobroker-data/files/iqontrol/htmlvoucher.html"; const pathCVoucher = "/htmlvoucher.html" const datei2 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlclients.html"; const pathClient = "/htmlclientstest.html" const datei3 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlinfo.html"; const pathInfo = "/htmlinfo.html" const datei4 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlalarm.html"; const pathAlarm = "/htmlalarm.html" const datei5 = "/opt/iobroker/iobroker-data/files/iqontrol/htmllog.html"; const pathAbmelung = "/htmlLog.html"; let cookies = []; let loggedIn = false; let debug = false; let mylogs = false; let clientPause = false; let clientPauseVal; let wifiDPs = []; let vouchiesDPs=[]; let myname = 'hostname'; let respv; let respc; let respw; let resph; let respgv; let respa; let respal; //geholte Daten let countFalse=0; let statusarr=[]; let writeFileVar =0; let listValue=[]; //iqontrol löschen kachel let listValue2; //iqontrol löschen kachel let listValue3; //iqontrol löschen VIS let nichtSchalten=true; //let nichtSchalten2=false; //iqontrol löschen kachel let versuch; let listeDatenpunkte = []; let listeDatenpunkteControl=[]; let countie; let apListeTable; let apListe; let healthListe; let healthListeTable; let notSeen=[]; let lastChange=[]; let mybodyVouchers2; // create-one-click-standard-voucher let expire_var; // create-one-click-standard-voucher let n_var; // create-one-click-standard-voucher let quota_var; // create-one-click-standard-voucher let note_var; // create-one-click-standard-voucher let up_var; // create-one-click-standard-voucher let down_var; // create-one-click-standard-voucher let MBytes_var; // create-one-click-standard-voucher let testerral=false; let testerrc=false; let testerrl=false; let testerrv=false; let testerrs=false; let testerrh=false; let testerrcv=false; let testerrdv=false; let testerrws=false; let testerrap=false; var scriptCounter=0; let health = true; // Angaben zum Systemstatus - die Healtdaten werden nur alle 5 Abfragezyklen geholt let alarmSwitch =false; let alarmCounter =0; let firstTime=0; let mybodyVouchers; var wifiLength=0; for(let wifi_name in wifis) { wifiLength++; } if (aliasname) myname="name"; if ( !anwesenheit) fs.writeFileSync(datei2,("variable anwesenheit und/oder iqontrol ist nicht im unifiscript aktiviert - auf true setzen")); if ( !vouchers) fs.writeFileSync(datei,("variable vouchers und/oder iqontrol ist nicht im unifiscript aktiviert - auf true setzen")); //if (aliasname) realname="name"; //Erstelle Datenpunkte für die WLANs automatisch for(let wifi_name in wifis) { wifiDPs.push(dpPrefix + "WLANUnifi." + wifis[wifi_name].name); createState(dpPrefix + "WLANUnifi."+ wifi_name, { name: wifis[wifi_name].desc, role: 'switch', read: true, write: true, type: "boolean", smartName: { de: wifis[wifi_name].smart, smartType: "SWITCH" } });} createState(dpPrefix + "WLANUnifi.Wifi_Clients", { name: 'Clients_HTML_Table_VIS', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.SiteLED", false, { name: 'SiteLED', type: 'boolean', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Alarm.Alarm", { name: 'Alarm_Table_not_archieved', desc: 'Alarm_Table', type: 'string', unit: '', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Missing_Name", { name: 'Missing_Name', desc: 'Missing_Name', type: 'string', unit: '', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Alarm.Alarm_Anzahl", { name: 'Alarm_Anzahl', desc: 'Alarm_Table', type: 'number', unit: '', role: '',read: true, write: true }); var foo = (aliasname) ? true : false; createState(dpPrefix + "WLANUnifi.AliasName", foo, { name: ' AliasName', desc: 'schaltet Aliasnamen ein', role: 'switch', type: 'boolean', read: true, write: true, } , function() {setStateDelayed(dpPrefix + "WLANUnifi.AliasName", foo, 200)}); //createState(dpPrefix + "WLANUnifi.Aussortiert", { name: 'Aussortiert', role: 'string', read: true, write: true,}); if (vouchers) { createState(dpPrefix + "WLANUnifi.Wifi_Vouchers", { name: 'Vouchers_HTML_Table_VIS', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_List", { name: 'Vouchers_ID_List', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CodeList", { name: 'Vouchers_Texte_Delete_VIS_Widget', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CodeList2", { name: 'Vouchers_Werte_Delete_VIS_Widget', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList", { name: 'Vouchers_ValueList_IQontrol', desc:"ValueCodeList", role: "", type:'number', states: "1:please wait ...;2:refresh webpage", def:1, min: 0, max: 20, read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Create", false, { name: 'A_New_Voucher_Create', role: 'switch', type: 'boolean', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_DeleteVIS", { name: 'Vouchers_Schalter_Delete_VIS_Widget', role: 'switch', type: 'number', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateStandard", 1, { name: 'Vouchers_Schalter_Create_VIS_Widget', role: 'switch', type: 'number', read: true, write: true,}); //createState(dpPrefix + "WLANUnifi.Wifi_Create_Standard_Voucher", false, { name: 'A_Delete_Voucher', role: 'switch', type: 'boolean', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Delete", false, { name: 'Voucher_Delete__Botton_VIS', role: 'switch', type: 'boolean', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Voucher_ID", "must be set",{ name: 'A_Delete_Voucher.Voucher_ID', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Dauer", "must be set",{ name: ' A_New_Voucher_Dauer', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.MultiUse", "must be set",{ name: ' A_New_Voucher_MultiUse', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Anzahl", "must be set",{ name: ' A_New_Voucher_Anzahl', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Notiz", "",{ name: ' A_New_Voucher_Notiz', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Upload", "",{ name: ' A_New_Voucher_Uplaod', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Download", "",{ name: ' A_New_Voucher_Download', role: 'string', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Mb_Begrenzung", "", { name: ' A_New_Voucher_Mb_Begrenzung', role: 'string', read: true, write: true,}); for (var i = 1; i < 21; i++) { var x=i.toString(); if (i<10) x="0"+x; createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x, { name: 'Unifi Voucher_Code'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".code"+x, { name: 'Unifi Voucher_Code_code'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".erstellt", { name: 'Unifi Voucher_Code_erstellt'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".dauer", { name: 'Unifi Voucher_Code_duration'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".abgelaufen", { name: 'Unifi Voucher_Code_expires'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".id", { name: 'Unifi Voucher_Code_id'+x, role: 'string', read: true, write: true, }); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+x+".notiz", { name: 'Unifi Voucher_Code_notiz'+x, role: 'string', read: true, write: true, }); } let vouchiesHelper="" //Werteliste-Datenpunkt für StandardVouchies let vouchiesHelper2="Wähle Standard;" let vouchiesHelper3="1;" countie=0; for(let vouchies in standardVouchers){ countie++ vouchiesHelper2 = vouchiesHelper2 + vouchies + " ("+standardVouchers[vouchies].notiz +");" vouchiesHelper3 = vouchiesHelper3+(countie+1)+";" vouchiesHelper = vouchiesHelper+countie + ":" + vouchies + " (" +standardVouchers[vouchies].notiz +");" vouchiesDPs.push(vouchies); } // + " " + "("+standardVouchers[vouchies].notiz+");"} // vouchiesHelper=vouchiesHelper.substr(0, vouchiesHelper.length-1); vouchiesHelper=vouchiesHelper + (countie+1)+":"+"Standard-Voucher-Auswahl"; createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_StandardList", { name: 'Vouchers_StandardList_IQontrol', desc:"Vouchers_StandardList", role: "", type:'number', states: vouchiesHelper, def:(countie+1), min: 0, max: 20, read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateList", { name: 'Vouchers_Texte_Create_VIS_Widget', desc:"Wifi_Vouchers_CreateList", role: "string", type:'string', read: true, write: true}, function() { mylog("created"); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateList",vouchiesHelper2)}); createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateListStandard", { name: 'Vouchers_Werte_Create_VIS_Widget', desc:"Wifi_Vouchers_CreateList", role: "string", type:'string', read: true, write: true}, function() { mylog("created"); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateListStandard",vouchiesHelper3)}); } createState(dpPrefix + "WLANUnifi.Wifi_Client_Pause", false, { name: 'Wifi_Client_Pause', role: 'switch', type: 'boolean', read: true, write: true,}); createState(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl", { name: 'Wifi_Clients_Anzahl', desc: 'Wifi_Clients_Anzahl', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); if (vouchers) createState(dpPrefix + "WLANUnifi.Wifi_Vouchers_Anzahl", { name: 'Wifi_Vouchers_Anzahl', desc: 'Wifi_Vouchers_Anzahl', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Wifi_Info", { name: 'Info_HTML_Table_VIS', role: 'string', read: true, write: true,}); if (health) {createState(dpPrefix + "WLANUnifi.Health.WLAN.Status", { name: 'Health_Status', desc: 'Health_Status', type: 'string', unit: '', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.Users", { name: 'Health_Users', desc: 'Health_Users', type: 'number', unit: '', min: '0', max: '1000', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.Guests", { name: 'Health_Guests', desc: 'Health_Guests', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.TXBytes", { name: 'Health_TXBytes', desc: 'Health_TXBytes', type: 'number', unit: '', min: '0', max: '9999999', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.RXBytes", { name: 'Health_RXBytes', desc: 'Health_RXBytes', type: 'number', unit: '', min: '0', max: '9999999', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.Adopted", { name: 'Health_Adopted', desc: 'Health_Adopted', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.Disabled", { name: 'Health_Disabled', desc: 'Health_Disabled', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); createState(dpPrefix + "WLANUnifi.Health.WLAN.Disconnected", { name: 'Health_Disconnected', desc: 'Health_Disconnected', type: 'number', unit: '', min: '0', max: '100', role: '',read: true, write: true }); } if (apInfo) { for(let ap_name in apName) { createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname, {name: apName[ap_name].aname,role: 'state',read: true,write: true,type: "string" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".Model", {name: "Model",role: 'state',read: true,write: true,type: "string" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".IP_Adresse", {name:"IP_Adresse",role: 'state',read: true,write: true,type: "string" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".Satisfaction", {name:"Satisfaction",role: 'state',read: true,write: true,type: "number" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".LoadAVG1", {name:"Durchschnitt Wartezeit pro Min",role: 'state',read: true,write: true, type: "number" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".LoadAVG5", {name:"Durchschnitt Wartezeit pro 5Min",role: 'state',read: true,write: true, type: "number" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".LoadAVG15", {name:"Durchschnitt Wartezeit pro 15Min",role: 'state',read: true,write: true, type: "number" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".Adopted", {name:"Adopted",role: 'state',read: true,write: true,type: "boolean" } ); createState(dpPrefix + "WLANUnifi.APInfo."+ apName[ap_name].aname+".ToController", {name:"ToController",role: 'state',read: true,write: true,type: "string" } );} } function dlog(message) { if(debug) console.log(message); } function mylog(message) { if(mylogs) console.log(message); } //-----------------------------------------LOGIN--------------------------------------------------------------- async function login() { return new Promise(async (resolve, reject) => { cookies=[]; let respl = await request.post({ resolveWithFullResponse: true, url: unifi_controller + "/api/login", body: JSON.stringify({ username: unifi_username, password: unifi_password }), headers: { 'Content-Type': 'application/json' } }).catch((e) => { log("login: reject"), reject(e); loggedIn =false;return respl=[];}); if(respl != null) { mylog("login: login war erfolgreich! " + ((respl.headers && respl.headers.hasOwnProperty("set-cookie")) ? "Mit Cookies":"Ohne Cookies")); if(respl.headers && respl.headers.hasOwnProperty("set-cookie")) { let set_cookies = respl.headers["set-cookie"]; for(i = 0; i < set_cookies.length; i++) { let cookie = set_cookies[i]; //log(set_cookies[i]); cookie = cookie.split(";")[0]; cookies.push(cookie); } } else { log("login: no cookies to set!") } loggedIn = true; resolve(); } else { log("login: rejected") loggedIn = false; reject("respl = null"); } }); } //-----------------------------------------LOGOUT--------------------------------------------------------------- async function logout() { log("BIN IN LOGOUT"); return new Promise(async (resolve, reject) => { let respo = await request.get({ url: unifi_controller + "/logout", headers: { Cookie: cookies.join("; ") } }).catch((e) => { log("logout fehler" + e)/*reject(e)*/ ;return testerrl=true;} ); if (!testerrl) { if(respo != null) { log("Du bist nun ausgedloggt."); dlog(respo); log("BIN raus aus LOGOUT"); loggedIn = true; resolve(); } else { reject("resp = null"); } } else {log("reject weil resplogin ist 00"); log("BIN raus aus LOGOUT"); reject();} log("BIN raus aus LOGOUT"); }); } //-----------------------------------------STATUS WIFI --------------------------------------------------------- //Updatet status vom Wifi //wifi: wifi object aus der konstanten wifis function getStatus(wifi) { mylog("BIN IN STATUS"); return new Promise(async (resolve, reject) => { dlog("nur mal so"); if (!loggedIn) await login().catch((e) => reject(e)); let resp = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/rest/wlanconf/" + wifi.id, headers: { Cookie: cookies.join("; ") } }).catch((e) => { dlog("getStatus reject " + e); /*reject(e)*/ return testerrs=true; }); if (!testerrs) { dlog("got response " + JSON.stringify(resp)); resp = JSON.parse(resp); let wlanOn = resp.data[0].enabled; dlog("WLAN " + wifi.name + " ist: " + (wlanOn ? "an" : "aus")); if (resp != null && resp.meta && resp.meta.rc == "ok") { dlog("Status erfolgreich geholt!"); dlog(resp); let wlanOn = resp.data[0].enabled; dlog("WLAN ist: " + (wlanOn ? "an" : "aus")); setStateDelayed(dpPrefix + "WLANUnifi." + wifi.name, wlanOn, 200); resolve(wlanOn); } else { log("nicht ok... getStatusWifi") reject(JSON.stringify(resp)); } } else {mylog("reject weil respslogin ist 00"); mylog("BIN raus aus LOGOUT"); reject();} mylog("BIN aus STATUS raus"); }); } //-----------------------------------------GETCLIENTS--------------------------------------------------------------- async function getClients() { mylog("BIN IN getclients"); return new Promise(async (resolve, reject) => { dlog("getclient nur mal so" + loggedIn); if(!loggedIn) await login().catch((e) => reject(e)); respc = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/stat/sta", headers: { Cookie: cookies.join("; ") } }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); if (!testerrc) { dlog("got respconse nach log in getclient " + JSON.stringify(respc)); dlog(typeof respc); dlog("--------------------- " + respc); //respc = JSON.stringify(testemal2); //Sortierung Daten und Verwandlung Json var unfiltered = []; unfiltered = JSON.parse(respc).data; dlog("bin da"); dlog(unfiltered[5][myname] + unfiltered[2].mac); versuch = []; let trash=""; let county=0 for(var index in unfiltered) { let device = unfiltered[index]; mylog(device) let switchHelper3=0; mylog(unfiltered[index].hasOwnProperty(myname)+"IP---:"+unfiltered[index].ip+"name---:"+unfiltered[index].hostname+"hostname---:"+unfiltered[index].name) if(unfiltered[index].hasOwnProperty("name") && device.name !== undefined && device.name !== null && device.name !== "") switchHelper3=1; if(unfiltered[index].hasOwnProperty(myname) && device[myname] !== undefined && device[myname] !== null && device[myname] !== "") switchHelper3=2; switch (switchHelper3) { case 0: // kein hostname und kein alias device[myname]=unfiltered[index].ip.replace(/\./g,"-")+"--repaired"; versuch.push(device); trash = trash+unfiltered[index].ip.replace(".","-")+"-missing: hostname und alias"+","; mylog("ein fehler: -----------------"+device[myname]) break; case 1: // kein hostname device[myname]=unfiltered[index].name; versuch.push(device); mylog("hat nur alias: -----------------"+device[myname]) trash = trash+unfiltered[index].ip.replace(".","-")+"-missing: hostname"+","; break; case 2: // alles in ordnung mit client versuch.push(device); mylog("ein richtiger: -----------------"+device[myname]) break; } } mylog("trash -------------"+trash); setState(dpPrefix + "WLANUnifi.Missing_Name", trash); versuch.sort(function (alpha, beta) { if (alpha[myname].toLowerCase() < beta[myname].toLowerCase()) return -1; if (alpha[myname].toLowerCase() > beta[myname].toLowerCase()) return 1; return 0; }); resolve(); } else {log("reject weil respc 00"); reject() } mylog("bin raus aus getclients"); }); //new promise } //getclientend //-----------------------------------------workCLIENTS--------------------------------------------------------------- function workClients() { mylog("BIN IN workclients"); dlog("got respconse versuch " + JSON.stringify(versuch)); dlog(typeof respc); dlog("--------------------- " + respc); let writeFile = true; let writeFileVar = 0; let writeClientTable = true; let writeAnwesenheit = true; var anzahlClients = versuch.length; //setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100); // überprüfe ob aliasname einen punkt enthält !!! if(aliasname) {for (var i = 0; i < versuch.length; i++) { if (versuch[i][myname].indexOf(".")>-1) { versuch[i][myname]=versuch[i][myname].replace(/\./g, "-")+"---change-alias";log(versuch[i][myname])} else{dlog(versuch[i][myname])} }} var clientListe = ""; getExistingClients(); mylog("Status1"); var listeDatenpunkteNew=[]; //erstelle aktuelles array von controller daten for (var i = 0; i < versuch.length; i++) { listeDatenpunkteNew[i] = versuch[i][myname]; } dlog (listeDatenpunkteNew[22]); if (true) { // sind clients von controller in verzeichnisliste ? for (var z = 0; z < listeDatenpunkteNew.length; z++) { if ( listeDatenpunkte.indexOf(listeDatenpunkteNew[z]) == -1 ){ //ist controller-client existent nicht in verzeichnis-list mylog("Datenpunktanlegen" + listeDatenpunkteNew[z] +"index:"+ listeDatenpunkte.indexOf(listeDatenpunkteNew[z]).toString()); var ipWandler= versuch[z].ip; var data = dpPrefix + "WLANUnifi.Wifi_Client_States."+listeDatenpunkteNew[z]; createState(data, true, {name: ipWandler, role: 'boolean',read: true, write: true, }, function() {mylog("created"); }); //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z][myname], true); mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ; } } mylog("Status2"); } //sind datenpunkte noch in controller vorhanden if (anwesenheit) { notSeen=[]; for (var z = 0; z < listeDatenpunkte.length; z++) { if ( listeDatenpunkteNew.indexOf(listeDatenpunkte[z]) == -1 ){ //ist datenpunkt-verzeihnis existent und nicht in controller liste notSeen.push(listeDatenpunkte[z]);//log(listeDatenpunkte[z]); //array der notSeen datenpunkte sind nicht im controller if (getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+listeDatenpunkte[z]).val) { // setze datenpunkt auf false - nur wenn true war countFalse++ mylog("bin davor") if (countFalse==countFalseSetting) { setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+listeDatenpunkte[z], false, 200); countFalse=0; mylog("Datenpunkt ist falsch zu setzen"+listeDatenpunkte[z]);}} } else {dlog("ist noch im controller" + listeDatenpunkte[z]); } } } //sind datenpunkte nicht in controller vorhanden mylog("Status3"); // setze datenpunkte nach last_seen_by_uap - ausnahme: controller-clients sind nicht mehr connectet aber in vereichnis let lastChangeList; if (anwesenheit) { timeout = setTimeout(function () { //wegen createstate und zu schnelles setstate let caseHelper=0; for (var z = 0; z < listeDatenpunkteNew.length; z++) { // if(versuch[z]._last_seen_by_uap) { // let abfrage = versuch[z].indexOf("last_seen_by_uap"); // if(versuch[z].indexOf("_last_seen_by_uap") >-1 ) { if(versuch[z].hasOwnProperty("last_seen")) caseHelper=1; if(versuch[z].hasOwnProperty("_last_seen_by_ugw")) caseHelper=2; if(versuch[z].hasOwnProperty("_last_seen_by_usw")) caseHelper=3; if(versuch[z].hasOwnProperty("_last_seen_by_uap")) caseHelper=4; //log(caseHelper.toString()); switch (caseHelper) { case 1: /*________________________------------------------------------_____CASE1*/ dlog(caseHelper.toString()); var tester = parseInt((new Date().getTime())) - (versuch[z].last_seen*1000); dlog(tester.toString() + "laenge : " +listeDatenpunkteNew.length); if (parseInt((new Date().getTime())) - (versuch[z].last_seen*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); mylog(tester.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    out  vor: "+tester/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z].last_seen*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    in  vor: " + tester/1000+" Sek"); } break; /*________________________------------------------------------_____CASE1*/ case 2: /*________________________------------------------------------_____CASE2*/ dlog(caseHelper.toString()); var tester = parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_ugw*1000); dlog(tester.toString() + "laenge : " +listeDatenpunkteNew.length); if (parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_ugw*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); mylog(tester.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    out  vor: "+tester/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z]._last_seen_by_ugw*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    in  vor: " + tester/1000+" Sek"); } break; /*________________________------------------------------------_____CASE2*/ case 3: /*________________________------------------------------------_____CASE3*/ dlog(caseHelper.toString()); var tester = parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_usw*1000); dlog(tester.toString() + "laenge : " +listeDatenpunkteNew.length); if (parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_usw*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); mylog(tester.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    out  vor: "+tester/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    in  vor: " + tester/1000+" Sek"); } break;/*________________________------------------------------------_____CASE3*/ case 4: /*________________________------------------------------------_____CASE4*/ dlog(caseHelper.toString()); var tester = parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000); dlog(tester.toString() + "laenge : " +listeDatenpunkteNew.length); if (parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); mylog(tester.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    out  vor: "+tester/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    in  vor: " + tester/1000+" Sek"); } break; /*________________________------------------------------------_____CASE4*/ } // AAAAAAAAAAAAAAAAALLLLLLLLLLLLLLLLLLLLLLLLLLLLTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT /* if(versuch[z].hasOwnProperty("_last_seen_by_uap")) { dlog("------------------uap ist war"); var tester = parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000); dlog(tester.toString() + "laenge : " +listeDatenpunkteNew.length); if (parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); mylog(tester.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    out  vor: "+tester/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z]._last_seen_by_uap*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"    in  vor: " + tester/1000+" Sek"); } } else { ;dlog("------------------uap ist nicht war"); var tester2 = parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_usw*1000); if (parseInt((new Date().getTime())) - (versuch[z]._last_seen_by_usw*1000) > abfragezyklus+abfageoffset && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, false, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], false, 100); mylog("abgesetzt: " +listeDatenpunkteNew[z] + " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss") + " Uhr"); mylog(tester2.toString()); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss")+"    out  vor: "+tester2/1000+" Sek"); mylog(lastChange[0]); } if (parseFloat((new Date().getTime())) - (versuch[z]._last_seen_by_usw*1000) < abfragezyklus && !getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname]).val ==null ) { // if (!aliasname) {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[i].name, true, 100);} else {setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100)} setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z][myname], true, 100); mylog("gesetzt" +listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss") + " Uhr"); if (lastChange.length>=10) lastChange.shift() lastChange.push(""+listeDatenpunkteNew[z]+"  "+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss")+"    in  vor: " + tester2/1000+" Sek"); } } */ // AAAAAAAAAAAAAAAAALLLLLLLLLLLLLLLLLLLLLLLLLLLLTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT } mylog("Status4"); // erstelle htmlclientliste for (var i = 0; i < versuch.length; i++) { if(versuch[i].hasOwnProperty("last_seen")) caseHelper=1; if(versuch[i].hasOwnProperty("_last_seen_by_ugw")) caseHelper=2; if(versuch[i].hasOwnProperty("_last_seen_by_usw")) caseHelper=3; if(versuch[i].hasOwnProperty("_last_seen_by_uap")) caseHelper=4; //log(caseHelper.toString()); switch (caseHelper) { case 1: if (parseInt((new Date().getTime())) - (versuch[i].last_seen*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].sw_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  noConn");} break; case 2: if (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_ugw*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].sw_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  noConn");} break; case 3: dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip); if (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_usw*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].sw_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  noConn");} dlog("------------------ist nicht war"); break; case 4: dlog("------------------uap ist war"); dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip); if (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].ap_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" "+versuch[i].essid+"    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" "+versuch[i].essid+"    "+versuch[i].ip+"  noConn");} break; } /* if(versuch[i].hasOwnProperty("_last_seen_by_uap")) { dlog("------------------uap ist war"); dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip); if (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].ap_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" "+versuch[i].essid+"    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" "+versuch[i].essid+"    "+versuch[i].ip+"  noConn");} } else { dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip); if (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_usw*1000) < abfragezyklus+abfageoffset) { for(let device_name in apName) { //Abfrage welcher AP dlog(versuch[i].ap_mac +" - " + device_name +" - " + apName[device_name].aname); if (versuch[i].sw_mac==device_name) var apTransfer = apName[device_name].aname}; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  "+apTransfer+""); dlog(clientListe);} else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat(""+versuch[i][myname]+" LAN    "+versuch[i].ip+"  noConn");} dlog("------------------ist nicht war");}*/ } setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100); //korrigiert for (var h =0; h"+notSeen[h]+ " noConn    noConn  noConn"); } //setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100); //korrigiert mylog("Status5"); lastChangeList=format3; for (var g = lastChange.length-1; g >= 0 ; g--) { lastChangeList=lastChangeList.concat(lastChange[g]/*+""*/); lastChangeList.concat(lastChange[g]+""); } if (iqontrol && anwesenheit ) { let dataHelp = format2+clientListe.concat("

Geamtanzahl angemeldeter Clients:"+anzahlClients+"
Insgesamt Clients registriert: "+ listeDatenpunkte.length+ "

Letzter Wechsel im Netzwerk:
"+lastChangeList+"

"); fs.writeFileSync(datei2, format2+clientListe.concat("

Geamtanzahl angemeldeter Clients:"+anzahlClients+"
Insgesamt Clients registriert: "+ listeDatenpunkte.length+ "

Letzter Wechsel im Netzwerk:
"+lastChangeList+"

" )); //var dataqq = fs.readFileSync('/tmp/htmlclients.html'); /* log("anfang"); writeFile('iqontrol.0', '/htmltest3.html',"BBBBBBB", function (error) { console.log('file written'); }); log("ende")*/ writeMyFile(dataHelp, pathClient); /*writeFile('iqontrol.meta', path ,dataHelpWrite, function (error) { console.log('file written'); });*/ } // writeFile( '/../iqontrol.0/htmlclients.html', dataHelp, function (error) {console.log('file written');}); //if (lastChange.length>10) lastChange=[]; dlog("ClientFile schreibt! "+iqontrol.toString()+writeClientTable.toString()); if (true) setState(dpPrefix + "WLANUnifi.Wifi_Clients", ""+clientListe.concat("
")+"

Letzter Wechsel im Netzwerk:
"+lastChangeList+"

"); //schreibe client table mylog("bin raus aus workclients"); }, 3000);} } //workclientend //-----------------------------------------WRITING FILES--------------------------------------------------------------- function writeMyFile(dataHelpWrite, path) { log("bin in writemyfile") writeFile('iqontrol.meta', path ,dataHelpWrite, function (error) { console.log('file written'); }); readFile('iqontrol.meta', '/htmltest3.html', function (error, data) { console.log("mein text: ----:"+data.substring(0, 50)); }); log("bin raus aus writemyfile") } //-----------------------------------------EXISTING CLIENTS--------------------------------------------------------------- function getExistingClients() { dlog("BIN IN EXISTING CLIENTS"); listeDatenpunkte = []; var cacheSelectorState = $("state[state.id=" + dpPrefix + "WLANUnifi.Wifi_Client_States.*]"); cacheSelectorState.each(function (id, c) { if (!id.includes("undefined")) { listeDatenpunkte[c] = id.replace(dpPrefix + "WLANUnifi.Wifi_Client_States.", "");} }); dlog("bin raus a existing clients"); } //-----------------------------------------GET--VOUCHERS--------------------------------------------------------------- async function getVouchers() { if (vouchers) { mylog("BIN IN getvouchers"); return new Promise(async (resolve, reject) => { dlog("nur mal so"); if(!loggedIn) await login().catch((e) => reject(e)); respv = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/stat/voucher", headers: { Cookie: cookies.join("; ") } }).catch((e) => { dlog("getStatus reject " + e); /*reject(e)*/ return testerrv=true; }); if (!testerrv) { dlog("got response " + JSON.stringify(respv)); dlog(typeof respv); dlog("--------------------- " + respv); resolve("done"); } else {log("reject weil respv ist 00"); reject();} mylog("bin raus a GET vouchers"); }); }} //-----------------------------------------WORK--VOUCHERS--------------------------------------------------------------- function workVouchers() { if (vouchers) { // mylog("BIN IN workvouchers"); dlog("got response " + JSON.stringify(respv)); dlog(typeof respv); dlog("--------------------- " + respv); respv = JSON.parse(respv); //if (respv.data == null) log("respv ist NULLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL -"+ respv.length) mylog(JSON.stringify(respv.data).length.toString() + "----------------------writeFilevr : " + writeFileVar.toString()) dlog(respv.meta);dlog(respv.meta.rc); var writeFile=true; var laengeMessage=JSON.stringify(respv.data).length; if (laengeMessage==writeFileVar) {writeFile = false;} else {writeFile=true} mylog("writefile: "+ writeFile) writeFileVar=JSON.stringify(respv.data).length; if (writeFile) { mylog("------------------------------------------------schreibe") var list =""; var listCode=""; listValue=[]; listValue2=[]; listValue3=[]; let listHelper2=''; //zuerst Datenpunktealt löschen for (i = 0; i < 20; i++) { var y=i+1; var yy=y.toString(); if (y<10 ) yy="0"+yy; setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".code"+yy, " na " ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".erstellt", " na " ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".dauer", " na " ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".abgelaufen", " na " ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".id", "na" ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".notiz", "na" ); } //tabelle vorbereiten var clientListe = "Nr. DAUER FERTIG    CODE  ERSTELLT  NOTIZ "; for (var r = 1; r < 21; r++) { var x=r.toString(); if ( r < 10) { var yyy="0"+x;} else {yyy=x}; setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yyy, "", 100); } for (var i = 0; i < respv.data.length; i++) { var zeit= respv.data[i].create_time*1000 listValue.push(respv.data[i]._id); listValue3.push((i+1)); list=list.concat(respv.data[i]._id,";") // für VIS anzeige - löschen let zeit1 = formatDate(getDateObject(zeit), "TT.MM.JJJJ SS:mm").toString(); let notizen; if (respv.data[i].note !== null) { notizen=respv.data[i].note} else {notizen= "   -     ";} var y=i+1; var yy=y.toString(); if (y<10 ) yy="0"+yy; clientListe = clientListe.concat(""+yy+" "+respv.data[i].duration+" "+respv.data[i].status_expires+"    "+respv.data[i].code.slice(0,5)+"-"+respv.data[i].code.slice(5)+"  " +zeit1 + "  "+notizen+""); if (i<20 ) { listValue2.push("CODE"+yy); listCode = listCode.concat("CODE"+yy , ";"); // für VIS anzeige - löschen dlog(zeit1); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".code"+yy, respv.data[i].code.slice(0,5)+"-"+respv.data[i].code.slice(5) ); //respv.data[i].code setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".erstellt", zeit1 ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".dauer", respv.data[i].duration ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".abgelaufen", respv.data[i].status_expires ); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".id", respv.data[i]._id ); if(respv.data[i].note !== null) { setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".notiz", respv.data[i].note );} else {setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".notiz", " - " );} }} //nur für Löschen Iqontrol VIS listCode=listCode+"Wähle Code" list=list+"xxx" listValue3.push((respv.data.length+1)); setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CodeList2",listValue3.join(";")) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_DeleteVIS",(respv.data.length+1)) //setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Voucher_ID",(respv.data.length+1)) //nur für Löschen Iqontrol Kachel for (i=0; i

Geamtanzahl Vouchers:"+respv.data.length+"

"));} if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers", ""+clientListe.concat("

Geamtanzahl Vouchers:"+respv.data.length+"

")); if (writeFile) {setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_Anzahl", respv.data.length); mylog(listCode +" -- " +list) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_List", list ); // für VIS anzeige - löschen setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_CodeList", listCode ); } // für VIS anzeige - löschen //mylog("BIN RAUS AUS workvouchers"); } //-----------------------------------------GET--Health--------------------------------------------------------------- async function getHealth() { if (health) { mylog("BIN IN gethealth"); return new Promise(async (resolve, reject) => { dlog("nur mal so"); if(!loggedIn) await login().catch((e) => reject(e)); resph = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/stat/health", headers: { Cookie: cookies.join("; ") } }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrh=true; }); if (!testerrh) { dlog("got response " + JSON.stringify(resph)); dlog(typeof resph); mylog("--------------------- " + resph); resolve("done"); } else {log("reject weil resph ist 00"); reject();} mylog("bin raus a GET health"); }); }} //-----------------------------------------WORK--HEALTH--------------------------------------------------------------- function workHealth() { mylog("BIN IN workhealth"); dlog("got response " + JSON.stringify(resph)); dlog(typeof resph); mylog("--------------------- " + resph); resph=resph.replace(/-r/g, "_r") resph = JSON.parse(resph); mylog(resph.data[0].rx_bytes_r); setState(dpPrefix + "WLANUnifi.Health.WLAN.Status",resph.data[0].status ); setState(dpPrefix + "WLANUnifi.Health.WLAN.Users",resph.data[0].num_user); setState(dpPrefix + "WLANUnifi.Health.WLAN.Guests",resph.data[0].num_guest ); setState(dpPrefix + "WLANUnifi.Health.WLAN.TXBytes",resph.data[0].tx_bytes_r ); setState(dpPrefix + "WLANUnifi.Health.WLAN.RXBytes",resph.data[0].rx_bytes_r ); setState(dpPrefix + "WLANUnifi.Health.WLAN.Adopted",resph.data[0].num_adopted ); setState(dpPrefix + "WLANUnifi.Health.WLAN.Disabled",resph.data[0].num_disabled ); setState(dpPrefix + "WLANUnifi.Health.WLAN.Disconnected",resph.data[0].num_disconnected ); // if (apInfo) healthListe = apHead; healthListe = ""; healthListeTable=""; //healthListe = apHead + apTable +"Health-Daten:" healthListeTable = "Status  "+resph.data[0].status+ "Users  "+resph.data[0].num_user + "Gäste    " +resph.data[0].num_guest + "TxBytes  "+resph.data[0].tx_bytes_r + "RxBytes"+resph.data[0].rx_bytes_r+ "Disabled"+resph.data[0].num_disabled+ "Adopted"+resph.data[0].num_adopted+ "Disconnected"+resph.data[0].num_disconnected+ "" healthListe = apHead + apTable +"Health-Daten:" + healthListeTable; healthListeTable="Health Daten:" + healthListeTable; mylog(healthListe); mylog("bin raus a work health"); } //-----------------------------------------SET WIFIS - WIFI EIN-AUSSCHALTEN---------------------------------------------- //Wifi an-/ausschalten //enabled: true = anschalten; false = ausschalten //wifi: wifi object aus der konstanten wifis async function setWifi(enabled, wifi) { if (!clientPause) { return new Promise(async (resolve, reject) => { dlog("setWifi: start set Wifi_haupt"); if (!loggedIn) { dlog("need to login"); await login().catch((e) => reject(e)); } dlog("setWifi: now setting Wifi_haupt"); let resp = request.post({ url: unifi_controller + "/api/s/"+siteName+"/upd/wlanconf/" + wifi.id, body: JSON.stringify({ enabled }), headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") } }).catch((e) => { dlog("setWifi: rejected: " + e); /*reject(e)*/ return testerrws=true; }); dlog("setWifi: got response") if (resp != null) { dlog("setWifi: Wifi wurde erfolgreich " + (enabled ? "eingeschaltet" : "ausgeschaltet")); dlog(resp); // getclient() Pause für umschalten if (firstTime>=wifiLength) { // if (true) { clientPause = true; setState(dpPrefix + "WLANUnifi.Wifi_Client_Pause",true); clientPauseVal=parseInt((new Date().getTime())); } setState(dpPrefix + "WLANUnifi." + wifi.name, enabled, enabled); resolve(); } else { dlog("setWifi: rejetced") dlog("resp: " + JSON.stringify(resp)); reject("msg: " + JSON.parse(resp.body).meta.msg);} }); } else { log("WLAN wird gerade umgeschaltet"); } } //-----------------------------------------CREATE VOUCHERS---------------------------------------------- async function createVoucher (mybody) { mylog(JSON.stringify( mybody )); return new Promise(async (resolve, reject) => { mylog("createVoucher in aktion"); if (!loggedIn) { mylog("need to login"); await login().catch((e) => reject(e)); } mylog("do it !"); let respcv = request.post({ url: unifi_controller + "/api/s/"+siteName+"/cmd/hotspot/" , body: JSON.stringify( mybody ), // body: mybody, headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") } }).catch((e) => { log("setWifi: rejected: " + e); /*reject(e)*/ return testerrcv=true; }); dlog("setWifi: got response") dlog("------------: "+respcv); dlog("resp: " + JSON.stringify(respcv)); }); } //-----------------------------------------DELETE VOUCHERS---------------------------------------------- async function deleteVoucher (mybody) { mylog(JSON.stringify( mybody )); return new Promise(async (resolve, reject) => { dlog("deleteVoucher in aktion"); if (!loggedIn) { mylog("need to login"); await login().catch((e) => reject(e)); } mylog("do it !"); let respdv = request.post({ url: unifi_controller + "/api/s/"+siteName+"/cmd/hotspot/" , body: JSON.stringify( mybody ), // body: mybody, headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") } }).catch((e) => { log("setWifi: rejected: " + e); /*reject(e)*/ return testerrdv=true; }); dlog("setWifi: got response") dlog("------------: "+respdv); dlog("resp: " + JSON.stringify(respdv)); dlog("resp: " + JSON.parse(respdv)); }); } //-----------------------------------------GET--APs--------------------------------------------------------------- async function getAp(id) { if (apInfo) { mylog("BIN IN getap mit Wert" + id); return new Promise(async (resolve, reject) => { dlog("nur mal so"); if(!loggedIn) await login().catch((e) => reject(e)); respa = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/stat/device/"+id, headers: { Cookie: cookies.join("; ") } }).catch((e) => { dlog("getStatus reject " + e); /*reject(e)*/ return testerrap=true; }); if (!testerrv) { dlog("got response " + JSON.stringify(respv)); dlog(typeof respa); dlog("--------------------- " + respa); resolve("done"); } else {log("reject weil respv ist 00"); reject();} mylog("bin raus a GETap"); }); }} //-----------------------------------------WORK--APs--------------------------------------------------------------- function workAP (aliasAPname) { let satisfy; dlog("BIN IN work ap"); dlog("got response " + JSON.stringify(respa)); dlog(typeof respa); dlog("--------------------- " + respa); let abfrage = respa.indexOf("satisfaction"); respa = JSON.parse(respa); if(abfrage>-1) { dlog("------------------ist war"); satisfy = respa.data[0].satisfaction; } else { satisfy = 777 ;dlog("------------------ist nicht war");} dlog(respa.data[0].model) setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".Model",respa.data[0].model ); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".IP_Adresse",respa.data[0].connect_request_ip ); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".Satisfaction", satisfy /*respa.data[0].satisfaction*/ ); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".Adopted",respa.data[0].adopted ); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".LoadAVG1",parseFloat(respa.data[0].sys_stats.loadavg_1)); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".LoadAVG5",parseFloat(respa.data[0].sys_stats.loadavg_5)); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".LoadAVG15",parseFloat(respa.data[0].sys_stats.loadavg_15)); setState(dpPrefix + "WLANUnifi.APInfo."+ aliasAPname+".ToController",respa.data[0].inform_ip ); var apListeHelfer= /*apListeTable +*/ "Model  "+respa.data[0].model+ "IP-Adresse  "+respa.data[0].connect_request_ip + "Satisfaction    " + satisfy + //respa.data[0].satisfaction + "Adopted  "+respa.data[0].adopted + "LoadAVG1  "+respa.data[0].sys_stats.loadavg_1 + "ToController"+respa.data[0].inform_ip+""; apListeTable= apListeTable + apListeHelfer ; apListe = apListe + "   "+"AP-Daten:"+aliasAPname+""+apListeHelfer; mylog (apListe) mylog("bin raus a work ap"); } //-----------------------------------------GET--Alarms--------------------------------------------------------------- function getAlarm() { dlog("BIN IN ALARM"); return new Promise(async (resolve, reject) => { dlog("nur mal so"); if (!loggedIn) await login().catch((e) => reject(e)); respal = await request.get({ url: unifi_controller + "/api/s/"+siteName+"/rest/alarm?archived=false", //?archived=false headers: { Cookie: cookies.join("; ") } }).catch((e) => { dlog("getStatus reject " + e); /*reject(e)*/ return testerral=true; }); dlog("got response " + JSON.stringify(respal)); //resp = JSON.parse(resp); if (!testerral) { resolve("done"); mylog("BIN raus aus ALARM");} }); } //-----------------------------------------WORK--Alarms--------------------------------------------------------------- function workAlarm() { mylog("BIN IN work ALARM") respal = JSON.parse(respal).data; dlog("--------------------- " + JSON.stringify(respal)); let alarmHelfer=""; let alarmLength = Object.keys(respal).length; setState(dpPrefix + "WLANUnifi.Alarm.Alarm_Anzahl", alarmLength); mylog(Object.keys(respal).length.toString()) mylog(alarmLength.toString()) if (alarmLength >0) { for (var j=0; j < alarmLength; j++) { let datum = new Date (respal[j].time).toString(); mylog(datum.slice(0,datum.indexOf("GMT"))+"---"+respal[j].msg); alarmHelfer=alarmHelfer +""+ datum.slice(0,datum.indexOf("GMT"))+"  "+respal[j].msg.slice(0, 50) + ""; } alarmHelfer= alarmHelfer + ""; setState(dpPrefix + "WLANUnifi.Alarm.Alarm", ""+alarmHelfer); if (iqontrol) fs.writeFileSync(datei4, apHead + "

Geamtanzahl nicht archivierter Alarme:"+alarmLength+"

" +apTable +alarmHelfer) ; } else {setState(dpPrefix + "WLANUnifi.Alarm.Alarm", "keine neuen Alarme"); if (iqontrol) fs.writeFileSync(datei4, apHead + "

Geamtanzahl nicht archivierter Alarme:"+alarmLength+"

") } mylog("bin raus a work alarm"); } //-----------------------------------------schalter LED-SITE-WIDE-APs--------------------------------------------------------------- async function allLed(toggleLED) { //mylog(JSON.stringify( mybody )); return new Promise(async (resolve, reject) => { var mybody = { led_enabled : toggleLED } ; mylog("createVoucher in aktion"); if (!loggedIn) { mylog("need to login"); await login().catch((e) => reject(e)); } mylog("do it 2!"); let respled = request.post({ url: unifi_controller + "/api/s/"+siteName+"/set/setting/mgmt", // 5d46feed97578425c40cefe4" , 18:e8:29:56:40:e2 body: JSON.stringify(mybody) , headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") } }).catch((e) => { log("LED: rejected: " + e); /*reject(e)*/ return testerrcv=true; }); dlog("ALL LED: got response") dlog("------------: "+respled); dlog("resp: " + JSON.stringify(respled)); }); } //-----------------------------------------------------SCHALTER LED------------------------------------------------ on({id: dpPrefix + "WLANUnifi.SiteLED", ack: false, change: "any"}, function (obj) { if(loggedIn) { var toggle; if(getState(dpPrefix + "WLANUnifi.SiteLED").val) { toggle=true;} else { toggle=false;} allLed(toggle);} }); //-----------------------------------------------------SCHALTER WIFI------------------------------------------------ on({id: wifiDPs, ack: false, change: "ne"}, function (obj) { var value = obj.state.val; var dp2 = obj.name setWifi(value, wifis[dp2]); dlog(wifis[dp2]) if (firstTime { if (firstTime<3){ //für clientPAuse for (let suche in wifis) { if ( getState(dpPrefix + "WLANUnifi."+suche).val !== null ) {firstTime=15;mylog("datanpunkt vorhanden") } else {mylog("datanpunkt inicht geschrieben");}}} scriptCounter++ mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter ); mylog(loggedIn.toString()) await login().catch(alarm1) if (loggedIn) { if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");} if (alarmCounter > 0) {alarmCounter=0; } await getClients().catch(alarm3) ; if (vouchers) await getVouchers().catch(alarm4); if (health) await getHealth().catch(alarm7); mylog("----------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs + " - "+testerrh); if ( !testerrl && !testerrc && !testerrv && !testerrs && !testerrh ) { workVouchers(); if (!clientPause) workClients(); if ( scriptCounter==3) { scriptCounter=0 await getAlarm().catch(alarm9); workAlarm(); mylog("health und APs") if (health) {workHealth();} if (apInfo) { mylog(" APs"); apListe = ""; apListeTable=""; for(let ap_name in apName) { await getAp(ap_name).catch(alarm8); apListeTable=apListeTable+""; workAP(apName[ap_name].aname); } fs.writeFileSync(datei3,healthListe + apListe + tableAus+""); //schreibe Health mitAPs setState(dpPrefix + "WLANUnifi.Wifi_Info", "
AP-Daten:"+apName[ap_name].aname+"
"+healthListeTable +apListeTable + tableAus); } else { fs.writeFileSync(datei3,apHead+healthListe+tableAus+""); //Schreibe Health ohne APs setState(dpPrefix + "WLANUnifi.Wifi_Info", "
"+ healthListeTable + tableAus); } } } for(let wifi_name in wifis) { if ( firstTime == 3 && getState(dpPrefix + "WLANUnifi."+wifi_name).val !== null ) firstTime = 3; await getStatus(wifis[wifi_name]).catch(alarm6)} } else { alarmCounter++; if (alarmCounter > 5) {log("Unifi Sript hat 'Problem mit Einloggen - Prüfe Unifi Controller, Port, Einlog-Daten","error"); if (!testerrv) log("evtl. Vouchers deaktivieren","warn");}} if (clientPause) { var interim=parseInt(new Date().getTime()); log("Unifi Script ist in Pause wegen WLAN Umschalteung- bis: " + formatDate(clientPauseVal + clientPauseConst, "SS:mm:ss"),"warn"); if (interim - clientPauseVal > clientPauseConst) {clientPause=false;setState(dpPrefix + "WLANUnifi.Wifi_Client_Pause",false); log("Unifi Script hat Pause beendet" );} } testerrc=false; testerrv=false; testerrs=false; testerrl=false; testerrc=false; testerrh=false; testerrap=false; testerral=false; /*writeFile('iqontrol.meta', '/htmltest1.html', "dataHelp", function (error) { console.log('file written'); }); readFile('iqontrol.meta', '/htmltest1.html', function (error, data) { console.log("mein text: ----:"+data.substring(0, 50)); });*/ }, abfragezyklus); // wird oben definiert function alarm12() {log("Im Unifi Script stimmte etwas nicht - Alarm13 - Delete Voucher","warn"); loggedIn=false; testerrdv=false;cookies=[];} function alarm12() {log("Im Unifi Script stimmte etwas nicht - Alarm12 - Create Voucher","warn"); loggedIn=false; testerrcv=false;cookies=[];} function alarm11() {log("Im Unifi Script stimmte etwas nicht - Alarm11 - WLAN schalten","warn"); loggedIn=false; testerrws=false;cookies=[];} function alarm9() {log("Im Unifi Script stimmte etwas nicht - Alarm9 - Alarms","warn"); loggedIn=false; testerral=false;cookies=[];} function alarm8() {log("Im Unifi Script stimmte etwas nicht - Alarm8 - APs","warn"); loggedIn=false; testerrap=false;cookies=[];} function alarm7() {log("Im Unifi Script stimmte etwas nicht - Alarm7 - Health","warn"); loggedIn=false; testerrh=false;cookies=[];} function alarm6() {log("Im Unifi Script stimmte etwas nicht - Alarm6 - Statusabfrage","warn"); loggedIn=false; testerrs=false;cookies=[];} function alarm5() {log("Im Unifi Script stimmte etwas nicht - Alarm5 - logout","warn"); loggedIn=false; testerrl=false;cookies=[];} function alarm4() {log("Im Unifi Script stimmte etwas nicht - Alarm4 - getVouchers-Login","warn"); loggedIn=false; testerrv=false;cookies=[];} function alarm3() {log("Im Unifi Script stimmte etwas nicht - Alarm3 - getClient-Login","warn"); loggedIn=false; testerrc=false;cookies=[];} function alarm1() {log("Im Unifi Script stimmte etwas nicht - Alarm1 - Login fehlgeschlagen","warn"); loggedIn=false; ;alarmSwitch=true } // Beispiel für //setWifi(true, wifis.WLAN_DragonGuest); const testemal = {"meta":{"rc":"ok"},"data":[{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112298,"latest_assoc_time":1570123577,"oui":"PhilipsL","user_id":"5d9282200f0da90010c1ad80","_id":"5d9282200f0da90010c1ad80","mac":"00:17:88:70:da:ce","is_guest":false,"first_seen":1569882656,"last_seen":1570123578,"is_wired":true,"usergroup_id":"","name":"Hue Bridge","noted":true,"fingerprint_override":true,"dev_id_override":2014,"_uptime_by_ugw":1,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.27","uptime":11280,"tx_bytes":26139,"rx_bytes":483739,"tx_packets":390,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":2193,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112126,"latest_assoc_time":1570113097,"oui":"Espressi","user_id":"5ced3e64885a32000f68d73a","_id":"5ced3e64885a32000f68d73a","mac":"80:7d:3a:73:fb:ab","is_guest":false,"first_seen":1559051876,"last_seen":1570123571,"is_wired":false,"hostname":"shellyswitch25-73FBAB","usergroup_id":"","name":"Shelly Wohnzimmer","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.74","_uptime_by_ugw":10500,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.74","uptime":11445,"tx_bytes":1715789,"rx_bytes":9948362,"tx_packets":27997,"tx_retries":0,"wifi_tx_attempts":27997,"rx_packets":20842,"bytes-r":1101,"tx_bytes-r":162,"rx_bytes-r":939,"qos_policy_applied":true,"_uptime_by_uap":10895,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":48,"noise":-96,"signal":-48,"tx_rate":52000,"rx_rate":54000,"tx_power":0,"idletime":3,"dhcpend_time":0,"satisfaction":81,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112168,"latest_assoc_time":1570123026,"oui":"SlimDevi","user_id":"5d6645cf78b7820010a9ecab","_id":"5d6645cf78b7820010a9ecab","mac":"00:04:20:f6:28:40","is_guest":false,"first_seen":1566983631,"last_seen":1570123563,"is_wired":false,"hostname":"HarmonyHub","fingerprint_override":true,"dev_id_override":2360,"usergroup_id":"","name":"Harmony Hub","noted":true,"_uptime_by_ugw":571,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.41","uptime":11395,"tx_bytes":5428657,"rx_bytes":13993792,"tx_packets":42994,"tx_retries":0,"wifi_tx_attempts":42994,"rx_packets":65384,"bytes-r":1901,"tx_bytes-r":542,"rx_bytes-r":1359,"qos_policy_applied":true,"_uptime_by_uap":10874,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":61,"noise":-96,"signal":-35,"tx_rate":72000,"rx_rate":72000,"tx_power":0,"idletime":0,"dhcpend_time":1360,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112470,"latest_assoc_time":1570113130,"oui":"Raspberr","user_id":"5d9282c20f0da90010c1ad97","_id":"5d9282c20f0da90010c1ad97","mac":"b8:27:eb:2d:66:6b","is_guest":false,"first_seen":1569882818,"last_seen":1570123478,"is_wired":true,"usergroup_id":"","name":"Raspi OSC","noted":true,"fingerprint_override":true,"dev_id_override":2813,"_uptime_by_ugw":10348,"_last_seen_by_ugw":1570123478,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.43","uptime":11008,"tx_bytes":6318,"rx_bytes":14302,"tx_packets":115,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":223,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112123,"latest_assoc_time":1570122178,"oui":"Espressi","user_id":"5cf313901b4b5e0012d54966","_id":"5cf313901b4b5e0012d54966","mac":"84:f3:eb:e5:63:e8","is_guest":false,"first_seen":1559434128,"last_seen":1570123571,"is_wired":false,"usergroup_id":"","name":"Shelly Badezimmer","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.64","_uptime_by_ugw":1419,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.64","uptime":11448,"tx_bytes":1801884,"rx_bytes":9970628,"tx_packets":28549,"tx_retries":0,"wifi_tx_attempts":28549,"rx_packets":21327,"bytes-r":1112,"tx_bytes-r":168,"rx_bytes-r":943,"qos_policy_applied":true,"_uptime_by_uap":10892,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":40,"noise":-96,"signal":-56,"tx_rate":58000,"rx_rate":36000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":80,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112147,"latest_assoc_time":1570113096,"oui":"Espressi","user_id":"5ced3cb6885a32000f68d726","_id":"5ced3cb6885a32000f68d726","mac":"3c:71:bf:2c:7a:2e","is_guest":false,"first_seen":1559051446,"last_seen":1570123563,"is_wired":false,"hostname":"shelly1-2C7A2E","usergroup_id":"","name":"Shelly Sideboard","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.200","_uptime_by_ugw":10502,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.200","uptime":11416,"tx_bytes":1663891,"rx_bytes":6409660,"tx_packets":28054,"tx_retries":0,"wifi_tx_attempts":28054,"rx_packets":20772,"bytes-r":631,"tx_bytes-r":128,"rx_bytes-r":503,"qos_policy_applied":true,"_uptime_by_uap":10887,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":39,"noise":-96,"signal":-57,"tx_rate":39000,"rx_rate":18000,"tx_power":0,"idletime":3,"dhcpend_time":0,"satisfaction":99,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570115575,"latest_assoc_time":1570123576,"oui":"SamsungE","user_id":"5ceec68d885a32000f160af5","_id":"5ceec68d885a32000f160af5","mac":"50:85:69:fb:fd:b6","is_guest":false,"first_seen":1559152269,"last_seen":1570123563,"is_wired":false,"usergroup_id":"","name":"Samsung TV Wohnzimmer","noted":true,"fingerprint_override":true,"dev_id_override":17,"_uptime_by_uap":7987,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":44,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"1a:e8:29:90:d2:2a","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":56,"noise":-96,"signal":-40,"tx_rate":300000,"rx_rate":300000,"tx_power":0,"idletime":0,"ip":"192.168.10.201","dhcpend_time":290,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"na","uptime":7988,"tx_bytes":12290737,"rx_bytes":1963114,"tx_packets":32949,"tx_retries":110,"wifi_tx_attempts":33059,"rx_packets":13478,"bytes-r":1425,"tx_bytes-r":1362,"rx_bytes-r":63,"qos_policy_applied":true,"_uptime_by_ugw":2,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","dev_cat":1,"dev_family":4,"dev_id":239,"os_class":15,"os_name":19,"dev_vendor":47},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112223,"latest_assoc_time":1570123294,"oui":"SamsungE","user_id":"5ced3f40885a32000f68d744","_id":"5ced3f40885a32000f68d744","mac":"d0:7f:a0:69:e9:97","is_guest":false,"first_seen":1559052096,"last_seen":1570123563,"is_wired":false,"hostname":"Galaxy-A8-2018","usergroup_id":"5ced354c885a32000f68d6fe","noted":true,"name":"Blackberry","_uptime_by_ugw":265,"_last_seen_by_ugw":1570123558,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.47","uptime":11340,"tx_bytes":663931,"rx_bytes":373568,"tx_packets":2112,"tx_retries":6,"wifi_tx_attempts":2119,"rx_packets":1940,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"_uptime_by_uap":10799,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":44,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"1a:e8:29:90:d2:2a","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":44,"noise":-96,"signal":-52,"tx_rate":135000,"rx_rate":12000,"tx_power":0,"idletime":87,"dhcpend_time":1670,"satisfaction":92,"anomalies":0,"vlan":0,"radio_proto":"na","dev_cat":32,"dev_family":3,"dev_id":2755,"os_class":5,"os_name":57,"dev_vendor":105},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570116902,"latest_assoc_time":1570123521,"oui":"Apple","user_id":"5ced37f2885a32000f68d711","_id":"5ced37f2885a32000f68d711","mac":"14:10:9f:d8:83:d5","is_guest":false,"first_seen":1559050226,"last_seen":1570123571,"is_wired":false,"hostname":"Darijos-MBP","usergroup_id":"5ced354c885a32000f68d6fe","name":"Macbook Darijo","noted":true,"fingerprint_override":true,"dev_id_override":2137,"_uptime_by_uap":3763,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":36,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"b6:fb:e4:1e:5b:8c","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":22,"noise":-96,"signal":-74,"tx_rate":216000,"rx_rate":150000,"tx_power":0,"idletime":0,"ip":"192.168.10.203","dhcpend_time":480,"satisfaction":92,"anomalies":0,"vlan":0,"radio_proto":"na","uptime":6669,"tx_bytes":220974017,"rx_bytes":197109395,"tx_packets":522814,"tx_retries":194098,"wifi_tx_attempts":716912,"rx_packets":666770,"bytes-r":110592,"tx_bytes-r":42834,"rx_bytes-r":67758,"qos_policy_applied":true,"_uptime_by_ugw":75,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","dev_cat":1,"dev_family":4,"dev_id":279,"os_class":7,"os_name":12,"dev_vendor":11,"roam_count":1},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570115937,"latest_assoc_time":1570123446,"oui":"Apple","user_id":"5ced3ef0885a32000f68d73e","_id":"5ced3ef0885a32000f68d73e","mac":"08:e6:89:e6:e2:43","is_guest":false,"first_seen":1559052016,"last_seen":1570123563,"is_wired":false,"hostname":"iPad-4","blocked":false,"usergroup_id":"5ced354c885a32000f68d6fe","noted":true,"name":"Ipad Pro Darijo","fingerprint_override":true,"dev_id_override":15,"_uptime_by_uap":7625,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":44,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"1a:e8:29:90:d2:2a","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":44,"noise":-96,"signal":-52,"tx_rate":866000,"rx_rate":780000,"tx_power":0,"idletime":6,"ip":"192.168.10.198","dhcpend_time":450,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":7626,"tx_bytes":242297782,"rx_bytes":17204040,"tx_packets":205117,"tx_retries":30381,"wifi_tx_attempts":235498,"rx_packets":124170,"bytes-r":5,"tx_bytes-r":3,"rx_bytes-r":2,"qos_policy_applied":true,"_uptime_by_ugw":151,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","dev_cat":30,"dev_family":3,"dev_id":609,"os_class":16,"os_name":25,"dev_vendor":11},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570113267,"latest_assoc_time":1570113289,"oui":"","user_id":"5d9282570f0da90010c1ad8d","_id":"5d9282570f0da90010c1ad8d","mac":"3a:21:c0:66:73:27","is_guest":false,"first_seen":1569882711,"last_seen":1570123400,"is_wired":true,"usergroup_id":"","name":"Homematic CCU","noted":true,"fingerprint_override":true,"dev_id_override":2813,"_uptime_by_ugw":10121,"_last_seen_by_ugw":1570123400,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.68","uptime":10133,"tx_bytes":174,"rx_bytes":258,"tx_packets":3,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":4,"bytes-r":9,"tx_bytes-r":4,"rx_bytes-r":4,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112195,"latest_assoc_time":1570122802,"oui":"Apple","user_id":"5cf3a5f01b4b5e0012d551b7","_id":"5cf3a5f01b4b5e0012d551b7","mac":"70:14:a6:95:f6:37","is_guest":false,"first_seen":1559471600,"last_seen":1570123563,"is_wired":false,"hostname":"Bilja-iphone","usergroup_id":"","name":"Biljana iphone","noted":true,"_uptime_by_uap":3711,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":44,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"1a:e8:29:90:d2:2a","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":27,"noise":-96,"signal":-69,"tx_rate":292000,"rx_rate":433000,"tx_power":0,"idletime":20,"ip":"192.168.10.204","dhcpend_time":0,"satisfaction":99,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":11368,"tx_bytes":4366549,"rx_bytes":592211,"tx_packets":4853,"tx_retries":493,"wifi_tx_attempts":5347,"rx_packets":4520,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"_uptime_by_ugw":795,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","roam_count":2,"dev_cat":6,"dev_family":3,"dev_id":309,"os_class":16,"os_name":25,"dev_vendor":11},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112123,"latest_assoc_time":1570122622,"oui":"Espressi","user_id":"5ced3e08885a32000f68d736","_id":"5ced3e08885a32000f68d736","mac":"80:7d:3a:73:7a:b7","is_guest":false,"first_seen":1559051784,"last_seen":1570123571,"is_wired":false,"hostname":"shellyswitch25-737AB7","usergroup_id":"","name":"Shelly Dusche","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.116","_uptime_by_ugw":976,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.116","uptime":11448,"tx_bytes":1628354,"rx_bytes":9933168,"tx_packets":27439,"tx_retries":0,"wifi_tx_attempts":27439,"rx_packets":20289,"bytes-r":1094,"tx_bytes-r":148,"rx_bytes-r":946,"qos_policy_applied":true,"_uptime_by_uap":10892,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":31,"noise":-96,"signal":-65,"tx_rate":58000,"rx_rate":54000,"tx_power":0,"idletime":3,"dhcpend_time":0,"satisfaction":86,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112388,"latest_assoc_time":1570123019,"oui":"HuaweiTe","user_id":"5ced3f1b885a32000f68d740","_id":"5ced3f1b885a32000f68d740","mac":"30:45:96:8c:66:13","is_guest":false,"first_seen":1559052059,"last_seen":1570123571,"is_wired":false,"hostname":"HUAWEI_MediaPad_M5-50846e","usergroup_id":"","name":"Huaweii-Tablet","noted":true,"_uptime_by_ugw":578,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.42","dev_cat":1,"dev_family":4,"dev_id":283,"os_class":3,"os_name":3,"dev_vendor":1,"uptime":11183,"tx_bytes":3529011,"rx_bytes":3167899,"tx_packets":20624,"tx_retries":18875,"wifi_tx_attempts":39499,"rx_packets":20108,"bytes-r":630,"tx_bytes-r":325,"rx_bytes-r":304,"qos_policy_applied":true,"_uptime_by_uap":10884,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":36,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"b6:fb:e4:1e:5b:8c","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":23,"noise":-96,"signal":-73,"tx_rate":292000,"rx_rate":390000,"tx_power":0,"idletime":0,"dhcpend_time":420,"satisfaction":69,"anomalies":0,"vlan":0,"radio_proto":"ac"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112149,"latest_assoc_time":1570123036,"oui":"","user_id":"5d012bbe1b4b5e0012d5e417","_id":"5d012bbe1b4b5e0012d5e417","mac":"24:62:ab:00:b0:0d","is_guest":false,"first_seen":1560357822,"last_seen":1570123563,"is_wired":false,"hostname":"shellyswitch25-00B00D","network_id":"5ced354c885a32000f68d6fd","note":"","usergroup_id":"","fixed_ip":"192.168.10.44","name":"WZ-Rollo rechts","use_fixedip":true,"noted":true,"_uptime_by_ugw":561,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.44","uptime":11414,"tx_bytes":1638500,"rx_bytes":9820389,"tx_packets":27446,"tx_retries":0,"wifi_tx_attempts":27446,"rx_packets":20133,"bytes-r":1259,"tx_bytes-r":180,"rx_bytes-r":1078,"qos_policy_applied":true,"_uptime_by_uap":10886,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":54,"noise":-96,"signal":-42,"tx_rate":26000,"rx_rate":18000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":85,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112151,"latest_assoc_time":1570123573,"oui":"Microchi","user_id":"5ced9f77885a32000f68d886","_id":"5ced9f77885a32000f68d886","mac":"00:1e:c0:35:9c:4a","is_guest":false,"first_seen":1559076727,"last_seen":1570123563,"is_wired":false,"hostname":"LMAIR","usergroup_id":"","name":"Lightmanager","noted":true,"_uptime_by_ugw":5,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.71","uptime":11412,"tx_bytes":2151318,"rx_bytes":4273782,"tx_packets":29651,"tx_retries":0,"wifi_tx_attempts":29651,"rx_packets":35996,"bytes-r":778,"tx_bytes-r":248,"rx_bytes-r":529,"qos_policy_applied":true,"_uptime_by_uap":6692,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":60,"noise":-96,"signal":-36,"tx_rate":54000,"rx_rate":54000,"tx_power":0,"idletime":0,"dhcpend_time":1430,"satisfaction":98,"anomalies":0,"vlan":0,"radio_proto":"g"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112148,"latest_assoc_time":1570122627,"oui":"Espressi","user_id":"5ced3d8d885a32000f68d72e","_id":"5ced3d8d885a32000f68d72e","mac":"dc:4f:22:60:8d:93","is_guest":false,"first_seen":1559051661,"last_seen":1570123563,"is_wired":false,"hostname":"shelly1pm-608D93","usergroup_id":"","name":"Shelly Küche","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.164","_uptime_by_ugw":971,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.164","uptime":11415,"tx_bytes":1675386,"rx_bytes":7275282,"tx_packets":28278,"tx_retries":0,"wifi_tx_attempts":28278,"rx_packets":20928,"bytes-r":932,"tx_bytes-r":171,"rx_bytes-r":761,"qos_policy_applied":true,"_uptime_by_uap":10887,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":38,"noise":-96,"signal":-58,"tx_rate":65000,"rx_rate":54000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570120047,"latest_assoc_time":1570120080,"oui":"BrotherI","user_id":"5d9282310f0da90010c1ad8a","_id":"5d9282310f0da90010c1ad8a","mac":"30:05:5c:7b:0c:ce","is_guest":false,"first_seen":1569882673,"last_seen":1570123436,"is_wired":true,"usergroup_id":"","name":"Brother Laserdrucker","noted":true,"fingerprint_override":true,"dev_id_override":1607,"_uptime_by_ugw":3358,"_last_seen_by_ugw":1570123436,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.250","uptime":3389,"tx_bytes":0,"rx_bytes":3913,"tx_packets":0,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":5,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112125,"latest_assoc_time":1570113086,"oui":"Espressi","user_id":"5ced3db7885a32000f68d732","_id":"5ced3db7885a32000f68d732","mac":"dc:4f:22:60:8b:76","is_guest":false,"first_seen":1559051703,"last_seen":1570123571,"is_wired":false,"hostname":"shelly1pm-608B76","usergroup_id":"","name":"Shelly Schlafen","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.190","_uptime_by_ugw":10511,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.190","uptime":11446,"tx_bytes":1675778,"rx_bytes":7263278,"tx_packets":28285,"tx_retries":0,"wifi_tx_attempts":28285,"rx_packets":20902,"bytes-r":823,"tx_bytes-r":146,"rx_bytes-r":677,"qos_policy_applied":true,"_uptime_by_uap":10894,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":46,"noise":-96,"signal":-50,"tx_rate":65000,"rx_rate":48000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112295,"latest_assoc_time":1570113046,"oui":"Raspberr","user_id":"5d9282200f0da90010c1ad86","_id":"5d9282200f0da90010c1ad86","mac":"b8:27:eb:60:9c:a7","is_guest":false,"first_seen":1569882656,"last_seen":1570123578,"is_wired":true,"usergroup_id":"","name":"Raspi WebServer","noted":true,"fingerprint_override":true,"dev_id_override":2813,"_uptime_by_ugw":10552,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.67","uptime":11283,"tx_bytes":8191077,"rx_bytes":5180204,"tx_packets":30871,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":73002,"bytes-r":2511,"tx_bytes-r":1534,"rx_bytes-r":976,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570122896,"latest_assoc_time":1570123014,"oui":"Apple","user_id":"5cf30ea91b4b5e0012d548e0","_id":"5cf30ea91b4b5e0012d548e0","mac":"c8:85:50:0e:ee:6e","is_guest":false,"first_seen":1559432873,"last_seen":1570123571,"is_wired":false,"hostname":"iPad-von-Darijo","usergroup_id":"","name":"ipad2","noted":true,"fingerprint_override":true,"dev_id_override":53,"blocked":false,"_uptime_by_uap":675,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":36,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"b6:fb:e4:1e:5b:8c","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":28,"noise":-96,"signal":-68,"tx_rate":216000,"rx_rate":300000,"tx_power":0,"idletime":80,"ip":"192.168.10.59","dhcpend_time":44910,"satisfaction":97,"anomalies":0,"vlan":0,"radio_proto":"na","uptime":675,"tx_bytes":8548979,"rx_bytes":1346802,"tx_packets":7867,"tx_retries":2605,"wifi_tx_attempts":10472,"rx_packets":6600,"bytes-r":79,"tx_bytes-r":79,"rx_bytes-r":0,"qos_policy_applied":true,"_uptime_by_ugw":583,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","dev_cat":30,"dev_family":3,"dev_id":313,"os_class":16,"os_name":25,"dev_vendor":11},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112149,"latest_assoc_time":1570113045,"oui":"Espressi","user_id":"5d0139d51b4b5e0012d5e4b7","_id":"5d0139d51b4b5e0012d5e4b7","mac":"84:f3:eb:e4:ea:99","is_guest":false,"first_seen":1560361429,"last_seen":1570123563,"is_wired":false,"hostname":"shellyswitch25-E4EA99","note":"","fixed_ip":"192.168.10.77","network_id":"5ced354c885a32000f68d6fd","name":"WZ-Rollo links","usergroup_id":"","use_fixedip":true,"noted":true,"_uptime_by_ugw":10552,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.77","uptime":11414,"tx_bytes":1676252,"rx_bytes":9726695,"tx_packets":27673,"tx_retries":0,"wifi_tx_attempts":27673,"rx_packets":20211,"bytes-r":1260,"tx_bytes-r":183,"rx_bytes-r":1077,"qos_policy_applied":true,"_uptime_by_uap":10887,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":61,"noise":-96,"signal":-35,"tx_rate":26000,"rx_rate":6000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":85,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112293,"latest_assoc_time":1570123557,"oui":"Synology","user_id":"5d9282200f0da90010c1ad7e","_id":"5d9282200f0da90010c1ad7e","mac":"00:11:32:95:db:4f","is_guest":false,"first_seen":1569882656,"last_seen":1570123578,"is_wired":true,"usergroup_id":"","name":"Synology DS218+","noted":true,"fingerprint_override":true,"dev_id_override":2295,"_uptime_by_ugw":28,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.10","dev_cat":1,"dev_family":4,"dev_id":279,"os_class":7,"os_name":12,"dev_vendor":11,"uptime":11285,"tx_bytes":5676122704,"rx_bytes":459908884,"tx_packets":3934202,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":904269,"bytes-r":6854,"tx_bytes-r":5784,"rx_bytes-r":1070,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112992,"latest_assoc_time":1570113022,"oui":"Marusys","user_id":"5d9282200f0da90010c1ad82","_id":"5d9282200f0da90010c1ad82","mac":"00:1d:ec:10:7b:87","is_guest":false,"first_seen":1569882656,"last_seen":1570123292,"is_wired":true,"usergroup_id":"","name":"Vu+","noted":true,"fingerprint_override":true,"dev_id_override":2716,"_uptime_by_ugw":10276,"_last_seen_by_ugw":1570123292,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.216","uptime":10300,"tx_bytes":329,"rx_bytes":1182,"tx_packets":3,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":7,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112294,"latest_assoc_time":1570123411,"oui":"AmazonTe","user_id":"5d9282200f0da90010c1ad84","_id":"5d9282200f0da90010c1ad84","mac":"a0:02:dc:4b:47:69","is_guest":false,"first_seen":1569882656,"last_seen":1570123578,"is_wired":true,"usergroup_id":"","name":"FireTV","noted":true,"fingerprint_override":true,"dev_id_override":31,"_uptime_by_ugw":186,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.55","uptime":11284,"tx_bytes":5653191,"rx_bytes":1945289,"tx_packets":5635,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":6388,"bytes-r":708,"tx_bytes-r":318,"rx_bytes-r":389,"qos_policy_applied":true,"dev_cat":20,"dev_family":3,"dev_id":373,"os_class":5,"os_name":57,"dev_vendor":97},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570123139,"latest_assoc_time":1570123564,"oui":"Apple","user_id":"5ced4c26885a32000f68d770","_id":"5ced4c26885a32000f68d770","mac":"f0:98:9d:f1:fa:2a","is_guest":false,"first_seen":1559055398,"last_seen":1570123571,"is_wired":false,"hostname":"Jessica","note":"","fixed_ip":"192.168.10.73","use_fixedip":false,"usergroup_id":"","name":"Jessica_iphone_X","network_id":"5ced354c885a32000f68d6fd","noted":true,"_uptime_by_uap":432,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":36,"radio":"na","radio_name":"rai0","essid":"Dos5","bssid":"b6:fb:e4:1e:5b:8c","powersave_enabled":true,"is_11r":false,"ccq":0,"rssi":33,"noise":-96,"signal":-63,"tx_rate":292000,"rx_rate":433000,"tx_power":0,"idletime":18,"ip":"192.168.10.210","dhcpend_time":480,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":432,"tx_bytes":101817,"rx_bytes":41149,"tx_packets":245,"tx_retries":29,"wifi_tx_attempts":232,"rx_packets":252,"bytes-r":9,"tx_bytes-r":5,"rx_bytes-r":4,"qos_policy_applied":true,"_uptime_by_ugw":14,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112149,"latest_assoc_time":1570113048,"oui":"Espressi","user_id":"5ced3e33885a32000f68d738","_id":"5ced3e33885a32000f68d738","mac":"80:7d:3a:72:eb:49","is_guest":false,"first_seen":1559051827,"last_seen":1570123563,"is_wired":false,"hostname":"shellyswitch25-72EB49","usergroup_id":"","name":"Shelly LW Maskierung","noted":true,"_uptime_by_ugw":10549,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.212","uptime":11414,"tx_bytes":1618186,"rx_bytes":9845356,"tx_packets":27249,"tx_retries":0,"wifi_tx_attempts":27249,"rx_packets":20129,"bytes-r":1212,"tx_bytes-r":171,"rx_bytes-r":1041,"qos_policy_applied":true,"_uptime_by_uap":10886,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":53,"noise":-96,"signal":-43,"tx_rate":72000,"rx_rate":48000,"tx_power":0,"idletime":0,"dhcpend_time":0,"satisfaction":86,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112366,"latest_assoc_time":1570123314,"oui":"Raspberr","user_id":"5d9282200f0da90010c1ad88","_id":"5d9282200f0da90010c1ad88","mac":"b8:27:eb:b4:f5:78","is_guest":false,"first_seen":1569882656,"last_seen":1570123381,"is_wired":true,"usergroup_id":"","name":"RasberrMatic","noted":true,"fingerprint_override":true,"dev_id_override":2813,"_uptime_by_ugw":67,"_last_seen_by_ugw":1570123381,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","network_id":"5ced354c885a32000f68d6fd","ip":"192.168.10.62","uptime":11015,"tx_bytes":666393,"rx_bytes":49726,"tx_packets":669,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":769,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112125,"latest_assoc_time":1570113058,"oui":"Espressi","user_id":"5ced3d6a885a32000f68d72c","_id":"5ced3d6a885a32000f68d72c","mac":"dc:4f:22:60:8d:71","is_guest":false,"first_seen":1559051626,"last_seen":1570123571,"is_wired":false,"hostname":"shelly1pm-608D71","usergroup_id":"","name":"Shelly Jessica","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.130","_uptime_by_ugw":10539,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.130","uptime":11446,"tx_bytes":1666630,"rx_bytes":7231399,"tx_packets":28126,"tx_retries":0,"wifi_tx_attempts":28126,"rx_packets":20793,"bytes-r":776,"tx_bytes-r":146,"rx_bytes-r":629,"qos_policy_applied":true,"_uptime_by_uap":10893,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":51,"noise":-96,"signal":-45,"tx_rate":52000,"rx_rate":48000,"tx_power":0,"idletime":2,"dhcpend_time":0,"satisfaction":98,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112125,"latest_assoc_time":1570113061,"oui":"Espressi","user_id":"5ced3d4a885a32000f68d72a","_id":"5ced3d4a885a32000f68d72a","mac":"dc:4f:22:60:8d:25","is_guest":false,"first_seen":1559051594,"last_seen":1570123571,"is_wired":false,"hostname":"shelly1pm-608D25","usergroup_id":"","name":"Shelly Daniel","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.54","fingerprint_override":true,"dev_id_override":null,"_uptime_by_ugw":10537,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.54","uptime":11446,"tx_bytes":1670913,"rx_bytes":7276039,"tx_packets":28272,"tx_retries":0,"wifi_tx_attempts":28272,"rx_packets":20880,"bytes-r":796,"tx_bytes-r":146,"rx_bytes-r":650,"qos_policy_applied":true,"_uptime_by_uap":10893,"_last_seen_by_uap":1570123571,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:2e:5b:8a","channel":11,"radio":"ng","radio_name":"ra0","essid":"flur_24","bssid":"b4:fb:e4:2e:5b:8b","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":46,"noise":-96,"signal":-50,"tx_rate":58000,"rx_rate":48000,"tx_power":0,"idletime":3,"dhcpend_time":0,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5ced3544885a32000f68d6f1","assoc_time":1570112148,"latest_assoc_time":1570113071,"oui":"","user_id":"5cf1118ffc1ac800110f80c7","_id":"5cf1118ffc1ac800110f80c7","mac":"24:62:ab:00:5f:78","is_guest":false,"first_seen":1559302543,"last_seen":1570123563,"is_wired":false,"hostname":"shelly1pm-005F78","usergroup_id":"","name":"Shelly Tablet laden","noted":true,"use_fixedip":true,"network_id":"5ced354c885a32000f68d6fd","fixed_ip":"192.168.10.45","_uptime_by_ugw":10526,"_last_seen_by_ugw":1570123578,"_is_guest_by_ugw":false,"gw_mac":"b4:fb:e4:e0:24:b9","network":"LAN","ip":"192.168.10.45","uptime":11415,"tx_bytes":1670406,"rx_bytes":7276513,"tx_packets":28255,"tx_retries":0,"wifi_tx_attempts":28255,"rx_packets":20887,"bytes-r":741,"tx_bytes-r":130,"rx_bytes-r":611,"qos_policy_applied":true,"_uptime_by_uap":10885,"_last_seen_by_uap":1570123563,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:b0:d2:28","channel":6,"radio":"ng","radio_name":"ra0","essid":"wz_24","bssid":"18:e8:29:b0:d2:29","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":54,"noise":-96,"signal":-42,"tx_rate":72000,"rx_rate":54000,"tx_power":0,"idletime":1,"dhcpend_time":0,"satisfaction":100,"anomalies":0,"vlan":0,"radio_proto":"ng"}]} const testemal2 = {"meta":{"rc":"ok"},"data":[{"site_id":"5c653f174af49704c832afc0","assoc_time":1569675838,"latest_assoc_time":1569767285,"oui":"PhilipsL","user_id":"5d8653174af49704c832b1c8","_id":"5d8653174af49704c832b1c8","mac":"00:17:88:7c:87:4e","is_guest":false,"first_seen":1569084183,"last_seen":1569767595,"is_wired":true,"usergroup_id":"","name":"HUE BRIDGE","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.15","hostname":"HueBridge","fingerprint_override":true,"dev_id_override":2014,"_uptime_by_usw":88618,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":12,"network":"LAN","satisfaction":100,"uptime":91757,"wired-tx_bytes":301707250,"wired-rx_bytes":2668077703,"wired-tx_packets":2775161,"wired-rx_packets":2386232,"wired-tx_bytes-r":3340,"wired-rx_bytes-r":28730,"ip":"192.168.1.15","_uptime_by_ugw":294,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":501519,"rx_bytes":1707073,"tx_packets":6310,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":10701,"bytes-r":401,"tx_bytes-r":36,"rx_bytes-r":364,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755109,"latest_assoc_time":1569767526,"oui":"","user_id":"5d8666c64af49704c832b307","_id":"5d8666c64af49704c832b307","mac":"74:d6:37:fd:fa:69","is_guest":false,"first_seen":1569089222,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-cf3821b38","usergroup_id":"","name":"ECHO Wohnzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.40","fingerprint_override":true,"dev_id_override":2750,"_uptime_by_uap":9719,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":56,"radio":"na","radio_name":"wifi0","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:60","powersave_enabled":false,"is_11r":false,"ccq":333,"rssi":47,"noise":-106,"signal":-49,"tx_rate":433000,"rx_rate":433000,"tx_power":31,"idletime":0,"ip":"192.168.1.40","dhcpend_time":1010,"satisfaction":97,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":12469,"tx_bytes":25457744,"rx_bytes":14989337,"tx_packets":127455,"tx_retries":1013,"wifi_tx_attempts":138121,"rx_packets":130296,"bytes-r":1586,"tx_bytes-r":652,"rx_bytes-r":934,"qos_policy_applied":true,"_uptime_by_ugw":28,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","dev_cat":32,"dev_family":3,"dev_id":276,"os_class":5,"os_name":57,"dev_vendor":8},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569675861,"latest_assoc_time":1569767352,"oui":"AvmAudio","user_id":"5d8714164af49704c8330cd9","_id":"5d8714164af49704c8330cd9","mac":"e0:28:6d:8a:6e:43","is_guest":false,"first_seen":1569133590,"last_seen":1569767595,"is_wired":true,"hostname":"fritz.box","usergroup_id":"","name":"Fritz Box","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.20","fingerprint_override":true,"dev_id_override":1105,"_uptime_by_usw":88616,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":14,"network":"LAN","satisfaction":100,"uptime":91734,"wired-tx_bytes":161177085,"wired-rx_bytes":148537397,"wired-tx_packets":600878,"wired-rx_packets":577427,"wired-tx_bytes-r":1723,"wired-rx_bytes-r":2912,"_uptime_by_ugw":227,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","ip":"192.168.1.20","tx_bytes":9773399,"rx_bytes":17718123,"tx_packets":43218,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":218348,"bytes-r":355,"tx_bytes-r":106,"rx_bytes-r":248,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758860,"latest_assoc_time":1569767555,"oui":"XiaomiEl","user_id":"5d8743b74af49704c8334174","_id":"5d8743b74af49704c8334174","mac":"78:11:dc:ea:78:7f","is_guest":false,"first_seen":1569145783,"last_seen":1569767566,"is_wired":false,"hostname":"rockrobo","usergroup_id":"","name":"Staubsauger","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.17","_uptime_by_ugw":3813,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.17","uptime":8706,"tx_bytes":732052,"rx_bytes":1681826,"tx_packets":7190,"tx_retries":2200,"wifi_tx_attempts":8645,"rx_packets":8070,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"_uptime_by_uap":11,"_last_seen_by_uap":1569767566,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:c6:08:e0","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"18:e8:29:c7:08:e0","powersave_enabled":false,"is_11r":false,"ccq":508,"rssi":23,"noise":-111,"signal":-73,"tx_rate":2000,"rx_rate":1000,"tx_power":40,"idletime":3,"dhcpend_time":0,"satisfaction":0,"anomalies":256,"vlan":0,"radio_proto":"ng","roam_count":5},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758916,"latest_assoc_time":1569767335,"oui":"AmazonTe","user_id":"5d8677184af49704c832b4b9","_id":"5d8677184af49704c832b4b9","mac":"fc:a1:83:36:ec:e5","is_guest":false,"first_seen":1569093400,"last_seen":1569767572,"is_wired":false,"hostname":"amazon-45b394e84","usergroup_id":"","name":"ECHO Keller Flur","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.47","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_ugw":168,"_last_seen_by_ugw":1569767503,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.47","dev_cat":38,"dev_family":5,"dev_id":2179,"os_class":5,"os_name":57,"dev_vendor":97,"uptime":8656,"tx_bytes":6309771,"rx_bytes":16502556,"tx_packets":61457,"tx_retries":6558,"wifi_tx_attempts":68012,"rx_packets":263116,"bytes-r":1626,"tx_bytes-r":381,"rx_bytes-r":1245,"qos_policy_applied":true,"_uptime_by_uap":7394,"_last_seen_by_uap":1569767572,"_is_guest_by_uap":false,"ap_mac":"fc:ec:da:fc:0e:71","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"fc:ec:da:fd:0e:71","powersave_enabled":false,"is_11r":false,"ccq":991,"rssi":56,"noise":-109,"signal":-40,"tx_rate":65000,"rx_rate":24000,"tx_power":44,"idletime":0,"dhcpend_time":810,"satisfaction":96,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569673595,"latest_assoc_time":1569767544,"oui":"Ubiquiti","user_id":"5c6540db4af49704c832afe9","_id":"5c6540db4af49704c832afe9","mac":"74:83:c2:1b:0c:67","is_guest":false,"first_seen":1550139610,"last_seen":1569767595,"is_wired":true,"usergroup_id":"5c653f1d4af49704c832afd0","name":"CloudKey Unifi Controller","noted":true,"fingerprint_override":true,"dev_id_override":2638,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.6","hostname":"HOME","_uptime_by_usw":88617,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":2,"network":"LAN","ip":"192.168.1.6","satisfaction":100,"uptime":94000,"wired-tx_bytes":341778157,"wired-rx_bytes":357940390,"wired-tx_packets":1269080,"wired-rx_packets":717694,"wired-tx_bytes-r":4176,"wired-rx_bytes-r":3030,"_uptime_by_ugw":10,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":30939947,"rx_bytes":8030278,"tx_packets":48727,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":74054,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758791,"latest_assoc_time":1569767546,"oui":"AmazonTe","user_id":"5d8636944af49704c832b015","_id":"5d8636944af49704c832b015","mac":"f0:81:73:23:54:97","is_guest":false,"first_seen":1569076884,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-678f26609","usergroup_id":"","name":"ECHO Küche","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.41","fingerprint_override":true,"dev_id_override":2034,"_uptime_by_ugw":8,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.41","dev_cat":32,"dev_family":3,"dev_id":276,"os_class":5,"os_name":57,"dev_vendor":8,"uptime":8787,"tx_bytes":10597463,"rx_bytes":13087365,"tx_packets":62708,"tx_retries":12659,"wifi_tx_attempts":85237,"rx_packets":81961,"bytes-r":1777,"tx_bytes-r":759,"rx_bytes-r":1017,"qos_policy_applied":true,"_uptime_by_uap":8146,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":18,"rssi":31,"noise":-92,"signal":-61,"tx_rate":144000,"rx_rate":144000,"tx_power":47,"idletime":6,"dhcpend_time":990,"satisfaction":92,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569676278,"latest_assoc_time":1569767502,"oui":"","user_id":"5d8bb7224af49709d76eb21e","_id":"5d8bb7224af49709d76eb21e","mac":"02:42:c0:a8:01:fa","is_guest":false,"first_seen":1569437473,"last_seen":1569767595,"is_wired":true,"fingerprint_override":true,"dev_id_override":2295,"usergroup_id":"","name":"DSHOME-macvlan","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.250","_uptime_by_usw":86628,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":4,"network":"LAN","satisfaction":100,"uptime":91317,"_uptime_by_ugw":77,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","ip":"192.168.1.250","tx_bytes":28820117,"rx_bytes":11017526,"tx_packets":48593,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":74734,"bytes-r":287,"tx_bytes-r":0,"rx_bytes-r":287,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569675835,"latest_assoc_time":1569767487,"oui":"AsustekC","user_id":"5d8646154af49704c832b12d","_id":"5d8646154af49704c832b12d","mac":"88:d7:f6:c2:e4:1c","is_guest":false,"first_seen":1569080853,"last_seen":1569767595,"is_wired":true,"hostname":"homematic-raspi","usergroup_id":"","name":"Raspberrymatic","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.9","fingerprint_override":true,"dev_id_override":2813,"_uptime_by_usw":88618,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":6,"network":"LAN","satisfaction":100,"uptime":91760,"wired-tx_bytes":183035112,"wired-rx_bytes":65256324,"wired-tx_packets":816026,"wired-rx_packets":204205,"wired-tx_bytes-r":1864,"wired-rx_bytes-r":223,"_uptime_by_ugw":16,"_last_seen_by_ugw":1569767503,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","ip":"192.168.1.9","tx_bytes":247778,"rx_bytes":430552,"tx_packets":3423,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":6037,"bytes-r":4,"tx_bytes-r":2,"rx_bytes-r":2,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758952,"latest_assoc_time":1569767528,"oui":"AmazonTe","user_id":"5d866b664af49704c832b3fc","_id":"5d866b664af49704c832b3fc","mac":"3c:5c:c4:11:ce:9d","is_guest":false,"first_seen":1569090406,"last_seen":1569767572,"is_wired":false,"hostname":"amazon-f3159021b","usergroup_id":"","name":"ECHO Gäste WC","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.43","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_ugw":26,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.43","dev_cat":38,"dev_family":5,"dev_id":2179,"os_class":5,"os_name":57,"dev_vendor":97,"uptime":8620,"tx_bytes":4412426,"rx_bytes":11820599,"tx_packets":42198,"tx_retries":4639,"wifi_tx_attempts":46837,"rx_packets":242308,"bytes-r":1256,"tx_bytes-r":282,"rx_bytes-r":974,"qos_policy_applied":true,"_uptime_by_uap":8620,"_last_seen_by_uap":1569767572,"_is_guest_by_uap":false,"ap_mac":"fc:ec:da:fc:0e:71","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"fc:ec:da:fd:0e:71","powersave_enabled":false,"is_11r":false,"ccq":966,"rssi":36,"noise":-109,"signal":-60,"tx_rate":65000,"rx_rate":24000,"tx_power":44,"idletime":0,"dhcpend_time":790,"satisfaction":95,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569761780,"latest_assoc_time":1569765273,"oui":"CloudNet","user_id":"5d8636ac4af49704c832b01f","_id":"5d8636ac4af49704c832b01f","mac":"0c:96:e6:77:1a:bf","is_guest":false,"first_seen":1569076908,"last_seen":1569767586,"is_wired":false,"hostname":"HPLaserHome","usergroup_id":"","name":"HPLaserHome","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.150","fingerprint_override":true,"dev_id_override":2317,"_uptime_by_ugw":2306,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.150","uptime":5806,"tx_bytes":15043,"rx_bytes":99344,"tx_packets":254,"tx_retries":54,"wifi_tx_attempts":295,"rx_packets":451,"bytes-r":25,"tx_bytes-r":2,"rx_bytes-r":22,"qos_policy_applied":true,"_uptime_by_uap":5807,"_last_seen_by_uap":1569767586,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:c6:05:c4","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"18:e8:29:c7:05:c4","powersave_enabled":false,"is_11r":false,"ccq":985,"rssi":66,"noise":-109,"signal":-30,"tx_rate":130000,"rx_rate":130000,"tx_power":40,"idletime":1,"dhcpend_time":10190,"satisfaction":97,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569677158,"latest_assoc_time":1569767483,"oui":"SalcompS","user_id":"5d8656fb4af49704c832b20a","_id":"5d8656fb4af49704c832b20a","mac":"44:09:b8:32:cc:55","is_guest":false,"first_seen":1569085179,"last_seen":1569767595,"is_wired":true,"fingerprint_override":true,"dev_id_override":2029,"usergroup_id":"","name":"CHROMECAST ULTRA","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.16","hostname":"Chromecast-Ultra","_uptime_by_usw":47951,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":13,"network":"LAN","ip":"192.168.1.16","satisfaction":100,"uptime":90437,"wired-tx_bytes":348953420,"wired-rx_bytes":41243233,"wired-tx_packets":821377,"wired-rx_packets":175584,"wired-tx_bytes-r":7803,"wired-rx_bytes-r":520,"_uptime_by_ugw":71,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":119962163,"rx_bytes":9308628,"tx_packets":96312,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":67541,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"dev_cat":20,"dev_family":3,"dev_id":2005,"os_class":5,"os_name":57,"dev_vendor":8},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755119,"latest_assoc_time":1569764971,"oui":"Shanghai","user_id":"5d8743324af49704c833416f","_id":"5d8743324af49704c833416f","mac":"f0:fe:6b:27:2b:86","is_guest":false,"first_seen":1569145650,"last_seen":1569767578,"is_wired":false,"hostname":"Landroid S","usergroup_id":"","name":"Rasenmäher","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.57","_uptime_by_uap":9724,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":true,"is_11r":false,"ccq":30,"rssi":44,"noise":-92,"signal":-48,"tx_rate":72000,"rx_rate":65000,"tx_power":47,"idletime":3,"ip":"192.168.1.57","dhcpend_time":0,"satisfaction":97,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":12459,"tx_bytes":49406,"rx_bytes":84963,"tx_packets":363,"tx_retries":31,"wifi_tx_attempts":442,"rx_packets":1663,"bytes-r":26,"tx_bytes-r":5,"rx_bytes-r":20,"qos_policy_applied":true,"_uptime_by_ugw":2608,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569678374,"latest_assoc_time":1569765686,"oui":"Synology","user_id":"5d8640524af49704c832b0c3","_id":"5d8640524af49704c832b0c3","mac":"00:11:32:79:6a:62","is_guest":false,"first_seen":1569079377,"last_seen":1569767595,"is_wired":true,"hostname":"DSHOME","usergroup_id":"","name":"DSHOME-LAN2","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.8","fingerprint_override":true,"dev_id_override":2295,"_uptime_by_usw":86732,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":5,"network":"LAN","satisfaction":100,"uptime":89221,"wired-tx_bytes":28208741418,"wired-rx_bytes":100773904,"wired-tx_packets":33087363,"wired-rx_packets":539462,"wired-tx_bytes-r":329524,"wired-rx_bytes-r":1360,"ip":"192.168.1.8","_uptime_by_ugw":34419,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":367935,"rx_bytes":1359719,"tx_packets":2052,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":17867,"bytes-r":55,"tx_bytes-r":11,"rx_bytes-r":44,"qos_policy_applied":true,"dev_cat":18,"dev_family":7,"dev_id":370,"os_class":3,"os_name":3,"dev_vendor":118},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758806,"latest_assoc_time":1569767523,"oui":"AmazonTe","user_id":"5d867baa4af49704c832b501","_id":"5d867baa4af49704c832b501","mac":"fc:a6:67:e8:01:4d","is_guest":false,"first_seen":1569094570,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-b4750ee80","fingerprint_override":true,"dev_id_override":40,"usergroup_id":"","name":"ECHO Keller Wohnzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.49","_uptime_by_uap":8773,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":43,"noise":-92,"signal":-49,"tx_rate":65000,"rx_rate":65000,"tx_power":47,"idletime":0,"ip":"192.168.1.49","dhcpend_time":820,"satisfaction":93,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":8772,"tx_bytes":8398084,"rx_bytes":12269834,"tx_packets":52879,"tx_retries":4845,"wifi_tx_attempts":65542,"rx_packets":270766,"bytes-r":1414,"tx_bytes-r":497,"rx_bytes-r":917,"qos_policy_applied":true,"_uptime_by_ugw":31,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569676600,"latest_assoc_time":1569765536,"oui":"D&MHoldi","user_id":"5d864fa64af49704c832b19f","_id":"5d864fa64af49704c832b19f","mac":"00:05:cd:45:fb:22","is_guest":false,"first_seen":1569083302,"last_seen":1569767595,"is_wired":true,"usergroup_id":"","name":"DENON BLU RAY PLAYER","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.13","fingerprint_override":true,"dev_id_override":2335,"_uptime_by_usw":88618,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":10,"network":"LAN","satisfaction":100,"uptime":90995,"wired-tx_bytes":544707786,"wired-rx_bytes":17970457,"wired-tx_packets":1645681,"wired-rx_packets":176957,"wired-tx_bytes-r":7743,"wired-rx_bytes-r":235,"ip":"192.168.1.13","_uptime_by_ugw":1757,"_last_seen_by_ugw":1569767007,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":608,"rx_bytes":6050,"tx_packets":10,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":86,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755103,"latest_assoc_time":1569767513,"oui":"Fn-LinkT","user_id":"5d8751c74af49704c83349a8","_id":"5d8751c74af49704c83349a8","mac":"88:83:5d:4d:f4:00","is_guest":false,"first_seen":1569149383,"last_seen":1569767578,"is_wired":false,"hostname":"Hikam-5588","usergroup_id":"","name":"Kamera Garten","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.59","fingerprint_override":true,"dev_id_override":2718,"_uptime_by_uap":704,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":324,"rssi":11,"noise":-92,"signal":-81,"tx_rate":54000,"rx_rate":27000,"tx_power":47,"idletime":0,"dhcpend_time":0,"satisfaction":70,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":12475,"tx_bytes":817386,"rx_bytes":1354040546,"tx_packets":10422,"tx_retries":1901,"wifi_tx_attempts":12371,"rx_packets":1562070,"bytes-r":117618,"tx_bytes-r":88,"rx_bytes-r":117530,"qos_policy_applied":true,"ip":"192.168.1.59","_uptime_by_ugw":41,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","roam_count":3},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569756627,"latest_assoc_time":1569767530,"oui":"AmazonTe","user_id":"5d86787a4af49704c832b4d6","_id":"5d86787a4af49704c832b4d6","mac":"fc:a1:83:e0:66:38","is_guest":false,"first_seen":1569093754,"last_seen":1569767572,"is_wired":false,"hostname":"amazon-d5048f99b","usergroup_id":"","name":"ECHO Werkstatt","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.48","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_ugw":24,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.48","uptime":10945,"tx_bytes":24662845,"rx_bytes":52353891,"tx_packets":435406,"tx_retries":75706,"wifi_tx_attempts":511580,"rx_packets":681510,"bytes-r":4278,"tx_bytes-r":1197,"rx_bytes-r":3080,"qos_policy_applied":true,"_uptime_by_uap":9258,"_last_seen_by_uap":1569767572,"_is_guest_by_uap":false,"ap_mac":"fc:ec:da:fc:0e:71","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"fc:ec:da:fd:0e:71","powersave_enabled":false,"is_11r":false,"ccq":874,"rssi":35,"noise":-109,"signal":-61,"tx_rate":65000,"rx_rate":72109,"tx_power":44,"idletime":0,"dhcpend_time":890,"satisfaction":90,"anomalies":0,"vlan":0,"radio_proto":"ng","dev_cat":38,"dev_family":5,"dev_id":2179,"os_class":5,"os_name":57,"dev_vendor":97,"roam_count":2},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569757886,"latest_assoc_time":1569767530,"oui":"","user_id":"5d8661d44af49704c832b2e8","_id":"5d8661d44af49704c832b2e8","mac":"8c:b8:4a:34:ac:85","is_guest":false,"first_seen":1569087956,"last_seen":1569767578,"is_wired":false,"hostname":"Galaxy-Note10-5G-Heiko","usergroup_id":"","name":"Heiko Note 10 + 5G","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.100","fingerprint_override":true,"dev_id_override":3,"_uptime_by_uap":1365,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":56,"radio":"na","radio_name":"wifi0","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:60","powersave_enabled":true,"is_11r":true,"ccq":333,"rssi":37,"noise":-106,"signal":-59,"tx_rate":866000,"rx_rate":866000,"tx_power":31,"idletime":0,"ip":"192.168.1.100","dhcpend_time":0,"satisfaction":95,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":9692,"tx_bytes":9624327,"rx_bytes":4970322,"tx_packets":18160,"tx_retries":1739,"wifi_tx_attempts":14168,"rx_packets":22218,"bytes-r":355,"tx_bytes-r":163,"rx_bytes-r":191,"qos_policy_applied":true,"_uptime_by_ugw":24,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","roam_count":6,"dev_cat":1,"dev_family":4,"dev_id":283,"os_class":3,"os_name":3,"dev_vendor":1},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569767174,"latest_assoc_time":1569767495,"oui":"Fn-LinkT","user_id":"5d8756704af49704c83349d5","_id":"5d8756704af49704c83349d5","mac":"88:83:5d:4a:0a:ba","is_guest":false,"first_seen":1569150576,"last_seen":1569767559,"is_wired":false,"hostname":"Hikam-1422","fingerprint_override":true,"dev_id_override":2718,"usergroup_id":"","name":"Kamera Eingang","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.60","_uptime_by_ugw":8,"_last_seen_by_ugw":1569767503,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.60","uptime":385,"tx_bytes":3177,"rx_bytes":5866952,"tx_packets":45,"tx_retries":0,"wifi_tx_attempts":45,"rx_packets":6587,"bytes-r":124896,"tx_bytes-r":67,"rx_bytes-r":124828,"qos_policy_applied":true,"_uptime_by_uap":385,"_last_seen_by_uap":1569767559,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:e4:4e:58","channel":7,"radio":"ng","radio_name":"ra0","essid":"HKHOME","bssid":"b4:fb:e4:e4:4e:59","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":47,"noise":-96,"signal":-49,"tx_rate":150000,"rx_rate":108000,"tx_power":0,"idletime":0,"dhcpend_time":5060,"satisfaction":99,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758810,"latest_assoc_time":1569767363,"oui":"AmazonTe","user_id":"5d866a7c4af49704c832b3f2","_id":"5d866a7c4af49704c832b3f2","mac":"18:74:2e:6f:88:27","is_guest":false,"first_seen":1569090172,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-3eedc7982","usergroup_id":"","name":"ECHO Badezimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.42","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_uap":8131,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":32,"noise":-92,"signal":-60,"tx_rate":72000,"rx_rate":65000,"tx_power":47,"idletime":1,"ip":"192.168.1.42","dhcpend_time":830,"satisfaction":92,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":8768,"tx_bytes":13371627,"rx_bytes":13372813,"tx_packets":72886,"tx_retries":10825,"wifi_tx_attempts":92152,"rx_packets":286944,"bytes-r":1543,"tx_bytes-r":414,"rx_bytes-r":1129,"qos_policy_applied":true,"_uptime_by_ugw":216,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","dev_cat":38,"dev_family":5,"dev_id":2179,"os_class":5,"os_name":57,"dev_vendor":97},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569673679,"latest_assoc_time":1569767554,"oui":"Marusys","user_id":"5d8648894af49704c832b158","_id":"5d8648894af49704c832b158","mac":"00:1d:ec:05:5e:f1","is_guest":false,"first_seen":1569081481,"last_seen":1569767595,"is_wired":true,"hostname":"vusolo2","usergroup_id":"","name":"VUSOLO2","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.10","fingerprint_override":true,"dev_id_override":2716,"_uptime_by_usw":82479,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":7,"network":"LAN","satisfaction":100,"uptime":93916,"wired-tx_bytes":261911095,"wired-rx_bytes":1334785148,"wired-tx_packets":1776105,"wired-rx_packets":1456189,"wired-tx_bytes-r":2736,"wired-rx_bytes-r":17486,"ip":"192.168.1.10","_uptime_by_ugw":0,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":70648,"rx_bytes":1262452,"tx_packets":1121,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":18738,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"dev_cat":1,"dev_family":4,"dev_id":239,"os_class":15,"os_name":19,"dev_vendor":47},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755102,"latest_assoc_time":1569767540,"oui":"SlimDevi","user_id":"5d8636804af49704c832b009","_id":"5d8636804af49704c832b009","mac":"00:04:20:f4:b8:50","is_guest":false,"first_seen":1569076864,"last_seen":1569767578,"is_wired":false,"hostname":"HarmonyHub","usergroup_id":"","name":"Harmony Hub Schlafzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.51","fingerprint_override":true,"dev_id_override":2360,"_uptime_by_uap":9424,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":27,"noise":-92,"signal":-65,"tx_rate":121000,"rx_rate":150000,"tx_power":47,"idletime":0,"ip":"192.168.1.51","dhcpend_time":5990,"satisfaction":92,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":12476,"tx_bytes":35355400,"rx_bytes":3175084,"tx_packets":34862,"tx_retries":11122,"wifi_tx_attempts":49450,"rx_packets":30247,"bytes-r":4176,"tx_bytes-r":3882,"rx_bytes-r":294,"qos_policy_applied":true,"_uptime_by_ugw":14,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758817,"latest_assoc_time":1569767530,"oui":"AmazonTe","user_id":"5d8674cd4af49704c832b492","_id":"5d8674cd4af49704c832b492","mac":"b4:7c:9c:84:7d:6e","is_guest":false,"first_seen":1569092813,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-e8b533ccd","usergroup_id":"","name":"ECHO Schlafzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.46","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_uap":8762,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":43,"noise":-92,"signal":-49,"tx_rate":72000,"rx_rate":65000,"tx_power":47,"idletime":3,"ip":"192.168.1.46","dhcpend_time":760,"satisfaction":91,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":8761,"tx_bytes":6930606,"rx_bytes":10974234,"tx_packets":48526,"tx_retries":5971,"wifi_tx_attempts":62013,"rx_packets":264666,"bytes-r":1152,"tx_bytes-r":367,"rx_bytes-r":784,"qos_policy_applied":true,"_uptime_by_ugw":24,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569746938,"latest_assoc_time":1569767519,"oui":"SamsungE","user_id":"5d864cec4af49704c832b189","_id":"5d864cec4af49704c832b189","mac":"78:ab:bb:c4:28:89","is_guest":false,"first_seen":1569082604,"last_seen":1569767595,"is_wired":true,"usergroup_id":"","name":"SAMSUNG TV Wohnzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.12","fingerprint_override":true,"dev_id_override":17,"_uptime_by_usw":20657,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":9,"network":"LAN","satisfaction":100,"uptime":20657,"wired-tx_bytes":73865987,"wired-rx_bytes":52507566,"wired-tx_packets":230901,"wired-rx_packets":110184,"wired-tx_bytes-r":1818,"wired-rx_bytes-r":2261,"_uptime_by_ugw":35,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","ip":"192.168.1.12","tx_bytes":25743509,"rx_bytes":2613916,"tx_packets":28574,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":30109,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"dev_cat":31,"dev_family":1,"dev_id":2432,"os_class":3,"os_name":3,"dev_vendor":1},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755098,"latest_assoc_time":1569767480,"oui":"SlimDevi","user_id":"5d8636874af49704c832b00b","_id":"5d8636874af49704c832b00b","mac":"00:04:20:fb:7d:f0","is_guest":false,"first_seen":1569076871,"last_seen":1569767578,"is_wired":false,"hostname":"HarmonyHub","usergroup_id":"","name":"Harmony Hub Wohnzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.50","fingerprint_override":true,"dev_id_override":2360,"_uptime_by_uap":8674,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":49,"noise":-92,"signal":-43,"tx_rate":150000,"rx_rate":150000,"tx_power":47,"idletime":1,"ip":"192.168.1.50","dhcpend_time":5990,"satisfaction":91,"anomalies":0,"vlan":0,"radio_proto":"ng","uptime":12480,"tx_bytes":34244529,"rx_bytes":3355696,"tx_packets":34011,"tx_retries":2264,"wifi_tx_attempts":39826,"rx_packets":29995,"bytes-r":3410,"tx_bytes-r":3158,"rx_bytes-r":252,"qos_policy_applied":true,"_uptime_by_ugw":99,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","roam_count":3},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569755134,"latest_assoc_time":1569767500,"oui":"Apple","user_id":"5d863eb94af49704c832b0b9","_id":"5d863eb94af49704c832b0b9","mac":"f0:18:98:2a:83:ed","is_guest":false,"first_seen":1569078969,"last_seen":1569767578,"is_wired":false,"hostname":"Heikos-MBP","use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.99","noted":true,"usergroup_id":"","name":"Heiko Mac Book Pro","fingerprint_override":true,"dev_id_override":2137,"_uptime_by_ugw":54,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.99","uptime":12444,"tx_bytes":103353178,"rx_bytes":44088780,"tx_packets":169142,"tx_retries":19432,"wifi_tx_attempts":115068,"rx_packets":253323,"bytes-r":8991,"tx_bytes-r":4883,"rx_bytes-r":4108,"qos_policy_applied":true,"_uptime_by_uap":9720,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":56,"radio":"na","radio_name":"wifi0","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:60","powersave_enabled":true,"is_11r":false,"ccq":333,"rssi":33,"noise":-106,"signal":-63,"tx_rate":1170000,"rx_rate":1170000,"tx_power":31,"idletime":2,"dhcpend_time":2070,"satisfaction":99,"anomalies":0,"vlan":0,"radio_proto":"ac"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569761763,"latest_assoc_time":1569767495,"oui":"Fn-LinkT","user_id":"5d874b0a4af49704c83345df","_id":"5d874b0a4af49704c83345df","mac":"88:83:5d:4d:ed:0a","is_guest":false,"first_seen":1569147658,"last_seen":1569767559,"is_wired":false,"hostname":"Hikam-0774","usergroup_id":"","name":"Kamera Parkplatz","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.58","fingerprint_override":true,"dev_id_override":2718,"_uptime_by_uap":663,"_last_seen_by_uap":1569767559,"_is_guest_by_uap":false,"ap_mac":"b4:fb:e4:e4:4e:58","channel":7,"radio":"ng","radio_name":"ra0","essid":"HKHOME","bssid":"b4:fb:e4:e4:4e:59","powersave_enabled":false,"is_11r":false,"ccq":0,"rssi":12,"noise":-96,"signal":-84,"tx_rate":108000,"rx_rate":1000,"tx_power":0,"idletime":0,"ip":"192.168.1.58","dhcpend_time":2380,"satisfaction":0,"anomalies":8,"vlan":0,"radio_proto":"ng","uptime":5796,"tx_bytes":425668,"rx_bytes":754221652,"tx_packets":5107,"tx_retries":1071,"wifi_tx_attempts":6178,"rx_packets":805082,"bytes-r":65949,"tx_bytes-r":55,"rx_bytes-r":65894,"qos_policy_applied":true,"_uptime_by_ugw":8,"_last_seen_by_ugw":1569767503,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","roam_count":1},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569761787,"latest_assoc_time":1569767482,"oui":"AmazonTe","user_id":"5d8636944af49704c832b01d","_id":"5d8636944af49704c832b01d","mac":"38:f7:3d:89:8a:76","is_guest":false,"first_seen":1569076884,"last_seen":1569767586,"is_wired":false,"hostname":"amazon-46af1ed76","usergroup_id":"","name":"ECHO Gästezimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.44","fingerprint_override":true,"dev_id_override":2034,"_uptime_by_ugw":97,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.44","dev_cat":32,"dev_family":3,"dev_id":276,"os_class":5,"os_name":57,"dev_vendor":8,"uptime":5799,"tx_bytes":2336379,"rx_bytes":3175529,"tx_packets":22458,"tx_retries":1879,"wifi_tx_attempts":24334,"rx_packets":22402,"bytes-r":524,"tx_bytes-r":215,"rx_bytes-r":308,"qos_policy_applied":true,"_uptime_by_uap":5800,"_last_seen_by_uap":1569767586,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:c6:05:c4","channel":7,"radio":"ng","radio_name":"wifi0","essid":"HKHOME","bssid":"18:e8:29:c7:05:c4","powersave_enabled":false,"is_11r":false,"ccq":988,"rssi":57,"noise":-109,"signal":-39,"tx_rate":130000,"rx_rate":144218,"tx_power":40,"idletime":0,"dhcpend_time":570,"satisfaction":0,"anomalies":2048,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569676185,"latest_assoc_time":1569767501,"oui":"Synology","user_id":"5d86402c4af49704c832b0c1","_id":"5d86402c4af49704c832b0c1","mac":"00:11:32:79:6a:61","is_guest":false,"first_seen":1569079340,"last_seen":1569767595,"is_wired":true,"hostname":"DSHOME","usergroup_id":"","name":"DSHOME-LAN1","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.7","_uptime_by_ugw":53,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","uptime":91410,"tx_bytes":656644324,"rx_bytes":106070663,"tx_packets":673427,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":454548,"bytes-r":0,"tx_bytes-r":0,"rx_bytes-r":0,"qos_policy_applied":true,"_uptime_by_usw":86735,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":4,"ip":"192.168.1.7","satisfaction":100,"wired-tx_bytes":16763455,"wired-rx_bytes":2156730,"wired-tx_packets":18034,"wired-rx_packets":10587,"wired-tx_bytes-r":61211,"wired-rx_bytes-r":18639,"dev_cat":18,"dev_family":7,"dev_id":370,"os_class":3,"os_name":3,"dev_vendor":118},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569758825,"latest_assoc_time":1569767530,"oui":"AmazonTe","user_id":"5d8671c24af49704c832b460","_id":"5d8671c24af49704c832b460","mac":"6c:56:97:ac:32:87","is_guest":false,"first_seen":1569092034,"last_seen":1569767578,"is_wired":false,"hostname":"amazon-44fa1b23c","usergroup_id":"","name":"ECHO Flur","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.45","fingerprint_override":true,"dev_id_override":2748,"_uptime_by_ugw":24,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","ip":"192.168.1.45","dev_cat":38,"dev_family":5,"dev_id":2179,"os_class":5,"os_name":57,"dev_vendor":97,"uptime":8753,"tx_bytes":8718325,"rx_bytes":12394753,"tx_packets":69780,"tx_retries":14461,"wifi_tx_attempts":95377,"rx_packets":282746,"bytes-r":1105,"tx_bytes-r":314,"rx_bytes-r":790,"qos_policy_applied":true,"_uptime_by_uap":8754,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":35,"noise":-92,"signal":-57,"tx_rate":72000,"rx_rate":65000,"tx_power":47,"idletime":0,"dhcpend_time":810,"satisfaction":91,"anomalies":0,"vlan":0,"radio_proto":"ng"},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569757864,"latest_assoc_time":1569767547,"oui":"EdupInte","user_id":"5d8682ca4af49704c832b582","_id":"5d8682ca4af49704c832b582","mac":"e8:4e:06:5c:33:25","is_guest":false,"first_seen":1569096394,"last_seen":1569767578,"is_wired":false,"hostname":"vuzero","fingerprint_override":true,"dev_id_override":2716,"usergroup_id":"","name":"VU Zero Schlafzimmer","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.52","_uptime_by_uap":8004,"_last_seen_by_uap":1569767578,"_is_guest_by_uap":false,"ap_mac":"18:e8:29:bf:2f:5e","channel":7,"radio":"ng","radio_name":"wifi1","essid":"HKHOME","bssid":"1a:e8:29:bf:2f:61","powersave_enabled":false,"is_11r":false,"ccq":30,"rssi":39,"noise":-92,"signal":-53,"tx_rate":121000,"rx_rate":135000,"tx_power":47,"idletime":2,"ip":"192.168.1.52","dhcpend_time":0,"satisfaction":90,"anomalies":0,"vlan":0,"radio_proto":"ac","uptime":9714,"tx_bytes":83406304,"rx_bytes":19512822,"tx_packets":121544,"tx_retries":42599,"wifi_tx_attempts":183850,"rx_packets":114317,"bytes-r":2078,"tx_bytes-r":502,"rx_bytes-r":1575,"qos_policy_applied":true,"_uptime_by_ugw":7,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","network":"LAN","dev_cat":1,"dev_family":4,"dev_id":239,"os_class":15,"os_name":19,"dev_vendor":47,"roam_count":1},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569673715,"latest_assoc_time":1569767328,"oui":"D&MHoldi","user_id":"5d864b934af49704c832b17e","_id":"5d864b934af49704c832b17e","mac":"00:05:cd:fe:7c:8c","is_guest":false,"first_seen":1569082259,"last_seen":1569767595,"is_wired":true,"usergroup_id":"","name":"DENON AVR","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.11","fingerprint_override":true,"dev_id_override":2841,"hostname":"Denon","_uptime_by_usw":88617,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":8,"network":"LAN","ip":"192.168.1.11","satisfaction":100,"uptime":93880,"wired-tx_bytes":83163020,"wired-rx_bytes":368318267,"wired-tx_packets":873415,"wired-rx_packets":818373,"wired-tx_bytes-r":849,"wired-rx_bytes-r":4607,"_uptime_by_ugw":251,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":433107,"rx_bytes":575355,"tx_packets":2164,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":4658,"bytes-r":21,"tx_bytes-r":7,"rx_bytes-r":14,"qos_policy_applied":true},{"site_id":"5c653f174af49704c832afc0","assoc_time":1569676096,"latest_assoc_time":1569685213,"oui":"Husqvarn","user_id":"5d8650704af49704c832b1b0","_id":"5d8650704af49704c832b1b0","mac":"94:bb:ae:03:2a:f4","is_guest":false,"first_seen":1569083504,"last_seen":1569767595,"is_wired":true,"hostname":"GARDENA-c3c1","usergroup_id":"","name":"GARDENA","noted":true,"use_fixedip":true,"network_id":"5c653f1d4af49704c832afcf","fixed_ip":"192.168.1.14","_uptime_by_usw":88620,"_last_seen_by_usw":1569767595,"_is_guest_by_usw":false,"sw_mac":"18:e8:29:2b:6f:47","sw_depth":1,"sw_port":11,"network":"LAN","ip":"192.168.1.14","satisfaction":100,"uptime":91499,"wired-tx_bytes":151407863,"wired-rx_bytes":3049714,"wired-tx_packets":665140,"wired-rx_packets":23231,"wired-tx_bytes-r":1723,"wired-rx_bytes-r":37,"_uptime_by_ugw":82366,"_last_seen_by_ugw":1569767554,"_is_guest_by_ugw":false,"gw_mac":"18:e8:29:42:33:2e","tx_bytes":2963227,"rx_bytes":3313453,"tx_packets":22645,"tx_retries":0,"wifi_tx_attempts":0,"rx_packets":27153,"bytes-r":57,"tx_bytes-r":24,"rx_bytes-r":32,"qos_policy_applied":true}]}