Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    P
    • Profile
    • Following 1
    • Followers 1
    • Topics 14
    • Posts 78
    • Best 7
    • Groups 1

    prorun

    @prorun

    Starter

    7
    Reputation
    24
    Profile views
    78
    Posts
    1
    Followers
    1
    Following
    Joined Last Online

    prorun Follow
    Starter

    Best posts made by prorun

    • Futterspender Futterautomat mit Kamera ioBroker Integration

      Hallo Zusammen,

      zur Info an alle Katzenliebhaber: hier ein Weg einen automatischen Futterspender in ioBroker vollumfänglich zu integrieren.

      Genutzt wird ein Futterautomat der Marke PETLIBRO - In meinem Fall mit Kamera (PLAF203).

      Alle Petlibro-Modell mit App-Steuerung funktionieren.

      Futterautomaten anderer Hersteller mit App-Steuerung über die Tuya-Cloud sind über den gleichen Weg integrierbar.

      Um die Integration in ioBroker zu ermöglichen darf als Grundvoraussetzungen nicht die vorgesehene App von PETLIBRO verwendet werden. Wer seinen Futterautomaten bereits mit der Hauseigenen App eingerichtet hat muss diesen wieder auf Werkseinstellung zurücksetzen und das Gerät aus der PETLIBRO App entfernen/löschen.

      Nach Reset bzw bei Auslieferung befindet sich der Futterautomat im Pairing Modus. Um diesen einzuleiten bzw abzuschließen wird jetzt statt der originalen App die "Smart Life - Smart Living" App von "Volcano Technology Limited" genutzt. Keine Sorge alle Funktionen bleiben erhalten und das Design der beiden Apps ist nahezu identisch.

      Einrichtung in der Smart Life App: Bei der Geräteauswahl muss in der Rubrik "Kleines Haushaltsgerät" der "Tierfutterautomat mit Kamera (Wi-Fi)" gewählt werden. Die Einrichtung unterscheidet sich etwas zur originalen Variante. Es muss ein QR-Code der auf dem Handy angezeigt wird in die Kamera des Futterautomaten gehalten werden. Wird dieser während des Pairing-Modus erkannt ertönt ein Signalton.
      IMG_20230808_010410.PNG

      Nachdem der Futterautomat ordnungsgemäß in der Smart Life App erkannt wurde sind alle Voraussetzungen zur Integration in ioBroker erfüllt. Hierzu wird jetzt der tuya-Adapter genutzt.

      Wenn die gleichen Login-Daten in den Adapter-Configs wie in der Smart Life App verwendet werden wird der Futterautomat automatisch als Gerät erkannt und es werden circa 40 Datenpunkte angelegt. Es können so gut wie alle Geräteeinstellungen vorgenommen werden, die auch in der originalen App vorhanden sind und manuelles Füttern in verschiedenen Portionsgrößen geht natürlich auch. Und da wir jetzt die entsprechenden Datenpunkte haben ist dann bei Bedarf über den iot Adapter auch "Alexa...füttern" im Handumdrehen konfiguriert.

      So sehen die DPs aus:
      Screenshot 2023-08-08 013054.png

      Ich denke damit lässt sich so einiges anfange. Die Übertragung von Datenpunktänderungen erfolgt sogar lokal.

      Mein erster vis Entwurf dazu sieht wie folgt aus:
      Screenshot 2023-08-08 012402.png

      Ich hoffe ich konnte dem einen oder anderen mit diesem Beitrag etwas weiterhelfen.


      Was ich jedoch noch nicht hinbekommen habe ist an den Kamera-Stream oder zumindest an die Snapshots der Bewegungserkennung ranzukommen.

      Wenn das jemand hinbekommt oder einen entscheidenden Hinweis liefern kann wäre ich hocherfreut!!!

      Es gibt zwar einen DP "movement_detect_pic" aber der liefert leider immer nur null.

      Ein anderer DP "initiative_message" liefert einen Teil einer URL der wahrscheinlich zum Snapshots der letzten Bewegungserkennung führt:
      Screenshot 2023-08-08 014538.png
      Wenn mir hier jemand weiterhelfen kann, wie ich den ausgegebenen Pfad im Bucket "ty-eu-storage30" in der Tuya-Cloud abrufen kann, wäre echt der Wahnsinn!!!

      posted in Einbindung von Geräten
      P
      prorun
    • ws ODER integr. NUR NICHT socketio - VIS Verbindungsfehler

      Hallo Zusammen,

      was sind eure Erfahrungen oder Ratschläge zum Thema Websockets.

      Wenn ich meinen web.adapter auf socketio stelle kann ich in vis keine Änderungen vornehmen ("Verbindungsfehler")

      Mit der Einstellung ws oder integriert habe ich hingegen bisher keine Probleme festellen können.

      Habe dazu einige Frage die garantiert auch andere Nutzer umtreiben. Vielleicht kann hier ein Experte mal Licht ins Dunkel bringen.

      1. Ist ws performanter als der integrierte Modus?

      2. Was sind die Unterschiede?

      3. Wenn ich auf integriert stelle ist dann der ws.adapter überhaupt nötig? habe die Instanz dazu gerade erst zum testen installiert. Lief vorher auch alles ohne eine ws-Instanz, der Adapter war aber installiert.

      4. Hatte bis vor meinem test beide Adapter (socketio und ws) installiert aber ohne Instanz. Warum kann man weder den Adapter socketio noch ws deinstallieren obwohl sogar nicht mal eine Instanz dazu installiert ist - haben die Adapter auch einen Zweck ohne laufende Instanz?

      5. Grundsätzliche Frage dazu: dachte ohne Instanz ist ein Adapter zwar physisch da aber ohne jegliche Funktionsweise - ist das so korrekt?

      6. Die Probleme beim Ändern der vis ("Verbindungsfehler" - Problem konnte durch umstellen auf integriert oder ws gelöst werden) haben erst begonnen als meine Visualisierung einen gewissen Umfang erreicht hatte. Liegt das daran dass die anderen Modis irgendein Größenlimit haben dass ich mit meiner riesigen vis, bestehen aus mitlerweile insgesamt 36 Views die allesamt vollgestopft mit informationen sind, überschritten habe?

      7. (Geht eigtentlich aus 1. und 2. hervor) habe jetzt zum ws.adapter auch eine Instanz installiert und den web.adapter von integriert auf ws umgestellt und alles läuft wie vorher, also vorher ging alles und jetzt geht auch alles. Ohne auch nur den kleinsten Unterschied. Habe ich jetzt irgendeinen Vorteil den ich noch nicht bemerkt habe oder eigentlich nur einen Nachteil weil jetzt eine Instanz mehr läuft als vorher?

      8. Wenn es keinen vorteilhaften Unterschied gibt kann die ws-Instanz dann wieder weg oder wird die auch für irgendwelche Hintergrundprozesse benötigt die mir nicht bekannt sind - aber ohne lief ja wie gesagt alles spitze?

      9. Was mache ich mit der socketio-Instanz - wieder runterschmeißen weil auch hier ohne alles einwandfrei funktionert hat und wenn ich den web.adapter darauf konfiguriere ohnehin nur ("Verbindungsfehler") in vis kommt?

      Wenn jemand auch nur eine meiner vielen Fragen beantworten kann wäre ich sehr dankbar.

      Liebe Grüße

      posted in Visualisierung
      P
      prorun
    • RE: Stabiles Netatmo Thermostat Blockly (Adapter)

      Haben gerade eine interessante Neuigkeit auf Github bzgl Netatmo gefunden:

      "password token flow will be disabled by Netatmo end of September 2022!"

      "You ned to use the "Authorization code" grant type ... I'm currently adjusting ioBroker-netatmo for it"

      @Newpicsel Ist bzgl dieser Umstellung auch eine Anpassung deines Skripts geplant?

      Liebe Grüße

      posted in ioBroker Allgemein
      P
      prorun
    • RE: Ordentlich Logging GPS-Daten influxDB Grafana Geomap Routen

      Habe es jetzt gelöst bekommen.

      Mit folgendem Skript erhält man ein einziges Measurement was latitude und longitude mit exakt gleichen Zeitstempel enthält. Zusätzlich können latitude und longitude zeitversetzt eintrudeln - welcher Wert zuerst kommt ist dabei egal. In diesem Beispiel hier bis zu 10 Sekunden Versatz. Es wird also obwohl latitude und longitude in unterschiedlichen Datenpunkten liegen und bei Änderung beider Werte das Skript 2x triggert (bei Änderung von latitude und noch mal bei Änderung von longitude) immer nur einmal und nur die Kombination aus beiden neuen Werten in die influxDB geschrieben.

      Funktioniert jetzt einwandfrei. Hiermit ist es möglich Koordinaten sauber in der influxDB abzulegen um beispielsweise mit Grafana Routen daraus zu basteln.

      // v0.2
      const axios = require('axios').default;
       
      const influxDbInstance = 'influxdb.0';
      const token = 'TOKEN';
      const measurement = 'GPS-Test';
       
      const loggingTemplate = {
          '0_userdata.0.test-number2': 'lati',
          '0_userdata.0.test-number3': 'longi',
      };
      
      const loggingObj = {};
      
      async function start() {
          const influxDbInstanceConfig = await getObjectAsync(`system.adapter.${influxDbInstance}`);
      
          const protocol = influxDbInstanceConfig.native.protocol;
          const host = influxDbInstanceConfig.native.host;
          const port = influxDbInstanceConfig.native.port;
          const org = influxDbInstanceConfig.native.organization;
          const bucket = influxDbInstanceConfig.native.dbname;
      
          console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`);
      
          // Init loggingObj with current values
          for (let [objId, key] of Object.entries(loggingTemplate)) {
              const state = await getStateAsync(objId);
              if (state && !isNaN(state.val)) {
                  loggingObj[key] = state.val;
              } else {
                  loggingObj[key] = 0;
              }
          }
      // Variable für Timeout sodass bei Wiederholung der vorherige Timeout abgebrochen werden kann
      let timeoutHandler;
      
      // Trigger-Bedingung (bei Änderung eines der DP (loggingTemplate))
      on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => {
          // Update value in loggingObj
          const key = loggingTemplate[obj.id];
          loggingObj[key] = obj.state.val;
      
          // Lösche vorherigen Timeout, falls vorhanden
          if (timeoutHandler) {
              clearTimeout(timeoutHandler);
          }
      
          // Setze neuen Timeout
          timeoutHandler = setTimeout(async () => {
              // Save Data
              const data = `${measurement} ${Object.keys(loggingObj)
                  .filter(key => !isNaN(loggingObj[key]))
                  .map((key) => `${key}=${loggingObj[key]}`)
                  .join(',')}`;
      
              if (data) {
                  // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`);
      
                  axios.post(`${protocol}://${host}:${port}/api/v2/write?bucket=${bucket}&org=${org}`, data, {
                      headers: {
                          'Content-Type': 'text/plain',
                          'Authorization': `Token ${token}`
                      }
                  }).catch(err => {
                      console.error(err);
                  });
              }
          }, 10000); // 10.000 Millisekunden = 10 Sekunden
      });
      }
      start();
      

      Uns so hier sieht das ganze dann in Grafana mit dem Widget Geomap aus:
      2023-12-19 14_21_41-Window.png

      from(bucket: "iobroker")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r)   => 
        r._measurement == "GPS-Test" and 
        r._field == "lati" or
        r._field == "longi" )
        |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
        |> drop(columns: ["_start", "_stop", "_measurement"])
      
      posted in JavaScript
      P
      prorun
    • RE: Stabiles Netatmo Thermostat Blockly (Adapter)

      @newpicsel
      das sind beruhigende Worte... Denn es läuft bei mir bisher auch einwandfrei - da schließe ich mich dem Lob von @helfi9999 sehr gern an!

      posted in ioBroker Allgemein
      P
      prorun
    • RE: Mit Blockly mehrere DP in ein influxDB Measurement schreiben

      @marc-berg

      Unterschiedlich.

      Fahrzeuge kommen über BMW-Adapter

      iPhone kommt über zwei iot-services (lati, longi) die über zahlreiche Kurzbefehle (für jede halbe stunde einen), die den aktuellen Standort abfragen, befüttert werden. Leider nicht mehr über den apple-find-me-Adapter 😭
      Wenn fürs iPhone jemand eine Alternative kennt, immer her damit.

      Und Android-Geräte habe ich endlich allesamt abgeschafft. Also fast. Meine Frau darf sich Heiligabend freuen - ob sie will oder nicht 😎 😉 😈

      posted in ioBroker Allgemein
      P
      prorun
    • RE: Stabiles Netatmo Thermostat Blockly (Adapter)

      @newpicsel

      v5.0.2 funktioniert, jedoch musste ich Access- und Refresh-Token manuell erstellen und in den Objekten eingeben.
      Siehe hier

      posted in ioBroker Allgemein
      P
      prorun

    Latest posts made by prorun

    • RE: Stabiles Netatmo Thermostat Blockly (Adapter)

      @newpicsel
      Ich hinterlege sowohl den Refresh_Token als auch den Access_Token aber bei mir hält das immer nur genau 60h danach kommt die Meldung "Es gibt ein problem mit der Token Anfrage" und ich muss mir beide Tokens wieder neu erstellen 😞

      posted in ioBroker Allgemein
      P
      prorun
    • RE: Stabiles Netatmo Thermostat Blockly (Adapter)

      @newpicsel

      v5.0.2 funktioniert, jedoch musste ich Access- und Refresh-Token manuell erstellen und in den Objekten eingeben.
      Siehe hier

      posted in ioBroker Allgemein
      P
      prorun
    • RE: Test Withings v0.0.x

      @pamf

      Ich habe das gleiche Problem (Werte kommen immer in anderem Unterordner an) und manchmal sogar noch schlimmer (Werte der letzten Messung verteilen sich auf verschiedene Unterordner)

      Ich nutze die Körperwaage "Body Cardio" von Withings.

      So wie ich das verstanden habe ist es so vorgesehen, dass die neusten Messwerte immer unter
      withings.0.########.measures.measuregrps01
      ankommen sollen und ältere Werte in die Folgeordner
      withings.0.########.measures.measuregrps02
      withings.0.########.measures.measuregrps03
      withings.0.########.measures.measuregrps04
      usw.
      nachgeschoben werden was quasi eine absteigende Sortierung darstellen soll.

      Leider funktioniert das so gar nicht. Mal kommen die aktuellen Werte unter .measuregrps01 an, am nächsten Tag unter .measuregrps03 und danach unter .measuregrps02 ohne jedwede erkennbare Systematik - was zwar über ein Skript umständlich abgefangen wird - aber manchmal verteilen sich die aktuellen Werte sogar auf verschiedene Unterordner.

      Ich versuche es am Beispiel meiner heutigen Messung (27.03.) aufzuzeigen (benutzt wurde die Waage heute nur ein einziges Mal):

      Die Messwerte wurden auf folgende Ordner verteilt.
      withings.0.########.measures.measuregrps01
      withings.0.########.measures.measuregrps02
      withings.0.########.measures.measuregrps03
      Folgend werde ich diese drei Ordner nur mit 01, 02 und 03 bezeichnen.
      In allen drei Ordnern wurden die Datenpunkte .created .date und .modified die sich jeweils darin befinden auf Datum und Uhrzeit der heutigen Messung gesetzt.
      Die aktuell gemessene Pulswellengeschwindigkeit ist im Ordner 01 gelandet
      Die aktuell gemessene Herzfrequenz ist im Ordner 02 gelandet
      Alle anderen aktuell gemessenen Messwerte sind im Ordner 03 gelandet

      Hier noch mal die vollständige Auflistung für die drei Ordner (Das Datum bezieht sich jeweils auf lastchange):


      withings.0.########.measures.measuregrps01
      26.03.2024 - Weight (kg)
      25.03.2024 - Heart Pulse (bpm) - only for BPM and scale devices
      26.03.2024 - Fat Free Mass (kg)
      26.03.2024 - Fat Ratio (%)
      26.03.2024 - Muscle Mass (kg)
      26.03.2024 - Hydration (kg)
      26.03.2024 - Fat Mass Weight (kg)
      26.03.2024 - Bone Mass (kg)
      27.03.2024 - Pulse Wave Velocity (m/s)

      withings.0.########.measures.measuregrps02
      25.03.2024 - Weight (kg)
      27.03.2024 - Heart Pulse (bpm) - only for BPM and scale devices
      25.03.2024 - Fat Free Mass (kg)
      25.03.2024 - Fat Ratio (%)
      25.03.2024 - Muscle Mass (kg)
      25.03.2024 - Hydration (kg)
      25.03.2024 - Fat Mass Weight (kg)
      25.03.2024 - Bone Mass (kg)
      nicht vorhanden - Pulse Wave Velocity (m/s)

      withings.0.########.measures.measuregrps03
      27.03.2024 - Weight (kg)
      24.03.2024 - Heart Pulse (bpm) - only for BPM and scale devices
      27.03.2024 - Fat Free Mass (kg)
      27.03.2024 - Fat Ratio (%)
      27.03.2024 - Muscle Mass (kg)
      27.03.2024 - Hydration (kg)
      27.03.2024 - Fat Mass Weight (kg)
      27.03.2024 - Bone Mass (kg)
      nicht vorhanden - Pulse Wave Velocity (m/s)

      Ich benutze den Adapter in der Version 0.0.13

      Ich habe dazu ein issue auf Github geöffnet. Wenn hier jemand dabei ist, der dazu etwas beitragen kann dann immer raus damit. Ich würde mich über jede Unterstützung sehr freuen.

      posted in Tester
      P
      prorun
    • RE: DP mit vorgegebenen timestamp aktualisieren

      Ich habs... Manchmal hat man die Lösung vor der Nase 🙂

      da876c37-22f4-49e7-9327-6ef56f86519c-image.png

      setState(Ziel, { val: Wert, ack: true, ts: timestamp});
      

      <xml xmlns="https://developers.google.com/blockly/xml">
       <variables>
         <variable id="+^CHN[uHOarbtDHU1p)i">Ziel</variable>
         <variable id="O;7R[3JFX|+BqX9eC8G]">timestamp</variable>
         <variable id="GbvdnJSn.0:!Q:%DT.W^">Wert</variable>
       </variables>
       <block type="procedures_defcustomnoreturn" id="1N]5+C3Ax`eKJx2w97j!" x="37" y="-212">
         <mutation statements="false">
           <arg name="Ziel" varid="+^CHN[uHOarbtDHU1p)i"></arg>
           <arg name="timestamp" varid="O;7R[3JFX|+BqX9eC8G]"></arg>
           <arg name="Wert" varid="GbvdnJSn.0:!Q:%DT.W^"></arg>
         </mutation>
         <field name="NAME">write_DP</field>
         <field name="SCRIPT">c2V0U3RhdGUoWmllbCwgeyB2YWw6IFdlcnQsIGFjazogdHJ1ZSwgdHM6IHRpbWVzdGFtcH0pOw==</field>
         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
       </block>
       <block type="procedures_callcustomnoreturn" id="K|}$[$Nz/!aN$T%1cf~t" x="38" y="-162">
         <mutation name="write_DP">
           <arg name="Ziel"></arg>
           <arg name="timestamp"></arg>
           <arg name="Wert"></arg>
         </mutation>
         <value name="ARG0">
           <block type="text" id="Z4,y!Ep?Rs.(.o*$myRq">
             <field name="TEXT">0_userdata.0.test-number1</field>
           </block>
         </value>
         <value name="ARG1">
           <block type="convert_to_date" id="Y`n|9wH}=:xC,/E+RPgz">
             <value name="VALUE">
               <block type="get_value" id="1fbwM:_,Auug18%=+]E+">
                 <field name="ATTR">val</field>
                 <field name="OID">withings.0.38305736.activity.activities18.date</field>
               </block>
             </value>
           </block>
         </value>
         <value name="ARG2">
           <block type="math_number" id="f_+uTFJ:jg$0Pj7KQXDW">
             <field name="NUM">9</field>
           </block>
         </value>
       </block>
      </xml>
      

      posted in Blockly
      P
      prorun
    • DP mit vorgegebenen timestamp aktualisieren

      Gibt es eine Möglichkeit mit Blockly einen DP mit einem bestimmten timestamp zu aktualisieren?

      Ggf über einen JS-Funktion-Block

      ich würde gerne einen DP aktualisieren und gleichzeitig einen timestamp für diesen DP festlegen. Dieser timestamp soll aus einem weiteren DP (dort als Wert hinterlegt) gezogen werden.

      Ich stelle mir das ergebnis in etwa so vor:
      59e3af92-a09b-4ae3-b73a-04f2b0ddca68-image.png

      So könnte man beispielsweise Werte mit einem bestimmten Zeitstempel in die influxDB schreiben da hierzu der timestamp des Werts herangezogen wird

      posted in Blockly
      P
      prorun
    • RE: Werte mit bestimmten Zeitstempel in infuxDB schreiben

      @paul53 Okay Prinzip verstanden: wenn ein DP mit einem bestimmten timestamp gesetzt wird dann wird dieser timestamp auch für den Eintrag in der influxDB genutzt.

      posted in Skripten / Logik
      P
      prorun
    • Werte mit bestimmten Zeitstempel in infuxDB schreiben

      Hallo Zusammen, gibt es eine Möglichkeit Werte mit einem bestimmten Zeitstempel in die influxDB zu schreiben.

      Normalerweise wird ja immer der Zeitpunkt wenn der Wert in influx geschrieben wird als Zeitstempel verwendet. Ich würde gerne hingegen einen Werte aus einen DP mit einem Zeitstempel aus einen anderen DP in die influxDB schreiben sodass der Wert quasi in die Vergangenheit geschrieben wird.

      influxDB 2.4

      Ich würde das gerne über javascript realisieren. Node-Red nutze ich nicht.

      Vielen Dank im Voraus!!

      posted in Skripten / Logik
      P
      prorun
    • RE: Test Adapter VeSync

      @tombox Großes Dankeschön!!

      Das Problem ist zwar somit nur aufgeschoben aber es geht erst mal wieder.
      Ist hierzu eine grundsätzliche Anpassung geplant?

      posted in Tester
      P
      prorun
    • RE: Test Adapter VeSync

      @tombox Nach regelmäßiger Benutzung der Waage hat sich herausgestellt, dass der Adapter nur maximal 100 Werte abruft. Nachdem gestern der 100. Wert abgerufen wurde kommen seitdem keine weiteren Werte im Adapter mehr an.

      Folgende 100 Unterordner wurden angelegt:
      vesync.0.healthData.weightingData.weightDatas01
      vesync.0.healthData.weightingData.weightDatas02
      ...
      vesync.0.healthData.weightingData.weightDatas99
      vesync.0.healthData.weightingData.weightDatas100

      Danach war leider Schluss 😞

      Ich gehe von einer Beschränkung innerhalb der Adapter Programmierung aus.
      Kann die Abfrage erweitert werden sodass mehr als 100 Wiegevorgänge eingelesen werden?

      Vielen Dank im Voraus !!

      posted in Tester
      P
      prorun
    • RE: Test Adapter VeSync

      Hi @tombox

      erst mal vorneweg vielen lieben Dank für deine Bemühungen!!

      Ich habe das Problem mit der Waage über java gelöst bekommen. Ich prüfe automatisiert ob ein neuer Unterordner unter vesync.0.healthData.weightingData angelegt wurde. Über den Inhalt lasse ich erkennen um welchen User es sich handelt und anschließend kopiere ich die Werte in eigene DPs, die immer mit den aktuellen Werten überschrieben werden.

      Jetzt steht der Auswertung über grafana nichts mehr im Wege :))

      Eine Frage hätte ich aber noch: von den insgesamt 13 Werten aus der App (Gewicht + weitere 12 Werte wie Muskelmasse, BMI, Körperwasser usw.) kommen aktuell nur Gewicht und Körperfett im Adapter an. Die 11 anderen Werte sehe ich leider nur in der App.

      Bekommt man es hin, dass alle 13 Werte auch vom Adapter erfasst werden?

      posted in Tester
      P
      prorun
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo