Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst]Invalide Date

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    18
    1
    730

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

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

[gelöst]Invalide Date

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
10 Beiträge 4 Kommentatoren 1.1k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    schrieb am zuletzt editiert von sigi234
    #1

    Hallo, bekomme immer invalide date
    und das Datum ist in der Zukunft
    ?
    Weis nicht mehr von wem das Skript ist. Kann mir jemand helfen?

    Screenshot (4856)_LI.jpg

    /* 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;
                }
            }
        }
    }
    

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Immer Daten sichern!

    NegaleinN M 2 Antworten Letzte Antwort
    0
    • sigi234S sigi234

      Hallo, bekomme immer invalide date
      und das Datum ist in der Zukunft
      ?
      Weis nicht mehr von wem das Skript ist. Kann mir jemand helfen?

      Screenshot (4856)_LI.jpg

      /* 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;
                  }
              }
          }
      }
      
      NegaleinN Offline
      NegaleinN Offline
      Negalein
      Global Moderator
      schrieb am zuletzt editiert von
      #2

      @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.

      ° Node.js: 20.17.0 NPM: 10.8.2
      ° Proxmox, Ubuntu 22.04.3 LTS
      ° Fixer ---> iob fix

      1 Antwort Letzte Antwort
      1
      • sigi234S sigi234

        Hallo, bekomme immer invalide date
        und das Datum ist in der Zukunft
        ?
        Weis nicht mehr von wem das Skript ist. Kann mir jemand helfen?

        Screenshot (4856)_LI.jpg

        /* 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;
                    }
                }
            }
        }
        
        M Online
        M Online
        MCU
        schrieb am zuletzt editiert von
        #3

        @sigi234
        Bei mir wird ein Fehler angezeigt in Zeile 216: -> hab .val ergänzt?? Versuch mal.
        58fde909-f166-4474-a3ff-d7521838e7e5-image.png

        NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
        Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

        sigi234S 1 Antwort Letzte Antwort
        0
        • M MCU

          @sigi234
          Bei mir wird ein Fehler angezeigt in Zeile 216: -> hab .val ergänzt?? Versuch mal.
          58fde909-f166-4474-a3ff-d7521838e7e5-image.png

          sigi234S Online
          sigi234S Online
          sigi234
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #4

          @mcu

          Leider nein

          Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Immer Daten sichern!

          1 Antwort Letzte Antwort
          0
          • Great SUNG Online
            Great SUNG Online
            Great SUN
            schrieb am zuletzt editiert von
            #5

            @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!

            1 Antwort Letzte Antwort
            2
            • Great SUNG Online
              Great SUNG Online
              Great SUN
              schrieb am zuletzt editiert von
              #6

              @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.

              sigi234S 1 Antwort Letzte Antwort
              0
              • Great SUNG Great SUN

                @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.

                sigi234S Online
                sigi234S Online
                sigi234
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #7

                @great-sun

                ?

                Was soll ich wo ändern? Im Original Skript anhängen oder neues Skript?

                Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                Immer Daten sichern!

                Great SUNG 1 Antwort Letzte Antwort
                0
                • sigi234S sigi234

                  @great-sun

                  ?

                  Was soll ich wo ändern? Im Original Skript anhängen oder neues Skript?

                  Great SUNG Online
                  Great SUNG Online
                  Great SUN
                  schrieb am zuletzt editiert von
                  #8

                  @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.

                  sigi234S 1 Antwort Letzte Antwort
                  0
                  • Great SUNG Great SUN

                    @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.

                    sigi234S Online
                    sigi234S Online
                    sigi234
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von sigi234
                    #9

                    @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.

                    Screenshot (4859).png

                    Screenshot (4860).png

                    Schaut gut aus!

                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Immer Daten sichern!

                    Great SUNG 1 Antwort Letzte Antwort
                    0
                    • sigi234S sigi234

                      @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.

                      Screenshot (4859).png

                      Screenshot (4860).png

                      Schaut gut aus!

                      Great SUNG Online
                      Great SUNG Online
                      Great SUN
                      schrieb am zuletzt editiert von
                      #10

                      @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;
                                  }
                              }
                          }
                      }
                      
                      1 Antwort Letzte Antwort
                      1
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      829

                      Online

                      32.5k

                      Benutzer

                      81.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe