Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. AndreasHeins

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    A
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 18
    • Best 0
    • Groups 1

    AndreasHeins

    @AndreasHeins

    Starter

    0
    Reputation
    12
    Profile views
    18
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    AndreasHeins Follow
    Starter

    Latest posts made by AndreasHeins

    • RE: Material Design Widgets: UniFi Netzwerk Status

      @Scrounger

      mit den Datenpunkten habe ich auch nicht gewusst.
      Läuft jetzt
      Danke.

      posted in Praktische Anwendungen (Showcase)
      A
      AndreasHeins
    • RE: Material Design Widgets: UniFi Netzwerk Status

      Hallo Tobias,

      ich hatte auch ein Problem mit der Datenausgabe. Vielleicht sind es ja die selben.
      Nach etwa Try and Error habe ich das Script etwas umgebaut.
      Ich glaube es liegt an Java Script und dem Aufruf zur Datenausgabe.
      Evtl. kann @Scrounger das ja anhand meines Scripts bestätigen.
      Mein Script läuft jetzt, allerdings ohne Sortierung und Filtern.

      // import
      const mathjs = require("mathjs");
      const moment = require("moment");
      const momentDurationFormatSetup = require("moment-duration-format");
      moment.locale("de");
      
      
      // Skript Einstellungen *************************************************************************************************************************************************
      
      let datapointId = 'Unifi.jsonList'
      createState(datapointId, "[]", {
        read: true, 
        write: false, 
        desc: "JSON String Unifi", 
        type: "string", 
        def: "[]"
      });
      
      let dpList = '0_userdata.0.Unifi.jsonList';                     // Datenpunkt für IconList Widget (Typ: Zeichenkette (String))
      let dpSortMode = '0_userdata.0.Unifi.sortMode';                          // Datenpunkt für Sortieren (Typ: Zeichenkette (String))
      let dpFilterMode = '0_userdata.0.Unifi.filterMode';                      // Datenpunkt für Filter (Typ: Zeichenkette (String))
      
      let durationFormat = "d [Tagen] hh [Stunden] mm [Minuten]";                         // Fomate für Betriebsdauer -> siehe momentjs library
      let lastSeenFormat = "ddd DD.MM - HH:mm";                                           // Fomate für lastSeen -> siehe momentjs library      
      
      const timeDiff = 2;                                                                 // Zeitunterschied (in Minuten) zwischen jetzt und lastSeen des Gerätes, wenn größer dann 'false' (muss >= update interval des unifi Adapters sein)
      
      const lastDays = 7;                                                                 // Verbundene Geräte der letzten X Tage einbeziehen
      
      const checkInterval = 1;                                                            // Interval zum aktualisiern der jsonList für das Widget
      
      let imagePath = '/vis.0/MeineIcons/unifi/'                                   // Pfad zu den verwendeten Bildern
      
      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)
      
      let speedIconSize = 20;
      let speedTextSize = 14;
      
      let trafficIconSize = 14;
      let trafficTextSize = 14;
      
      let elerbinsIconSize = 20;
      let erlebnisTextSize = 14;
      
      let offlineTextSize = 14;
      
      // **********************************************************************************************************************************************************************
      
      
      // Selector für alle UniFi LAN & WLAN Devices
      var devices = $(`[id=unifi.0.default.clients.*.mac]`);
      
      
      // Funktion alle x Minuten ausführen
      schedule("*/" + checkInterval + " * * * *", createList);
      
      // auf Änderungen der Sortieung hören
      on({ id: dpSortMode, change: 'any' }, createList);
      on({ id: dpSortMode, change: 'any' }, resetSort);
      
      // auf Änderungen der Filter hören
      on({ id: dpFilterMode, change: 'any' }, createList);
      on({ id: dpFilterMode, change: 'any' }, resetFilter);
      
      function createList() {
          try {
              let deviceList = [];
      
              for (var i = 0; i <= devices.length - 1; i++) {
                  let idDevice = devices[i].replace('.mac', '');
      
                  let isWired = getState(idDevice + ".is_wired").val;             // Unterscheiden zwischen LAN & WLAN
                  let lastSeen = getLastSeen(idDevice, isWired);                  // nur die Devices der letzten x Tage betrachten
      
                  if (isInRange(lastSeen) === true) {
      
                      // Werte die sowohl WLAN und LAN haben
                      let ip = existsState(idDevice + ".ip") ? getState(idDevice + ".ip").val : '';
                      let mac = getState(idDevice + ".mac").val;
                      let name = getName(idDevice, ip, mac);
                      let isGuest = getState(idDevice + ".is_guest").val;
                      let erlebnis = existsState(idDevice + ".satisfaction") ? getState(idDevice + ".satisfaction").val : 0;
                      let note = parseNote(idDevice, name, mac, ip);
      
                      let listType = 'text';
                      let buttonLink = '';
                      setLink();
      
                      // Vars die für LAN & WLAN unterschiedlich
                      let empfangenRaw = getTraffic(isWired, idDevice)
                      let empfangen = formatTraffic(empfangenRaw).replace('.', ',');
                      let gesendetRaw = getTraffic(isWired, idDevice, true);
                      let gesendet = formatTraffic(gesendetRaw).replace('.', ',');
      
                      let speed = '';
                      let betriebszeit = 0;
                      let image = '';
                      let wlanSignal = '';
      
                      if (isWired) {
                          let swPort = getState(idDevice + ".sw_port").val;
      
                          // Glasfaser Port nicht berücksitigen
                          if (swPort < 25 && isWired === true) {
                              speed = getState(`unifi.0.default.devices.${getState(idDevice + ".sw_mac").val}.port_table.Port ${swPort}.speed`).val;
                              betriebszeit = getState(idDevice + "._uptime_by_usw").val;
      
      
      
                              image = (note && note.image) ? `${imagePath}${note.image}.png` : `${imagePath}lan_noImage.png`
      
                              if (!(name === mac && swPort === 5)) {
                                  // ohne Proxmox LXCs auf Port 5 -> ändern mac adresse während backup
                                  addToList();
                              }
                          }
                      } else {
                          speed = (getState(idDevice + ".channel").val > 13) ? '5G' : '2G';
                          betriebszeit = getState(idDevice + "._uptime_by_uap").val;
                          wlanSignal = getState(idDevice + ".signal").val;
                          image = (note && note.image) ? `${imagePath}${note.image}.png` : `${imagePath}wlan_noImage.png`
      
                          addToList();
                      }
      
                      function setLink() {
                          if (note && note.link) {
                              listType = 'buttonLink';
      
                              if (note.link === 'http') {
                                  buttonLink = `http://${ip}`;
                              } else if (note.link === 'https') {
                                  buttonLink = `https://${ip}`;
                              } else {
                                  buttonLink = note.link;
                              }
                          }
                      }
      
                      function addToList() {
                          let statusBarColor = 'FireBrick';
                          let isConn = isConnected(lastSeen);
                          if (isConn === true) {
                              statusBarColor = 'green';
                          }
      
                          let text = name;
      
                          if (isGuest === true) {
                              text = `<span class="mdi mdi-account-box" style="color: #ff9800;"> ${name}</span>`
                          }
      
                          let speedElement = '';
                          if (speed === 1000 || speed === 100) {
                              speedElement = `<div style="display: flex; flex: 1; text-align: left; align-items: center; position: relative;">
                                                  ${getLanSpeed(speed, speedIconSize, isConn)}
                                                  <span style="color: gray; font-family: RobotoCondensed-LightItalic; font-size: ${speedTextSize}px; margin-left: 4px;">${speed.toString().replace('1000', '1.000')} MBit/s</span>
                                              </div>`
                          } else {
                              speedElement = `<div style="display: flex; flex: 1; text-align: left; align-items: center; position: relative;">
                                                  ${getWifiStrenght(wlanSignal, speedIconSize, isConn)}
                                                  <span style="color: gray; font-family: RobotoCondensed-LightItalic; font-size: ${speedTextSize}px; margin-left: 4px;">${speed}</span>
                                              </div>`;
                          }
      
                          let empfangenElement = `<span class="mdi mdi-arrow-down" style="font-size: ${trafficIconSize}px; color: #44739e;"></span><span style="color: gray; font-family: RobotoCondensed-LightItalic; font-size: ${trafficTextSize}px; margin-left: 2px; margin-right: 4px">${empfangen}</span>`
                          let gesendetElement = `<span class="mdi mdi-arrow-up" style="font-size: ${trafficIconSize}px; color: #44739e;"></span><span style="color: gray; font-family: RobotoCondensed-LightItalic; font-size: ${trafficTextSize}px; margin-left: 2px;">${gesendet}</span>`
      
                          let erlebnisElement = `<div style="display: flex; margin-left: 8px; align-items: center;">${getErlebnis(erlebnis, elerbinsIconSize, isConn)}<span style="color: gray; font-family: RobotoCondensed-LightItalic; font-size: ${erlebnisTextSize}px; margin-left: 4px;">${erlebnis} %</span></div>`
      
                          let subText = `
                                      ${ip}
                                      <div style="display: flex; flex-direction: row; padding-left: 8px; padding-right: 8px; align-items: center; justify-content: center;">
                                          ${getOnOffTime(isConn, betriebszeit, lastSeen)}
                                      </div>
                                      <div style="display: flex; flex-direction: row; padding-left: 8px; padding-right: 8px; margin-top: 10px; align-items: center;">
                                          ${speedElement}${empfangenElement}${gesendetElement}${erlebnisElement}
                                      </div>
                                      `
      
                          deviceList.push({
                              text: text,
                              subText: subText,
                              listType: listType,
                              buttonLink: buttonLink,
                              image: image,
                              statusBarColor: statusBarColor,
                              name: name,
                              ip: ip,
                              connected: isConn,
                              empfangen: empfangenRaw,
                              gesendet: gesendetRaw,
                              erlebnis: erlebnis,
                              betriebszeit: betriebszeit,
                              isWired: isWired
                          });
                      }
                  }
              }
      
      
              let sortMode = existsState(dpSortMode) ? getState(dpSortMode).val : '';
      
              if (sortMode === 'name') {
                  deviceList.sort(function (a, b) {
                      return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                  });
              } else if (sortMode === 'ip') {
                  deviceList.sort(function (a, b) {
                      return a[sortMode].split('.')[0] - b[sortMode].split('.')[0] || a[sortMode].split('.')[1] - b[sortMode].split('.')[1] || a[sortMode].split('.')[2] - b[sortMode].split('.')[2] || a[sortMode].split('.')[3] - b[sortMode].split('.')[3]
                  });
              } else if (sortMode === 'connected' || sortMode === 'empfangen' || sortMode === 'gesendet' || sortMode === 'erlebnis' || sortMode === 'betriebszeit') {
                  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 = existsState(dpFilterMode) ? getState(dpFilterMode).val : '';
      
              if (filterMode && filterMode !== null && filterMode !== '') {
                  if (filterMode === 'connected') {
                      deviceList = deviceList.filter(function (item) {
                          return item.connected === true;
                      });
                  } else if (filterMode === 'disconnected') {
                      deviceList = deviceList.filter(function (item) {
                          return item.connected === false;
                      });
                  } else if (filterMode === 'lan') {
                      deviceList = deviceList.filter(function (item) {
                          return item.isWired === true;
                      });
                  } else if (filterMode === 'wlan') {
                      deviceList = deviceList.filter(function (item) {
                          return item.isWired === false;
                      });
                  }
              }
      
      
              let result = JSON.stringify(deviceList);
              if (existsState(dpList) && getState(dpList).val !== result) {
                  setState(dpList, result, true);
              } else {
                  setState(dpList, result, true);
              }
      
          } catch (err) {
              console.error(`[createList] error: ${err.message}`);
              console.error(`[createList] stack: ${err.stack}`);
          }
      
      
          // Functions **************************************************************************************************************************************
          function getLastSeen(idDevice, isWired) {
              if (isWired) {
                  return getState(idDevice + "._last_seen_by_usw").val
              } else {
                  return getState(idDevice + "._last_seen_by_uap").val
              }
          }
      
          function getTraffic(isWired, idDevice, isSent = false) {
              if (isSent === false) {
                  // empfangen
                  if (isWired) {
                      if (existsState(idDevice + ".wired-tx_bytes")) {
                          return getState(idDevice + ".wired-tx_bytes").val;
                      }
                  } else {
                      if (existsState(idDevice + ".tx_bytes")) {
                          return getState(idDevice + ".tx_bytes").val;
                      }
                  }
              } else {
                  // gesendet
                  if (isWired) {
                      if (existsState(idDevice + ".wired-rx_bytes")) {
                          return getState(idDevice + ".wired-rx_bytes").val;
                      }
                  } else {
                      if (existsState(idDevice + ".rx_bytes")) {
                          return getState(idDevice + ".rx_bytes").val;
                      }
                  }
              }
      
              return 0;
          }
      
          function formatTraffic(traffic) {
              if (traffic > 0) {
                  traffic = parseFloat(traffic) / 1048576;
                  if (traffic < 100) {
                      return `${mathjs.round(traffic, 0)} MB`
                  } else {
                      return `${mathjs.round(traffic / 1024, 2)} GB`
                  }
              }
      
              return 'N/A';
          }
      
          function getName(idDevice, ip, mac) {
              let deviceName = '';
      
              if (existsState(idDevice + ".name")) {
                  deviceName = getState(idDevice + ".name").val;
              }
      
              if (deviceName === null || deviceName === undefined || deviceName === '') {
                  if (existsState(idDevice + ".hostname")) {
                      deviceName = getState(idDevice + ".hostname").val;
                  }
              }
      
              if (deviceName === null || deviceName === undefined || deviceName === '') {
                  if (ip !== null && ip !== undefined && ip !== '') {
                      deviceName = ip;
                  } else {
                      deviceName = mac;
                  }
              }
      
              return deviceName;
          }
      
          function isConnected(lastSeen) {
              // Differenz zwischen lastSeen und Now berechnen -> prüfen ob verbunden
              let diff = new Date().getTime() - lastSeen * 1000;
      
              return (diff < timeDiff * 60000) ? true : false;
          }
      
          function isInRange(lastSeen) {
              // Differenz zwischen lastSeen und Now berechnen -> prüfen ob in angegebenen Zeitraum verbunden war
              let diff = new Date().getTime() - lastSeen * 1000;
      
              return (diff < lastDays * 86400 * 1000) ? true : false;
          }
      
          function getWifiStrenght(signal, size, isConnected) {
              let img = '';
      
              if (isConnected === false) {
                  return `<span class="mdi mdi-wifi-off" style="color: gray; font-size: ${size}px"></span>`
              }
      
              if (signal < -70) {
                  return `<span class="mdi mdi-signal-cellular-1" style="color: FireBrick; font-size: ${size}px"></span>`
              } else if (signal >= -70 && signal < -55) {
                  return `<span class="mdi mdi-signal-cellular-2" style="color: #ff9800; font-size: ${size}px"></span>`
              } else {
                  return `<span class="mdi mdi-signal-cellular-3" style="color: green; font-size: ${size}px"></span>`
              }
          }
      
          function getLanSpeed(speed, size, isConnected) {
              if (isConnected === false) {
                  return `<span class="mdi mdi-network-off" style="color: gray; font-size: ${size}px;"></span>`
              }
      
              if (speed === 1000) {
                  return `<span class="mdi mdi-network" style="color: green; font-size: ${size}px;"></span>`
              } else {
                  return `<span class="mdi mdi-network" style="color: #ff9800; font-size: ${size}px;"></span>`
              }
          }
      
          function getErlebnis(erlebnis, size, isConnected) {
              if (isConnected === false) {
                  return `<span class="mdi mdi-speedometer" style="color: gray; font-size: ${size}px;"></span>`
              }
      
              if (erlebnis >= 70) {
                  return `<span class="mdi mdi-speedometer" style="color: green; font-size: ${size}px;"></span>`
              } else if (erlebnis < 70 && erlebnis >= 40) {
                  return `<span class="mdi mdi-speedometer-medium" style="color: #ff9800; font-size: ${size}px;"></span>`
              } else {
                  return `<span class="mdi mdi-speedometer-slow" style="color: FireBrick; font-size: ${size}px;"></span>`
              }
          }
      
          function parseNote(idDevice, name, mac, ip) {
              try {
                  if (existsState(idDevice + ".note")) {
                      let res = JSON.parse(getState(idDevice + ".note").val);
                      return res;
                  }
              } catch (ex) {
                  console.error(`${name} (ip: ${ip}, mac: ${mac}): ${ex.message}`);
              }
      
              return undefined;
          }
      
          function getOnOffTime(isConnected, betriebszeit, lastSeen) {
              if (isConnected) {
                  return `<span style="color: gray; font-size: ${offlineTextSize}px; line-height: 1.3; font-family: RobotoCondensed-LightItalic;">online seit ${moment.duration(betriebszeit, 'seconds').format(durationFormat, 0)}</span>`
              } else {
                  let now = moment(new Date());
                  let start = moment(lastSeen * 1000);
                  return `<span style="color: gray; font-size: ${offlineTextSize}px; line-height: 1.3; font-family: RobotoCondensed-LightItalic;">offline seit ${moment.duration(betriebszeit, 'seconds').format(durationFormat, 0)}</span>`
              }
          }
      }
      
      // Beim skript start ausführen
      createList();
      
      
      function resetSort() {
          let sortMode = existsState(dpSortMode) ? getState(dpSortMode).val : '';
      
          if (sortResetAfter > 0) {
              setTimeout(function () {
                  if (existsState(dpSortMode) && sortMode === getState(dpSortMode).val) {
                      setState(dpSortMode, sortReset);
                  }
              }, sortResetAfter * 1000);
          }
      }
      
      function resetFilter() {
          let filterMode = existsState(dpFilterMode) ? getState(dpFilterMode).val : '';
      
          if (filterResetAfter > 0) {
              setTimeout(function () {
                  if (existsState(dpFilterMode) && filterMode === getState(dpFilterMode).val) {
                      setState(dpFilterMode, '');
                  }
              }, filterResetAfter * 1000);
          }
      }
      

      Ich habe im oberen Bereich folgendes Eingefügt:

      let datapointId = 'Unifi.jsonList'
      createState(datapointId, "[]", {
        read: true, 
        write: false, 
        desc: "JSON String Unifi", 
        type: "string", 
        def: "[]"
      });
      

      Gruß
      Andreas

      posted in Praktische Anwendungen (Showcase)
      A
      AndreasHeins
    • RE: Material Design Widgets: UniFi Netzwerk Status

      Hallo,

      ich habe ständig 2 Fehler.

      20b68774-89d2-49be-a39b-152816f8818c-image.png

      Hat jemand eine Idee wo der Fehler liegt?

      Die Datenpunkte werden auch nicht angelegt.

      2a6d4e7e-859d-4819-9c1d-57ba2383781e-image.png

      posted in Praktische Anwendungen (Showcase)
      A
      AndreasHeins
    • RE: Material Design Widgets: Calendar Widget

      @Scrounger

      Danke für deine Nachricht.

      1. Die Einstellung habe ich glatt übersehen.

      1,2,4 Issues sind erstellt.

      Gruß
      Andreas

      posted in Visualisierung
      A
      AndreasHeins
    • RE: Material Design Widgets: Calendar Widget

      @Scrounger

      Ich habe schon alle Einstellungen durchsucht (glaube ich).

      Ich würde mir noch folgende Einstellungen wünschen:

      1. Kalenderwoche in der Monatsansicht einblenden
      2. Anzeige Monatsname in der Monatsansicht
      3. Markierung des Tages in der Monatsansicht

      9958f9ae-6c7a-47f4-940c-a5d980f9c440-image.png

      1. Anzeige Monatsname in der Wochen- bzw. Tagesansicht

      adea8d43-3779-4c03-ba13-ee87ca50cb41-image.png

      Andreas

      posted in Visualisierung
      A
      AndreasHeins
    • ical. Auch alte Termine anzeigen

      Hallo zusammen,

      kann ich in der Instanz eines Kalenders einstellen, dass auch alte Termine angezeigt werden können?
      Ich stelle meine Termine in dem Calendar Widget von Scrounger (danke dafür) dar.
      Ich hätte hier gerne auch vergangene Termine angezeigt.

      Mit freundlichen Grüßen
      Andreas

      posted in Entwicklung
      A
      AndreasHeins
    • RE: Material Design Widgets: Calendar Widget

      Hallo und danke für den Tip.

      Falls noch jemand, so wie ich mit Events im ical Kalender arbeitet, hier mein angepasstes Script. So prüfe ich bei der Kalenderhintergrundfarbe den Kalender- oder Eventnamen.

      // momentjs is required as dependecies in javascript adapter
      const moment = require("moment");
       
      var instances = $(`[id=ical.*.data.table]`);
      instances.on(ical2CalendarWidget);
       
      // remove this, if you know to use your own datapoint
      let datapointId = 'materialdesignwidgets.calendar.ical2calendar'
      createState(datapointId, "[]", {
        read: true, 
        write: false, 
        desc: "JSON String for Calendar Widget", 
        type: "string", 
        def: "[]"
      });
       
      function ical2CalendarWidget() {
          try {
              let calList = [];
       
              for (var inst = 0; inst <= instances.length - 1; inst++) {
                  let icalObj = getState(instances[inst]).val;
       
                  if (icalObj) {
                      for (var i = 0; i <= icalObj.length - 1; i++) {
                          let item = icalObj[i];
       
                          // extract calendar color
                          let calendarName = item._class.split(' ')[0].replace('ical_', '');
       
                          let startTime = moment(item._date);
                          let endTime = moment(item._end);
                          
                          let start = startTime.format("YYYY-MM-DD HH:mm");
                          let end = endTime.format("YYYY-MM-DD HH:mm");
       
                          if (startTime.format('HH:mm') === '00:00' && endTime.format('HH:mm') === '00:00') {
                              // is full-day event
                              if (endTime.diff(startTime, 'hours') === 24) {
                                  // full-day event, one day
                                  start = startTime.format("YYYY-MM-DD");
                                  end = startTime.format("YYYY-MM-DD");
                              } else {
                                  // full-day event, multiple days
                                  start = startTime.format("YYYY-MM-DD");
                                  end = endTime.format("YYYY-MM-DD");
                              }
                          }
       
                          // create object for calendar widget
                          calList.push({
                              name: item.event,
                              color: getMyCalendarColor(item.event,calendarName),
                              colorText: getMyCalendarTextColor(calendarName),
                              start: start,
                              end: end
                          })
                      }
       
                      function getMyCalendarColor(event,calendarName) {
                          // assign colors via the calendar names, use calendar name or Event names as set in ical
      
                          if (calendarName === 'Hausmüll' || event === 'Hausmüll') {
                              return '#DEB887';
                          }
      
                          if (calendarName === 'Papiertonne' || event === 'Papiertonne') {
                              return '#0080FF';
                          }
      
                          if (calendarName === 'Gelber Sack' || event === 'Gelber Sack') {
                              return '#FFFF00';
                          }
      
                          if (calendarName === 'Geburtstage' || event === 'Geburtstage') {
                              return '#DF01A5';
                          }
      
                          if (calendarName === 'Werder' || event === 'Werder') {
                              return '#01DF01';
                          }
      
                          if (calendarName === 'Bayern' || event === 'Bayern') {
                              return '#FF0000';
                          }
      
                          if (calendarName === 'Ferien' || event === 'Ferien') {
                              return '#2ECCFA';
                          }
                          if (calendarName === 'Müllabfuhr' || event === 'Müllabfuhr') {
                              return '#2ECCFA';
                          }
                      }
       
                      function getMyCalendarTextColor(calendarName) {
                          // assign colors via the calendar names, use calendar name as set in ical
                          if (calendarName === 'Hausmüll') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Papiertonne') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Gelber Sack') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Geburtstage') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Werder') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Bayern') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Schulferien Niedersachsen') {
                              return '#000000';
                          }
      
                          if (calendarName === 'Müllabfuhr') {
                              return '#000000';
                          }
                      }
                  }
       
      
      
                  // Enter the destination data point that is to be used as object ID in the widget                
                  setState(datapointId, JSON.stringify(calList), true);
              }
          } catch (e) {
              console.error(`ical2MaterialDesignCalendarWidget: message: ${e.message}, stack: ${e.stack}`);
          }
      }
       
      ical2CalendarWidget();
      

      Gruß Andreas

      posted in Visualisierung
      A
      AndreasHeins
    • RE: Material Design Widgets: Calendar Widget

      Hallo zusammen,

      ich habe ein Problem mit der Darstellung von Farben im Kalender.
      Einige Termine werden korrekt dargestellt, incl. Color und Colortext.
      Andere wiederum nicht, weder Color noch Colortext.

      c236fe46-6f29-4c68-b5c7-98b7e650e184-image.png

      Hier ein Auszug aus dem Datenpunkt.
      {"name":"Werder Bremen - 1. FC Köln","color":"#01DF01","colorText":"#000000","start":"2020-06-27 15:30","end":"2020-06-27 17:30"},
      {"name":"Bayern München - Eintracht Frankfurt","color":"#FF0000","colorText":"#000000","start":"2020-05-23 18:30","end":"2020-05-23 20:30"},{
      {"name":"Hausmüll","start":"2020-05-22","end":"2020-05-22"},{"name":"Gelber Sack","start":"2020-05-22","end":"2020-05-22"},
      {"name":"Papiertonne","start":"2020-05-28","end":"2020-05-28"},{"name":"Gelber Sack","start":"2020-06-05","end":"2020-06-05"},
      {"name":"Hausmüll","start":"2020-06-05","end":"2020-06-05"},{"name":"Hausmüll","start":"2020-06-18","end":"2020-06-18"},
      {"name":"Gelber Sack","start":"2020-06-18","end":"2020-06-18"},{"name":"Papiertonne","start":"2020-06-25","end":"2020-06-25"},
      {"name":"Hausmüll","start":"2020-07-02","end":"2020-07-02"},{"name":"Gelber Sack","start":"2020-07-02","end":"2020-07-02"},
      {"name":"Hausmüll","start":"2020-07-16","end":"2020-07-16"},{"name":"Gelber Sack","start":"2020-07-16","end":"2020-07-16"},
      {"name":"Papiertonne","start":"2020-07-23","end":"2020-07-23"},{"name":"Gelber Sack","start":"2020-07-30","end":"2020-07-30"},
      {"name":"Hausmüll","start":"2020-07-30","end":"2020-07-30"},
      {"name":"Hausmüll","start":"2020-12-03","end":"2020-12-03"},
      {"name":"Gelber Sack","start":"2020-12-03","end":"2020-12-03"},
      {"name":"Papiertonne","start":"2020-12-10","end":"2020-12-10"},
      {"name":"Gelber Sack","start":"2020-12-17","end":"2020-12-17"},
      {"name":"Hausmüll","start":"2020-12-17","end":"2020-12-17"},
      {"name":"Pfingstferien Niedersachsen","start":"2020-05-22","end":"2020-05-22"},
      {"name":"Pfingstferien Niedersachsen","start":"2020-06-02","end":"2020-06-02"},
      {"name":"Sommerferien Niedersachsen","start":"2020-07-16","end":"2020-08-27"},
      {"name":"Herbstferien Niedersachsen","start":"2020-10-12","end":"2020-10-24"},
      {"name":"Weihnachtsferien Niedersachsen","start":"2020-12-23","end":"2021-01-09"},
      {"name":"Winterferien Niedersachsen","start":"2021-02-01","end":"2021-02-03"}

      Und hier noch der Auszug aus dem Script.

      function getMyCalendarColor(calendarName) {
      // assign colors via the calendar names, use calendar name as set in ical

                      if (calendarName === 'Hausmüll') {
                          return '#FF0000';
                      }
      
                      if (calendarName === 'Papiertonne') {
                          return '#0101DF';
                      }
      
                      if (calendarName === 'Gelber Sack') {
                          return '#FFFF00';
                      }
      
                      if (calendarName === 'Geburtstage') {
                          return '#DF01A5';
                      }
      
                      if (calendarName === 'Werder') {
                          return '#01DF01';
                      }
      
                      if (calendarName === 'Bayern') {
                          return '#FF0000';
                      }
      
                      if (calendarName === 'Schulferien Niedersachsen') {
                          return '#2ECCFA';
                      }
                      if (calendarName === 'Vacation') {
                          return '#2ECCFA';
                      }
                  }
      

      Liegt es evtl. daran das die Müllabfuhr und Ferien ganztätige Termine sind?
      Oder das die Einträge Gelber Sack, Hausmüll und Papiertonne nur Ereignisse in einem Kalender sind?

      Oder hat jemand sonst eine Idee?

      Mit freundlichen Grüßen
      Andreas

      posted in Visualisierung
      A
      AndreasHeins
    • RE: Announce: Vorwerk VR200 Saugroboter Adapter

      @Flexer sagte in Announce: Vorwerk VR200 Saugroboter Adapter:

      Kurze Frage. Funktioniert der Adapter denn auch mit dem VR 300?

      Hallo Flexer,

      der Adapter funktioniert auch mit dem VR300

      Gruß
      Andreas

      posted in ioBroker Allgemein
      A
      AndreasHeins
    • RE: Saugroboter Vorwerk VR300

      @Jey-Cee

      Hallo,
      da hast recht. Manchmal denkt man einfach zu kompliziert.

      posted in Entwicklung
      A
      AndreasHeins
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo