Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Unifi WLAN Script

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Unifi WLAN Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active @liv-in-sky last edited by

      @liv-in-sky
      wenn Du ein einzelnes Gerät anklickst und dann über die Einstellungen ein Alias vergibst, das ist bei mir Name. Geht das bei Dir ?

      1 Reply Last reply Reply Quote 0
      • dslraser
        dslraser Forum Testing Most Active @liv-in-sky last edited by

        @liv-in-sky
        also das hier:
        Screenshot_20190906-184139_Chrome.jpg
        einen weiter unten, unter Netzwerk vergebe ich dann auch eine IP

        liv-in-sky 3 Replies Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @dslraser last edited by

          @dslraser ja kann ich eingeben - ich muss noch die daten die kommen checken

          1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @dslraser last edited by

            @dslraser ok - funktioniert - ab ich muss die namen schon in der fritzbox pflegen und nun auch da noch ??

            dslraser 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @dslraser last edited by

              @dslraser vielleicht - wenn das sch...-ding endlich läuft - bei ich einen umsschalter ein - dann müßtest du nichts mehr ändern

              1 Reply Last reply Reply Quote 0
              • dslraser
                dslraser Forum Testing Most Active @liv-in-sky last edited by dslraser

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

                @dslraser ok - funktioniert - ab ich muss die namen schon in der fritzbox pflegen und nun auch da noch ??

                In der FritzBox habe ich kein Gerät drinn, auch WLAN ist aus. Die ist nur noch für die Telefone und Internetverbindung (dsl-modem) da.

                liv-in-sky 1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @dslraser last edited by

                  @dslraser fritzbox ist bei mir dns server und dhcp server - kein wlan - das müßte ich dann umstellen - wenn überhaupt möglich

                  meine lan geräte sind ja nicht im controller verfügbar 😞

                  dslraser 1 Reply Last reply Reply Quote 0
                  • dslraser
                    dslraser Forum Testing Most Active @liv-in-sky last edited by

                    @liv-in-sky
                    die LAN Geräte habe ich an einem 16ner Unifi Switch.

                    liv-in-sky 2 Replies Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @dslraser last edited by

                      @dslraser und das ist wohl das problem - das habe ich nicht

                      1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @dslraser last edited by

                        @dslraser

                        hättest du gerade zeit für einen schnelltest - es geht um das umschalten auf aliasnamen ?

                        dslraser 1 Reply Last reply Reply Quote 0
                        • dslraser
                          dslraser Forum Testing Most Active @liv-in-sky last edited by

                          @liv-in-sky
                          ich mach mal den Rechner an...

                          liv-in-sky 3 Replies Last reply Reply Quote 0
                          • liv-in-sky
                            liv-in-sky @dslraser last edited by

                            @dslraser ok - kommt gleich

                            1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @dslraser last edited by

                              @dslraser

                              ersetze alles unter der constanten wifis (netzwerke) - über dem neuen teil sthet nur die netzwerk constante und die anmeldeinfos

                              und lass mal laufen - bitta auch auf javascript instanz achten

                              lass erstmal so laufen - und wenn es gut aussieht - setze die variable aliasname auf true

                              der scriptteil - es gibt keine konfiguration mehr führ die zu überwachenden geräte !!! - wird alles gleichbehandelt

                              
                              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";
                              let writeFile = true;
                              let  writeFileVar = 0;
                              let writeClientTable = true;
                              let writeAnwesenheit = true;
                              let listeDatenpunkte = [];
                              let listeDatenpunkteNew = [];
                              let listeDatenpunkteAlt = [];
                              
                              // 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
                              
                              //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);\">";
                              
                              
                              //-----------------AB HIER NICHTS MEHR ÄNDERN------------------------
                              let cookies = [];
                              let loggedIn = false;
                              let debug = false;
                              let mylogs = true;
                              let clientPause = false;
                              let clientPauseVal;
                              let wifiDPs = [];
                              let alias="hostname";
                              
                              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) alias="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: 'state',
                                    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) => {
                                    let resp = 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) => { dlog("login: reject"), reject(e) });
                                    
                                    if(resp != null) {
                                        dlog("login: login war erfolgreich! " + ((resp.headers && resp.headers.hasOwnProperty("set-cookie")) ? "Mit Cookies":"Ohne Cookies"));
                                        if(resp.headers && resp.headers.hasOwnProperty("set-cookie")) {
                                            let set_cookies = resp.headers["set-cookie"];
                                            for(i = 0; i < set_cookies.length; i++) {
                                                let cookie = set_cookies[i];
                                                cookie = cookie.split(";")[0];
                                                cookies.push(cookie);
                                            }
                                        } else {
                                            dlog("login: no cookies to set!")
                                        }
                                        loggedIn = true;
                                        resolve();
                                    } else {
                                        dlog("login: rejected")
                                        reject("resp = null");
                                    }
                                });
                              }
                              async function dlogout() {
                                return new Promise(async (resolve, reject) => {
                                    let resp = await request.get({
                                        url: unifi_controller + "/dlogout",
                                        headers: { Cookie: cookies.join("; ") }
                                    }).catch((e) => reject(e));
                                    if(resp != null) {
                                        dlog("Du bist nun ausgedloggt.");
                                        dlog(resp);
                                        resolve();
                                    } else {
                                        reject("resp = null");
                                    }
                                });
                              }
                              //-----------------------------------------STATUS   WIFI  ---------------------------------------------------------
                              //Updatet status vom Wifi
                              //wifi: wifi object aus der konstanten wifis
                              async function getStatus(wifi) {
                                   dlog("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) });
                              
                                    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 {
                                        dlog("nicht ok...")
                                        reject(JSON.stringify(resp));
                                    }dlog("BIN aus STATUS raus");
                                });
                                 
                              }
                              
                              //-----------------------------------------GETCLIENTS---------------------------------------------------------------
                               async function getClients() {
                                  mylog("BIN IN CLIENTS");
                                 
                                 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/stat/sta/",
                                         headers: { Cookie: cookies.join("; ") }
                                     }).catch((e) => { dlog("getStatus reject " + e); reject(e) });  
                                
                              dlog("got response " + JSON.stringify(resp));
                              dlog(typeof resp);
                              dlog("--------------------- " + resp);
                              //resp = JSON.parse(resp);
                              
                              //Sortierung Daten und Verwandlung Json
                              
                              var unfiltered = [];
                              unfiltered = JSON.parse(resp).data;
                              dlog(unfiltered[2].hostname + unfiltered[2].mac);
                              let 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;
                              });
                              
                              
                              var anzahlClients = versuch.length;
                              setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Clients_Anzahl",anzahlClients,100);
                              
                              var clientListe = "";
                              getExistingClients();
                              
                              
                              mylog("Status1");
                              
                              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 
                              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+15000 && getState(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname).val) {
                                     setStateDelayed(dpPrefix + "WLANUnifi.Wifi_Client_States."+versuch[z].hostname, false, 100);
                                     mylog("abgesetzt" +versuch[z].hostname+listeDatenpunkteNew[z]);
                                     mylog(tester.toString());
                                 }
                                 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" +versuch[z].hostname+listeDatenpunkteNew[z]);
                                     mylog(tester.toString());
                                 }  
                              }
                              }, 2500);}
                              
                              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 ) fs.writeFileSync(datei2, format2+clientListe.concat("</table><p style=\"color:blue; font-family:Helvetica;\">Geamtanzahl angemeldeter Geräte:"+anzahlClients+"</p>"));
                              
                              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  clients");
                              
                              
                              }); //new promise
                              
                              } //getclientend
                              
                              //-----------------------------------------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() {
                                   dlog("BIN IN VOUCHERS");
                                 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/stat/voucher",
                                         headers: { Cookie: cookies.join("; ") }
                                     }).catch((e) => { dlog("getStatus reject " + e); reject(e) });  
                                
                              dlog("got response " + JSON.stringify(resp));
                              dlog(typeof resp);
                              dlog("--------------------- " + resp);
                              resp = JSON.parse(resp);
                              
                              dlog(resp.meta);
                              dlog(resp.meta.rc);
                              dlog(resp.data[1].code);
                              dlog(resp.data.length);
                              dlog(JSON.stringify(resp).length.toString());
                              var laengeMessage=JSON.stringify(resp).length;
                              if (laengeMessage==writeFileVar) {writeFile = false;} else {writeFile=true}
                              writeFileVar=JSON.stringify(resp).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 < resp.data.length; i++) { 
                                var zeit= resp.data[i].create_time*1000
                                let zeit1 =  formatDate(getDateObject(zeit), "TT.MM.JJJJ SS:mm").toString();
                              
                                clientListe = clientListe.concat("<tr><td>"+resp.data[i].duration+"&ensp;</td><td>"+resp.data[i].status_expires+"&ensp;&ensp;&ensp;&ensp;</td><td>"+resp.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, resp.data[i].code );
                                    setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".erstellt", zeit1 );
                                    setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".dauer", resp.data[i].duration );
                                    setState(dpPrefix + "WLANUnifi.Wifi_Vouchers-CODES.CODE"+yy+".abgelaufen", resp.data[i].status_expires );
                                    
                                }}
                              
                              
                              //Datenpunkteäalt löschen
                              var w = resp.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:"+resp.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", resp.data.length);
                              dlog("bin raus a existing vouchers");
                              });
                              
                              }
                              
                              
                              //-----------------------------------------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
                                        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])
                                        
                              });
                              
                              //-----------------------------------------------MAIN LOOP------------------------------------------------
                              setInterval(async () => {
                              
                                 for(let wifi_name in wifis) {
                                 await getStatus(wifis[wifi_name]);}
                               
                                 if (vouchers)  getVouchers();
                                 if (!clientPause) {
                                 await getClients();
                                 } else {
                                     var interim=parseInt(new Date().getTime());
                                     log("Unifi Script ist in Pause um auf WLAN zu warten","warn");
                                      if (interim - clientPauseVal > clientPauseConst) {clientPause=false;log("Unifi Script hat Pause beendet");}  }
                              
                                 }, abfragezyklus); // wird oben definiert
                              
                              
                              clientPauseVal=parseInt((new Date().getTime()));
                                        log(clientPauseVal.toString())
                              
                              // Beispiel für
                              //setWifi(true, wifis.WLAN_DragonGuest);
                              
                              

                              du könntest auch mal das gästenetzwerk umschalten und im log beobachten, was für warnungen kommen - ich schalte nämlich die getclient() für eine zeit ab, wenn das netzwerk restartet - bei mir brauchen die sonoffs so lang, bis sie wieder angemeldet sind

                              1 Reply Last reply Reply Quote 0
                              • liv-in-sky
                                liv-in-sky @dslraser last edited by liv-in-sky

                                @dslraser vor dem umschalten - bitte datenpunkte löschen

                                dslraser 2 Replies Last reply Reply Quote 0
                                • dslraser
                                  dslraser Forum Testing Most Active @liv-in-sky last edited by

                                  @liv-in-sky

                                  okay

                                  liv-in-sky 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @dslraser last edited by

                                    @dslraser nee - glaube das funktioniert so nicht

                                    1 Reply Last reply Reply Quote 0
                                    • dslraser
                                      dslraser Forum Testing Most Active @liv-in-sky last edited by dslraser

                                      @liv-in-sky
                                      also, die Umschaltung funktioniert nicht. Ich habe alle DP gelöscht und dann alias auf true gestellt. Funktioniert nicht. Es werden die gleichen DP wie vorher angelegt, also als hostname.
                                      Zusätzlich kommt dann das hier, ohne das ich ein WLAN an oder aus gestellt habe.

                                      6.9.2019, 20:05:33.420	[warn ]: javascript.0 script.js.Heiko.16Unifi.Unifi-Final5: Unifi Script ist in Pause um auf WLAN zu warten
                                      6.9.2019, 20:05:53.419	[warn ]: javascript.0 script.js.Heiko.16Unifi.Unifi-Final5: Unifi Script ist in Pause um auf WLAN zu warten
                                      6.9.2019, 20:06:13.433	[warn ]: javascript.0 script.js.Heiko.16Unifi.Unifi-Final5: Unifi Script ist in Pause um auf WLAN zu warten
                                      6.9.2019, 20:06:33.427	[warn ]: javascript.0 script.js.Heiko.16Unifi.Unifi-Final5: Unifi Script ist in Pause um auf WLAN zu warten
                                      6.9.2019, 20:06:53.440	[warn ]: javascript.0 script.js.Heiko.16Unifi.Unifi-Final5: Unifi Script ist in Pause um auf WLAN zu warten
                                      
                                      liv-in-sky 2 Replies Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @dslraser last edited by

                                        @dslraser ok - muss ich nochmal checken - wird erst morgen gehen - aber danke fürs testen

                                        1 Reply Last reply Reply Quote 0
                                        • T
                                          tempestas @liv-in-sky last edited by

                                          @liv-in-sky

                                          Hi - da ich das Forum einfach nicht verstehe in seiner neuen Form, hier nur die Rückmeldung, dass ich das Skript, dass du freundlicherweise als txt gepostet hattest, für mich so kürzen konnte, dass ich das Gäste Wlan ein und ausschalten kann. Mehr will und brauche ich gar nicht.

                                          Vielen lieben Dank

                                          1 Reply Last reply Reply Quote 0
                                          • liv-in-sky
                                            liv-in-sky @dslraser last edited by

                                            @dslraser

                                            hallo - langes WE - bräuchte bitte nochmal test - bitte datenpunkte wieder löschen und scriptinstanz einstellen

                                            • alles unter der netzwerkkonstanten bitte ersetzen
                                            • vorallem ein langzeittest - habe bemerkt, dass sich das script nach einiger zeit verrennt - liegt an dem cookie, welches abläuft nach dieser zeit oder wenn ein controller restart war - konnte die version ohne cookie nicht ans laufen bringen - also nach einer stunde oder so wieder testen ob anwesenheit noch erkannt wird
                                            • bitte auch testen, ob script wieder kommt, wenn du controller abschaltest !! (log file beachten) - es verhält sich unterschiedlich, wenn du nach der ersten warnung im log wieder einschaltest oder auf 6 warnungen wartest - in beiden fällen sollte sich das script wieder fangen nach dem einschalten des controllers und die anwesenheit wieder funktionieren
                                            • alias ist noch nicht drin
                                            • möchtest du etwas mehr sehen im log, kannst du die variable mylog auf true setzen
                                            • bitte auch vouchers testen - und client anzahl ...
                                            • wenn du mal das gästenetzwerk abschaltest kommt eine pause im script (log) - habe bemerkt, dass vorallem die sonoffs ewig brauchen, bis sie wieder online sind (weil das hauptnetzwerk doch auch gestartet wird!) - in iqontrol kannst du dir dann ansehen, wer am längsten gebraucht hat (unter den clients) - in der pause (länge kann man einstellen) werden keine clients upgedatet

                                            ich hoffe der test fällt diemal positiv aus

                                            // 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" }
                                            }
                                            
                                            
                                            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
                                            
                                            //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);\">";
                                            
                                            
                                            //-----------------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: 'state',
                                                  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+15000 && 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");
                                                   lastChange.push("abwesend: "+listeDatenpunkteNew[z]+" " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");   
                                                      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");
                                                   lastChange.push("anwesend: "+ listeDatenpunkteNew[z]+ " um " +formatDate(getDateObject((parseFloat((new Date().getTime())) - tester)), "SS:mm:ss") + " Uhr");
                                                
                                               }  
                                            }
                                            
                                            
                                            
                                            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="";
                                               for (var g = 0; g < lastChange.length; g++)  {
                                                   lastChangeList=lastChangeList.concat(lastChange[g]+"</br>"); lastChangeList.concat(lastChange[g]+"</br>");}
                                            
                                               fs.writeFileSync(datei2, format2+clientListe.concat("</table><p style=\"color:blue; font-family:Helvetica;\">Geamtanzahl angemeldeter Clients:"+anzahlClients+"</p><p style=\"color:black; 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);
                                            
                                            

                                            dslraser 2 Replies Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            878
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            13
                                            380
                                            43102
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo