//18.10.21 13:28 /* Versionshistorie: * * 1.0.2: * - neu: Anzeige der letzten An- und Abmeldung * - neu: Verwendung eigener Bilder möglich * * 1.0.1: * - neu: In dem Mapping der IP-Adressen kann jetzt eine URL vergeben werden ('http' oder direkt eine spezifische URL) * - geändert: Styling der Details * - entfernt: MAC-Adresse * * 1.0.0: * - Initial Release */ const moment = require("moment"); // Skript Einstellungen ************************************************************************************************************************************************* let dpList = '0_userdata.0.vis.NetzwerkStatus.jsonList'; // Datenpunkt für IconList Widget (Typ: Zeichenkette (String)) let dpSortMode = '0_userdata.0.vis.NetzwerkStatus.sortMode'; // Datenpunkt für Sortieren (Typ: Zeichenkette (String)) let dpFilterMode = '0_userdata.0.vis.NetzwerkStatus.filterMode'; // Datenpunkt für Filter (Typ: Zeichenkette (String)) const checkInterval = 180; // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden) let sprache = 'de'; // Sprache für formatierung letzte Änderung //let imagePath = '/vis.0/Meine Icons/Netzwerk/' // Pfad zu den verwendeten Bildern (bitte über den VIS Dateimanager hochladen) let imagePath = '/vis-icontwo/Devices/' // nach Variable imagePath suchen und die entsprechenden Zeilen aus- bzw. einkommentieren // Das Bild (Dateiformat png) in der Mapping-Liste hinterlegen let defaultImage = 'ip-network-outline'; // Standardbild, falls kein Bild angegeben wurde (Material Design Icons) let farbeGeraetOnline = 'green'; // Status Bar Farbe wenn Geräte online ist let farbeGeraetOffline = 'FireBrick'; // Status Bar Farbe wenn Geräte offline ist let sortResetAfter = 120; // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert) let sortReset = 'name' // Sortierung auf die zurückgesetzt werden soll let filterResetAfter = 120; // Filter nach X Sekunden zurücksetzen (0=deaktiviert) const deviceNames = [ { ip: "192.168.178.1", alias: "fritzbox", image: "/vis.0/Meine Icons/Netzwerk/fb_7590", link: "http://192.168.178.1" }, { ip: "192.168.178.20", alias: "ioBroker Slave", image: "/vis.0/Meine Icons/Netzwerk/Laptop_T", link: "http://192.168.178.20" }, { ip: "192.168.178.21", alias: "Walter PC", image: "/icons-open-icon-library-png/devices/computer-4", link: "" }, { ip: "192.168.178.23", alias: "Brigitte PC", image: "/icons-open-icon-library-png/devices/computer-4", link: "" }, { ip: "192.168.178.24", alias: "Brigitte IPad", image: "/vis.0/Meine Icons/Netzwerk/ipad", link: "" }, { ip: "192.168.178.26", alias: "iPhone", image: "/vis.0/Meine Icons/Netzwerk/iPhone", link: "" }, { ip: "192.168.178.27", alias: "Firma", image: "/vis.0/Meine Icons/Netzwerk/Laptop_T", link: "" }, { ip: "192.168.178.29", alias: "TechniSat", image: "/vis.0/Meine Icons/Netzwerk/technisat", link: "" }, { ip: "192.168.178.32", alias: "WDMyCloud", image: "/vis.0/Meine Icons/Netzwerk/WDMYCloud", link: "" }, { ip: "192.168.178.33", alias: "Epson Drucker", image: "/vis.0/Meine Icons/Netzwerk/epson", link: "" }, { ip: "192.168.178.35", alias: "Kodi TV", image: "/vis.0/Meine Icons/Netzwerk/pi", link: "" }, { ip: "192.168.178.36", alias: "Kodi Beamer", image: "/vis.0/Meine Icons/Netzwerk/pi", link: "" }, { ip: "192.168.178.37", alias: "Samsung TV", image: "/icons-open-icon-library-png/devices/video-television-3", link: "" }, { ip: "192.168.178.38", alias: "skyQ-Receiver", image: "", link: "" }, { ip: "192.168.178.39", alias: "Sony Blu-ray", image: "fritzbox", link: "" }, { ip: "192.168.178.40", alias: "Magenta-Mini DOT", image: "fritzbox", link: "" }, { ip: "192.168.178.42", alias: "James", image: "/vis.0/Meine Icons/Netzwerk/james", link: "http://192.168.178.42" }, { ip: "192.168.178.43", alias: "Kamera Haustüre", image: "/vis.0/Meine Icons/Netzwerk/lupus_le202_T", link: "http://192.168.178.43" }, { ip: "192.168.178.44", alias: "WLAN-Repeater EG", image: "/vis.0/Meine Icons/Netzwerk/repeater_600_T", link: "http://192.168.178.44" }, { ip: "192.168.178.45", alias: "WLAN-Repeater OG", image: "/vis.0/Meine Icons/Netzwerk/repeater_600_T", link: "http://192.168.178.45" }, { ip: "192.168.178.46", alias: "Cam Haustüre", image: "/vis.0/Meine Icons/Netzwerk/lupus_le202_T", link: "http://192.168.178.46" }, { ip: "192.168.178.47", alias: "AV-Receiver Pioneer", image: "fritzbox", link: "" }, { ip: "192.168.178.49", alias: "Cam Carport", image: "/vis.0/Meine Icons/Netzwerk/lupus_le202_T", link: "http://192.168.178.49" }, { ip: "192.168.178.50", alias: "Magenta-TV Receiver", image: "/vis.0/Meine Icons/Netzwerk/magenta_tv", link: "" }, { ip: "192.168.178.51", alias: "iobroker", image: "/icons-open-icon-library-png/devices/computer-4", link: "http://192.168.178.51:8081/#tab-objects" }, { ip: "192.168.178.53", alias: "Powerline 1", image: "/vis.0/Meine Icons/Netzwerk/Powerline_T", link: "" }, { ip: "192.168.178.55", alias: "iPad", image: "/vis.0/Meine Icons/Netzwerk/ipad", link: "" }, { ip: "192.168.178.56", alias: "Powerline 2", image: "/vis.0/Meine Icons/Netzwerk/Powerline_T", link: "" }, { ip: "192.168.178.57", alias: "LED-Strip Sitze", image: "fritzbox", link: "" }, { ip: "192.168.178.58", alias: "Powerline Garage", image: "/vis.0/Meine Icons/Netzwerk/Powerline_T", link: "http://192.168.178.58" }, { ip: "192.168.178.59", alias: "TV-Backlight", image: "fritzbox", link: "http://192.168.178.57" }, { ip: "192.168.178.60", alias: "Wetterstation", image: "fritzbox", link: "http://192.168.178.60" }, { ip: "192.168.178.61", alias: "LED-Strip Terrasse", image: "fritzbox", link: "http://192.168.178.61" }, { ip: "192.168.178.62", alias: "Cam Terrasse", image: "/vis.0/Meine Icons/Netzwerk/lupus_le202_T", link: "http://192.168.178.62" }, { ip: "192.168.178.63", alias: "WLAN-Repeater 3", image: "/vis.0/Meine Icons/Netzwerk/repeater_600_T", link: "http://192.168.178.63" }, { ip: "192.168.178.64", alias: "Dot Küche", image: "/vis.0/Meine Icons/Netzwerk/echo_dot", link: "" }, { ip: "192.168.178.65", alias: "WLAN-Repeater 4", image: "/vis.0/Meine Icons/Netzwerk/repeater_600_T", link: "http://192.168.178.65" }, { ip: "192.168.178.66", alias: "WLAN-Terrasse", image: "/vis.0/Meine Icons/Netzwerk/repeater_600_T", link: "http://192.168.178.66" }, { ip: "192.168.178.68", alias: "Marantz SR6015", image: "/vis.0/Meine Icons/Netzwerk/Marantz SR6015 Neu", link: "http://192.168.178.68" }, { ip: "192.168.178.70", alias: "Dot Toilette", image: "/vis.0/Meine Icons/Netzwerk/echo_dot", link: "" }, { ip: "192.168.178.71", alias: "Dot Keller", image: "/vis.0/Meine Icons/Netzwerk/echo_dot", link: "" }, { ip: "192.168.178.72", alias: "Harmony Hub", image: "", link: "" }, { ip: "192.168.178.73", alias: "pi-Slave 1", image: "/vis.0/Meine Icons/Netzwerk/pi", link: "http://192.168.178.100" }, { ip: "192.168.178.74", alias: "LED-Strip Flur unten",image: "fritzbox", link: "http://192.168.178.74" }, { ip: "192.168.178.100", alias: "Power Media-Center", image: "/vis.0/Meine Icons/Netzwerk/shelly_1_PM_T", link: "http://192.168.178.100" }, { ip: "192.168.178.101", alias: "Shelly Frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.101" }, { ip: "192.168.178.102", alias: "Shelly PlugS frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_Plug_S_T", link: "http://192.168.178.102" }, { ip: "192.168.178.103", alias: "Licht Walter Decke", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.103" }, { ip: "192.168.178.104", alias: "Licht Walter lesen", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.104" }, { ip: "192.168.178.105", alias: "Licht Brigitte lesen", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.105" }, { ip: "192.168.178.106", alias: "Licht Brigitte Decke", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.106" }, { ip: "192.168.178.107", alias: "Licht Küche max", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.107" }, { ip: "192.168.178.108", alias: "Licht Küche min", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.108" }, { ip: "192.168.178.109", alias: "Licht Büro Tür", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.109" }, { ip: "192.168.178.110", alias: "Licht Kino Bühne", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.110" }, { ip: "192.168.178.111", alias: "Licht Kino An Aus", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.111" }, { ip: "192.168.178.112", alias: "Licht Kino Dimmbar", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.112" }, { ip: "192.168.178.113", alias: "Licht Kino Links", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.113" }, { ip: "192.168.178.114", alias: "Licht Technik", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.114" }, { ip: "192.168.178.115", alias: "Kino Vorhang", image: "/vis.0/Meine Icons/Netzwerk/shelly_25_T", link: "http://192.168.178.115" }, { ip: "192.168.178.116", alias: "Shelly 252 frei", image: "/vis.0/Meine Icons/Netzwerk/shelly_25_T", link: "http://192.168.178.116" }, { ip: "192.168.178.117", alias: "Steckdose Technik", image: "/vis.0/Meine Icons/Netzwerk/shelly_25_T", link: "http://192.168.178.117" }, { ip: "192.168.178.118", alias: "Shelly 254 frei", image: "/vis.0/Meine Icons/Netzwerk/shelly_25_T", link: "http://192.168.178.118" }, { ip: "192.168.178.119", alias: "Shelly 1.14 frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.119" }, { ip: "192.168.178.120", alias: "Shelly 1.15 frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.120" }, { ip: "192.168.178.121", alias: "Shelly 1.16 frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.121" }, { ip: "192.168.178.122", alias: "Shelly 1.17 frei", image: "/vis.0/Meine Icons/Netzwerk/Shelly_1_T", link: "http://192.168.178.122" } ]; // ********************************************************************************************************************************************************************** // Fomate für moment Lib moment.locale(sprache); // auf Änderungen aktiver Skripts hören let activeSelector = `[id=tr-064.*.devices.*.active]`; let deviceActiveList = $(activeSelector); if (deviceActiveList.length === 0) { // Fehlermeldung ausgeben, wenn selector kein result liefert console.error(`no result for selector '${activeSelector}'`) } else { // listener nur für Änderung bei alive deviceActiveList.on(netzwerkStatus); } // auf Änderungen der Sortieung hören on({ id: dpSortMode, change: 'any' }, netzwerkStatus); on({ id: dpSortMode, change: 'any' }, resetSort); // // auf Änderungen der Filter hören on({ id: dpFilterMode, change: 'any' }, netzwerkStatus); on({ id: dpFilterMode, change: 'any' }, resetFilter); // Funktion adapterStatus alle x Sekunden ausführen schedule('*/' + checkInterval + ' * * * * *', netzwerkStatus); function netzwerkStatus() { try { let deviceList = []; for (var i = 0; i <= deviceActiveList.length - 1; i++) { let id = deviceActiveList[i].replace('.active', ''); let obj = getObject(id); let pattern = /(?:\d{1,3}\.){3}\d{1,3}/i; let ipAddress = obj.common.name.match(pattern)[0]; let image = defaultImage; let deviceName = obj.common.name.replace(/ \((?:\d{1,3}\.){3}\d{1,3}\)/g, ''); let device = deviceNames.find(element => element.ip == ipAddress); let listType = 'text'; let buttonLink = ''; if(device) { deviceName = device.alias; //image = device.image; //image = `${imagePath}${device.image}.png`; image = `${device.image}.png`; if(device.link) { listType = 'buttonLink'; if(device.link == 'http') { buttonLink = `http://${ipAddress}`; } else { buttonLink = device.link; } } } let macAddress = obj.native.mac; let imageColor = 'white'; let statusBarColor = farbeGeraetOffline; let status = 2; if (getState(deviceActiveList[i]).val) { statusBarColor = farbeGeraetOnline; status = 1; } if(listType === 'buttonLink') { deviceName = `${deviceName}` } let lastSignIn = 'noch nicht angemeldet'; let lastSignOff = 'noch nicht abgemeldet'; // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + getState(id + '.lastActive').val; //.format("dd[T] hh[h] mm[m]"); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + getState(id + '.lastInactive').val; //)).format("dd[T] hh[h] mm[m]"); } let subText = `
${ipAddress}
${lastSignIn}
${lastSignOff}
` deviceList.push({ text: deviceName, subText: subText, statusBarColor: statusBarColor, image: image, imageColor: imageColor, listType: listType, buttonLink: buttonLink, showValueLabel: false, name: deviceName, ipAddress: ipAddress, status: status }); } let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name'); if (sortMode === 'name' || sortMode === 'ipAddress') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else if (sortMode === 'status') { deviceList.sort(function (a, b) { return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] < b[sortMode]) || -1; }); } else { // default: nach name sortieren sortMode = 'name' deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterMode && filterMode !== null && filterMode !== '') { if (filterMode === 'offline') { deviceList = deviceList.filter(function (item) { return item.status === 2; }); } else if (filterMode === 'online') { deviceList = deviceList.filter(function (item) { return item.status === 1; }); } } let result = JSON.stringify(deviceList); if (getState(dpList) !== result) { setState(dpList, result, true); } } catch (err) { console.error(`[netzwerkStatus] error: ${err.message}, stack: ${err.stack}`); } } function resetSort() { let sortMode = myHelper().getStateValueIfExist(dpSortMode, null); if (sortResetAfter > 0) { setTimeout(function () { if (sortMode !== null && sortMode === myHelper().getStateValueIfExist(dpSortMode, null)) { setState(dpSortMode, sortReset); } }, sortResetAfter * 1000); } } function resetFilter() { let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterResetAfter > 0) { setTimeout(function () { if (filterMode !== null && filterMode === myHelper().getStateValueIfExist(dpFilterMode, null)) { setState(dpFilterMode, ''); } }, filterResetAfter * 1000); } } // Beim Staren des Skriptes Adapter Status abrufen netzwerkStatus(); function myHelper() { return { getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') { if (existsState(id)) { return prepand + getState(id).val + append; } else { return nullValue; } }, getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') { if (myHelper().checkCommonPropertyExist(object, prop)) { return prepand + object.common[prop] + append; } else { return nullValue; } }, checkCommonPropertyExist: function (object, prop) { if (object && object.common && object.common[prop]) { return true; } else { return false; } } } }