Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Unifi WLAN Script

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Unifi WLAN Script

Geplant Angeheftet Gesperrt Verschoben JavaScript
380 Beiträge 13 Kommentatoren 57.6k Aufrufe 13 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ChaotC Chaot

    Resultat:

    javascript.0	2019-09-12 21:56:10.366	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm7 - Health
    javascript.0	2019-09-12 21:56:10.102	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm4 - getVouchers-Login
    javascript.0	2019-09-12 21:56:09.819	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm3 - getClient-Login
    host.ioBroker	2019-09-12 21:55:09.565	info	instance system.adapter.javascript.0 started with pid 7688
    host.ioBroker	2019-09-12 21:55:09.533	info	object change system.adapter.javascript.0
    host.ioBroker	2019-09-12 21:55:08.522	info	instance system.adapter.javascript.1 started with pid 7681
    host.ioBroker	2019-09-12 21:55:08.496	info	object change system.adapter.javascript.1
    host.ioBroker	2019-09-12 21:55:05.066	info	instance system.adapter.javascript.1 terminated with code 156 ()
    host.ioBroker	2019-09-12 21:55:05.016	info	stopInstance system.adapter.javascript.1 killing pid 527
    host.ioBroker	2019-09-12 21:55:05.016	info	stopInstance system.adapter.javascript.1
    host.ioBroker	2019-09-12 21:55:05.016	info	"system.adapter.javascript.1" disabled
    host.ioBroker	2019-09-12 21:55:05.016	info	object change system.adapter.javascript.1
    host.ioBroker	2019-09-12 21:55:04.215	info	instance system.adapter.javascript.0 terminated with code 156 ()
    host.ioBroker	2019-09-12 21:55:04.164	info	stopInstance system.adapter.javascript.0 killing pid 436
    host.ioBroker	2019-09-12 21:55:04.164	info	stopInstance system.adapter.javascript.0
    host.ioBroker	2019-09-12 21:55:04.163	info	"system.adapter.javascript.0" disabled
    

    Der UniFi Adapter ist aktuell AUS. Macht das einen Unterschied?

    liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    schrieb am zuletzt editiert von
    #343

    @Chaot ich nutze den adapter nicht - ist bei mir aus

    so wie es aussieht, kann ersich einloggen - aber dann beim ersten holen der daten (getClient()) passiert ein fehler

    ich schau mal oib mir noch was einfällt

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    1 Antwort Letzte Antwort
    0
    • ChaotC Chaot

      Resultat:

      javascript.0	2019-09-12 21:56:10.366	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm7 - Health
      javascript.0	2019-09-12 21:56:10.102	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm4 - getVouchers-Login
      javascript.0	2019-09-12 21:56:09.819	warn	script.js.Unifi.UnifiNeu: Im Unifi Script stimmte etwas nicht - Alarm3 - getClient-Login
      host.ioBroker	2019-09-12 21:55:09.565	info	instance system.adapter.javascript.0 started with pid 7688
      host.ioBroker	2019-09-12 21:55:09.533	info	object change system.adapter.javascript.0
      host.ioBroker	2019-09-12 21:55:08.522	info	instance system.adapter.javascript.1 started with pid 7681
      host.ioBroker	2019-09-12 21:55:08.496	info	object change system.adapter.javascript.1
      host.ioBroker	2019-09-12 21:55:05.066	info	instance system.adapter.javascript.1 terminated with code 156 ()
      host.ioBroker	2019-09-12 21:55:05.016	info	stopInstance system.adapter.javascript.1 killing pid 527
      host.ioBroker	2019-09-12 21:55:05.016	info	stopInstance system.adapter.javascript.1
      host.ioBroker	2019-09-12 21:55:05.016	info	"system.adapter.javascript.1" disabled
      host.ioBroker	2019-09-12 21:55:05.016	info	object change system.adapter.javascript.1
      host.ioBroker	2019-09-12 21:55:04.215	info	instance system.adapter.javascript.0 terminated with code 156 ()
      host.ioBroker	2019-09-12 21:55:04.164	info	stopInstance system.adapter.javascript.0 killing pid 436
      host.ioBroker	2019-09-12 21:55:04.164	info	stopInstance system.adapter.javascript.0
      host.ioBroker	2019-09-12 21:55:04.163	info	"system.adapter.javascript.0" disabled
      

      Der UniFi Adapter ist aktuell AUS. Macht das einen Unterschied?

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #344

      @Chaot

      probier das mal aber bevor du es startest - wieder die instanzen neustarten - hier kommt etwas mehr log)

      
      let siteName ="default";   //Site name 
      
      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";
      
      
      
      
      // Datenpunkte Hauptpfad wählen - WICHTIG muss mit der javascript instanz, ind er das script läuft zusammenpassen
      const dpPrefix = "javascript.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 = true;
      let health = true;  // Angaben zum Systemstatus - die Healtdaten werden nur alle 5 Abfragezyklen geholt
      let aliasname=false; //benutzt alias namen, die im controller hinterlegt sind - anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige des Clients!!!
                          // es funktioniren auch die Anwesenheitserkennung nicht !!!!, wenn kein Alias im 
      
      // Hier Definition iqontrol-Style für Popup
      const format = "<!DOCTYPE html><html><head><title>Voucher</title></head><body><table style=\"color:black;text-align:center; font-family:Helvetica;background-image: linear-gradient(42deg,transparent, lightblue);\">";
      const format2 = "<!DOCTYPE html><html><head><title>Clients</title></head><body><table style=\"color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent, lightblue);\">";
      const format3 = "<table style=\"color:#848484; font-family:Helvetica;\">";
      
      //-----------------AB HIER NICHTS MEHR ÄNDERN------------------------
      let cookies = [];
      let loggedIn = false;
      let debug = false;
      let mylogs = false;
      let clientPause = false;
      let clientPauseVal;
      let wifiDPs = [];
      let myname = 'hostname';
      let respv;
      let respc;
      let respw;
      let resph;
      let respgv;
      let statusarr=[];
      let versuch;
      let listeDatenpunkte = [];
      let lastChange=[];
      let testerrc=false;
      let testerrl=false;
      let testerrv=false;
      let testerrs=false;
      let testerrh=false;
      let testerrcv=false;
      let testerrws=false;
      var scriptCounter=0;
      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: 'Unifi Wifi Clients Table', 
         role: 'string',
         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: 'Unifi Wifi Vouchers_Table', 
         role: 'string',
         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-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_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 });
      
      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 });   }
      
      
      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) => {
             log("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);
      log("--------------------- " + respc);
      //respc = JSON.parse(respc);
      
      //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="";
      for(var index in unfiltered) {
         let device = unfiltered[index];
        
         if(device[myname] !== undefined && device.essid !== undefined) {versuch.push(device); } /*else {if (aliasname) {trash = trash+unfiltered[index].hostname+","}
                                                                                                       else {trash = trash+device[name]+","}}*/
         //if(device[myname] !== undefined) {trash = trash+unfiltered[index].hostname+","}
      }
      setState(dpPrefix + "WLANUnifi.Aussortiert", 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 " + JSON.stringify(respc));
          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);
      
      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[3]);
      
      
      let notSeen=[];
      // 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) {
       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
                           setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+listeDatenpunkte[z], false, 500);
                        
                           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
      
      
      
      for (var z = 0; z < listeDatenpunkteNew.length; z++)  {
      
         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");
             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>");
         }  
      }
      
      
      
      mylog("Status4");
      // erstelle htmlclientliste  
          
           for (var i = 0; i < versuch.length; i++)  {
             dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
             if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {  
                 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:#01A9DB; font-family:Helvetica;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>");}
             }
           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:#01A9DB; font-family:Helvetica;font-style: italic;\" ><td>"+notSeen[h]+
                   "&ensp;</td><td>noConn&ensp;&ensp;&ensp;&ensp;</td><td>noConn&ensp;&ensp;</td><td>noConn</td></tr>");
            }
      mylog("Status5");
      
      if (iqontrol && anwesenheit ) {
         
         lastChangeList=format3;
         for (var g = lastChange.length-1; g >= 0 ; g--)  {
             lastChangeList=lastChangeList.concat(lastChange[g]/*+"</table>"*/); 
             lastChangeList.concat(lastChange[g]+"</table>");
            }
      
         fs.writeFileSync(datei2, format2+clientListe.concat("</table><p style=\"color:#01A9DB; font-family:Helvetica;\">Geamtanzahl angemeldeter Clients:"+anzahlClients+"<br>Insgesamt Clients registriert: "+ listeDatenpunkte.length+
                                                            "</p><p style=\"color:#848484; font-family:Helvetica;\">Letzter Wechsel im Netzwerk:<br>"+lastChangeList+"</p>"
         ));
         //if (lastChange.length>10) lastChange=[];
      }
      dlog("ClientFile schreibt! "+iqontrol.toString()+writeClientTable.toString());
      if (true) setState(dpPrefix + "WLANUnifi.Wifi_Clients", "<table>"+clientListe.concat("</table>")); //schreibe client table
      mylog("bin raus aus  workclients");
      
      }, 2500);}
      
      
      } //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);
      
      
         dlog("--------------------- " + respv);
      dlog(respv.meta);
      dlog(respv.meta.rc);
      dlog(respv.data[1].code);
      dlog(respv.data.length);
      dlog(JSON.stringify(respv).length.toString());
      var writeFile;
      var laengeMessage=JSON.stringify(respv).length;
      if (laengeMessage==writeFileVar) {writeFile = false;} else {writeFile=true}
      var writeFileVar=JSON.stringify(respv).length;
      
      if (writeFile) {
      var clientListe = "<tr><td>DAUER&ensp;</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 i = 1; i < 21; i++) { 
         var x=i.toString();
         if ( i < 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
        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; ";}
         
        clientListe = clientListe.concat("<tr><td>"+respv.data[i].duration+"&ensp;</td><td>"+respv.data[i].status_expires+"&ensp;&ensp;&ensp;&ensp;</td><td>"+respv.data[i].code+"&ensp;&ensp;</td><td>" +zeit1 + "&ensp;&ensp;</td><td>"+notizen+"</td></tr>");
        var y=i+1; 
        var yy=y.toString();
        if (y<10 )  yy="0"+yy;
       
        if (i<20  )  {
            dlog(zeit1);
            setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".code"+yy, 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 );
            
        }}
      }
      
      //Datenpunkteäalt löschen
      var w = respv.data.length;
      for (i = w; 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 " );
      }
      }
      
      if (iqontrol && writeFile) {fs.writeFileSync(datei, format + clientListe.concat("</table></style></body></html><p style=\"color:blue; font-family:Helvetica;\">Geamtanzahl Vouchers:"+respv.data.length+"</p>"));}
      if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers", "<table>"+clientListe.concat("</table></style></body></html>"));
      if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_Anzahl", respv.data.length);
      //mylog("BIN RAUS AUS  workvouchers");
      
      }
      //-----------------------------------------GET--Health---------------------------------------------------------------
      async function getHealth() {
          if (vouchers)  {
           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);
         dlog("--------------------- " + resph);
         resph=resph.replace(/-r/g, "_r")
         resph = JSON.parse(resph);
         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 );
      
         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;
                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----------------------------------------------
      //Wifi an-/ausschalten
      //enabled: true = anschalten; false = ausschalten
      //wifi: wifi object aus der konstanten wifis
      async function createVoucher (mybody) {
      
        mylog(JSON.stringify( mybody ));
        return new Promise(async (resolve, reject) => {
            log("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; });
            log("setWifi: got response")
            log("------------: "+respcv);
      
        });
      }
      
      //-----------------------------------------------SCHALTER------------------------------------------------
      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 Create Voucher------------------------------------------------
      on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Create",  val: true}, function (obj) { 
        var mybodyVouchers;
        var expire_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Dauer").val;
        var n_var      = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Anzahl").val ;
        var quota_var  = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.MultiUse").val ;
        var note_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Notiz").val;
        var up_var     = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Upload").val ;
        var down_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Download").val;
        var MBytes_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Mb_Begrenzung").val ;
      
          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 mybodyVouchers='+x);
           log(mybodyVouchers);
                                                        
           createVoucher(mybodyVouchers);
      
         } 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);
      });
      
      
      //-----------------------------------------------MAIN LOOP------------------------------------------------
      setInterval(async () => {
      
            // for (let suche in wifis) {
            // if ( getState(dpPrefix + "WLANUnifi."+suche).val == null ) {log("datanpunkt ist null")} else {log("datanpunkt ist geschrieben - nicht null")};}
      
      
          scriptCounter++
          mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
          mylog(loggedIn.toString())
              
          await login().catch(alarm1)  
      
        // log("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs + " - "+testerrh);
      
      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);
          if ( !testerrl && !testerrc && !testerrv && !testerrs && !testerrh ) {
                 workVouchers();
                if (!clientPause) workClients();
                 if (health && scriptCounter==5) {scriptCounter=0;workHealth();}
                 }
        
                 
         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;log("Unifi Script hat Pause beendet"  );}  }
      
                
       testerrc=false;
           testerrv=false;
            testerrs=false;
             testerrl=false;
              testerrc=false;
               testerrh=false;
      
      
      
         }, abfragezyklus); // wird oben definiert
      
      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 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);
      

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      1 Antwort Letzte Antwort
      0
      • ChaotC Offline
        ChaotC Offline
        Chaot
        schrieb am zuletzt editiert von
        #345

        BINGO!

        Sitename ist der Fehler!

        Nennt sich zwar "Haus" auf der Benutzeroberfläche, der link lautet aber "ka118xps"
        Ich habe das bei "let SiteName" eingestellt und der Login scheint zu laufen bzw. die Daten kommen.
        Jetzt habe ich zwar eine neue Fehlermeldung:

        javascript.0	2019-09-12 22:07:13.943	error	at listOnTimeout (timers.js:263:5)
        javascript.0	2019-09-12 22:07:13.943	error	at tryOnTimeout (timers.js:300:5)
        javascript.0	2019-09-12 22:07:13.942	error	at ontimeout (timers.js:438:13)
        javascript.0	2019-09-12 22:07:13.942	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1888:34)
        javascript.0	2019-09-12 22:07:13.942	error	at Object.<anonymous> (script.js.Unifi.UnifiNeu:504:35)
        javascript.0	2019-09-12 22:07:13.941	error	Error in callback: ReferenceError: apName is not defined
        

        aber das wird sich dann auch noch lösen :clap:

        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

        liv-in-skyL 1 Antwort Letzte Antwort
        0
        • ChaotC Chaot

          BINGO!

          Sitename ist der Fehler!

          Nennt sich zwar "Haus" auf der Benutzeroberfläche, der link lautet aber "ka118xps"
          Ich habe das bei "let SiteName" eingestellt und der Login scheint zu laufen bzw. die Daten kommen.
          Jetzt habe ich zwar eine neue Fehlermeldung:

          javascript.0	2019-09-12 22:07:13.943	error	at listOnTimeout (timers.js:263:5)
          javascript.0	2019-09-12 22:07:13.943	error	at tryOnTimeout (timers.js:300:5)
          javascript.0	2019-09-12 22:07:13.942	error	at ontimeout (timers.js:438:13)
          javascript.0	2019-09-12 22:07:13.942	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1888:34)
          javascript.0	2019-09-12 22:07:13.942	error	at Object.<anonymous> (script.js.Unifi.UnifiNeu:504:35)
          javascript.0	2019-09-12 22:07:13.941	error	Error in callback: ReferenceError: apName is not defined
          

          aber das wird sich dann auch noch lösen :clap:

          liv-in-skyL Offline
          liv-in-skyL Offline
          liv-in-sky
          schrieb am zuletzt editiert von liv-in-sky
          #346

          @Chaot schaut doch viel besse raus - du mußt noch die aps definieren

          hier mal das ganze script constante "apName" fehlt im moment bei dir 3ter block von oben
          ich habe 2 ap's - du musst deine eintragen

          // September 2019 @liv-in-sky durch viel vorarbeit von @thewhobox (api verbindung)
          
          // Definition Login
          const unifi_username = "username";
          const unifi_password = "passowort!";
          const unifi_controller = "https://192.168.xxx.xxx:8443";
          
          
          // DEFINITION der zu anzeigenden Netzwerke am besten bis auf id und smart alle gleich setzen
          const wifis = {
            "WLAN_Dragon1": { name: "WLAN_Dragon1", id: "5cadcaxxxxxxxxxdd7e5381", desc: "WLAN_Dragon1", smart: "WLAN_DragonRoot1" } ,
           
            "WLAN_DragonGuest": { name: "WLAN_DragonGuest", id: "5d6512a8xxxxxxxedd761", desc: "WLAN_DragonGuest", smart: "WLAN_DragonGuest" }
          }
          
          const apName = {  "b4:yy:yy:yy:96:63" : { aname: "AP-LongR"},
                           "18:yy:29:yy:40:yy" : { aname: "AP-Light"}
          }
          
          let siteName ="default";   //Site name 
          
          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";
          
          
          
          
          // Datenpunkte Hauptpfad wählen - WICHTIG muss mit der javascript instanz, ind er das script läuft zusammenpassen
          const dpPrefix = "javascript.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 = true;
          let health = true;  // Angaben zum Systemstatus - die Healtdaten werden nur alle 5 Abfragezyklen geholt
          let aliasname=false; //benutzt alias namen, die im controller hinterlegt sind - anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige des Clients!!!
                              // es funktioniren auch die Anwesenheitserkennung nicht !!!!, wenn kein Alias im 
          
          // Hier Definition iqontrol-Style für Popup
          const format = "<!DOCTYPE html><html><head><title>Voucher</title></head><body><table style=\"color:black;text-align:center; font-family:Helvetica;background-image: linear-gradient(42deg,transparent, lightblue);\">";
          const format2 = "<!DOCTYPE html><html><head><title>Clients</title></head><body><table style=\"color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent, lightblue);\">";
          const format3 = "<table style=\"color:#848484; font-family:Helvetica;\">";
          
          //-----------------AB HIER NICHTS MEHR ÄNDERN------------------------
          let cookies = [];
          let loggedIn = false;
          let debug = false;
          let mylogs = false;
          let clientPause = false;
          let clientPauseVal;
          let wifiDPs = [];
          let myname = 'hostname';
          let respv;
          let respc;
          let respw;
          let resph;
          let respgv;
          let statusarr=[];
          let versuch;
          let listeDatenpunkte = [];
          let lastChange=[];
          let testerrc=false;
          let testerrl=false;
          let testerrv=false;
          let testerrs=false;
          let testerrh=false;
          let testerrcv=false;
          let testerrws=false;
          var scriptCounter=0;
          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: 'Unifi Wifi Clients Table', 
             role: 'string',
             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: 'Unifi Wifi Vouchers_Table', 
             role: 'string',
             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-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_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 });
          
          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 });   }
          
          
          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) => { dlog("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.parse(respc);
          
          //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="";
          for(var index in unfiltered) {
             let device = unfiltered[index];
            
             if(device[myname] !== undefined && device.essid !== undefined) {versuch.push(device); } /*else {if (aliasname) {trash = trash+unfiltered[index].hostname+","}
                                                                                                           else {trash = trash+device[name]+","}}*/
             //if(device[myname] !== undefined) {trash = trash+unfiltered[index].hostname+","}
          }
          setState(dpPrefix + "WLANUnifi.Aussortiert", 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 " + JSON.stringify(respc));
              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);
          
          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[3]);
          
          
          let notSeen=[];
          // 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) {
           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
                               setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+listeDatenpunkte[z], false, 500);
                            
                               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
          
          
          
          for (var z = 0; z < listeDatenpunkteNew.length; z++)  {
          
             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");
                 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>");
             }  
          }
          
          
          
          mylog("Status4");
          // erstelle htmlclientliste  
              
               for (var i = 0; i < versuch.length; i++)  {
                 dlog(versuch[i][myname] + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
                 if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {  
                     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:#01A9DB; font-family:Helvetica;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>");}
                 }
               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:#01A9DB; font-family:Helvetica;font-style: italic;\" ><td>"+notSeen[h]+
                       "&ensp;</td><td>noConn&ensp;&ensp;&ensp;&ensp;</td><td>noConn&ensp;&ensp;</td><td>noConn</td></tr>");
                }
          mylog("Status5");
          
          if (iqontrol && anwesenheit ) {
             
             lastChangeList=format3;
             for (var g = lastChange.length-1; g >= 0 ; g--)  {
                 lastChangeList=lastChangeList.concat(lastChange[g]/*+"</table>"*/); 
                 lastChangeList.concat(lastChange[g]+"</table>");
                }
          
             fs.writeFileSync(datei2, format2+clientListe.concat("</table><p style=\"color:#01A9DB; font-family:Helvetica;\">Geamtanzahl angemeldeter Clients:"+anzahlClients+"<br>Insgesamt Clients registriert: "+ listeDatenpunkte.length+
                                                                "</p><p style=\"color:#848484; font-family:Helvetica;\">Letzter Wechsel im Netzwerk:<br>"+lastChangeList+"</p>"
             ));
             //if (lastChange.length>10) lastChange=[];
          }
          dlog("ClientFile schreibt! "+iqontrol.toString()+writeClientTable.toString());
          if (true) setState(dpPrefix + "WLANUnifi.Wifi_Clients", "<table>"+clientListe.concat("</table>")); //schreibe client table
          mylog("bin raus aus  workclients");
          
          }, 2500);}
          
          
          } //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);
          
          
             dlog("--------------------- " + respv);
          dlog(respv.meta);
          dlog(respv.meta.rc);
          dlog(respv.data[1].code);
          dlog(respv.data.length);
          dlog(JSON.stringify(respv).length.toString());
          var writeFile;
          var laengeMessage=JSON.stringify(respv).length;
          if (laengeMessage==writeFileVar) {writeFile = false;} else {writeFile=true}
          var writeFileVar=JSON.stringify(respv).length;
          
          if (writeFile) {
          var clientListe = "<tr><td>DAUER&ensp;</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 i = 1; i < 21; i++) { 
             var x=i.toString();
             if ( i < 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
            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; ";}
             
            clientListe = clientListe.concat("<tr><td>"+respv.data[i].duration+"&ensp;</td><td>"+respv.data[i].status_expires+"&ensp;&ensp;&ensp;&ensp;</td><td>"+respv.data[i].code+"&ensp;&ensp;</td><td>" +zeit1 + "&ensp;&ensp;</td><td>"+notizen+"</td></tr>");
            var y=i+1; 
            var yy=y.toString();
            if (y<10 )  yy="0"+yy;
           
            if (i<20  )  {
                dlog(zeit1);
                setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".code"+yy, 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 );
                
            }}
          }
          
          //Datenpunkteäalt löschen
          var w = respv.data.length;
          for (i = w; 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 " );
          }
          }
          
          if (iqontrol && writeFile) {fs.writeFileSync(datei, format + clientListe.concat("</table></style></body></html><p style=\"color:blue; font-family:Helvetica;\">Geamtanzahl Vouchers:"+respv.data.length+"</p>"));}
          if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers", "<table>"+clientListe.concat("</table></style></body></html>"));
          if (writeFile) setState(dpPrefix + "WLANUnifi.Wifi_Vouchers_Anzahl", respv.data.length);
          //mylog("BIN RAUS AUS  workvouchers");
          
          }
          //-----------------------------------------GET--Health---------------------------------------------------------------
          async function getHealth() {
              if (vouchers)  {
               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);
             dlog("--------------------- " + resph);
             resph=resph.replace(/-r/g, "_r")
             resph = JSON.parse(resph);
             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 );
          
             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;
                    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----------------------------------------------
          //Wifi an-/ausschalten
          //enabled: true = anschalten; false = ausschalten
          //wifi: wifi object aus der konstanten wifis
          async function createVoucher (mybody) {
          
            mylog(JSON.stringify( mybody ));
            return new Promise(async (resolve, reject) => {
                log("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; });
                log("setWifi: got response")
                log("------------: "+respcv);
          
            });
          }
          
          //-----------------------------------------------SCHALTER------------------------------------------------
          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 Create Voucher------------------------------------------------
          on({id:  dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Create",  val: true}, function (obj) { 
            var mybodyVouchers;
            var expire_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Dauer").val;
            var n_var      = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Anzahl").val ;
            var quota_var  = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.MultiUse").val ;
            var note_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Notiz").val;
            var up_var     = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Upload").val ;
            var down_var   = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Download").val;
            var MBytes_var = getState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.A_New_Voucher.Mb_Begrenzung").val ;
          
              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 mybodyVouchers='+x);
               log(mybodyVouchers);
                                                            
               createVoucher(mybodyVouchers);
          
             } 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);
          });
          
          
          //-----------------------------------------------MAIN LOOP------------------------------------------------
          setInterval(async () => {
          
                // for (let suche in wifis) {
                // if ( getState(dpPrefix + "WLANUnifi."+suche).val == null ) {log("datanpunkt ist null")} else {log("datanpunkt ist geschrieben - nicht null")};}
          
          
              scriptCounter++
              mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
              mylog(loggedIn.toString())
                  
              await login().catch(alarm1)  
          
            // log("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs + " - "+testerrh);
          
          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);
              if ( !testerrl && !testerrc && !testerrv && !testerrs && !testerrh ) {
                     workVouchers();
                    if (!clientPause) workClients();
                     if (health && scriptCounter==5) {scriptCounter=0;workHealth();}
                     }
            
                     
             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;log("Unifi Script hat Pause beendet"  );}  }
          
                    
           testerrc=false;
               testerrv=false;
                testerrs=false;
                 testerrl=false;
                  testerrc=false;
                   testerrh=false;
          
          
          
             }, abfragezyklus); // wird oben definiert
          
          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 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);
          
          

          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

          1 Antwort Letzte Antwort
          0
          • dslraserD Offline
            dslraserD Offline
            dslraser
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #347

            @liv-in-sky
            bei mir läuft es, inklusive Sitname (ist aber default bei mir)
            Name anstatt Hostname funktioniert auch.
            Meinen Switch habe ich eingetragen, da kommen aber keine Geräte. Es kommen nur WLAN Geräte von den AP. Die iQontrol Liste klappt auch, inklusive AP Namen, wo welches Gerätes angemeldet ist.
            Hier mal die Liste (damit kann ja sonst keiner was anfangen, sind ja nur interne IP)

            Bildschirmfoto 2019-09-12 um 22.11.13.png

            liv-in-skyL 1 Antwort Letzte Antwort
            0
            • ChaotC Offline
              ChaotC Offline
              Chaot
              schrieb am zuletzt editiert von
              #348

              Ja!
              Die Zeile habe ich scheinbar versehentlich überschrieben.
              Die ersten Daten sind da. Voucher sind auch da. Health fehlt noch, aber ich denke mal das wird auch noch kommen.
              Create Voucher werde ich auch morgen versuchen.
              Ganz herzlichen Dank für deine Hilfe :clap: :clap: :clap:

              ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

              1 Antwort Letzte Antwort
              0
              • dslraserD dslraser

                @liv-in-sky
                bei mir läuft es, inklusive Sitname (ist aber default bei mir)
                Name anstatt Hostname funktioniert auch.
                Meinen Switch habe ich eingetragen, da kommen aber keine Geräte. Es kommen nur WLAN Geräte von den AP. Die iQontrol Liste klappt auch, inklusive AP Namen, wo welches Gerätes angemeldet ist.
                Hier mal die Liste (damit kann ja sonst keiner was anfangen, sind ja nur interne IP)

                Bildschirmfoto 2019-09-12 um 22.11.13.png

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #349

                @dslraser

                ok - machst du wieder einen dauertest ?

                @Chaot - klasse - dann probier mal etwas rum mit handy enloggen und so

                du weißt: die daten sichtbar machen entweder mit iqontrol oder in der vis mit einem htmlwidget und mit einem binding
                Image 1.png

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                dslraserD liv-in-skyL 2 Antworten Letzte Antwort
                0
                • liv-in-skyL liv-in-sky

                  @dslraser

                  ok - machst du wieder einen dauertest ?

                  @Chaot - klasse - dann probier mal etwas rum mit handy enloggen und so

                  du weißt: die daten sichtbar machen entweder mit iqontrol oder in der vis mit einem htmlwidget und mit einem binding
                  Image 1.png

                  dslraserD Offline
                  dslraserD Offline
                  dslraser
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #350

                  @liv-in-sky sagte in Unifi WLAN Script:

                  ok - machst du wieder einen dauertest ?

                  ja, ich lasse es jetzt bis morgen laufen.
                  Heute ist mein dritter AP für den Keller gekommen, aber vielleicht verbaue ich den auch erst am WE.

                  1 Antwort Letzte Antwort
                  0
                  • liv-in-skyL liv-in-sky

                    @dslraser

                    ok - machst du wieder einen dauertest ?

                    @Chaot - klasse - dann probier mal etwas rum mit handy enloggen und so

                    du weißt: die daten sichtbar machen entweder mit iqontrol oder in der vis mit einem htmlwidget und mit einem binding
                    Image 1.png

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von
                    #351

                    @dslraser
                    ich mach morgen einen neuen thread - dann kann ich im ersten post immer das aktuelle script einpflegen

                    schön langsam kommt es zum ende und eine beschreibung muß ich auch machen

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    dslraserD 1 Antwort Letzte Antwort
                    0
                    • liv-in-skyL liv-in-sky

                      @dslraser
                      ich mach morgen einen neuen thread - dann kann ich im ersten post immer das aktuelle script einpflegen

                      schön langsam kommt es zum ende und eine beschreibung muß ich auch machen

                      dslraserD Offline
                      dslraserD Offline
                      dslraser
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #352

                      @liv-in-sky sagte in Unifi WLAN Script:

                      @dslraser
                      ich mach morgen einen neuen thread - dann kann ich im ersten post immer das aktuelle script einpflegen

                      schön langsam kommt es zum ende und eine beschreibung muß ich auch machen

                      okay, finde ich gut. Dann brauchen andere Interessierte nicht lange alles hier zusammen suchen. Wir beiden wissen ja von Anfang an wie/wo/was usw., aber nicht Jeder wird das hier alles lesen wollen.

                      1 Antwort Letzte Antwort
                      0
                      • ChaotC Offline
                        ChaotC Offline
                        Chaot
                        schrieb am zuletzt editiert von
                        #353

                        Was mir bereits aufgefallen ist:
                        In der Tabelle bekomme ich den Hostname angezeigt.
                        An welcher Stelle sollten die Alias kommen?

                        Zur Beschreibung bzw Anleitung als Hinweis
                        Der Name der Site kommt hier:

                        https://192.168.xxxxxx:8443/manage/site/ka118xps/clients/list/1/50
                        

                        in meinem Fall ist das "ka118xps" bei default steht da nur "default"

                        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                        dslraserD 1 Antwort Letzte Antwort
                        0
                        • ChaotC Chaot

                          Was mir bereits aufgefallen ist:
                          In der Tabelle bekomme ich den Hostname angezeigt.
                          An welcher Stelle sollten die Alias kommen?

                          Zur Beschreibung bzw Anleitung als Hinweis
                          Der Name der Site kommt hier:

                          https://192.168.xxxxxx:8443/manage/site/ka118xps/clients/list/1/50
                          

                          in meinem Fall ist das "ka118xps" bei default steht da nur "default"

                          dslraserD Offline
                          dslraserD Offline
                          dslraser
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #354

                          @Chaot

                          let aliasname=true; //benutzt alias namen, die im controller hinterlegt sind - anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige des Clients!!!
                                              // es funktioniren auch die Anwesenheitserkennung nicht !!!!, wenn kein Alias im 
                           
                          
                          1 Antwort Letzte Antwort
                          0
                          • ChaotC Offline
                            ChaotC Offline
                            Chaot
                            schrieb am zuletzt editiert von
                            #355

                            Gerade auch gefunden.
                            Danke. Ich werde das mal über Nacht laufen lassen und schauen ob alle Daten eintrudeln.
                            Der Adapter braucht ja auch immer mehrere Tage bis alles da ist.

                            ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                            dslraserD 2 Antworten Letzte Antwort
                            0
                            • ChaotC Chaot

                              Gerade auch gefunden.
                              Danke. Ich werde das mal über Nacht laufen lassen und schauen ob alle Daten eintrudeln.
                              Der Adapter braucht ja auch immer mehrere Tage bis alles da ist.

                              dslraserD Offline
                              dslraserD Offline
                              dslraser
                              Forum Testing Most Active
                              schrieb am zuletzt editiert von
                              #356

                              @Chaot sagte in Unifi WLAN Script:

                              bis alles da ist.

                              es sollte nach ein zwei Minuten alles da sein. Was fehlt denn ?

                              1 Antwort Letzte Antwort
                              0
                              • ChaotC Chaot

                                Gerade auch gefunden.
                                Danke. Ich werde das mal über Nacht laufen lassen und schauen ob alle Daten eintrudeln.
                                Der Adapter braucht ja auch immer mehrere Tage bis alles da ist.

                                dslraserD Offline
                                dslraserD Offline
                                dslraser
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von dslraser
                                #357

                                @Chaot
                                und was ich noch nicht probiert habe...Wenn Du erst auf Hostname das Script startest und dann umstellst auf aliasname (ich denke dann solltest Du einmal das Script stoppen und alle DP löschen, dann aliasname auf true und wieder starten)
                                Ich weiß nicht ob die DP sonst überschrieben werden, oder nicht ? @liv-in-sky ?

                                ChaotC 1 Antwort Letzte Antwort
                                0
                                • dslraserD dslraser

                                  @Chaot
                                  und was ich noch nicht probiert habe...Wenn Du erst auf Hostname das Script startest und dann umstellst auf aliasname (ich denke dann solltest Du einmal das Script stoppen und alle DP löschen, dann aliasname auf true und wieder starten)
                                  Ich weiß nicht ob die DP sonst überschrieben werden, oder nicht ? @liv-in-sky ?

                                  ChaotC Offline
                                  ChaotC Offline
                                  Chaot
                                  schrieb am zuletzt editiert von
                                  #358

                                  @dslraser Es werden die Datenpunkte überschrieben.
                                  Ok, Stoppen und Straten war schon nötig, aber Löschen nicht.

                                  Es scheint alles da zu sein bis auf 3 Clients die irgendwie nicht übertragen werden.
                                  Im Controler habe ich 31 aktive Clients, im ioBroker 28?

                                  Wie generiere ich eigentlich einen Voucher?
                                  Anzahl 1
                                  Dauer 24
                                  MultiUse ? 0 oder false?
                                  Create auf True

                                  ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                  dslraserD 2 Antworten Letzte Antwort
                                  0
                                  • ChaotC Chaot

                                    @dslraser Es werden die Datenpunkte überschrieben.
                                    Ok, Stoppen und Straten war schon nötig, aber Löschen nicht.

                                    Es scheint alles da zu sein bis auf 3 Clients die irgendwie nicht übertragen werden.
                                    Im Controler habe ich 31 aktive Clients, im ioBroker 28?

                                    Wie generiere ich eigentlich einen Voucher?
                                    Anzahl 1
                                    Dauer 24
                                    MultiUse ? 0 oder false?
                                    Create auf True

                                    dslraserD Offline
                                    dslraserD Offline
                                    dslraser
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #359

                                    @Chaot

                                    https://forum.iobroker.net/post/299109

                                    dslraserD 1 Antwort Letzte Antwort
                                    0
                                    • dslraserD dslraser

                                      @Chaot

                                      https://forum.iobroker.net/post/299109

                                      dslraserD Offline
                                      dslraserD Offline
                                      dslraser
                                      Forum Testing Most Active
                                      schrieb am zuletzt editiert von dslraser
                                      #360

                                      @Chaot

                                      "m Controler habe ich 31 aktive Clients, im ioBroker 28?"

                                      über hostname oder aliasname im Script ?

                                      1 Antwort Letzte Antwort
                                      0
                                      • ChaotC Chaot

                                        @dslraser Es werden die Datenpunkte überschrieben.
                                        Ok, Stoppen und Straten war schon nötig, aber Löschen nicht.

                                        Es scheint alles da zu sein bis auf 3 Clients die irgendwie nicht übertragen werden.
                                        Im Controler habe ich 31 aktive Clients, im ioBroker 28?

                                        Wie generiere ich eigentlich einen Voucher?
                                        Anzahl 1
                                        Dauer 24
                                        MultiUse ? 0 oder false?
                                        Create auf True

                                        dslraserD Offline
                                        dslraserD Offline
                                        dslraser
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von dslraser
                                        #361

                                        @Chaot sagte in Unifi WLAN Script:

                                        Anzahl 1
                                        Dauer 24
                                        MultiUse ? 0 oder false?
                                        Create auf True

                                        Anzahl 1 (oder mehr)
                                        Dauer in Minuten
                                        MultiUse 0 = dauerhaft
                                        MultiUse 1 = einmal Benutzung
                                        MultiUse z.B. 5 = 5 mal Benutzung
                                        Create auf True

                                        1 Antwort Letzte Antwort
                                        0
                                        • ChaotC Offline
                                          ChaotC Offline
                                          Chaot
                                          schrieb am zuletzt editiert von
                                          #362

                                          Jetzt bin ich verwirrt.
                                          Im WiFiClient States stehen 36 Geräte
                                          In Wifi_Clients_Anzahl stehen 28
                                          im Table stehen 31 Geräte

                                          Ich gehe jetzt einfach ins Bett. Das löst die meisten Computerprobleme :confounded:

                                          ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          420

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe