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.6k

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

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

Unifi WLAN Script

Geplant Angeheftet Gesperrt Verschoben JavaScript
380 Beiträge 13 Kommentatoren 57.5k 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.
  • dslraserD dslraser

    @liv-in-sky

    Edit: auch wenn das Handy nicht im Standby ist kommt die An und Abmeldung alle 20 Minuten.

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

    @dslraser sagte in Unifi WLAN Script:

    @liv-in-sky

    Edit: auch wenn das Handy nicht im Standby ist kommt die An und Abmeldung alle 20 Minuten.

    die an-abmelde funktion im script wird auf 2 wegen ermittelt: wenn ein handy nicht angemeldet ist, verschwindet es aus der auflistung (kommende daten) des controllers - das dauert auch mal bis zu 5 minuten - dann wird es auf faslch gesetzt.
    und zum anderen über die last_seen_by_uap

    mit dieser version des scripts siehst du in iqontrol die last_seen zeit in sekunden unter der clienten liste - vielleicht fällt was auf

    • was ich nicht verstehe ist, warum auch ohne standby das handy ab und anmeldet - habe auch samsung gerät - da passiert das nicht
    • bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

    script instanz prüfen - datenpunkte löschen (habe auch den gewünschten datenpunkt in switch geändert - bitte prüfen)

    
    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, inder das script läuft zusammenpassen
    const dpPrefix = "javascript.2.";
    
    //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
    
    // 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 realname="hostname";
    let respv;
    let respc;
    let respw;
    let statusarr=[];
    let versuch;
    let listeDatenpunkte = [];
    let lastChange=[];
    let testerrc=false;
    let testerrl=false;
    let testerrv=false;
    let testerrs=false;
    let firstTime=0;
    var wifiLength=0;
         for(let wifi_name in wifis) {      
       wifiLength++; }
    
    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"
          } });}
    
    
    if (true) {
    createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
       name: 'Unifi Wifi Clients Table', 
       role: 'string',
       read:  true, 
       write: true,
    });}
    
    
    
    if (vouchers) {
    createState(dpPrefix + "WLANUnifi.Wifi_Vouchers", {
       name: 'Unifi Wifi Vouchers_Table', 
       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 }); 
    
    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/default/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/default/stat/sta",
               headers: { Cookie: cookies.join("; ") }
           }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
            
      if (!testerrc) {     
    dlog("got respconse nach log in getclient " + JSON.stringify(respc));
    dlog(typeof respc);
    dlog("--------------------- " + respc);
    //respc = JSON.parse(respc);
    
    //Sortierung Daten und Verwandlung Json
    
    var unfiltered = [];
    unfiltered = JSON.parse(respc).data;
    dlog(unfiltered[2].hostname + unfiltered[2].mac);
    versuch = [];
    for(var index in unfiltered) {
       let device = unfiltered[index];
       if(device.hostname !== undefined && device.essid !== undefined)
           versuch.push(device);
    }
    versuch.sort(function (alpha, beta) {
       if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
           return -1;
       if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
      dlog (listeDatenpunkteNew[3]);
    
    // 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."+versuch[z].hostname;
                      createState(data, true, {
                      name: ipWandler, 
                      role: 'boolean',
                      read:  true, 
                      write: true,
                     }, function() {mylog("created");
                      });
                      //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
    
                   //  {setState(data, true);
                      mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                  } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                   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]);}
    
                  
     } }  
    
    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].hostname).val) {
           setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("abwesend: "+listeDatenpunkteNew[z]+" um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");   
           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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
           setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("anwesend: "+ listeDatenpunkteNew[z]+ " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");
           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 wenn listenDaten verändert  
        
         for (var i = 0; i < versuch.length; i++)  {
           dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
           if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
           clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
           dlog(clientListe);}  
           else {anzahlClients=anzahlClients-1;}
           }
         setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
    
    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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
    
      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 + "</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");
    
    }
    
    
    //-----------------------------------------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) {
      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/default/upd/wlanconf/" + wifi.id,
              body: JSON.stringify({ enabled }),
              headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
          }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
          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) {       
              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);
          }
      });
    }
    
    
    
    //-----------------------------------------------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++;
     
     
              
    });
    
    let scriptCounter=0;
    let alarmSwitch =false;
    let alarmCounter =0;
    
    //-----------------------------------------------MAIN LOOP------------------------------------------------
    setInterval(async () => {
    
        scriptCounter++
        mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
        mylog(loggedIn.toString())
            
        await login().catch(alarm1)  
    
       mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
    
    if (loggedIn) {
        if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
        if (alarmCounter > 0) {alarmCounter=0; }
        
        await getClients().catch(alarm3)  ;
        await getVouchers().catch(alarm4)
    
        if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
               workVouchers();
               workClients();}
               
       for(let wifi_name in wifis) {
           
           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;
    
    
    
       }, abfragezyklus); // wird oben definiert
    
    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);
    
    

    Image 2.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 HiltexH 3 Antworten Letzte Antwort
    0
    • liv-in-skyL liv-in-sky

      @dslraser sagte in Unifi WLAN Script:

      @liv-in-sky

      Edit: auch wenn das Handy nicht im Standby ist kommt die An und Abmeldung alle 20 Minuten.

      die an-abmelde funktion im script wird auf 2 wegen ermittelt: wenn ein handy nicht angemeldet ist, verschwindet es aus der auflistung (kommende daten) des controllers - das dauert auch mal bis zu 5 minuten - dann wird es auf faslch gesetzt.
      und zum anderen über die last_seen_by_uap

      mit dieser version des scripts siehst du in iqontrol die last_seen zeit in sekunden unter der clienten liste - vielleicht fällt was auf

      • was ich nicht verstehe ist, warum auch ohne standby das handy ab und anmeldet - habe auch samsung gerät - da passiert das nicht
      • bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

      script instanz prüfen - datenpunkte löschen (habe auch den gewünschten datenpunkt in switch geändert - bitte prüfen)

      
      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, inder das script läuft zusammenpassen
      const dpPrefix = "javascript.2.";
      
      //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
      
      // 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 realname="hostname";
      let respv;
      let respc;
      let respw;
      let statusarr=[];
      let versuch;
      let listeDatenpunkte = [];
      let lastChange=[];
      let testerrc=false;
      let testerrl=false;
      let testerrv=false;
      let testerrs=false;
      let firstTime=0;
      var wifiLength=0;
           for(let wifi_name in wifis) {      
         wifiLength++; }
      
      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"
            } });}
      
      
      if (true) {
      createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
         name: 'Unifi Wifi Clients Table', 
         role: 'string',
         read:  true, 
         write: true,
      });}
      
      
      
      if (vouchers) {
      createState(dpPrefix + "WLANUnifi.Wifi_Vouchers", {
         name: 'Unifi Wifi Vouchers_Table', 
         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 }); 
      
      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/default/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/default/stat/sta",
                 headers: { Cookie: cookies.join("; ") }
             }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
              
        if (!testerrc) {     
      dlog("got respconse nach log in getclient " + JSON.stringify(respc));
      dlog(typeof respc);
      dlog("--------------------- " + respc);
      //respc = JSON.parse(respc);
      
      //Sortierung Daten und Verwandlung Json
      
      var unfiltered = [];
      unfiltered = JSON.parse(respc).data;
      dlog(unfiltered[2].hostname + unfiltered[2].mac);
      versuch = [];
      for(var index in unfiltered) {
         let device = unfiltered[index];
         if(device.hostname !== undefined && device.essid !== undefined)
             versuch.push(device);
      }
      versuch.sort(function (alpha, beta) {
         if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
             return -1;
         if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
        dlog (listeDatenpunkteNew[3]);
      
      // 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."+versuch[z].hostname;
                        createState(data, true, {
                        name: ipWandler, 
                        role: 'boolean',
                        read:  true, 
                        write: true,
                       }, function() {mylog("created");
                        });
                        //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
      
                     //  {setState(data, true);
                        mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                    } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                     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]);}
      
                    
       } }  
      
      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].hostname).val) {
             setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("abwesend: "+listeDatenpunkteNew[z]+" um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");   
             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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
             setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("anwesend: "+ listeDatenpunkteNew[z]+ " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");
             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 wenn listenDaten verändert  
          
           for (var i = 0; i < versuch.length; i++)  {
             dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
             if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
             clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
             dlog(clientListe);}  
             else {anzahlClients=anzahlClients-1;}
             }
           setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
      
      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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
      
        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 + "</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");
      
      }
      
      
      //-----------------------------------------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) {
        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/default/upd/wlanconf/" + wifi.id,
                body: JSON.stringify({ enabled }),
                headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
            }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
            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) {       
                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);
            }
        });
      }
      
      
      
      //-----------------------------------------------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++;
       
       
                
      });
      
      let scriptCounter=0;
      let alarmSwitch =false;
      let alarmCounter =0;
      
      //-----------------------------------------------MAIN LOOP------------------------------------------------
      setInterval(async () => {
      
          scriptCounter++
          mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
          mylog(loggedIn.toString())
              
          await login().catch(alarm1)  
      
         mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
      
      if (loggedIn) {
          if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
          if (alarmCounter > 0) {alarmCounter=0; }
          
          await getClients().catch(alarm3)  ;
          await getVouchers().catch(alarm4)
      
          if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
                 workVouchers();
                 workClients();}
                 
         for(let wifi_name in wifis) {
             
             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;
      
      
      
         }, abfragezyklus); // wird oben definiert
      
      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);
      
      

      Image 2.png

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

      @liv-in-sky
      habe ich mal so gemacht....(lasse es jetzt mal wieder laufen)

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

        @dslraser sagte in Unifi WLAN Script:

        @liv-in-sky

        Edit: auch wenn das Handy nicht im Standby ist kommt die An und Abmeldung alle 20 Minuten.

        die an-abmelde funktion im script wird auf 2 wegen ermittelt: wenn ein handy nicht angemeldet ist, verschwindet es aus der auflistung (kommende daten) des controllers - das dauert auch mal bis zu 5 minuten - dann wird es auf faslch gesetzt.
        und zum anderen über die last_seen_by_uap

        mit dieser version des scripts siehst du in iqontrol die last_seen zeit in sekunden unter der clienten liste - vielleicht fällt was auf

        • was ich nicht verstehe ist, warum auch ohne standby das handy ab und anmeldet - habe auch samsung gerät - da passiert das nicht
        • bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

        script instanz prüfen - datenpunkte löschen (habe auch den gewünschten datenpunkt in switch geändert - bitte prüfen)

        
        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, inder das script läuft zusammenpassen
        const dpPrefix = "javascript.2.";
        
        //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
        
        // 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 realname="hostname";
        let respv;
        let respc;
        let respw;
        let statusarr=[];
        let versuch;
        let listeDatenpunkte = [];
        let lastChange=[];
        let testerrc=false;
        let testerrl=false;
        let testerrv=false;
        let testerrs=false;
        let firstTime=0;
        var wifiLength=0;
             for(let wifi_name in wifis) {      
           wifiLength++; }
        
        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"
              } });}
        
        
        if (true) {
        createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
           name: 'Unifi Wifi Clients Table', 
           role: 'string',
           read:  true, 
           write: true,
        });}
        
        
        
        if (vouchers) {
        createState(dpPrefix + "WLANUnifi.Wifi_Vouchers", {
           name: 'Unifi Wifi Vouchers_Table', 
           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 }); 
        
        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/default/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/default/stat/sta",
                   headers: { Cookie: cookies.join("; ") }
               }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
                
          if (!testerrc) {     
        dlog("got respconse nach log in getclient " + JSON.stringify(respc));
        dlog(typeof respc);
        dlog("--------------------- " + respc);
        //respc = JSON.parse(respc);
        
        //Sortierung Daten und Verwandlung Json
        
        var unfiltered = [];
        unfiltered = JSON.parse(respc).data;
        dlog(unfiltered[2].hostname + unfiltered[2].mac);
        versuch = [];
        for(var index in unfiltered) {
           let device = unfiltered[index];
           if(device.hostname !== undefined && device.essid !== undefined)
               versuch.push(device);
        }
        versuch.sort(function (alpha, beta) {
           if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
               return -1;
           if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
          dlog (listeDatenpunkteNew[3]);
        
        // 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."+versuch[z].hostname;
                          createState(data, true, {
                          name: ipWandler, 
                          role: 'boolean',
                          read:  true, 
                          write: true,
                         }, function() {mylog("created");
                          });
                          //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
        
                       //  {setState(data, true);
                          mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                      } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                       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]);}
        
                      
         } }  
        
        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].hostname).val) {
               setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("abwesend: "+listeDatenpunkteNew[z]+" um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");   
               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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
               setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("anwesend: "+ listeDatenpunkteNew[z]+ " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");
               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 wenn listenDaten verändert  
            
             for (var i = 0; i < versuch.length; i++)  {
               dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
               if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
               clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
               dlog(clientListe);}  
               else {anzahlClients=anzahlClients-1;}
               }
             setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
        
        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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
        
          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 + "</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");
        
        }
        
        
        //-----------------------------------------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) {
          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/default/upd/wlanconf/" + wifi.id,
                  body: JSON.stringify({ enabled }),
                  headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
              }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
              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) {       
                  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);
              }
          });
        }
        
        
        
        //-----------------------------------------------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++;
         
         
                  
        });
        
        let scriptCounter=0;
        let alarmSwitch =false;
        let alarmCounter =0;
        
        //-----------------------------------------------MAIN LOOP------------------------------------------------
        setInterval(async () => {
        
            scriptCounter++
            mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
            mylog(loggedIn.toString())
                
            await login().catch(alarm1)  
        
           mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
        
        if (loggedIn) {
            if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
            if (alarmCounter > 0) {alarmCounter=0; }
            
            await getClients().catch(alarm3)  ;
            await getVouchers().catch(alarm4)
        
            if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
                   workVouchers();
                   workClients();}
                   
           for(let wifi_name in wifis) {
               
               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;
        
        
        
           }, abfragezyklus); // wird oben definiert
        
        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);
        
        

        Image 2.png

        HiltexH Offline
        HiltexH Offline
        Hiltex
        schrieb am zuletzt editiert von Hiltex
        #294

        @liv-in-sky den Parameter ‚last_seen‘ nutze ich schon seit Beginn an zur Anwesenheitserkennung in einem Blockly-Script. Anfangs habe ich mir den Verlauf des Datenpunktes ins History schreiben lassen und mir dann mit Flot angeschaut, welcher Wert zuverlässig funktioniert (mit dem UniFi-Adapter).

        Bei einem Abfrageintervall von 1 Minute sind 2 Minuten Last-Seen absolut zuverlässig. Bei einem Abfrageintervall von 30 Sekunden funktionieren 60 Sekunden absolut zuverlässig.

        Man muss berücksichtigen, dass die Handys ja nicht permanent (ununterbrochen) Daten senden. Insofern wird zum Zeitpunkt der Abfrage die Zeit wahrscheinlich nie 0 sein. Meiner Meinung nach dürfte Abwesenheit erst nach der Zeit Abfrageintervall+30s oder später ausgelöst werden.

        Blog: indibit.de

        liv-in-skyL 1 Antwort Letzte Antwort
        0
        • HiltexH Hiltex

          @liv-in-sky den Parameter ‚last_seen‘ nutze ich schon seit Beginn an zur Anwesenheitserkennung in einem Blockly-Script. Anfangs habe ich mir den Verlauf des Datenpunktes ins History schreiben lassen und mir dann mit Flot angeschaut, welcher Wert zuverlässig funktioniert (mit dem UniFi-Adapter).

          Bei einem Abfrageintervall von 1 Minute sind 2 Minuten Last-Seen absolut zuverlässig. Bei einem Abfrageintervall von 30 Sekunden funktionieren 60 Sekunden absolut zuverlässig.

          Man muss berücksichtigen, dass die Handys ja nicht permanent (ununterbrochen) Daten senden. Insofern wird zum Zeitpunkt der Abfrage die Zeit wahrscheinlich nie 0 sein. Meiner Meinung nach dürfte Abwesenheit erst nach der Zeit Abfrageintervall+30s oder später ausgelöst werden.

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

          @Hiltex
          danke dir - das ist genau das, was wir machen - bei mir ist es das abfrageinterval (mom. 20 sec) plus 15 sek - und das funktioniert

          bei wechsel des ap kann es natürlich größer sein - daher die 20 sek plus evtl 25 oder 30 sek - mal sehen, was für @dslraser paßt

          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 dslraser

            @liv-in-sky
            habe ich mal so gemacht....(lasse es jetzt mal wieder laufen)

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

            @dslraser

            habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

            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 ChaotC 3 Antworten Letzte Antwort
            0
            • liv-in-skyL liv-in-sky

              @dslraser

              habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

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

              @liv-in-sky
              klar. (ich bin aktuell aber nicht am Rechner, bin unterwegs)

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

                @dslraser

                habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

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

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

                @dslraser

                habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

                Ja, das wäre wirklich interessant.

                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
                • liv-in-skyL liv-in-sky

                  @dslraser sagte in Unifi WLAN Script:

                  @liv-in-sky

                  Edit: auch wenn das Handy nicht im Standby ist kommt die An und Abmeldung alle 20 Minuten.

                  die an-abmelde funktion im script wird auf 2 wegen ermittelt: wenn ein handy nicht angemeldet ist, verschwindet es aus der auflistung (kommende daten) des controllers - das dauert auch mal bis zu 5 minuten - dann wird es auf faslch gesetzt.
                  und zum anderen über die last_seen_by_uap

                  mit dieser version des scripts siehst du in iqontrol die last_seen zeit in sekunden unter der clienten liste - vielleicht fällt was auf

                  • was ich nicht verstehe ist, warum auch ohne standby das handy ab und anmeldet - habe auch samsung gerät - da passiert das nicht
                  • bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

                  script instanz prüfen - datenpunkte löschen (habe auch den gewünschten datenpunkt in switch geändert - bitte prüfen)

                  
                  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, inder das script läuft zusammenpassen
                  const dpPrefix = "javascript.2.";
                  
                  //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
                  
                  // 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 realname="hostname";
                  let respv;
                  let respc;
                  let respw;
                  let statusarr=[];
                  let versuch;
                  let listeDatenpunkte = [];
                  let lastChange=[];
                  let testerrc=false;
                  let testerrl=false;
                  let testerrv=false;
                  let testerrs=false;
                  let firstTime=0;
                  var wifiLength=0;
                       for(let wifi_name in wifis) {      
                     wifiLength++; }
                  
                  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"
                        } });}
                  
                  
                  if (true) {
                  createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
                     name: 'Unifi Wifi Clients Table', 
                     role: 'string',
                     read:  true, 
                     write: true,
                  });}
                  
                  
                  
                  if (vouchers) {
                  createState(dpPrefix + "WLANUnifi.Wifi_Vouchers", {
                     name: 'Unifi Wifi Vouchers_Table', 
                     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 }); 
                  
                  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/default/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/default/stat/sta",
                             headers: { Cookie: cookies.join("; ") }
                         }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
                          
                    if (!testerrc) {     
                  dlog("got respconse nach log in getclient " + JSON.stringify(respc));
                  dlog(typeof respc);
                  dlog("--------------------- " + respc);
                  //respc = JSON.parse(respc);
                  
                  //Sortierung Daten und Verwandlung Json
                  
                  var unfiltered = [];
                  unfiltered = JSON.parse(respc).data;
                  dlog(unfiltered[2].hostname + unfiltered[2].mac);
                  versuch = [];
                  for(var index in unfiltered) {
                     let device = unfiltered[index];
                     if(device.hostname !== undefined && device.essid !== undefined)
                         versuch.push(device);
                  }
                  versuch.sort(function (alpha, beta) {
                     if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
                         return -1;
                     if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
                    dlog (listeDatenpunkteNew[3]);
                  
                  // 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."+versuch[z].hostname;
                                    createState(data, true, {
                                    name: ipWandler, 
                                    role: 'boolean',
                                    read:  true, 
                                    write: true,
                                   }, function() {mylog("created");
                                    });
                                    //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
                  
                                 //  {setState(data, true);
                                    mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                                } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                                 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]);}
                  
                                
                   } }  
                  
                  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].hostname).val) {
                         setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("abwesend: "+listeDatenpunkteNew[z]+" um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");   
                         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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
                         setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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("anwesend: "+ listeDatenpunkteNew[z]+ " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");
                         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 wenn listenDaten verändert  
                      
                       for (var i = 0; i < versuch.length; i++)  {
                         dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
                         if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
                         clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
                         dlog(clientListe);}  
                         else {anzahlClients=anzahlClients-1;}
                         }
                       setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
                  
                  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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
                  
                    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 + "</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");
                  
                  }
                  
                  
                  //-----------------------------------------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) {
                    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/default/upd/wlanconf/" + wifi.id,
                            body: JSON.stringify({ enabled }),
                            headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
                        }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
                        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) {       
                            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);
                        }
                    });
                  }
                  
                  
                  
                  //-----------------------------------------------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++;
                   
                   
                            
                  });
                  
                  let scriptCounter=0;
                  let alarmSwitch =false;
                  let alarmCounter =0;
                  
                  //-----------------------------------------------MAIN LOOP------------------------------------------------
                  setInterval(async () => {
                  
                      scriptCounter++
                      mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
                      mylog(loggedIn.toString())
                          
                      await login().catch(alarm1)  
                  
                     mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
                  
                  if (loggedIn) {
                      if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
                      if (alarmCounter > 0) {alarmCounter=0; }
                      
                      await getClients().catch(alarm3)  ;
                      await getVouchers().catch(alarm4)
                  
                      if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
                             workVouchers();
                             workClients();}
                             
                     for(let wifi_name in wifis) {
                         
                         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;
                  
                  
                  
                     }, abfragezyklus); // wird oben definiert
                  
                  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);
                  
                  

                  Image 2.png

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

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

                  bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

                  20000 hat nicht gereicht, ich bin jetzt mal auf

                  const abfageoffset = 30000; // zu schnelle Abmeldungen können hier eingestellt weren - > erhöhen (15000 = 15 sek.)
                  
                  liv-in-skyL 1 Antwort Letzte Antwort
                  0
                  • dslraserD dslraser

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

                    bei wechsel des ap - evtl die constante "abfrageoffset" ändern - vergrößern in diesem script kannst du das machen einfach mal 10 sekunden dazu (auf 25000)

                    20000 hat nicht gereicht, ich bin jetzt mal auf

                    const abfageoffset = 30000; // zu schnelle Abmeldungen können hier eingestellt weren - > erhöhen (15000 = 15 sek.)
                    
                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von
                    #300

                    @dslraser kann man vielleicht im controller noch was einstellen - irgendein update interval

                    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 kann man vielleicht im controller noch was einstellen - irgendein update interval

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

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

                      @dslraser kann man vielleicht im controller noch was einstellen - irgendein update interval

                      ich habe mich mal durchgeklickt im Controller. Das einzige was ich gefunden habe (war auch im 20 Minuten Rhythmus). Das habe ich jetzt mal deaktiviert.

                      Bildschirmfoto 2019-09-10 um 18.58.46.png

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

                        @dslraser

                        habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

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

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

                        habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

                        was muß ich dazu machen ?

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

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

                          habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

                          was muß ich dazu machen ?

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

                          @dslraser bin noch am finetuning - sollte bald kommen

                          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 dslraser

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

                            habe gerade meinen ersten voucher mit dem script erzeugt ! ist das für dich auch interessant

                            was muß ich dazu machen ?

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

                            @dslraser @Chaot

                            hier mit create voucher

                            bitte datenpunkte löschen und js-instanz !

                            es gibt einen neuen datenpunkt unter vouchercodes - A_New_Voucher

                            darin müssen die 3 mit "must be set" gesetzt werden - anschliessend der datenpunkt "Create" mit true beschrieben - dann wird voucher erstellt (notiz datenpunkt ist noch inaktiv)

                            Image 8.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 2 Antworten Letzte Antwort
                            0
                            • liv-in-skyL liv-in-sky

                              @dslraser @Chaot

                              hier mit create voucher

                              bitte datenpunkte löschen und js-instanz !

                              es gibt einen neuen datenpunkt unter vouchercodes - A_New_Voucher

                              darin müssen die 3 mit "must be set" gesetzt werden - anschliessend der datenpunkt "Create" mit true beschrieben - dann wird voucher erstellt (notiz datenpunkt ist noch inaktiv)

                              Image 8.png

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

                              @liv-in-sky
                              fehlt nur das Script

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

                                @liv-in-sky
                                fehlt nur das Script

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

                                @dslraser

                                sorry - kopiert war es - nur das paste war vergessen

                                script wieder ab der def der wifi constanten

                                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, inder das script läuft zusammenpassen
                                const dpPrefix = "javascript.2.";
                                
                                //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
                                
                                // 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 realname="hostname";
                                let respv;
                                let respc;
                                let respw;
                                let resph;
                                let statusarr=[];
                                let versuch;
                                let listeDatenpunkte = [];
                                let lastChange=[];
                                let testerrc=false;
                                let testerrl=false;
                                let testerrv=false;
                                let testerrs=false;
                                let testerrh=false;
                                let firstTime=0;
                                let mybodyVouchers;
                                var wifiLength=0;
                                     for(let wifi_name in wifis) {      
                                   wifiLength++; }
                                
                                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"
                                      } });}
                                
                                
                                if (true) {
                                createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
                                   name: 'Unifi Wifi Clients Table', 
                                   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 }); 
                                
                                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/default/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/default/stat/sta",
                                           headers: { Cookie: cookies.join("; ") }
                                       }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
                                        
                                  if (!testerrc) {     
                                dlog("got respconse nach log in getclient " + JSON.stringify(respc));
                                dlog(typeof respc);
                                dlog("--------------------- " + respc);
                                //respc = JSON.parse(respc);
                                
                                //Sortierung Daten und Verwandlung Json
                                
                                var unfiltered = [];
                                unfiltered = JSON.parse(respc).data;
                                dlog(unfiltered[2].hostname + unfiltered[2].mac);
                                versuch = [];
                                for(var index in unfiltered) {
                                   let device = unfiltered[index];
                                   if(device.hostname !== undefined && device.essid !== undefined)
                                       versuch.push(device);
                                }
                                versuch.sort(function (alpha, beta) {
                                   if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
                                       return -1;
                                   if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
                                  dlog (listeDatenpunkteNew[3]);
                                
                                // 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."+versuch[z].hostname;
                                                  createState(data, true, {
                                                  name: ipWandler, 
                                                  role: 'boolean',
                                                  read:  true, 
                                                  write: true,
                                                 }, function() {mylog("created");
                                                  });
                                                  //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
                                
                                               //  {setState(data, true);
                                                  mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                                              } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                                               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]);}
                                
                                              
                                 } }  
                                
                                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].hostname).val) {
                                       setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
                                       setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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 wenn listenDaten verändert  
                                    
                                     for (var i = 0; i < versuch.length; i++)  {
                                       dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
                                       if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
                                       clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
                                       dlog(clientListe);}  
                                       else {anzahlClients=anzahlClients-1;}
                                       }
                                     setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
                                
                                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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
                                
                                  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 + "</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/default/stat/health",
                                           headers: { Cookie: cookies.join("; ") }
                                       }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrh=true; });  
                                  if (!testerrv) {
                                dlog("got response " + JSON.stringify(resph));
                                dlog(typeof resph);
                                dlog("--------------------- " + resph);
                                resolve("done");
                                  } else {log("reject weil resph ist 00"); reject();}
                                mylog("bin raus a GET 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) {
                                  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/default/upd/wlanconf/" + wifi.id,
                                          body: JSON.stringify({ enabled }),
                                          headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
                                      }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
                                      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) {       
                                          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);
                                      }
                                  });
                                }
                                
                                //-----------------------------------------CREATE VOUCHERS----------------------------------------------
                                //Wifi an-/ausschalten
                                //enabled: true = anschalten; false = ausschalten
                                //wifi: wifi object aus der konstanten wifis
                                async function createVoucher (mybody) {
                                
                                 //var mybody = {cmd:'create-voucher',expire:120,n:1,quota:5,note:"ist im test",up:10,down:10,MBytes:""};
                                
                                  
                                
                                  mylog(JSON.stringify( mybody ));
                                  return new Promise(async (resolve, reject) => {
                                      mylog("createVoucher in aktion");
                                      if (!loggedIn) { mylog("need to login"); await login().catch((e) => reject(e)); }
                                      mylog("do it !");
                                      let respcv = request.post({
                                          url: unifi_controller + "/api/s/default/cmd/hotspot/" ,
                                          body: JSON.stringify( mybody ),
                                          // body: mybody,
                                          headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
                                      }).catch((e) => { mylog("setWifi: rejected: " + e); reject(e) });
                                      mylog("setWifi: got response")
                                     // log("------------: "+respcv);
                                  /*    if (resp != null) {
                                          dlog("setWifi: Wifi wurde erfolgreich " + (enabled ? "eingeschaltet" : "ausgeschaltet"));
                                          dlog(resp);
                                                  // getclient()  Pause für umschalten
                                
                                     
                                       
                                          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);
                                      }*/
                                  });
                                }
                                
                                //-----------------------------------------------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++;
                                 
                                 
                                          
                                });
                                
                                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" ) {
                                
                                  
                                 
                                  /*   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("up:\'"+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);
                                
                                                                                  
                                    createVoucher(mybodyVouchers);
                                
                                } else {log("FEHLER IN createVoucher","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);
                                });
                                
                                
                                let scriptCounter=0;
                                let alarmSwitch =false;
                                let alarmCounter =0;
                                
                                //-----------------------------------------------MAIN LOOP------------------------------------------------
                                setInterval(async () => {
                                
                                    scriptCounter++
                                    mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
                                    mylog(loggedIn.toString())
                                        
                                    await login().catch(alarm1)  
                                
                                   mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
                                
                                if (loggedIn) {
                                    if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
                                    if (alarmCounter > 0) {alarmCounter=0; }
                                    
                                    await getClients().catch(alarm3)  ;
                                    await getVouchers().catch(alarm4);
                                    await getHealth().catch(alarm7);
                                    if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
                                           workVouchers();
                                           workClients();}
                                  
                                           
                                   for(let wifi_name in wifis) {
                                       
                                       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 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

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

                                  @dslraser

                                  sorry - kopiert war es - nur das paste war vergessen

                                  script wieder ab der def der wifi constanten

                                  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, inder das script läuft zusammenpassen
                                  const dpPrefix = "javascript.2.";
                                  
                                  //Pause bei Umschalten der WLANnetze, damit Netzanmeldungen 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 aliasname=false; //benutzt alias namen im controller hinterlegt anstatt hostname - VORSICHT kein ALIAS definiert - keine Anzeige dess Clients
                                  
                                  // 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 realname="hostname";
                                  let respv;
                                  let respc;
                                  let respw;
                                  let resph;
                                  let statusarr=[];
                                  let versuch;
                                  let listeDatenpunkte = [];
                                  let lastChange=[];
                                  let testerrc=false;
                                  let testerrl=false;
                                  let testerrv=false;
                                  let testerrs=false;
                                  let testerrh=false;
                                  let firstTime=0;
                                  let mybodyVouchers;
                                  var wifiLength=0;
                                       for(let wifi_name in wifis) {      
                                     wifiLength++; }
                                  
                                  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"
                                        } });}
                                  
                                  
                                  if (true) {
                                  createState(dpPrefix + "WLANUnifi.Wifi_Clients", {
                                     name: 'Unifi Wifi Clients Table', 
                                     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 }); 
                                  
                                  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/default/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/default/stat/sta",
                                             headers: { Cookie: cookies.join("; ") }
                                         }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrc=true; }); 
                                          
                                    if (!testerrc) {     
                                  dlog("got respconse nach log in getclient " + JSON.stringify(respc));
                                  dlog(typeof respc);
                                  dlog("--------------------- " + respc);
                                  //respc = JSON.parse(respc);
                                  
                                  //Sortierung Daten und Verwandlung Json
                                  
                                  var unfiltered = [];
                                  unfiltered = JSON.parse(respc).data;
                                  dlog(unfiltered[2].hostname + unfiltered[2].mac);
                                  versuch = [];
                                  for(var index in unfiltered) {
                                     let device = unfiltered[index];
                                     if(device.hostname !== undefined && device.essid !== undefined)
                                         versuch.push(device);
                                  }
                                  versuch.sort(function (alpha, beta) {
                                     if (alpha.hostname.toLowerCase() < beta.hostname.toLowerCase())
                                         return -1;
                                     if (alpha.hostname.toLowerCase() > beta.hostname.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].hostname;}
                                    dlog (listeDatenpunkteNew[3]);
                                  
                                  // 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."+versuch[z].hostname;
                                                    createState(data, true, {
                                                    name: ipWandler, 
                                                    role: 'boolean',
                                                    read:  true, 
                                                    write: true,
                                                   }, function() {mylog("created");
                                                    });
                                                    //setState(dpPrefix + "WLANUnifi.Wifi_Client_States."+ versuch[z].hostname, true);
                                  
                                                 //  {setState(data, true);
                                                    mylog("Datenpunktanlegen fertig" + listeDatenpunkteNew[z] + listeDatenpunkte[z]) ;
                                                } else {dlog("ist in verzeichnis"+ listeDatenpunkteNew[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
                                                 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]);}
                                  
                                                
                                   } }  
                                  
                                  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].hostname).val) {
                                         setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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].hostname).val || getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val ==null ) {
                                         setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, 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 wenn listenDaten verändert  
                                      
                                       for (var i = 0; i < versuch.length; i++)  {
                                         dlog(versuch[i].hostname + " --- " + versuch[i].essid + " --- " + versuch[i].ip);
                                         if  (parseInt((new Date().getTime())) - (versuch[i]._last_seen_by_uap*1000) < abfragezyklus+15000) {                      
                                         clientListe = clientListe.concat("<tr><td>"+versuch[i].hostname+"&ensp;</td><td>"+versuch[i].essid+"&ensp;&ensp;&ensp;&ensp;</td><td>"+versuch[i].ip+"</td></tr>");
                                         dlog(clientListe);}  
                                         else {anzahlClients=anzahlClients-1;}
                                         }
                                       setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);   //korrigiert
                                  
                                  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+"</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/default/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>STATUS-ABGELAUFEN&ensp;&ensp;&ensp;&ensp;</td><td>CODE</td>&ensp;&ensp;</td><td>ERSTELLT</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();
                                  
                                    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 + "</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/default/stat/health",
                                             headers: { Cookie: cookies.join("; ") }
                                         }).catch((e) => { log("getStatus reject " + e); /*reject(e)*/ return testerrh=true; });  
                                    if (!testerrv) {
                                  dlog("got response " + JSON.stringify(resph));
                                  dlog(typeof resph);
                                  dlog("--------------------- " + resph);
                                  resolve("done");
                                    } else {log("reject weil resph ist 00"); reject();}
                                  mylog("bin raus a GET 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) {
                                    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/default/upd/wlanconf/" + wifi.id,
                                            body: JSON.stringify({ enabled }),
                                            headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
                                        }).catch((e) => { dlog("setWifi: rejected: " + e); reject(e) });
                                        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) {       
                                            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);
                                        }
                                    });
                                  }
                                  
                                  //-----------------------------------------CREATE VOUCHERS----------------------------------------------
                                  //Wifi an-/ausschalten
                                  //enabled: true = anschalten; false = ausschalten
                                  //wifi: wifi object aus der konstanten wifis
                                  async function createVoucher (mybody) {
                                  
                                   //var mybody = {cmd:'create-voucher',expire:120,n:1,quota:5,note:"ist im test",up:10,down:10,MBytes:""};
                                  
                                    
                                  
                                    mylog(JSON.stringify( mybody ));
                                    return new Promise(async (resolve, reject) => {
                                        mylog("createVoucher in aktion");
                                        if (!loggedIn) { mylog("need to login"); await login().catch((e) => reject(e)); }
                                        mylog("do it !");
                                        let respcv = request.post({
                                            url: unifi_controller + "/api/s/default/cmd/hotspot/" ,
                                            body: JSON.stringify( mybody ),
                                            // body: mybody,
                                            headers: { 'Content-Type': 'application/json', Cookie: cookies.join("; ") }
                                        }).catch((e) => { mylog("setWifi: rejected: " + e); reject(e) });
                                        mylog("setWifi: got response")
                                       // log("------------: "+respcv);
                                    /*    if (resp != null) {
                                            dlog("setWifi: Wifi wurde erfolgreich " + (enabled ? "eingeschaltet" : "ausgeschaltet"));
                                            dlog(resp);
                                                    // getclient()  Pause für umschalten
                                  
                                       
                                         
                                            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);
                                        }*/
                                    });
                                  }
                                  
                                  //-----------------------------------------------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++;
                                   
                                   
                                            
                                  });
                                  
                                  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" ) {
                                  
                                    
                                   
                                    /*   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("up:\'"+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);
                                  
                                                                                    
                                      createVoucher(mybodyVouchers);
                                  
                                  } else {log("FEHLER IN createVoucher","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);
                                  });
                                  
                                  
                                  let scriptCounter=0;
                                  let alarmSwitch =false;
                                  let alarmCounter =0;
                                  
                                  //-----------------------------------------------MAIN LOOP------------------------------------------------
                                  setInterval(async () => {
                                  
                                      scriptCounter++
                                      mylog("-----------------------SCRIPTCOUNTER------------------ ist : " + scriptCounter );
                                      mylog(loggedIn.toString())
                                          
                                      await login().catch(alarm1)  
                                  
                                     mylog("------------------------------------------------Werte Alarme: " + testerrl + " - " + testerrc+ " - " +testerrv + " - "+testerrs);
                                  
                                  if (loggedIn) {
                                      if (alarmCounter > 5) {log("Unifi Sript funktioniert wieder - Verbindung wieder hergestellt","error");}
                                      if (alarmCounter > 0) {alarmCounter=0; }
                                      
                                      await getClients().catch(alarm3)  ;
                                      await getVouchers().catch(alarm4);
                                      await getHealth().catch(alarm7);
                                      if ( !testerrl && !testerrc && !testerrv && !testerrs  ) {
                                             workVouchers();
                                             workClients();}
                                    
                                             
                                     for(let wifi_name in wifis) {
                                         
                                         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 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);
                                  
                                  

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

                                  @liv-in-sky
                                  Eine Bitte hätte ich:
                                  Ich kann leider den aktuellen "Kopf" des Scripts nirgendwo finden. Der ist hier irgendwo in den Beiträgen verstreut.
                                  Mei Script scheit etwas älter zu sein. Wenn ich deinen Scriptteil anhänge habe ich ewig viele Fehlermeldungen.

                                  Könntest du eventuell nochmal das ganze Script posten?

                                  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
                                  • liv-in-skyL liv-in-sky

                                    @dslraser @Chaot

                                    hier mit create voucher

                                    bitte datenpunkte löschen und js-instanz !

                                    es gibt einen neuen datenpunkt unter vouchercodes - A_New_Voucher

                                    darin müssen die 3 mit "must be set" gesetzt werden - anschliessend der datenpunkt "Create" mit true beschrieben - dann wird voucher erstellt (notiz datenpunkt ist noch inaktiv)

                                    Image 8.png

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

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

                                    darin müssen die 3 mit "must be set" gesetzt werden

                                    das habe ich nicht verstanden, was muß da rein ?

                                    liv-in-skyL 2 Antworten Letzte Antwort
                                    0
                                    • ChaotC Chaot

                                      @liv-in-sky
                                      Eine Bitte hätte ich:
                                      Ich kann leider den aktuellen "Kopf" des Scripts nirgendwo finden. Der ist hier irgendwo in den Beiträgen verstreut.
                                      Mei Script scheit etwas älter zu sein. Wenn ich deinen Scriptteil anhänge habe ich ewig viele Fehlermeldungen.

                                      Könntest du eventuell nochmal das ganze Script posten?

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

                                      @Chaot sagte in Unifi WLAN Script:

                                      @liv-in-sky
                                      Eine Bitte hätte ich:
                                      Ich kann leider den aktuellen "Kopf" des Scripts nirgendwo finden. Der ist hier irgendwo in den Beiträgen verstreut.
                                      Mei Script scheit etwas älter zu sein. Wenn ich deinen Scriptteil anhänge habe ich ewig viele Fehlermeldungen.

                                      Könntest du eventuell nochmal das ganze Script posten?

                                      bin nicht am rechner mit dem script

                                      hier der kopf

                                      
                                      // September 2019 @liv-in-sky durch viel vorarbeit von @thewhobox (api verbindung)
                                      
                                      // Definition Login
                                      const unifi_username = "x";
                                      const unifi_password = "xxxxxx";
                                      const unifi_controller = "https://192.xxx.xxx.xxx:8443";
                                      
                                      
                                      // DEFINITION der zu anzeigenden Netzwerke am besten bis auf id und smart alle gleich setzen: beispiel:
                                      
                                      const wifis = {
                                      "WLAN_Dragon1": { name: "WLAN_Dragon1", id: "yyyyyyyyyyyyyyyyyyyyy", desc: "WLAN_Dragon1", smart: "WLAN_Dragon1" } ,
                                      "WLAN_DragonGuest": { name: "WLAN_DragonGuest", id: "yyyyyyyyyyyyyyyyyyyy", desc: "WLAN_DragonGuest", smart: "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
                                      1
                                      • dslraserD dslraser

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

                                        darin müssen die 3 mit "must be set" gesetzt werden

                                        das habe ich nicht verstanden, was muß da rein ?

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

                                        @dslraser hast du die voucher-sache schon im controller eingerichtet ?

                                        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 2 Antworten Letzte Antwort
                                        0
                                        • liv-in-skyL liv-in-sky

                                          @dslraser hast du die voucher-sache schon im controller eingerichtet ?

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

                                          @liv-in-sky
                                          ja, ich nutze Voucher, oder was meinst Du ?

                                          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

                                          801

                                          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