Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst]Invalide Date

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[gelöst]Invalide Date

Scheduled Pinned Locked Moved JavaScript
javascript
10 Posts 4 Posters 1.1k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    wrote on last edited by 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 Replies Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 ---- https://mcuiobroker.gitbook.io/jarvis-infos/ Aktualisierungen der Doku auf Instagram verfolgen -> https://www.instagram.com/mcuiobroker
        Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

        sigi234S 1 Reply Last reply
        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
          wrote on last edited by
          #4

          @mcu

          Leider nein

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

          1 Reply Last reply
          0
          • Great SUNG Offline
            Great SUNG Offline
            Great SUN
            wrote on last edited by
            #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 Reply Last reply
            2
            • Great SUNG Offline
              Great SUNG Offline
              Great SUN
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                0
                • sigi234S sigi234

                  @great-sun

                  ?

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

                  Great SUNG Offline
                  Great SUNG Offline
                  Great SUN
                  wrote on last edited by
                  #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 Reply Last reply
                  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
                    wrote on last edited by 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 Reply Last reply
                    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 Offline
                      Great SUNG Offline
                      Great SUN
                      wrote on last edited by
                      #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 Reply Last reply
                      1
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      397

                      Online

                      32.4k

                      Users

                      81.4k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe