29 Aug 2019, 17:39
@thewhobox
ich hatte das Script jetzt so gemacht, um von beiden WLAN den Status holen zu können. Das funktioniert auch, vielleicht geht es besser/kürzer ?
Wenn ich Dein aufgeräumtes Script nehme, dann kann der Status nur für ein WLAN geholt werden. Oder habe ich was übersehen ?
Hier noch mal meine "aufgeräumte Variante" (in der von oben hatte ich noch einige Tippfehler bei den States)
const request = require('request-promise-native').defaults({ rejectUnauthorized: false });
const unifi_username = "benutzer";
const unifi_password = "passwort";
const unifi_controller = "https://192.168.xxx.xxx:xxxx";
const wifi_id_haupt = "xxxxxxxxxx";
const wifi_id_gast = "xxxxxxxxxx";
let cookies = [];
let loggedIn = false;
let debug = false;
on({id:'javascript.0.Unifi.Unifi_Wifi.01Haupt_Wifi.02Haupt_Wifi_an'/*Unifi Haupt Wifi an*/, val: true, change: 'any'}, wifi_an_haupt);
on({id:'javascript.0.Unifi.Unifi_Wifi.01Haupt_Wifi.03Haupt_Wifi_aus'/*Unifi Haupt Wifi aus*/, val: true, change: 'any'}, wifi_aus_haupt);
on({id:'javascript.0.Unifi.Unifi_Wifi.02Gast_Wifi.02Gast_Wifi_an'/*Unifi Gast Wifi an*/, val: true, change: 'any'}, wifi_an_gast);
on({id:'javascript.0.Unifi.Unifi_Wifi.02Gast_Wifi.03Gast_Wifi_aus'/*Unifi Gast Wifi aus*/, val: true, change: 'any'}, wifi_aus_gast);
//##########---hier Haupt WLAN---##########
//Datenpunkt für Haupt Wifi Status erstellen
createState('Unifi.Unifi_Wifi.01Haupt_Wifi.01Haupt_Wifi_Status',{
name: 'Unifi Haupt Wifi Status',
role: 'switch',
type: "boolean",
read: true,
write: false,
});
//Datenpunkt Button zum schalten für Haupt Wifi an erstellen
createState('Unifi.Unifi_Wifi.01Haupt_Wifi.02Haupt_Wifi_an', {
name: 'Unifi Haupt Wifi an',
role: 'button',
read: true,
write: true,
type: "boolean",
"smartName": {
"de": "01Haupt Wlan an",
"smartType": "SWITCH"
}
});
//Datenpunkt Button zum schalten für Haupt Wifi aus erstellen
createState('Unifi.Unifi_Wifi.01Haupt_Wifi.03Haupt_Wifi_aus', {
name: 'Unifi Haupt Wifi aus',
role: 'button',
read: true,
write: true,
type: "boolean",
"smartName": {
"de": "02Haupt Wlan aus",
"smartType": "SWITCH"
}
});
//##########---hier Gast WLAN---##########
//Datenpunkt für Gast Wifi Status erstellen
createState('Unifi.Unifi_Wifi.02Gast_Wifi.01Gast_Wifi_Status',{
name: 'Unifi Gast Wifi Status',
role: 'switch',
type: "boolean",
read: true,
write: false,
});
//Datenpunkt Button zum schalten für Gast Wifi an erstellen
createState('Unifi.Unifi_Wifi.02Gast_Wifi.02Gast_Wifi_an', {
name: 'Unifi Gast Wifi an',
role: 'button',
read: true,
write: true,
type: "boolean",
"smartName": {
"de": "01Gast Wlan an",
"smartType": "SWITCH"
}
});
//Datenpunkt Button zum schalten für Gast Wifi aus erstellen
createState('Unifi.Unifi_Wifi.02Gast_Wifi.03Gast_Wifi_aus', {
name: 'Unifi Gast Wifi aus',
role: 'button',
read: true,
write: true,
type: "boolean",
"smartName": {
"de": "02Gast Wlan aus",
"smartType": "SWITCH"
}
});
//Datenpunkt für Anzahl Voucher erstellen
createState('Unifi.Unifi_Wifi.02Gast_Wifi.04Gast_Wifi_Anzahl_Voucher',{
name: 'Unifi Gast Wifi Anzahl Voucher',
role: 'number',
min: '0',
max: '1000',
read: true,
write: false });
//Datenpunkt Liste für Voucher für Gast Wifi erstellen
createState('Unifi.Unifi_Wifi.02Gast_Wifi.05Gast_Wifi_Voucherliste', {
name: 'Unifi Gast Wifi Voucherliste',
role: 'string',
read: true,
write: false,
});
//##########---hier Geräteliste und Anzahl Geräte---##########
//Datenpunkt Liste für angemeldete Geräte im Netzwerk erstellen
createState('Unifi.Unifi_Wifi.01Haupt_Wifi.04Haupt_Wifi_Geraeteliste', {
name: 'Unifi Haupt Wifi Geräteliste',
role: 'string',
read: true,
write: false,
});
//Datenpunkt für Anzahl angemeldete Geräte erstellen
createState('Unifi.Unifi_Wifi.01Haupt_Wifi.05Haupt_Wifi_Anzahl_Geraete',{
name: 'Unifi Haupt Wifi Anzahl Clients',
role: 'number',
min: '0',
max: '1000',
read: true,
write: false });
function dlog(message) {
if(debug)
console.log(message);
}
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 getStatus_haupt() {
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_haupt,
headers: { Cookie: cookies.join("; ") }
}).catch((e) => { dlog("getStatus reject " + e); reject(e) });
dlog("got response " + JSON.stringify(resp));
dlog(typeof resp);
resp = JSON.parse(resp);
dlog(resp.meta);
dlog(resp.meta.rc);
let wlanOn = resp.data[0].enabled;
dlog("WLAN 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"));
resolve(wlanOn);
} else {
dlog("nicht ok...")
reject(JSON.stringify(resp));
}
});
}
async function setWifi_haupt(enabled) {
return new Promise(async (resolve, reject) => {
dlog("setWifi_haupt: start set Wifi_haupt");
if(!loggedIn) { dlog("need to login"); await login().catch((e) => reject(e)); }
dlog("setWifi_haupt: now setting Wifi_haupt");
let resp = request.post({
url: unifi_controller + "/api/s/default/upd/wlanconf/" + wifi_id_haupt,
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);
resolve();
} else {
dlog("setWifi: rejetced")
dlog("resp: " + JSON.stringify(resp));
reject("msg: " + JSON.parse(resp.body).meta.msg);
}
});
}
//########################################
async function getStatus_gast() {
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_gast,
headers: { Cookie: cookies.join("; ") }
}).catch((e) => { dlog("getStatus reject " + e); reject(e) });
dlog("got response " + JSON.stringify(resp));
dlog(typeof resp);
resp = JSON.parse(resp);
dlog(resp.meta);
dlog(resp.meta.rc);
let wlanOn = resp.data[0].enabled;
dlog("WLAN 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"));
resolve(wlanOn);
} else {
dlog("nicht ok...")
reject(JSON.stringify(resp));
}
});
}
async function setWifi_gast(enabled) {
return new Promise(async (resolve, reject) => {
dlog("setWifi_gast: start set Wifi_gast");
if(!loggedIn) { dlog("need to login"); await login().catch((e) => reject(e)); }
dlog("setWifi_gast: now setting Wifi_gast");
let resp = request.post({
url: unifi_controller + "/api/s/default/upd/wlanconf/" + wifi_id_gast,
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);
resolve();
} else {
dlog("setWifi: rejetced")
dlog("resp: " + JSON.stringify(resp));
reject("msg: " + JSON.parse(resp.body).meta.msg);
}
});
}
//###################################
//Geräteliste abrufen
async function getClients() {
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_haupt reject " + e); reject(e) });
dlog("got response " + JSON.stringify(resp));
dlog(typeof resp);
dlog("--------------------- " + resp);
resp = JSON.parse(resp);
//log("--------------------- " + resp);
dlog(resp.meta);
dlog(resp.meta.rc);
dlog(resp.data[2].hostname);
dlog(resp.data.length);
setState("javascript.0.Unifi.Unifi_Wifi.01Haupt_Wifi.05Haupt_Wifi_Anzahl_Geraete",resp.data.length);
var clientListe = "<table>";
for (var i = 0; i < resp.data.length; i++) {
dlog(resp.data[i].hostname + " --- " + resp.data[i].essid + " --- " + resp.data[i].mac);
clientListe = clientListe.concat("<tr><td>"+resp.data[i].hostname+" </td><td>"+resp.data[i].essid+"    </td><td>"+resp.data[i].mac+"</td></tr>");
dlog(clientListe);
}
setState("Unifi.Unifi_Wifi.01Haupt_Wifi.04Haupt_Wifi_Geraeteliste", clientListe.concat(clientListe+"</table>"));
});
}
async function wifi_an_haupt() {
dlog("starting wifi_an_haupt");
await setWifi_haupt(true).catch((e) => dlog("reject1: " + e));
dlog("getting status");
let wlan = await getStatus_haupt().catch((e) => dlog("reject2: " + e));
console.log("fin")
console.log(wlan);
}
async function wifi_aus_haupt() {
dlog("starting wifi_aus_haupt");
await setWifi_haupt(false).catch((e) => dlog("reject1: " + e));
dlog("getting status");
let wlan = await getStatus_haupt().catch((e) => dlog("reject2: " + e));
console.log("fin")
console.log(wlan);
}
//####################
async function wifi_an_gast() {
dlog("starting wifi_an_gast");
await setWifi_gast(true).catch((e) => dlog("reject1: " + e));
dlog("getting status");
let wlan = await getStatus_gast().catch((e) => dlog("reject2: " + e));
console.log("fin")
console.log(wlan);
}
async function wifi_aus_gast() {
dlog("starting wifi_aus_gast");
await setWifi_gast(false).catch((e) => dlog("reject1: " + e));
dlog("getting status");
let wlan = await getStatus_gast().catch((e) => dlog("reject2: " + e));
console.log("fin")
console.log(wlan);
}
//#######################
setInterval(async () => {
let state = await getStatus_haupt();
setState("Unifi.Unifi_Wifi.01Haupt_Wifi.01Haupt_Wifi_Status", state, true);
}, 10000); // Aktualisiert alle 10 Sekunden.
setInterval(async () => {
let state = await getClients();
setState("Unifi.Unifi_Wifi.01Haupt_Wifi.04Haupt_Wifi_Anzahl_Geraete");
setState("Unifi.Unifi_Wifi.01Haupt_Wifi.04Haupt_Wifi_Geraeteliste", clientListe.concat(clientListe+"</table>"));
}, 10000); // Aktualisiert alle 10 Sekunden.
setInterval(async () => {
let state = await getStatus_gast();
setState("Unifi.Unifi_Wifi.02Gast_Wifi.01Gast_Wifi_Status", state, true);
}, 10000); // Aktualisiert alle 10 Sekunden.
//wifi_an_haupt();
//wifi_aus_haupt();
//getStatus_haupt();
//getStatus_gast();
//getClients();