Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]Invalide Date

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst]Invalide Date

    This topic has been deleted. Only users with topic management privileges can see it.
    • sigi234
      sigi234 Forum Testing Most Active last edited by 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;
                  }
              }
          }
      }
      
      Negalein M 2 Replies Last reply Reply Quote 0
      • Negalein
        Negalein Global Moderator @sigi234 last edited by

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

        1 Reply Last reply Reply Quote 1
        • M
          MCU @sigi234 last edited by

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

          sigi234 1 Reply Last reply Reply Quote 0
          • sigi234
            sigi234 Forum Testing Most Active @MCU last edited by

            @mcu

            Leider nein

            1 Reply Last reply Reply Quote 0
            • Great SUN
              Great SUN last edited by

              @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 Reply Quote 2
              • Great SUN
                Great SUN last edited by

                @sigi234 sagte in Invalide Date:

                Hi nochmal...
                geh doch mal bitte her und änder die folgenden Zeilen:

                >  // Letzte Anmeldung auslesen                                                                                                                                                                                        if(existsState(id + '.lastActive')) {                                                                                                                                                                                            lastSignIn = 'angemeldet seit: ' + moment((getState(id + '.lastActive').val)).format("DD.MM.YY HH:mm:ss");                                                                                                                                                                                        }                                                                                                                                                                                                                                                                                                                                                                             // Letzte Abmeldung auslesen                                                                                                                                                                                        if(existsState(id + '.lastInactive')) {                                                                                                                                                                                            lastSignOff = 'abgemeldet seit: ' + moment((getState(id + '.lastInactive').val)).format("DD.MM.YY HH:mm:ss");                                                                                                                                                                                        }
                

                ab zu:

                >  // Letzte Anmeldung auslesen                                                                                                                                                                                        if(existsState(id + '.lastActive')) {                                                                                                                                                                                            lastSignIn = 'angemeldet seit: ' + (getState(id + '.lastActive').val).toString();                                                                                                                                                                                        }                                                                                                                                                                                                                                                                                                                                                                             // Letzte Abmeldung auslesen                                                                                                                                                                                        if(existsState(id + '.lastInactive')) {                                                                                                                                                                                            lastSignOff = 'abgemeldet seit: ' + (getState(id + '.lastInactive').val).toString();                                                                                                                                                                                        }
                
                

                Und paste die verschiedenen Daten, die da herauskommen mal in der Form:

                IP -> 
                Anmeldung: <datestring>
                Abmeldung: <datestring>
                Vorher Invalid Date <Y / N>
                

                Dann überlege ich mir, was das Problem ist und wie wir es fixen können.

                sigi234 1 Reply Last reply Reply Quote 0
                • sigi234
                  sigi234 Forum Testing Most Active @Great SUN last edited by

                  @great-sun

                  ?

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

                  Great SUN 1 Reply Last reply Reply Quote 0
                  • Great SUN
                    Great SUN @sigi234 last edited by

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

                    sigi234 1 Reply Last reply Reply Quote 0
                    • sigi234
                      sigi234 Forum Testing Most Active @Great SUN last edited by 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 SUN 1 Reply Last reply Reply Quote 0
                      • Great SUN
                        Great SUN @sigi234 last edited by

                        @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 Reply Quote 1
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        936
                        Online

                        31.7k
                        Users

                        79.6k
                        Topics

                        1.3m
                        Posts

                        javascript
                        4
                        10
                        820
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo