NEWS
[gelöst]Invalide Date
-
Hallo, bekomme immer invalide date
und das Datum ist in der Zukunft
?
Weis nicht mehr von wem das Skript ist. Kann mir jemand helfen?/* 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 = 10; // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden) let sprache = 'de'; // Sprache für formatierung letzte Änderung let formatierungLastChange = "ddd DD.MM - HH:mm"; // Formatierung letzte Änderung -> siehe momentjs library let imagePath = '/vis.0/' // Pfad zu den verwendeten Bildern (bitte über den VIS Dateimanager hochladen) // 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 defaultImage = `${imagePath}default.png`; // Standardbild, falls kein Bild angegeben wurde (eigenes Bild) let farbeGeraetOnline = 'lime'; // Status Bar Farbe wenn Geräte online ist let farbeGeraetOffline = 'red'; // 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.29", alias: "Echo Dot Bad", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.32", alias: "Echo Dot SZ", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.66", alias: "Echo Dot Büro", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.49", alias: "Echo Dot Küche", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.54", alias: "Show 5 WZ", image: "/vis.0/Echo-Show-5.png", link: "http" }, { ip: "192.168.178.1", alias: "Router Büro", image: "/vis.0/fritzbox_6590_left_de_640x400.png", link: "http" }, { ip: "192.168.178.25", alias: "Yamaha AVR WZ", image: "/vis.0/reeiver1.png", link: "http" }, { ip: "192.168.178.24", alias: "Handy Ilse", image: "/vis.0/Galaxy_S6.jpg", link: "http" }, { ip: "192.168.178.47", alias: "Handy Sigi", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.44", alias: "Echo Flex Vorraum", image: "/vis.0/echo_flex.png", link: "http" }, { ip: "192.168.178.41", alias: "LG TV Wohnzimmer", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.40", alias: "Switch Büro", image: "/vis.0/it_network.svg", link: "http" }, { ip: "192.168.178.33", alias: "BroadLink WiFi Device", image: "/vis.0/broadlink-2-545x410.png", link: "http" }, { ip: "192.168.178.52", alias: "Drucker Wlan Büro", image: "/vis.0/mfc9332cdw_main.png", link: "http" }, { ip: "192.168.178.20", alias: "Medion PC Büro", image: "/vis.0/it_pc.svg", link: "http" }, { ip: "192.168.178.22", alias: "Philips Hue Bridge Büro", image: "/vis.0/PHILIPS-51180000-Hue--Bridge--3-Watt.png", link: "http" }, { ip: "192.168.178.28", alias: "Funksteckdose Drucker Büro", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.56", alias: "Stehlampe Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, { ip: "192.168.178.30", alias: "Huawei Sigi alt", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.99", alias: "CCU3 Büro", image: "/vis.0/ccu3-v_1.png", link: "http://192.168.178.99" }, { ip: "192.168.178.36", alias: "Bosch Geschirrspüler Küche", image: "/vis.0/13271013_SPV4HMX61E_STP_def.png", link: "http" }, { ip: "192.168.178.35", alias: "Steckdosenleiste Bad", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.39", alias: "Fire Tv", image: "/vis.0/fire_tv.png", link: "http" }, { ip: "192.168.178.23", alias: "Funksteckdose Medion PC", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.51", alias: "Samsung TV Büro", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.26", alias: "Steckdose Meross WZ", image: "/vis.0/Meross.png", link: "http" }, { ip: "192.168.178.37", alias: "Iphone Sarah", image: "/vis.0/iphone 6.jpg", link: "http" }, { ip: "192.168.178.50", alias: "Samsung Tab", image: "/vis.0/Samsung Tab.png", link: "http" }, { ip: "192.168.178.27", alias: "Meross Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, ]; //********************************************************************************************************************************************************************** // 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`; 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 = `<span style="text-decoration: underline">${deviceName}</span>` } let lastSignIn = 'noch nicht angemeldet'; let lastSignOff = 'noch nicht abgemeldet'; // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + moment((getState(id + '.lastActive').val)).format("DD.MM.YY HH:mm:ss"); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + moment((getState(id + '.lastInactive').val)).format("DD.MM.YY HH:mm:ss"); } let subText = `<div style="color: green; font-family: RobotoCondensed-BoldItalic">${ipAddress}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignIn}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignOff}</div>` 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).val !== 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; } } } }
-
@sigi234 sagte in Invalide Date:
Weis nicht mehr von wem das Skript ist. Kann mir jemand helfen?
hab den Beitrag von dem Script hier gefunden.
-
@sigi234
Bei mir wird ein Fehler angezeigt in Zeile 216: -> hab.val
ergänzt?? Versuch mal.
-
Leider nein
-
@sigi234 Ich hab so etwas in der Art auch gerade hinter mir. Hast Du evtl. im Objekt einen Locale Date(Time)String und möchtest den zu einem Date Objekt wandeln, damit Du dann Werte vergleichen kannst?
Hier habe ich einen Code für Dich (und andere), mit dem Du den "localized" Date(Time)String zurück verwandeln kannst:
function getLocaleDateTimeFormatString() { var localeDateStr = new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).formatToParts().map( function(e) { switch(e.type) { case 'month': return 'MM'; break; case 'day': return 'DD'; break; case 'year': return 'YYYY'; break; default: return e.value; }; } ).join(''); return localeDateStr + ' HH:mm:ss'; } var localeDateTime = '13.5.2022, 12:27:59'; var moment = require('moment'); var myNormalDateObject = moment(localeDateTime, getLocaleDateTimeFormatString());
Ich hoffe, das hilft. Würde mich über einen (V)ote freuen, wenn dem so ist.
Danke!
-
@sigi234 sagte in Invalide Date:
Hi nochmal...
geh doch mal bitte her und änder die folgenden Zeilen:> // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + moment((getState(id + '.lastActive').val)).format("DD.MM.YY HH:mm:ss"); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + moment((getState(id + '.lastInactive').val)).format("DD.MM.YY HH:mm:ss"); }
ab zu:
> // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + (getState(id + '.lastActive').val).toString(); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + (getState(id + '.lastInactive').val).toString(); }
Und paste die verschiedenen Daten, die da herauskommen mal in der Form:
IP -> Anmeldung: <datestring> Abmeldung: <datestring> Vorher Invalid Date <Y / N>
Dann überlege ich mir, was das Problem ist und wie wir es fixen können.
-
-
@sigi234 einfach die Zeilen im Original ändern. Nachdem was heraus kam kannst es ja wieder zurück ändern, aber im Grunde ist das nicht nötig, da es nur eine Änderung an der Anzeige ist.
-
@great-sun sagte in Invalide Date:
@sigi234 einfach die Zeilen im Original ändern. Nachdem was heraus kam kannst es ja wieder zurück ändern, aber im Grunde ist das nicht nötig, da es nur eine Änderung an der Anzeige ist.
Schaut gut aus!
-
@sigi234 Also, entsprechend Deiner Rückmeldung hatte ich wohl Recht. Ich war so frei und hab es Dir mal einfach gemacht.
Der Code sollte copy&paste funktionieren, wenn der von Dir gepastete code bei Dir im Einsatz ist. Ich hab auch entsprechend eine mini Versionsdoku dazu gepackt. Freu mich auf Deine Rückmeldung!/* Versionshistorie: * * 1.0.3: * - neu: Fix für moment locale um mit lokalen source Daten arbeiten zu können * * 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 = 10; // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden) let sprache = 'de'; // Sprache für formatierung letzte Änderung let formatierungLastChange = "ddd DD.MM - HH:mm"; // Formatierung letzte Änderung -> siehe momentjs library let imagePath = '/vis.0/' // Pfad zu den verwendeten Bildern (bitte über den VIS Dateimanager hochladen) // 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 defaultImage = `${imagePath}default.png`; // Standardbild, falls kein Bild angegeben wurde (eigenes Bild) let farbeGeraetOnline = 'lime'; // Status Bar Farbe wenn Geräte online ist let farbeGeraetOffline = 'red'; // 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.29", alias: "Echo Dot Bad", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.32", alias: "Echo Dot SZ", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.66", alias: "Echo Dot Büro", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.49", alias: "Echo Dot Küche", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.54", alias: "Show 5 WZ", image: "/vis.0/Echo-Show-5.png", link: "http" }, { ip: "192.168.178.1", alias: "Router Büro", image: "/vis.0/fritzbox_6590_left_de_640x400.png", link: "http" }, { ip: "192.168.178.25", alias: "Yamaha AVR WZ", image: "/vis.0/reeiver1.png", link: "http" }, { ip: "192.168.178.24", alias: "Handy Ilse", image: "/vis.0/Galaxy_S6.jpg", link: "http" }, { ip: "192.168.178.47", alias: "Handy Sigi", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.44", alias: "Echo Flex Vorraum", image: "/vis.0/echo_flex.png", link: "http" }, { ip: "192.168.178.41", alias: "LG TV Wohnzimmer", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.40", alias: "Switch Büro", image: "/vis.0/it_network.svg", link: "http" }, { ip: "192.168.178.33", alias: "BroadLink WiFi Device", image: "/vis.0/broadlink-2-545x410.png", link: "http" }, { ip: "192.168.178.52", alias: "Drucker Wlan Büro", image: "/vis.0/mfc9332cdw_main.png", link: "http" }, { ip: "192.168.178.20", alias: "Medion PC Büro", image: "/vis.0/it_pc.svg", link: "http" }, { ip: "192.168.178.22", alias: "Philips Hue Bridge Büro", image: "/vis.0/PHILIPS-51180000-Hue--Bridge--3-Watt.png", link: "http" }, { ip: "192.168.178.28", alias: "Funksteckdose Drucker Büro", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.56", alias: "Stehlampe Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, { ip: "192.168.178.30", alias: "Huawei Sigi alt", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.99", alias: "CCU3 Büro", image: "/vis.0/ccu3-v_1.png", link: "http://192.168.178.99" }, { ip: "192.168.178.36", alias: "Bosch Geschirrspüler Küche", image: "/vis.0/13271013_SPV4HMX61E_STP_def.png", link: "http" }, { ip: "192.168.178.35", alias: "Steckdosenleiste Bad", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.39", alias: "Fire Tv", image: "/vis.0/fire_tv.png", link: "http" }, { ip: "192.168.178.23", alias: "Funksteckdose Medion PC", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.51", alias: "Samsung TV Büro", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.26", alias: "Steckdose Meross WZ", image: "/vis.0/Meross.png", link: "http" }, { ip: "192.168.178.37", alias: "Iphone Sarah", image: "/vis.0/iphone 6.jpg", link: "http" }, { ip: "192.168.178.50", alias: "Samsung Tab", image: "/vis.0/Samsung Tab.png", link: "http" }, { ip: "192.168.178.27", alias: "Meross Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, ]; //********************************************************************************************************************************************************************** function getLocaleDateTimeFormatString() { var localeDateStr = new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).formatToParts().map( function(e) { switch(e.type) { case 'month': return 'MM'; break; case 'day': return 'DD'; break; case 'year': return 'YYYY'; break; default: return e.value; }; } ).join(''); return localeDateStr + ' HH:mm:ss'; } var localeDateFormatStr = getLocaleDateTimeFormatString(); // 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`; 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 = `<span style="text-decoration: underline">${deviceName}</span>` } let lastSignIn = 'noch nicht angemeldet'; let lastSignOff = 'noch nicht abgemeldet'; // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + moment(getState(id + '.lastActive').val, localeDateFormatStr).format("DD.MM.YY HH:mm:ss"); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + moment(getState(id + '.lastActive').val, localeDateFormatStr).format("DD.MM.YY HH:mm:ss"); } let subText = `<div style="color: green; font-family: RobotoCondensed-BoldItalic">${ipAddress}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignIn}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignOff}</div>` 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).val !== 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; } } } }