Navigation

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

    NEWS

    • Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Profile
    • Following 2
    • Followers 0
    • Topics 24
    • Posts 304
    • Best 26
    • Groups 2

    Great SUN

    @Great SUN

    28
    Reputation
    66
    Profile views
    304
    Posts
    0
    Followers
    2
    Following
    Joined Last Online
    Location Kreuttal / AT

    Great SUN Follow
    Pro Starter

    Best posts made by Great SUN

    • RE: Fensterkontakte, nur welche??

      @nashra Also ich kann Dir empfehlen auf Standard 433Mhz Sensoren zu gehen, Die kannst Du dann beispielsweise mit einer Sonoff RFBridge annehmen und auf die Meldungen reagieren.
      Die gibt es auch für open/close (mit zwei Codes), so dass man auf beides reagieren kann. Da die nur mittels Magnetkontakt arbeiten und sonst nichts weiter machen, hält die Batterie da quasi ewig.

      posted in Hardware
      Great SUN
      Great SUN
    • RE: [gelöst]Invalide Date

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

      posted in JavaScript
      Great SUN
      Great SUN
    • RE: ioBroker als Energiemanager versus smartfox

      @dojodojo Lass es mich mal anders formulieren:
      Es gibt solche Geräte, die teilweise direkte Integrationen haben, teilweise mit MQTT o.ä. funktionieren.
      Grundsätzlich kommt die Sinnhaftigkeit der Installation solcher Geräte (smartfox) auch extrem auf den Anwendungsfall an.
      Beispielsweise könntest Du mehrere Sicherungskästen haben und ein solches Gerät nicht direkt an der Hauptleitung einsetzen. Das würde zu unvollständigen Daten führen.
      Ein weiterer Fall ist, dass diese Geräte je nach deinem Bedarf potentiell teurer sind als ihre Alternativen, da der gesamte Strom quasi durch dieses eine Gerät durch muss.

      Ich gehe davon aus, dass Du viel günstiger unterwegs wärest, würdest Du Deine Solaranlage/Batteriespeicher getrennt anschließen und den Stromzähler, sowie ein paar ausgewählte Verbraucher "auslesen".
      Zum Beispiel habe ich für mein Büro Sicherungen mit Stomzähler, so dass ich den Strom fürs Büro getrennt auslesen kann.
      Hauptverbraucher, wie Klimaanlage, Trockner, Waschmaschinen und Kaffeemaschine lese ich jeweils über eine entsprechende smarte Steckdose aus.
      Das schöne an der Sache ist, dass Du quasi out of the box die Möglichkeit der Steuerung mitgeliefert bekommst, Du kannst also, wenn der Ruhezustand eines Gerätes erkannt wird, dieses auch komplett ausschalten und so den Strom für Standby / Leerlauf sparen.

      Es gibt noch beliebig viele weitere Beispiele, aber ich wollte Dir nur mal einen Eindruck verschaffen.

      posted in Einsteigerfragen
      Great SUN
      Great SUN
    • RE: Mehrere Heizkörper Synchronisiseren, value storm

      @smo @paul53

      Das mit dem Verzögern halte ich auch für Sinnvoll. Im JS würde ich das in etwa so machen:
      Erstmal entweder mit $() die Heizkörpergruppe selektieren, oder, wenn das nicht geht, die ID's in einem json Objekt hinterlegen. Dann für alle den Gleichen on request machen:

      function changeGroupObject(sourceObjId, groupObjListId, settingsJson) {
          for(const [settingId, settingVal] of Object.entries(settingsJson)) {
              var currVal = getState(sourceObjId + '.' + settingId).val;
             if(currVal != settingVal) {
                 console.log('setting changed after call, ignoring request');
                 return;
             }
         }
         var groupObjIdArr = JSON.parse(getState(groupObjListId).val);
         for(const destObjId of groupObjIdArr) {
             if(destObjId == sourceObjId) {
                 continue;
             }
             for(const [settingId, settingVal] of Object.entries(settingsJson)) {
                 setState(destObjId + '.' + settingId, settingVal);
             }
      }
      var groupObjIdArr = JSON.parse(getState(groupObjListId).val);
      var syncSettingArr = ['STATE.temperature', 'STATE.windowopen'];
      for(const destObjId of groupObjIdArr) {
          for(const settingId of syncSettingArr) {
              on({id: destObjId + '.' + settingId, change: 'ne'}, async function(obj) {
                  setTimeout(function () { changeGroupObject(destObjId, groupObjListId, {settingId: obj.state.val});. 2000); // 2sec, könnte man drüber nachdenken, das zu ändern ;-)
              })
          }
      }
      

      Mit dem Code oben könnte man von der Basis her auch noch verschiedene Werte gleichzeitig prüfen und verändern, so dass bei mehreren Änderungen nur ein setState aufgerufen werden muss pro Gerät/Eigenschaft.

      Ich hoffe, das hilft Dir evtl. etwas 😉

      posted in Skripten / Logik
      Great SUN
      Great SUN
    • RE: Sonoff NSPanel

      @armilar Ja, ich brauch wie gesagt nur ein wenig Anlauf-Hilfe, da ich evtl. nicht alles so bauen mag, wie die Meisten 😉
      Und Du bist da wahrscheinlich der Einzige, der das wirklich kann 😄

      posted in Hardware
      Great SUN
      Great SUN
    • RE: [gelöst]Invalide Date

      @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;
                  }
              }
          }
      }
      
      posted in JavaScript
      Great SUN
      Great SUN
    • RE: Test Adapter iQontrol 2.0.x Vis (Entwicklungs-Thread)

      @beowolf Wenn das Deine Lösung ist, würde ich mich über ein Voting meines Beitrags freuen 😉
      EDIT: Solltest Du noch Hilfe brauchen, weißt Du ja, wo Du uns findest 😄

      posted in Tester
      Great SUN
      Great SUN
    • RE: Daten von Python3 in Datenpunkt schreiben

      @jan-schmeckenbecher
      Du hast zwei einfache Möglichkeiten:

      1. Vom Python Script aus: Auf http://ipaddress:8087/help (oder #tab-adapters/readme/simple-api von Deinem Admin-UI) findest Du die Doku
      2. Mit Blockly/JS Python script ausführen und die Ausgabe dann Parsen und eintragen.

      Bei Fragen, gern schreiben.

      posted in Skripten / Logik
      Great SUN
      Great SUN
    • RE: Fensterkontakte, nur welche??

      @nashra Vorteil der 433Mhz Sensoren ist eben, dass sie nicht regelmäßig senden müssen. Nachteil ist im Grunde, dass sie keine Überwachung haben (Batterie), dafür hält die Batterie aber auch entsprechend länger, je nach dem, wie oft jetzt auf und zu gemacht wird.
      Klar brauchst Du einen Empfänger für die RF-Signale, das muss keine Sonoff RFBridge sein. Das ist nur das, was ich einsetze.
      Für 433Mhz gibt es dann auch noch Taster etc. mit denen man wieder andere Funktionalitäten realisieren kann.
      Zigbee ist echt nett, aber wenn Du nicht eh ganz viele davon hast, ist der Verbrauch gerade auf Entfernung sehr viel höher und damit die Batterie schneller leer. Das Gleiche dürfte für Deinen Shelly gelten, der natürlich draußen auch einen schlechteren Empfang hat und damit mehr Energie verbraucht.

      posted in Hardware
      Great SUN
      Great SUN
    • RE: iQontrol Vis Support Thread

      @meute Also bzgl. des Switch-Problems und dem json. Ich hab da mal beide nebeneinander gelegt und, wenn Du mich fragst, liegt es an der Konfiguration von State und/oder Toggle.
      Ich hab natürlich keine Ahnung, auf welche Device-Endpunkte/-States Deine Aliase verweisen, aber ich würde mal schätzen, dass die beiden Konfigurationen sich dahingehend unterscheiden.
      Ein schalten funktioniert nur dann richtig, wenn
      a) Der richtige Status da ist (Schalter) bzw. der zu setzende Wert immer der selbe ist (Taster)
      b) Der richtige Endpunkt für den Schalter/Taster angesprochen wird

      Wenn Du da nochmal drüberschaust bzw. die entsprechenden Alias-Links teilst (hab jetzt nicht weiter im Thread gelesen), kann ich da nochmal drauf schauen. Alternativ findest aber vielleicht da schon selbst Deinen Fehler.

      da_woody

      {
                      "state": "STATE",
                      "commonRole": "linkedState",
                      "value": "alias.0.Drassburg.Erdgeschoss.Garage.Garagentor.door"
                  }, {
                      "state": "TOGGLE",
                      "commonRole": "linkedState",
                      "value": "alias.0.Drassburg.Erdgeschoss.Garage.Tortaster .Switch"
                  }
      

      Deins

      {
                      "state": "STATE",
                      "commonRole": "linkedState",
                      "value": "alias.0.ZuHause.Garage.Garagentor.State"
                  }, {
                      "state": "TOGGLE",
                      "commonRole": "linkedState",
                      "value": "alias.0.ZuHause.Garage.Garagentor.Switch"
                  }
      
      posted in Visualisierung
      Great SUN
      Great SUN

    Latest posts made by Great SUN

    • RE: per script Rest anfrage senden

      @delphinis Windows ist generell etwas schwieriger, als Linux. Du musst wohl zuerst mal node.js updaten, vorher macht alles andere keinen Sinn (es sei denn, Du hast schon die aktuellste Version). Danach kannst Du iobroker updaten. Ich finde diese Diskussion https://forum.iobroker.net/topic/80988/uralt-system-updaten-oder-umzug ganz gut.

      posted in Skripten / Logik
      Great SUN
      Great SUN
    • RE: per script Rest anfrage senden

      @delphinis Ich bin nicht mehr sicher, warum ich axios nicht verwende, aber ich glaube es hatte etwas mit Zentralisierung/Vereinfachung zu tun, sowie, dass ich den Status code selbst prüfen möchte (Fehler bei != 200, axios wirft den Fehler automatisch, wenn 4xx oder 5xx kommen), und damit, dass ich einige Stellen habe, bei denen ich einen Request triggern möchte und den ich dann entsprechend abarbeiten will...

      Evtl. hilft mein code ja jemandem, der irgendwann zufällig hier drüber stolpert (logStr einfach mit log ersetzen):

      async function requestUrl(reqUrl, addHeaderDict={}, callback=null, callbackParamDict=null) {
          const XMLHttpRequest = require('xhr2');
          try {
              const Http = new XMLHttpRequest.XMLHttpRequest();
              Http.open('GET', reqUrl);
              for(const[headerName, headerVal] of Object.entries(addHeaderDict)) {
                  if(headerName == 'responseType') {
                      Http.responseType = headerVal;
                  }
                  Http.setRequestHeader(headerName, headerVal);
              }
              Http.send();
              Http.onload = function () {
                  if(Http.status==200) {
                      logStr('Http request executed successfully: ' + reqUrl, 'debug');
                      if(callback != null) {
                          logStr('sending data to callback: ' + reqUrl + ' -> ' + Http.response, 'debug');
                          if(callbackParamDict != null) {
                              callback(reqUrl, Http.response, callbackParamDict);
                          } else {
                              callback(reqUrl, Http.response);
                          }
                      }
                  } else {
                      logStr('Error occured when requesting: ' + reqUrl + ' (' + Http.status + ' -> ' + Http.responseText + ')', 'warn');
                  }
              }
          } catch(exception) {
              logStr('ERROR while trying to request ' + reqUrl + ' -> ' + JSON.stringify(exception), 'warn');
          }
      }
      
      posted in Skripten / Logik
      Great SUN
      Great SUN
    • RE: iQontrol Vis Support Thread

      Hi Ihr,
      ich würde gerne meine Waschmaschinen/Trockner in iQontrol hinzufügen. Dabei will ich eigentlich primär wissen, ob das Ding läuft oder nicht (z.B. mit Lampe an/aus) und dazu noch, wie lang es noch läuft.
      Die Maschinen haben allerdings einen State mit String-Map (1=Aus, 2=Läuft, 3=Pause, 4=Fertig, ...). Wie bekomme ich das jetzt hin, dass er mir das anzeigt (2/Läuft -> an, 4=Fertig (oder von mir aus alles andere als 2/Läuft) -> aus?

      Heißt, ich habe eine Werte-Liste mit String / text. Und würde jetzt gerne, ohne einen weiteren State dazwischen zu schalten, für meine Widget-Typen Schalter, Button oder Licht ein Boolean für An/Aus bekommen. Ich kann zwar theoretisch true/false oder 1/0 in der Value-Liste eintragen, aber bis jetzt nimmt er das nur als Text.
      Ich will/kann ja nicht common.type oder .role überschreiben/abändern...

      P.S.: Die Sprache ist bei mir auf Englisch, evtl. ist da auch das Grundproblem 😉

      posted in Visualisierung
      Great SUN
      Great SUN
    • RE: Parser Fehlermeldungen

      @oliverio Nun, es gibt verschiedenste Gründe, die für einen solchen Fehler/ein solches Fehlverhalten sprechen. zunächst einmal ist es so, dass Container von innen heraus, wie Du sagst nicht beschränkt sind, dann ist aber schon der Punkt, dass ein Container auf dem Host-Netz laufen kann, aber auch in einem Subnet. Läuft er in einem Subnet, kann, wie beschrieben, das Zielsystem die Anfrage aus Sicherheitsgründen ablehnen und Random-Fehler liefern, was bei einigen Systemen aus Sicherheitsgründen so implementiert wurde. Ohne jedoch zu wissen wogegen die Abfrage gestartet wird, ist das unmöglich zu analysieren.
      In den meisten, mir bekannten Fällen, ist es jedoch so, dass eine Firewall dazwischen einen Request umlenkt und dieser so nie am Zielsystem ankommt.
      Dass der Parser-Adapter oder Axios daran Schuld sein könnten, kann ich mir zunächst einmal nicht vorstellen. Jedoch könnte ich mir vorstellen, dass das Zielsystem keine Webseite mit den Daten liefert, sondern die Daten erst mit einem Javascript basierten oder initierten Code/Framework nachlädt. Das wiederum würde dann mit dem Parser Adapter nicht funktionieren, sondern nur mit Puppeteer oder einem Headless Chrome o.ä.
      Daher war mein Versuch dahingehend, erstmal die Grundlegenden Probleme auszuschließen und dann in die etwas komplexeren Ebenen vorzudringen.

      Die einfachste Art, das zu tun, wäre sich auf der Konsole in den Container einzuloggen und dort die URL per curl Kommando aufzurufen, um zu sehen, was dann passiert. Daher auch meine Frage nach dem Kenntnisstand und der Runtime/Client.

      posted in Error/Bug
      Great SUN
      Great SUN
    • RE: Parser Fehlermeldungen

      @oliverio Was von den vielen Optionen, die ich genannt habe meinst Du? Wie viele professionelle Lösungen hast Du schon geschrieben, die Security eingebaut haben?

      P.S.: Ich versuche zu helfen und nicht blödes Zeug zu labern. Habe sicher auch besseres zu tun, als meine Zeit mit jemandem zu verschwenden, der schon weiß, wo der Fehler liegt, auch wenn die Wahrscheinlichkeit dafür nahezu gegen null geht. Davon abgesehen, empfinde ich die Art und Weise Deiner Kommunikation wenig wertschätzend.

      posted in Error/Bug
      Great SUN
      Great SUN
    • RE: Parser Fehlermeldungen

      @oliverio Das kommt auf Dein Netzwerk-Setup an. Da Container möglicherweise ein anderes Subnetz nutzen, wie Dein Host und Dein Adressierter Rechner zum Beispiel eine Konfiguration haben kann, die besagt, dass er nur Anfragen aus seinem Netz beantwortet.
      Ausserdem können Firewall-Regeln potentiell eine solche Anfrage umleiten, so dass der Zielrechner gar nicht angefragt wird, sondern evtl. ein Service auf Deinem Host oder woanders.

      NEIN, ich bin keine KI und NEIN, ich habe es mir nicht zum Hobby gemacht Anfragen hier in eine KI einzugeben und deren Antwort zu kopieren.
      Ich kenne mich selbst ziemlich gut mit Netzwerken, Linux und Containern aus. Bei mir im Netz laufen bspw. 5 DNS Server, die alle anders konfiguriert sind und so je nach client eine Auflösung erlauben oder nicht. Diese sind per Firewall auf allen Clients zugewiesen. Reicht das für den Anfang um meine Fragen zu beantworten?

      posted in Error/Bug
      Great SUN
      Great SUN
    • RE: ioBroker als Energiemanager versus smartfox

      @dojodojo Lass es mich mal anders formulieren:
      Es gibt solche Geräte, die teilweise direkte Integrationen haben, teilweise mit MQTT o.ä. funktionieren.
      Grundsätzlich kommt die Sinnhaftigkeit der Installation solcher Geräte (smartfox) auch extrem auf den Anwendungsfall an.
      Beispielsweise könntest Du mehrere Sicherungskästen haben und ein solches Gerät nicht direkt an der Hauptleitung einsetzen. Das würde zu unvollständigen Daten führen.
      Ein weiterer Fall ist, dass diese Geräte je nach deinem Bedarf potentiell teurer sind als ihre Alternativen, da der gesamte Strom quasi durch dieses eine Gerät durch muss.

      Ich gehe davon aus, dass Du viel günstiger unterwegs wärest, würdest Du Deine Solaranlage/Batteriespeicher getrennt anschließen und den Stromzähler, sowie ein paar ausgewählte Verbraucher "auslesen".
      Zum Beispiel habe ich für mein Büro Sicherungen mit Stomzähler, so dass ich den Strom fürs Büro getrennt auslesen kann.
      Hauptverbraucher, wie Klimaanlage, Trockner, Waschmaschinen und Kaffeemaschine lese ich jeweils über eine entsprechende smarte Steckdose aus.
      Das schöne an der Sache ist, dass Du quasi out of the box die Möglichkeit der Steuerung mitgeliefert bekommst, Du kannst also, wenn der Ruhezustand eines Gerätes erkannt wird, dieses auch komplett ausschalten und so den Strom für Standby / Leerlauf sparen.

      Es gibt noch beliebig viele weitere Beispiele, aber ich wollte Dir nur mal einen Eindruck verschaffen.

      posted in Einsteigerfragen
      Great SUN
      Great SUN
    • RE: Parser Fehlermeldungen

      @thomas-reitböck Das könnte auch ein Firewall/Routing Thema sein. Da Du ja im Container bist mit iobroker.
      Wie Erfahren bist Du mit der Nutzung von Containern generell und welche Runtime/Client nutzt Du?

      posted in Error/Bug
      Great SUN
      Great SUN
    • RE: influxdb-Adapt. unterstützt InfluxDB 3 nicht - Alternative?

      @meute Um Deine Frage auch noch in anderer Hinsicht zu beantworten: Es gibt auch den SQL-Adapter mit dem Du zum Beispiel Deine PostgreSQL anbinden kannst. Funktioniert bei mir seit Jahren problemlos.
      Generell kann ich Dir sagen, dass, wenn Du eine "richtige Datenbank" (via SQL-Adapter) anschließen willst, eine PostgreSQL die stabilste Lösung sein dürfte. Warum? Eine PostgreSQL ist, wie eine Oracle Datenbank transaktionsbasiert und übersteht Stromausfälle meist unbeschadeter als Dein Computer 😉

      posted in ioBroker Allgemein
      Great SUN
      Great SUN
    • RE: ioBroker als Energiemanager versus smartfox

      @dojodojo Ich würde sagen, dass der Wechselrichter von Smartfox evtl. nicht unterstützt wird (keine 100% Angabe, da ich das Gerät nicht kenne und nicht im Detail angesehen habe), aber dafür viel mehr unterstützt wird und das gesamte SmartHome damit integriert werden kann und nicht "nur die Energie" gesteuert werden kann, so wie es dort aussieht: https://smartfox.at/unterstuetzte-geraete/.

      Wenn Du noch keinen Wechselrichter hast, aber einen einsetzen möchtest und das ganze Smart lösen möchtest, würde ich Dir raten, dich zunächst einmal mit den Geräten intensiv auseinanderzusetzen. Du kannst selbstverständlich auch hier im Forum Hilfe suchen, auch bzgl. der Geräteauswahl. Es gibt hier einige, die bereits Erfahrung haben mit den bestmöglichen Lösungen und deren Implementierung.

      Wenn es Dir zum Beispiel nicht zu viel ist, Platinen zu patchen nach Video-Anleitungen oder ähnliches, kannst Du extrem low cost ein SmartHome aufbauen, das komplett frei von der Cloud ist. Ansonsten gibt es auch teilweise höher preisige Geräte, die das unterstützen. Alternativ musst Du halt mind. eine Cloud einbinden.

      Du ahnst vielleicht schon, dass ein solches Projekt potentiell komplex werden kann, aber andersherum gesehen, wenn Du nicht gerade neu baust, kannst Du so auch Zug um Zug Dein Haus/Deine Wohnung in ein SmartHome verwandeln.

      Hier im Forum unterstützt man Dich sicher gerne mit Deinen Fragen, ob nun als kompletter Newbie oder als Pro.

      Hoffe, ich konnte etwas weiterhelfen.

      posted in Einsteigerfragen
      Great SUN
      Great SUN
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo