//-----------------AB HIER NICHTS MEHR ÄNDERN------------------------------------------------------

const dpPrefix = "javascript."+ instance +".";
// Hier Definition iqontrol-Style für Popup
const format = "<!DOCTYPE html><html><head><title>Voucher</title></head><body><table style=\"color:"+color_iqontrol_text_voucher_in_table+";text-align:center; font-family:"+schriftart+";background-image: linear-gradient(42deg,transparent,"+color_iqontrol_voucher_gradient1+");\">";
const format2 = "<!DOCTYPE html><html><head><title>Clients</title></head><body><table style=\"color:"+color_iqontrol_text_client_in_table+"; font-family:"+schriftart+";background-image: linear-gradient(42deg,transparent," +color_iqontrol_client_gradient1+");\">";
const format3 = "<table style=\"color:"+color_iqontrol_text__client_letzteAenderung+"; font-family:"+schriftart+";\">";
const format6 ="<tr><td>&ensp;</td><td>&ensp;</td></tr> <tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+";\">"
const apHead = "<!DOCTYPE html><html><head><title>Voucher</title></head><body>"
const apTable = "<table style=\"color:"+color_iqontrol_text_client_in_table+"; font-family:"+schriftart+";background-image: linear-gradient(42deg,transparent," +color_iqontrol_client_gradient1+");\">";
const tableAus = "</table>";


const request = require('request-promise-native').defaults({ rejectUnauthorized: false });
var fs = require('fs')

const datei = "/opt/iobroker/iobroker-data/files/iqontrol/htmlvoucher.html";
const datei2 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlclients.html";
const datei3 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlinfo.html";
const datei4 = "/opt/iobroker/iobroker-data/files/iqontrol/htmlalarm.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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester/1000+" Sek</td></tr>");
              }
                  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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester/1000+" Sek</td></tr>");
              }
                  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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester/1000+" Sek</td></tr>");
              }
                  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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester/1000+" Sek</td></tr>");
              }
                  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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester/1000+" Sek</td></tr>");
              } 

         } 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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>out</td><td>&ensp;&ensp;vor: "+tester2/1000+" Sek</td></tr>");
               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("<tr><td>"+listeDatenpunkteNew[z]+"&ensp;&ensp;</td><td>"+formatDate(getDateObject((parseFloat((new Date().getTime())) - tester2)), "SS:mm:ss")+"&ensp;&ensp;&ensp;&ensp;</td><td>in</td><td>&ensp;&ensp;vor: " + tester2/1000+" Sek</td></tr>");
              }
         
         } */
                // 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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                         dlog(clientListe);} 
                  else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
                  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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                         dlog(clientListe);} 
                  else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
                  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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                         dlog(clientListe);} 
                  else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
              
                  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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                      dlog(clientListe);} 
                 else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
                  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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                      dlog(clientListe);} 
                 else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
         
          } 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("<tr><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>"+apTransfer+"</td></tr>");
                         dlog(clientListe);} 
                     else {anzahlClients=anzahlClients-1; clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+versuch[i][myname]+"&ensp;</td><td>LAN&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"&ensp;&ensp;</td><td>noConn</td></tr>");}
         
              
              dlog("------------------ist nicht war");}*/
        }

      setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert

       for (var h =0; h<notSeen.length;h++){    
              if (notSeen.indexOf(versuch[i]) == -1 ) 
              clientListe = clientListe.concat("<tr style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";font-style: italic;\" ><td>"+notSeen[h]+
              "&ensp;</td><td>noConn&ensp;&ensp;&ensp;&ensp;</td><td>noConn&ensp;&ensp;</td><td>noConn</td></tr>");
       }
       //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]/*+"</table>"*/); 
        lastChangeList.concat(lastChange[g]+"</table>");
       }

if (iqontrol && anwesenheit ) {
    

    fs.writeFileSync(datei2, format2+clientListe.concat("</table><p style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";\">Geamtanzahl angemeldeter Clients:"+anzahlClients+"<br>Insgesamt Clients registriert: "+ listeDatenpunkte.length+
                                                       "</p><p style=\"color:"+color_iqontrol_text__client_letzteAenderung+"; font-family:"+schriftart+";\">Letzter Wechsel im Netzwerk:<br>"+lastChangeList+"</p>"
    ));
   let  dataHelp = format2+clientListe.concat("</table><p style=\"color:"+color_iqontrol_text__client_disconnected+"; font-family:"+schriftart+";\">Geamtanzahl angemeldeter Clients:"+anzahlClients+"<br>Insgesamt Clients registriert: "+ listeDatenpunkte.length+
                                                       "</p><p style=\"color:"+color_iqontrol_text__client_letzteAenderung+"; font-family:"+schriftart+";\">Letzter Wechsel im Netzwerk:<br>"+lastChangeList+"</p>");
    
   
   //var dataqq = fs.readFileSync('/tmp/htmlclients.html');
   if(false){
  log("anfang")
  //  writeFile(iqontrol.0,"/htmlclients.html", dataHelp,'binary',);
    fs.writeFile( '/htmlclients2.html', dataHelp );
    var data = fs.readFileSync('/tmp/screenshot.png');
  writeFile( '/../iqontrol.0/htmlclients.html', dataHelp);
  log("ende")}

}
  //  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", "<table>"+clientListe.concat("</table>")+"</p><p style=\"color:"+color_iqontrol_text__client_letzteAenderung+"; font-family:"+schriftart+";\">Letzter Wechsel im Netzwerk:<br><i>"+lastChangeList+"</p>"); //schreibe client table
mylog("bin raus aus  workclients");

}, 3000);}


} //workclientend

 //-----------------------------------------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 = "<tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+";\"><td>Nr.&ensp;</td><td>DAUER&ensp;</td></td><td>FERTIG&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</td>&ensp;&ensp;<td>NOTIZ</td></tr> ";


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= "&ensp;&ensp; - &ensp;&ensp;&ensp; ";}
    
   
   var y=i+1; 
   var yy=y.toString();
   if (y<10 )  yy="0"+yy;

    clientListe = clientListe.concat("<tr><td>"+yy+"&ensp;</td><td>"+respv.data[i].duration+"&ensp;</td><td>"+respv.data[i].status_expires+"&ensp;&ensp;&ensp;&ensp;</td><td>"+respv.data[i].code.slice(0,5)+"-"+respv.data[i].code.slice(5)+"&ensp;&ensp;</td><td>" +zeit1 + "&ensp;&ensp;</td><td>"+notizen+"</td></tr>");
  

   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<listValue.length;i++){
          mylog(listValue.length.toString());
          listHelper2=listHelper2+(i+1)        +":"+listValue2[i]+";"}
         // listHelper =listHelper+"'"+listValue2[i]+"'"+":"+"'"+listValue[i]+"'"+";"  }

      mylog("----: "+listHelper2)
      listHelper2=listHelper2.substr(0, listHelper2.length-1);
      mylog("----: "+listHelper2)
      listHelper2=listHelper2+";"+(listValue2.length+1)+":Voucher-Code-Auswahl"
      //object "states" ändern
      var obj = getObject(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList");
      obj.common.states=listHelper2;
      setObject(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList", obj);
      mylog("object2 : "+obj.common.states )
      //setzt ausahl in iqontrol damit letzter eintrag gelöscht werden kann
      nichtSchalten=true; //verhindert das durch schalter gelscht wird
      setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList",listValue2.length+1)
     

}   
                          
}

if (iqontrol && writeFile) {fs.writeFileSync(datei, format + clientListe.concat("</table></style></body></html><p style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; font-family:"+schriftart+
                                                                                ";\">Geamtanzahl Vouchers:"+respv.data.length+"</p>"));}
if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers", "<table>"+clientListe.concat("</table><p style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; font-family:"+schriftart+
                                                                                ";\">Geamtanzahl Vouchers:"+respv.data.length+"</p></style></body></html>"));
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 +"<tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; \"><td><b>Health-Daten:</b></td><td></td></tr>"
    healthListeTable =                         "<tr><td>Status&ensp;&ensp;</td><td>"+resph.data[0].status+
                                               "</td></tr><tr><td>Users&ensp;&ensp;</td><td>"+resph.data[0].num_user +
                                               "</td></tr><tr><td>Gäste&ensp;&ensp;&ensp;&ensp;</td><td>" +resph.data[0].num_guest +
                                               "</td></tr><tr><td>TxBytes</td>&ensp;&ensp;</td><td>"+resph.data[0].tx_bytes_r +
                                               "</td></tr><tr><td>RxBytes</td><td>"+resph.data[0].rx_bytes_r+
                                               "</td></tr><tr><td>Disabled</td><td>"+resph.data[0].num_disabled+
                                               "</td></tr><tr><td>Adopted</td><td>"+resph.data[0].num_adopted+
                                               "</td></tr><tr><td>Disconnected</td><td>"+resph.data[0].num_disconnected+
                                               "</td></tr>"

    healthListe = apHead + apTable +"<tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; \"><td><b>Health-Daten:</b></td><td></td></tr>" + healthListeTable;
    healthListeTable="<tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+";\"><td><b>Health Daten:</b></td><td></td></tr>" + 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 +*/        "<tr><td>Model&ensp;&ensp;</td><td>"+respa.data[0].model+
                                         "</td></tr><tr><td>IP-Adresse&ensp;&ensp;</td><td>"+respa.data[0].connect_request_ip +
                                         "</td></tr><tr><td>Satisfaction&ensp;&ensp;&ensp;&ensp;</td><td>" + satisfy + //respa.data[0].satisfaction +
                                         "</td></tr><tr><td>Adopted</td>&ensp;&ensp;</td><td>"+respa.data[0].adopted +
                                          "</td></tr><tr><td>LoadAVG1</td>&ensp;&ensp;</td><td>"+respa.data[0].sys_stats.loadavg_1 +
                                         "</td></tr><tr><td>ToController</td><td>"+respa.data[0].inform_ip+"</td></tr>";

     apListeTable= apListeTable + apListeHelfer ;
     apListe = apListe + "<tr><td>&ensp;</td><td>&ensp;</td></tr> <tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+";\">"+"<td><b>AP-Daten:</b></td><td><b><i>"+aliasAPname+"</i></b></td></tr>"+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 +"<tr><td>"+ datum.slice(0,datum.indexOf("GMT"))+"&ensp;&ensp;</td><td>"+respal[j].msg.slice(0, 50)  + "</td></tr>";
             }
         alarmHelfer= alarmHelfer + "</table>";
         setState(dpPrefix + "WLANUnifi.Alarm.Alarm", "<table>"+alarmHelfer);
        if (iqontrol) fs.writeFileSync(datei4, apHead + "<p style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; font-family:"+schriftart+
                                                                                ";\">Geamtanzahl nicht archivierter Alarme:"+alarmLength+"</p></style></body></html>" +apTable +alarmHelfer) ;

      } else {setState(dpPrefix + "WLANUnifi.Alarm.Alarm", "keine neuen Alarme");
             if (iqontrol) fs.writeFileSync(datei4, apHead + "<p style=\"color:"+color_iqontrol_text__voucher_ueberschrift+"; font-family:"+schriftart+
                                                                                ";\">Geamtanzahl nicht archivierter Alarme:"+alarmLength+"</p></style></body></html>") }

 
     
    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<wifiLength+1) firstTime++;
           
});
//--------------------------------------------------Aliasnamen schalten------------------------------------------------
on({id:  dpPrefix + "WLANUnifi.AliasName",  change: "any"}, function (obj) { 
    
     (getState(dpPrefix + "WLANUnifi.AliasName").val) ? myname='name' : myname='hostname'

});
//-----------------------------------------------SCHALTER Delete Voucher IQONTROL------------------------------------------------
on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList", ack: false, change: "any"}, function (obj) { 

   if (!nichtSchalten){
      var mybodyVouchers;
      var icodeNumber = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList").val;
      mylog(icodeNumber)
      var  id_var=listValue[icodeNumber-1]
      //   Orginal JSON Daten
      /*   mybodyVouchers = {cmd:'delete-voucher',_id:id_var}  ;*/
      if(id_var !== "Voucher-Code-Auswahl") {
          var x = "{cmd:'delete-voucher',_id:\'"+id_var+"\'}" 
          eval('var mybodyVouchers='+x);
          mylog(mybodyVouchers);                                       
          deleteVoucher(mybodyVouchers);
          nichtSchalten=true;
          setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList",listValue2.length+1)
        } else {log("Wähle Code aus !!!","warn")}
    } else {nichtSchalten=false;}
 });


//-----------------------------------------------SCHALTER Delete Voucher------------------------------------------------
on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Delete",  val: true}, function (obj) { 
   var mybodyVouchers;
   var id_var = getState(dpPrefix +  "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Voucher_ID").val;
   var id_var2 = getState(dpPrefix +  "WLANUnifi.Wifi_Vouchers_DeleteVIS").val
   if (id_var !=="must be set"  ) {
       mylog("lösche weil nicht must be set")
        //   Orginal JSON Daten
        /*   mybodyVouchers = {cmd:'delete-voucher',_id:id_var}  ;*/
        var x = "{cmd:'delete-voucher',_id:\'"+id_var+"\'}" 
        eval('var mybodyVouchers='+x);
        mylog(mybodyVouchers);                                            
        deleteVoucher(mybodyVouchers);
        setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Delete",false, 4000);
        setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Voucher_ID", "must be set" , 2000);

    } else { if(id_var2 != "xxx") {
        mylog("lösche weil nicht xxx")
            id_var=listValue[(id_var2-1)]; 
            mylog(id_var)
            var x = "{cmd:'delete-voucher',_id:\'"+id_var+"\'}" 
            eval('var mybodyVouchers='+x);
            mylog(mybodyVouchers);                                            
            deleteVoucher(mybodyVouchers);
            setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers_DeleteVIS",(respv.data.length+1),4000);
            setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_Delete_Voucher.Delete",false, 4000);}
           else {log("FEHLER IN createVoucher - sind die ID ausgewählt? gesetzt?","error");}}

});
//-----------------------------------------------SCHALTER One click create voucher------------------------------------------------
on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers_StandardList", ack: false, change: "any"}, function (obj) { 
  
      var ValueList = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers_StandardList").val;
      if (ValueList!=(countie+1)) {
     
           expire_var = standardVouchers[vouchiesDPs[ValueList-1]].dauer; 
           n_var      = standardVouchers[vouchiesDPs[ValueList-1]].anzahl;
           quota_var  = standardVouchers[vouchiesDPs[ValueList-1]].multiuse; 
           note_var   = standardVouchers[vouchiesDPs[ValueList-1]].notiz; 
           up_var     = standardVouchers[vouchiesDPs[ValueList-1]].upload;
           down_var   = standardVouchers[vouchiesDPs[ValueList-1]].download; 
           MBytes_var = standardVouchers[vouchiesDPs[ValueList-1]].mb_begrenzung; 
  
    execCreateVoucher();
    setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_StandardList",(countie+1));
      }
         
 });
//-----------------------------------------------SCHALTER Create standard Voucher vis------------------------------------------------
on({id: dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateStandard",  change: "ne"}, function (obj) { 
   mylog("schalteeeeee")
    let stateHelper = parseInt(getState( dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateStandard").val)
    mylog(stateHelper.toString())
    //log(standardVouchers[vouchiesDPs[stateHelper-2]].notiz);
    if ( stateHelper > 1 ){
       mylog("gewwählt: "+standardVouchers[vouchiesDPs[stateHelper-2]].notiz);
           expire_var = standardVouchers[vouchiesDPs[stateHelper-2]].dauer; 
           n_var      = standardVouchers[vouchiesDPs[stateHelper-2]].anzahl;
           quota_var  = standardVouchers[vouchiesDPs[stateHelper-2]].multiuse; 
           note_var   = standardVouchers[vouchiesDPs[stateHelper-2]].notiz; 
           up_var     = standardVouchers[vouchiesDPs[stateHelper-2]].upload;
           down_var   = standardVouchers[vouchiesDPs[stateHelper-2]].download; 
           MBytes_var = standardVouchers[vouchiesDPs[stateHelper-2]].mb_begrenzung; 

           execCreateVoucher();
    }
   
    setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers_CreateStandard",1,4000);

   });  

//-----------------------------------------------SCHALTER Create own Voucher------------------------------------------------
on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Create",  val: true}, function (obj) { 
 
    expire_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Dauer").val;
    n_var      = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Anzahl").val ;
    quota_var  = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.MultiUse").val ;
    note_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Notiz").val;
    up_var     = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Upload").val ;
    down_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Download").val;
    MBytes_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Mb_Begrenzung").val ;
  
    execCreateVoucher();

});
//-----------------------------------------------Create Voucher Funktion------------------------------------------------
function execCreateVoucher(){
    mylog("bin in execCreateVoucher")
     if (expire_var !="must be set" && n_var!="must be set" && quota_var!="must be set" &&  !clientPause)  {
     //   Orginal JSON Daten
     /*   mybodyVouchers = {cmd:'create-voucher',expire:expire_var,   
                                        n:n_var, 
                                        quota:quota_var,
                                        note:note_var,
                                        up:up_var, 
                                        down:down_var,  
                                        MBytes:MBytes_var };*/

      var x = "{cmd:'create-voucher',expire:"+expire_var+", n:"+n_var+", quota:"+quota_var+","

        if (note_var != "")   x= x.concat('note:\"'+note_var+'\",')
        if (up_var != "")     x= x.concat("up:"+up_var+",")
        if (down_var != "")   x= x.concat("down:"+down_var+",")                                                        
        if (MBytes_var != "") x= x.concat("MBytes:"+MBytes_var+",")  

      x=x.substr(0, x.length-1);
      x=x.concat("}");
      //log (x);
      eval('var mybodyVouchers2='+x);
      mylog(mybodyVouchers2);
                                                   
      createVoucher(mybodyVouchers2);

    } else {log("FEHLER IN createVoucher - sind die 'must be set' Werte gesetzt?","error")}

   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Create",false, 4000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Dauer", "must be set" , 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Anzahl", "must be set", 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.MultiUse", "must be set", 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Notiz", "", 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Upload", "", 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Download", "", 2000);
   setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Mb_Begrenzung", "", 2000);
   mylog("bin raus aus execCreateVoucher")
}


//-----------------------------------------------MAIN LOOP------------------------------------------------
setInterval(async () => {

       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+"<tr><td>&ensp;</td><td>&ensp;</td></tr><tr style=\"color:"+color_iqontrol_text__voucher_ueberschrift+";\"><td><b>AP-Daten:</b></td><td><b><i>"+apName[ap_name].aname+"</i></b></td></tr>";
                                     workAP(apName[ap_name].aname); } 
                                 fs.writeFileSync(datei3,healthListe + apListe + tableAus+"</body>"); //schreibe Health mitAPs
                                 setState(dpPrefix + "WLANUnifi.Wifi_Info", "<table>"+healthListeTable +apListeTable + tableAus);
                     } else { fs.writeFileSync(datei3,apHead+healthListe+tableAus+"</body>"); //Schreibe Health ohne APs
                              setState(dpPrefix + "WLANUnifi.Wifi_Info", "<table>"+ 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;



    }, 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);