Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Profile
    • Following 0
    • Followers 1
    • Topics 27
    • Posts 187
    • Best 8
    • Groups 2

    frank2604

    @frank2604

    8
    Reputation
    96
    Profile views
    187
    Posts
    1
    Followers
    0
    Following
    Joined Last Online
    Location Overath Age 57

    frank2604 Follow
    Pro Starter

    Best posts made by frank2604

    • RE: Hue Bridge User erstellen klappt nicht

      Hallo,
      bei mir dto. Aktuellsten Adapter 2.2.1 und eine Instanz installiert. Hue-Bridge hat feste IP, ist über App erreichbar und im Netz sichtbar.

      • "Bridge suchen" liefert kein Ergebnis
      • IP-Adresse eingegeben, "Erstelle User" im Adapter und Verbindungsbutton auf der Bridge gedrückt: Liefert auch kein Ergebnis.

      Kann jemand helfen?

      Grüße

      Frank

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      So, wie versprochen möchte ich auch mal etwas zurückgeben und poste hier ein Skript zur Erzeugung eines JSON für das JSON-Chart-Widget auf Basis von Datenhistorisierung mittels InfluxDB 2.x und der Datenabfrage mittels der neuen Abfragesprache Flux.

      Zum Hintergrund:

      • ioBroker ist als vollumfängliche Steuerungs- und Automatisierungslösung für unseren EFH-Neubau im Einsatz.

      • Haus und Autos nutzen als einzige Energiequelle Strom. PV mit 24,5 kWp, Speicher 19,5 kWh, Erdwärmepumpe. Außerdem Beleuchtung komplett über Philips HUE, Fußbodenheizung über HomeMatic und etliches mehr.

      • Insofern dreht sich bei der Visualisierung auch viel um Strom. Etliche Datenpunkte zeichnen die Leistung und den Energieverbrauch bzw. die Energieerzeugung verschiedenster Geräte auf.

      • Aus zwei Gründen habe ich mich für InfluxDB als Historisierungsdatenbank entschieden. (1) Speziell für die effiziente Speicherung von großen Mengen zeitbasierter Daten entwickelt. (2) Implementierte, einfach zu nutzende Aggregationsfunktionen. Gerade bei Stromverbrauch kommt die Aggregation ja zwangsläufig zum Einsatz. Wenn ein Datenpunkt beispielsweise zu jeder vollen Stunde die kWh der letzten Stunde aufzeichnet, möchte man ja in der Lage sein, das zu Stunden, Tagen, Wochen, Monaten oder Jahren zu aggregieren und zu visualisieren. Und ich wollte dies nicht über den Ansatz lösen, skriptbasiert dutzenden von Datenpunkten mit diesen aggregierten Werten zu befüllen.

      • Da das System neu aufgesetzt wurde, habe ich mich gleich für InfluxDB 2.x entschieden. Der Influx-Adapter unterstütz das dankenswerterweise bereits. Die zu InfluxDB 2 zugehörige Browser-GUI erleichtert einem die Sicht auf die Daten und das Erstellen der Abfragen mit Flux. Über die GUI lassen sich auch Daten via csv importieren, so dass ich zwischenzeitlich in SQL aufgezeichnete Daten relativ einfach übernehmen konnte.

      Nun stand die Frage nach der besten Visualisierungsmöglichkeit - insbesondere für Charts - aus. Nach intensiven Test mit den verschiedenen Adaptern bin ich am Ende wieder bei VIS angekommen. Zusammen mit dem Material Design Widget aus meiner Sicht die beste Lösung für optisch anspruchsvolle Dashboards und Bedienpanels. Hier kann man @Scrounger nicht genug danken für die tolle Arbeit! Gerade bei den Diagrammen stößt man bei den anderen Lösung umgehend an die Grenzen. An die Gestaltungsfreiheit des JSON-Charts kommt nichts heran, schon gar nicht Grafana.

      Ein großer Vorteil des JSON-Charts, der nur einmal am Rande an anderer Stelle erwähnt wurde, ist aus meiner Sicht die Tatsache, dass ich im Dashboard nicht ständig mit Ladekreisel aktualisierende Charts habe, da das JSON serverseitig aktualisiert wird und sich das Widget kaum wahrnehmbar updated, wenn das JSON neu geschrieben wurde.

      Allerdings ist die Hürde des JSON-Charts für Nutzer wie mich, die nicht programmieren können und sich die Logik-Schicht im ioBroker nur mit Blockly zusammen klicken, schon ziemlich hoch. Dazu kommt, dass die Anleitungen und Threads dazu meist auf einem für Einsteiger zu hohen Niveau ansetzen.

      OK, viel zu lange Vorrede. Ich habe mir das Beispielskripts vom Anfang dieses Threads genommen, versucht es zu verstehen und in unendlich vielen Try & Error Stunden auf mein Bedürfnis angepasst.

      Damit es für mich übersichtlich bleibt, habe ich die ganzen Blöcke, in denen es um das Iterieren durch Objektstrukturen für die anzuzeigenden Datenpunkten und das Erzeugen der Zieldatenpunkte geht, weggelassen - keep it simple.

      Das Prinzip ist:

      • 1 Skript je Chart

      • Zugehörigen Zieldatenpunkt an gewünschter Stelle in der Objektstruktur unter 0_userdata anlegen und im Skript hinterlegen

      • Quelldaten für ein oder mehrere Graphen durch hineinkopieren des kompletten Flux-Querys im Skript angeben

      Bitte nicht über die Kommentierungen im Skript lachen. Von einem Nicht-Programmierer für Nicht-Programmierer 😉

      // Dieses Skript dient der Erzeugung eines JSON für die Darstellung hoch individualisierbarer Charts
      // mittels des JSON-Chart-Widgets aus dem Material-Design-Adapter auf Basis von Datenpunkthistorisierung in InfluxDB 2.x
      
      // Die x-Achse kann im JSON grundsätzlich auf 2 Methoden angegeben werden:
      //  a) Individuell über die Eigenschaft "axisLabels": ["1h", "2h", "3h", ...] oder
      //  b) Durch Angabe von Zeitstempeln und Werten "data": [{"t": 1640624405000,"y": 1.4536},{"t": 1640649605000,"y": 1.4665}, ...]
      
      // Dieses Skript verwendet die letztgenannte Methode! Auf der x-Achse wird somit immer die Zeit dargestellt.
      // Die Formatierung für alle Zeitaggregationen erfolgt über die Eigenschaft xAxis_timeFormats im JSON (siehe unten in den GlobalSettings).
      // Je nach Darstellungswünschen muss man zusätzlich noch mit den Parametern "xAxsisTickSource" und "Versatz der x-Achse" in den Widget-Eigenschaften des x-Achsen Layouts spielen.
      
      // Mit den über das JSON dem Widget zugeführten Daten und Parametern ist dieses in der Lage, verschiedene Datenpunkte gemeinsam in einem Chart darzustellen.
      // Dabei können z.B. Balken gestapelt oder gemischte Charts aus Balken und Linien erzeugt werden. Die Skript-Einstellungen unten erezugen ein Bar-Chart mir zwei Line-Charts
       
      // Danke an Scrounger für den tollen MDW-Adapter und das Beispielskript, aus dem ich mir dieses hier "zusammengebastelt" habe.
      
      
      // #################### Auslöser (Trigger), die das JSON-Objekt neu erzeugen ####################
      
      // Zeitgesteuert
      schedule({minute: [01]}, refresh);
      
      // Bei Änderung eines Datenpunktes
      // Hier bei Umschaltung zwischen Light/Dark-Mode, falls man im JSON Farben-Properties setzten möchte
      on('vis-materialdesign.0.colors.darkTheme', function (obj) {
           refresh();
      });
      
      // Beim Speichern oder Starten des Skriptes
      refresh();
      
      // Gesamter Skriptcode ist in der Funktion refresh() eingebettet. Diese Funktion wird über die Trigger oben aufgerufen
      function refresh() {
      
          // #################### Skript-Einstellungen ####################
      
          // History Instanz die verwendet werden soll
          let historyInstance = 'influxdb.0';
      
          // Ziel-Datenpunkt in der Objektstruktur für das JSON vom Typ "string", auf den im Widget verwiesen wird. Muss zuvor von Hand angelegt werden
          let targetDP = '0_userdata.0.VIS.Charts.HKL.JSON.Heizung_kWh_-7d';
      
          // Debug-Mode (true/false)
          // Gibt bei true in der Skript-Console und im ioBroker-Protokoll Inhalte von Verarbeitungsschritten aus (z.B. das Ergebnis der Flux-Abfrage und das fertige JSON)
          let debug = true;
      
          // Hier optional Farben, Schriften und Schriftgrößen aus den Material-Design-Widget- oder anderen eigenen Datenpunkten holen, falls solche JSON-Chart-Properties gesetzt werden sollen
      
          // Optional den Datenpunkt abfragen, mit dem zwischen Light/Dark-Theme umgeschaltet wird
          let mdw_darkTheme = getState('vis-materialdesign.0.colors.darkTheme').val;
      
          // Variable(n) mit Farbcodes aus Datenpunkten in Abhängigkeit von Light/Dark-Theme füllen, die unten in den Chart-Einstellungen verwendet werden sollen
          let mdw_datalabel_color_kWh     = (mdw_darkTheme) ? getState('vis-materialdesign.0.colors.dark.charts.value').val : getState('vis-materialdesign.0.colors.light.charts.value').val;
          let mdw_line_color_tempOut      = (mdw_darkTheme) ? getState('0_userdata.0.VIS.Allgemeine_Farben.dark.Aussentemperatur').val : getState('0_userdata.0.VIS.Allgemeine_Farben.light.Aussentemperatur').val;
          let mdw_datalabel_color_tempOut = (mdw_darkTheme) ? getState('0_userdata.0.VIS.Allgemeine_Farben.dark.Aussentemperatur').val : getState('0_userdata.0.VIS.Allgemeine_Farben.light.Aussentemperatur').val;
      
          // Dto. für Schriftart(en) und Schriftgröße(n)
          let mdw_datalabel_fontFamily    = getState('vis-materialdesign.0.fonts.charts.value').val;
          let mdw_datalabel_fontSize      = getState('vis-materialdesign.0.fontSizes.charts.value').val;
      
          // Gemeinsam verwendete Chart-Einstellungen, Details siehe https://github.com/Scrounger/ioBroker.vis-materialdesign#json-chart
          // Hinweis: Weitere Einstelloptionen zu Legende, x-Achse etc. befinden sich in den Eigenschaften des Widgets!
      
          let globalGraphSettings = {
              line_pointSize: 0,
              datalabel_fontFamily: mdw_datalabel_fontFamily,
              datalabel_fontSize: mdw_datalabel_fontSize,
              xAxis_bounds: 'ticks',
              xAxis_timeFormats: {
                  millisecond: "H:mm:ss.SSS",
                  second: "H:mm:ss",
                  minute: "H:mm",
                  hour: "dd.[\\n]H:mm",
                  day: "dd[\\n]DD.MM",
                  week: "dd[\\n]DD.MM",
                  month: "MMM[\\n]YYYY",
                  quarter: "[Q]Q - YYYY",
                  year: "YYYY"
              }
          }
      
          // InfluxDB-Flux-Query(s), die verwendet werden sollen und die zugehörigen individuellen Chart-Einstellungen
          
          // Die hier dargestellten Flux-Querys sind aus einer InfluxDB 2.x mit den Adaptereinstellungen 'Tags anstelle Felder für Metadaten' (Influx-Adapter -> Experteneinstellungen)
          // Bitte unbedingt die Infos dazu lesen, bevor die Eigenschaft umgestellt wird: https://github.com/ioBroker/ioBroker.influxdb/blob/master/README.md#Store-metadata-information-as-tags-instead-of-fields
      
          // Die Abfragen können sehr gut mit dem InfluxDB-OSS (GUI) erstellt werden. Wenn die dort angezeigten Daten im 'View Raw Data'-Modus hinsichtlich _value und _time dem Gewünschten entsprechen,
          // einfach die Query hierher kopieren und noch hinter jede Zeile ein '\' für den Zeilenumbruch im String setzen.
      
          let datenpunkte = [
              {
                  fluxQuery: 
                      'from(bucket: "iobroker") \
                          |> range(start: -8d) \
                          |> filter(fn: (r) => r["_measurement"] == "Strom.Heizung.Energie_in_der_letzten_Stunde") \
                          |> drop(columns: ["_field", "ack", "from", "q"]) \
                          |> aggregateWindow(every: 1d, fn: sum, createEmpty: false) \
                          |> timeShift(duration: -1s) \
                          |> truncateTimeColumn(unit: 1d) \
                          |> sort(columns: ["_time"], desc: true) \
                          |> limit(n:7) \
                          |> sort(columns: ["_time"], desc: false)'
                          ,       
                  graphSettings: {
                      type: 'bar',
                      color: '#44739e',
                      legendText: 'Energieverbrauch',
                      yAxis_id: 0,
                      yAxis_show: false,
                      yAxis_min: 0,
                      yAxis_max: 21,
                      datalabel_show: true,
                      datalabel_minDigits: 1,
                      datalabel_maxDigits: 1,
                      datalable_color: mdw_datalabel_color_kWh,
                      displayOrder: 2
                  } 
              }, // <= Zwischen mehreren Datenpunkten hier das Komma nicht vergessen!
              {
                  fluxQuery: 
                      'from(bucket: "iobroker") \
                          |> range(start: -8d) \
                          |> filter(fn: (r) => r["_measurement"] == "Umwelt.Garten_Themperatursensor_L-Steine.Temperatur") \
                          |> drop(columns: ["_field", "ack", "from", "q"]) \
                          |> aggregateWindow(every: 1d, fn: max, createEmpty: false) \
                          |> timeShift(duration: -1s) \
                          |> truncateTimeColumn(unit: 1d) \
                          |> sort(columns: ["_time"], desc: true) \
                          |> limit(n:7) \
                          |> sort(columns: ["_time"], desc: false)'
                          ,       
                  graphSettings: {
                      type: 'line',
                      color: mdw_line_color_tempOut,
                      legendText: 'Außentemp. (max)',
                      yAxis_id: 2,
                      yAxis_show: false,
                      yAxis_min: -15,
                      yAxis_max: 30,
                      datalabel_show: true,
                      datalabel_align: 'top',
                      datalabel_minDigits: 1,
                      datalabel_maxDigits: 1,
                      datalabel_append: '°',
                      datalabel_color: mdw_datalabel_color_tempOut,
                      displayOrder: 1
                  } 
              }, // <= Zwischen mehreren Datenpunkten hier das Komma nicht vergessen!
              {
                  fluxQuery: 
                      'from(bucket: "iobroker") \
                          |> range(start: -8d) \
                          |> filter(fn: (r) => r["_measurement"] == "Umwelt.Garten_Themperatursensor_L-Steine.Temperatur") \
                          |> drop(columns: ["_field", "ack", "from", "q"]) \
                          |> aggregateWindow(every: 1d, fn: min, createEmpty: false) \
                          |> timeShift(duration: -1s) \
                          |> truncateTimeColumn(unit: 1d) \
                          |> sort(columns: ["_time"], desc: true) \
                          |> limit(n:7) \
                          |> sort(columns: ["_time"], desc: false)'
                          ,       
                  graphSettings: {
                      type: 'line',
                      color: mdw_line_color_tempOut,
                      legendText: 'Außentemp. (min)',
                      yAxis_id: 2,
                      yAxis_show: false,
                      yAxis_min: -15,
                      yAxis_max: 30,
                      datalabel_show: true,
                      datalabel_align: 'bottom',
                      datalabel_minDigits: 1,
                      datalabel_maxDigits: 1,
                      datalabel_append: '°',
                      datalabel_color: mdw_datalabel_color_tempOut,
                      displayOrder: 1
                  } 
              } // <= Beim letzten oder einzigen Datenpunkt natürlich kein Komma!
          ]
      
      
          // #################### Programmablauf (Erzeugen des JSON) ####################
      
          refreshData();
      
          //Hauptfunktion
          function refreshData() {
          try {
              let graphs = [];
      
              // In dieser Schleife werden alle oben definierten Datenpunkte durchlaufen und die entstehenden JSON-Bausteine der Variable 'graphs' angehangen
              for (const datenpunkt of datenpunkte) {
      
                  let historyData = getHistoryGraphData(historyInstance, datenpunkt.fluxQuery, datenpunkt.graphSettings);
                  
                  if (historyData) {
                      graphs.push(historyData);
                  }
      
                  // Das Result von 'graphs' in den Zieldatenpunkt schreiben 
                  Promise.all(graphs).then((result) => {
                      if (debug) console.log("[refreshData]: Final JSON " + JSON.stringify({ graphs: result }));
                      setState(targetDP, JSON.stringify({ graphs: result }), true);
                  });
              }
          } catch (err) {
              console.error(`[refreshData] error: ${err.message}, stack: ${err.stack}`);
          }
          }
      
          // Unterfunktion zum Auslesen der Daten aus InfluxDB
          function getHistoryGraphData(historyInstance, fluxQuery, graphSettings) {
              try {
                  let graph = Object.assign({ ...graphSettings }, globalGraphSettings);
                  return new Promise((resolve, reject) => {
                      // Hier wird für jeden Datenpunkt die Flux-Query ausgeführt und die Rohdaten in das Objekt 'query' geschrieben
                      sendTo
                          (historyInstance, 'query',
                              fluxQuery,
                                  function (query) {
                                      if (debug) console.log('[getHistoryGraphData]: Raw result from fluxQuery (query.result) ' + JSON.stringify(query.result));
                                      // Hier werden aus den Rohdaten der Flux-Query Zeitstempel und Werte extrahiert und in das benötigte Array-Format übergeben
                                      // [{"t": 1640624405000,"y": 1.4536},{"t": 1640649605000,"y": 1.4665}, ...]
                                      graph.data = query.result[0].map(elm => ({
                                          t: (elm.ts !== null && elm.ts !== undefined) ? elm.ts : null,
                                          y: (elm._value !== null && elm._value !== undefined) ? elm._value : null
                                      }));
      
                                      resolve(graph);
                                      if (debug) console.log("[getHistoryGraphData]: Result after map t: and y: (query.data) " + JSON.stringify(graph.data));
                                  }
                          );
                      });
              } catch (ex) {
                  console.error(`[getHistoryGraphData]: error: ${ex.message}, stack: ${ex.stack}`);
              }
          };
      
      }; // end [refresh]
      

      Im Beispiel stelle ich den Energieverbrauch der Wärmepumpe aggregiert je Tag der letzen 7 Tage inkl. des aktuellen Tages dar. Als Zusatzinformation die Tageshöchst- und -tiefsttemperaturen vom Außentemperatursensor.

      Das Ergebnis sieht so aus:

      2022-01-15_14-57-28.png

      Und hier das vom Skript erzeugte JSON, welches in den Zieldatenpunkt geschrieben wird und auf den man im JSON-Chart-Widget referenzieren muss:

      {
        "graphs": [
          {
            "type": "bar",
            "color": "#44739e",
            "legendText": "Energieverbrauch",
            "yAxis_id": 0,
            "yAxis_show": false,
            "yAxis_min": 0,
            "yAxis_max": 21,
            "datalabel_show": true,
            "datalabel_minDigits": 1,
            "datalabel_maxDigits": 1,
            "datalable_color": "#44739e",
            "displayOrder": 2,
            "line_pointSize": 0,
            "datalabel_fontFamily": "RobotoCondensed-Regular",
            "datalabel_fontSize": "14",
            "xAxis_bounds": "ticks",
            "xAxis_timeFormats": {
              "millisecond": "H:mm:ss.SSS",
              "second": "H:mm:ss",
              "minute": "H:mm",
              "hour": "dd.[\\n]H:mm",
              "day": "dd[\\n]DD.MM",
              "week": "dd[\\n]DD.MM",
              "month": "MMM[\\n]YYYY",
              "quarter": "[Q]Q - YYYY",
              "year": "YYYY"
            },
            "data": [
              {
                "t": 1641686400000,
                "y": 18.49740000000014
              },
              {
                "t": 1641772800000,
                "y": 17.172599999999747
              },
              {
                "t": 1641859200000,
                "y": 15.997500000000114
              },
              {
                "t": 1641945600000,
                "y": 18.452199999999955
              },
              {
                "t": 1642032000000,
                "y": 16.417500000000235
              },
              {
                "t": 1642118400000,
                "y": 19.2448999999999
              },
              {
                "t": 1642204800000,
                "y": 11.811599999999745
              }
            ]
          },
          {
            "type": "line",
            "color": "#73c6b6",
            "legendText": "Außentemp. (max)",
            "yAxis_id": 2,
            "yAxis_show": false,
            "yAxis_min": -15,
            "yAxis_max": 30,
            "datalabel_show": true,
            "datalabel_align": "top",
            "datalabel_minDigits": 1,
            "datalabel_maxDigits": 1,
            "datalabel_append": "°",
            "datalabel_color": "#73c6b6",
            "displayOrder": 1,
            "line_pointSize": 0,
            "datalabel_fontFamily": "RobotoCondensed-Regular",
            "datalabel_fontSize": "14",
            "xAxis_bounds": "ticks",
            "xAxis_timeFormats": {
              "millisecond": "H:mm:ss.SSS",
              "second": "H:mm:ss",
              "minute": "H:mm",
              "hour": "dd.[\\n]H:mm",
              "day": "dd[\\n]DD.MM",
              "week": "dd[\\n]DD.MM",
              "month": "MMM[\\n]YYYY",
              "quarter": "[Q]Q - YYYY",
              "year": "YYYY"
            },
            "data": [
              {
                "t": 1641686400000,
                "y": 5.3
              },
              {
                "t": 1641772800000,
                "y": 4.4
              },
              {
                "t": 1641859200000,
                "y": 4
              },
              {
                "t": 1641945600000,
                "y": 3.3
              },
              {
                "t": 1642032000000,
                "y": 5.1
              },
              {
                "t": 1642118400000,
                "y": 2.5
              },
              {
                "t": 1642204800000,
                "y": 3.5
              }
            ]
          },
          {
            "type": "line",
            "color": "#73c6b6",
            "legendText": "Außentemp. (min)",
            "yAxis_id": 2,
            "yAxis_show": false,
            "yAxis_min": -15,
            "yAxis_max": 30,
            "datalabel_show": true,
            "datalabel_align": "bottom",
            "datalabel_minDigits": 1,
            "datalabel_maxDigits": 1,
            "datalabel_append": "°",
            "datalabel_color": "#73c6b6",
            "displayOrder": 1,
            "line_pointSize": 0,
            "datalabel_fontFamily": "RobotoCondensed-Regular",
            "datalabel_fontSize": "14",
            "xAxis_bounds": "ticks",
            "xAxis_timeFormats": {
              "millisecond": "H:mm:ss.SSS",
              "second": "H:mm:ss",
              "minute": "H:mm",
              "hour": "dd.[\\n]H:mm",
              "day": "dd[\\n]DD.MM",
              "week": "dd[\\n]DD.MM",
              "month": "MMM[\\n]YYYY",
              "quarter": "[Q]Q - YYYY",
              "year": "YYYY"
            },
            "data": [
              {
                "t": 1641686400000,
                "y": 2.6
              },
              {
                "t": 1641772800000,
                "y": 0.4
              },
              {
                "t": 1641859200000,
                "y": -1.1
              },
              {
                "t": 1641945600000,
                "y": -0.8
              },
              {
                "t": 1642032000000,
                "y": -0.6
              },
              {
                "t": 1642118400000,
                "y": -2.1
              },
              {
                "t": 1642204800000,
                "y": 1.3
              }
            ]
          }
        ]
      }
      

      Zur Vervollständigung hier noch meine Objektstruktur für diesen Teilbereich:

      2022-01-15_15-08-26.png

      Vielleicht hilft das dem einen oder anderen beim Einstieg in das JSON-Chart.

      Grüße

      Frank

      posted in Visualisierung
      frank2604
      frank2604
    • RE: Neuer Adapter: Yamaha MusicCast

      @Coffeelover

      Danke für den Hinweis. Ich hatte das schon im Verlauf des Threads gelesen und auch Deinen letzten Beitrag bzgl. regelmäßigem Adapterneustart.

      In meinem Szenario steuere ich immer von ioBroker an MusicCast und benötige keine refreshten Status aus der anderen Richtung. Wenn das mal so wäre habe ich Deinen Workaround im Hinterkopf.

      Grüße

      Frank

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @marc9025 sagte in Material Design Widgets: JSON Chart Widget:

      Gibt es eine Möglichkeit Werte aus der influxdb in ein Textfeld darzustellen also ohne Grafik.

      Hallo Marc,

      ja, das geht auch, so wie hier in meiner Jahresansicht für Energie:

      2022-06-18_19-37-18.jpg

      Mit flux ermittle ich einen aggregierten Wert für einen definierten Zeitraum und den Schreibe ich dann in einen Datenpunkt:

      // Import NPM Modul
       const moment = require("moment");
       moment.locale("de");
      
      // History Instanz die verwendet werden soll
      let historyInstance = 'influxdb.0';
      
      // Debug-Mode (true/false)
      // Gibt bei true in der Skript-Console und im ioBroker-Protokoll Inhalte von Verarbeitungsschritten aus (z.B. das Ergebnis der Flux-Abfrage und das fertige JSON)
      let debug = false;
      
      // #################### Auslöser (Trigger), die das JSON-Objekt neu erzeugen ####################
      
      // Zeitgesteuert (jede 10. Sekunde in der 1. Minute einer jeden Stunde, jeden Tag)
      schedule("10 1 * * * *", async function () {
          refresh();
      });
      
      // Beim Speichern oder Starten des Skriptes
      refresh();
      
      // #################### Funktion, die die Daten aus influx ermittelt ####################
      
      function refresh() {
      
          let startVersatzWert = -1
          let startVersatzEinhet = 'year'
          let stopVersatzWert = 0
          let stopVersatzEinhet = 'year'
          let today = moment()
          
          let start = today.clone().add(startVersatzWert, startVersatzEinhet).startOf(startVersatzEinhet).format('YYYY-MM-DD[T]HH:mm:ss[Z]');
          let stop = today.clone().add(stopVersatzWert, stopVersatzEinhet).startOf(stopVersatzEinhet).format('YYYY-MM-DD[T]HH:mm:ss[Z]');
      
          if (debug) console.log("[range ACT]: start " + start + " stop " + stop);
      
          let fluxQuery =
                  'from(bucket: "iobroker") \
                      |> range(start: ' + start + ', stop: ' + stop + ') \
                      |> filter(fn: (r) => r["_measurement"] == "Strom.Solarproduktion.Energie_in_der_letzten_Stunde") \
                      |> drop(columns: ["_field", "ack", "from", "q"]) \
                      |> sum() \
                      ';
      
          if (debug) console.log("fluxQuery: " + fluxQuery);
      
          let value = 0;
      
          sendTo(historyInstance, 'query',
                  fluxQuery,
              function (query) {
                  if (query.error) {
                      console.error(query.error);
                  } else {
                      // Ergebnis in Datenpunkt
                      if (debug) console.log('Row: ' + JSON.stringify(query));
                      value = query.result[0][0]._value
                      setState('0_userdata.0.Strom.Solarproduktion.Energie_Jahr_-1', value, true);
                      if (debug) console.log("value: " + value);
                  }
          })
          
      };
      

      Grüße Frank

      posted in Visualisierung
      frank2604
      frank2604
    • RE: [GELÖST] Hilfe beim Parsen mit RegEx

      So, nachdem ich nun alles erfolgreich umgesetzt habe hier mal das Ergebnis. Vielleicht hilft es als kleines Übungsbeispiel anderen Anfängern wie mir beim Einstieg in den Parser-Adapter - man muss ja auch mal was ans Forum zurückgeben 😉

      Ziel war es, die Daten zur Betriebsrichtung des Flughafens KölnBonn zwecks Weiterverarbeitung in VIS auszulesen und zu historisieren. Je nach Startbahn, die meist von der Windrichtung vorgegeben ist, bekommen wir hier etwas Fluglärm von den Abflügen Richtung Nordwest ab.

      Der Flughafen stellt die Betriebsrichtung auf seiner Webseite dar, die sich leider nicht als iFrame in VIS einbinden lässt.

      https://www.koeln-bonn-airport.de/unternehmen/umwelt-und-laermschutz/betriebsrichtung-live.html

      Webseite.jpg

      im Browser lässt man sich den Quellcode der Webseite anzeigen und such nach der Stelle mit den gewünschten Informationen.

      Der Code mit der Tabelle unter der Kartendarstellung sieht so aus:

      <div id="c2102" class="frame frame-default frame-type-list frame-layout-0"><div class="tx-cgn-modules"><p style='margin:5px 0px 10px 0px;'>Auswertungszeitraum: 17.11.2020 07:49 - 08:49</p><h2>Ankunft</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Ankünfte gesamt im Auswertungszeitraum:</td><td>4</td></tr><tr class=brtr1><td>letzte Bahn für Ankünfte:</td><td>24</td></tr><!--<tr><td>Anzahl:</td><td>4</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>unbekannt: DF20X (19,1t)</td></tr></table><h2>Abflug</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Abflüge gesamt im Auswertungszeitraum:</td><td>2</td></tr><tr class=brtr1><td>letzte Bahn für Abflüge:</td><td>14L</td></tr><!--<tr><td>Anzahl:</td><td>2</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>Bombardier BD-700 Global Express   (45,1t)</td></tr></table><h2>Wetterdaten</h2><table class="betriebsrichtungtab table table-condensed"><tr class=brtr0><td class='col-xs-6'>Luftdruck (hPa):</td><td>1024</td></tr><tr class=brtr1><td>Lufttemperatur (°C):</td><td>11,0</td></tr><tr class=brtr0><td>Windgeschwindigkeit (m/s):</td><td> 4,1</td></tr><tr class=brtr1><td>Windrichtung (°):</td><td>200</td></tr><tr class=brtr0><td>Taupunkt (°C):</td><td>8,0</td></tr><tr class=brtr1><td>Relative Luftfeuchtigkeit (%):</td><td>81</td></tr></table><script language="javascript"><!--//
      

      Um nun eine Regular Expression zu erstellen und zu testen bietet sich ein Online-Tool an: https://regex101.com

      RegEx101.jpg

      In die untere große Box den Quellcode reinschmeißen, oben die RegEx

      Denkt an die eliminierenden \ vor eventuellen / im Quellcode. Siehe die Lösung des Problems oben von @liv-in-sky

      Hier die Ausdrücke, mit denen ich meine 7 Datenpunkte auslese:

      Abflüge gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
      letzte Bahn für Abflüge:</td><td>(\w+)</td>
      letzter Flugzeugtyp:</td><td>(.?)<
      Ankünfte gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
      letzte Bahn für Ankünfte:</td><td>(\w+)</td>
      letzter Flugzeugtyp:</td><td>(.
      ?)<
      Auswertungszeitraum: (.*?)<

      Im Adapter sieht das ganze dann so aus:

      Adapter.jpg

      Da der Teil 'letzter Flugzeugtyp' zweifach gefunden wird, muss man in der Spalte Num einmal 0 für den ersten Treffer und einmal 1 für den zweiten Treffer angeben.

      Ergebnis in der Objektansicht:

      ioBroker.jpg

      Grüße

      Frank

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @Happyuser20
      @liv-in-sky

      So, ich habe mir das mal angesehen. Ich glaube Ihr wart schon auf der richtigen Spur bzgl. der Überlagerung.

      Ich verwende für den Parameter "color" die Farbangabe in rgba:

      "color": "rgba(255, 235, 59, 0.5)",

      Dabei ist der vierte Parameter die Transparenz. Ich denke dadurch kann der Rahmen dann "durchscheinen".

      Die "barBorderColor" scheint dabei aber wohl nicht berücksichtigt zu werden. Stört mich jetzt nicht, da ich Balken und Rahmen immer gleichfarbig haben möchte.

      Hier mal mein JSON passend zu dem Screenshot oben.

      {
        "graphs": [
          {
            "type": "bar",
            "color": "rgba(255, 235, 59, 0.5)",
            "barBorderColor": "rgb(255, 235, 59)",
            "barBorderWidth": 2,
            "legendText": "Solarproduktion",
            "yAxis_id": 0,
            "yAxis_show": false,
            "yAxis_position": "left",
            "yAxis_gridLines_border_show": false,
            "yAxis_gridLines_ticks_show": false,
            "yAxis_gridLines_show": true,
            "yAxis_gridLines_color": "rgba(255, 255, 255, 0.87)",
            "yAxis_min": 0,
            "yAxis_max": 100.772,
            "yAxis_step": 20,
            "datalabel_show": true,
            "datalabel_color": "rgb(255, 235, 59)",
            "datalabel_minDigits": 0,
            "datalabel_maxDigits": 0,
            "line_pointSize": 0,
            "datalabel_fontFamily": "RobotoCondensed-Regular",
            "datalabel_fontSize": "12",
            "xAxis_bounds": "ticks",
            "xAxis_timeFormats": {
              "millisecond": "H:mm:ss.SSS",
              "second": "H:mm:ss",
              "minute": "H:mm",
              "hour": "dd.[\\n]H:mm",
              "day": "dd[\\n]DD.MM",
              "week": "dd[\\n]DD.MM",
              "month": "MMM[\\n]YYYY",
              "quarter": "[Q]Q - YYYY",
              "year": "YYYY"
            },
            "data": [
              {
                "t": 1665360000000,
                "y": 42.77
              },
              {
                "t": 1665446400000,
                "y": 44.848
              },
              {
                "t": 1665532800000,
                "y": 37.53300000000001
              },
              {
                "t": 1665619200000,
                "y": 27.246000000000006
              },
              {
                "t": 1665705600000,
                "y": 11.366000000000001
              },
              {
                "t": 1665792000000,
                "y": 19.851
              },
              {
                "t": 1665878400000,
                "y": 34.11999999999999
              },
              {
                "t": 1665964800000,
                "y": 20.502
              },
              {
                "t": 1666051200000,
                "y": 23.933
              },
              {
                "t": 1666137600000,
                "y": 41.181999999999995
              },
              {
                "t": 1666224000000,
                "y": 14.393
              },
              {
                "t": 1666310400000,
                "y": 17.048000000000002
              },
              {
                "t": 1666396800000,
                "y": 20.375999999999998
              },
              {
                "t": 1666483200000,
                "y": 21.424
              },
              {
                "t": 1666569600000,
                "y": 14.666
              }
            ]
          }
        ]
      }
      

      Grüße

      Frank

      posted in Visualisierung
      frank2604
      frank2604
    • RE: VIS über ioBroker.net - wie?

      @djmarc75, @Homoran

      Erstmal Danke für Eure Mühe. Ich mache mal einen neuen Thread auf, denn es geht hier ja nicht mehr um Zugriff via ioBroker.net.

      Dort beschreibe ich meine aktuelle Konfiguration. Vielleicht findet sich jemand, der in etwa mein Setup hat und erfolgreich via VPN auf den ioBroker zugreifen kann.

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @manu96

      Ich versuche es mal mit Dateiupload

      View Leistung

      View Energie 1

      View Energie 2

      posted in Visualisierung
      frank2604
      frank2604

    Latest posts made by frank2604

    • RE: Material Design Widgets: JSON Chart Widget

      @stenmic

      Hi, da kann ich leider nicht helfen. Ich kann auch kein JS und habe mir das auch nur aus Codeschnipseln zusammengesucht. Sorry!

      posted in Visualisierung
      frank2604
      frank2604
    • RE: Diskussion zum HowTo nodejs-Installation und upgrade

      @Thomas-Braun

      Hat sich erledigt. Habe im Verzeichnis:

      /opt/iobroker/node_modules/iobroker.zigbee/node_modules
      

      das ausgeführt:

      npm install --production
      

      Jetzt läuft auch Zigbee wieder.

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Diskussion zum HowTo nodejs-Installation und upgrade

      @thomas-braun

      Danke. Ist soweit alles fehlerfrei durchgelaufen.

      Alle Instanzen bis auf den Zigbee laufen wieder. Der meldet im Log folgendes:

      host.vm-iobroker-02
      2023-08-12 11:31:07.119	info	Rebuild for adapter system.adapter.zigbee.0 not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.
      host.vm-iobroker-02
      2023-08-12 11:31:07.119	error	instance system.adapter.zigbee.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
      host.vm-iobroker-02
      2023-08-12 11:31:07.119	error	Caught by controller[0]: Node.js v18.17.1
      host.vm-iobroker-02
      2023-08-12 11:31:07.119	error	Caught by controller[0]: }
      host.vm-iobroker-02
      2023-08-12 11:31:07.119	error	Caught by controller[0]: ]
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: '/opt/iobroker/node_modules/iobroker.zigbee/main.js'
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: '/opt/iobroker/node_modules/iobroker.zigbee/node_modules/@iobroker/adapter-core/build/index.js',
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: requireStack: [
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: code: 'MODULE_NOT_FOUND',
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module.require (node:internal/modules/cjs/loader:1143:19) {
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module._load (node:internal/modules/cjs/loader:960:12)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module.load (node:internal/modules/cjs/loader:1119:32)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module._compile (node:internal/modules/cjs/loader:1256:14)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.zigbee/node_modules/@iobroker/adapter-core/build/index.js:21:1)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at require (node:internal/modules/cjs/helpers:121:18)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module.require (node:internal/modules/cjs/loader:1143:19)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module._load (node:internal/modules/cjs/loader:922:27)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.zigbee/main.js
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.zigbee/node_modules/@iobroker/adapter-core/build/index.js
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: Require stack:
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: Error: Cannot find module '@iobroker/types'
      host.vm-iobroker-02
      2023-08-12 11:31:07.118	error	Caught by controller[0]: ^
      host.vm-iobroker-02
      2023-08-12 11:31:07.117	error	Caught by controller[0]: throw err;
      host.vm-iobroker-02
      2023-08-12 11:31:07.117	error	Caught by controller[0]: node:internal/modules/cjs/loader:1080
      host.vm-iobroker-02
      2023-08-12 11:31:06.702	info	instance system.adapter.zigbee.0 started with pid 14766
      host.vm-iobroker-02
      2023-08-12 11:31:06.600	info	"system.adapter.zigbee.0" enabled
      
      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Diskussion zum HowTo nodejs-Installation und upgrade

      Ich möchte von node.js 14 auf 18 updaten.

      Laut der Anleitung wird ein sauber npm-tree benötigt.

      Überprüfung mit

      cd /opt/iobroker
      npm ls | grep -E 'github|ERR'
      

      ergibt bei mir:

      │ │ │ ├── github-from-package@0.0.0
      npm ERR! peer dep missing: buffer@>=6.0.3, required by crc@4.1.1
      npm ERR! peer dep missing: @iobroker/types@^5.0.11, required by @iobroker/adapter-core@3.0.3
      

      Und nun?

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: [GELÖST] Neues homematic IP: Datenpunkte aktualisieren nicht

      @paul53

      Ach jaaa. Da war was. War einfach schon zu lange her seit dem letzten IP-Geräte-einbinden.

      Danke Paul!

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • [GELÖST] Neues homematic IP: Datenpunkte aktualisieren nicht

      Hallo,

      ich habe eine CCU3 mit einigen IP- und Classic-Geräten eingebunden. Die übermitteln alle Ihre DP einwandfrei an ioB.

      Jetzt habe ich mir einen weiteren Wandtaster 6-fach (HmIP-WRC6) gekauft und an der CCU3 angelernt. Alle Datenpunkte sind umgehend im Objektbaum erschienen, ABER kein Status ändert sich beim Bedienen.

      Was mir aufgefallen ist:

      Beim Betätigen einer Taste wird nur ein kurzes Orange signalisiert. Bei meinen anderen WRC6 kommt noch ein kurzen Grün hinterher, was meines Wissens die Quittung von der CCU für den korrekten Empfang ist.

      Das Protokoll im Debug-Mode für einen kurzen Tastdruck.

      Bei einem funktionierenden Taster:

      hm-rpc.1
      2023-05-30 18:07:47.159	debug	hm-rpc.1.000B5D89BBCC94.1.PRESS_SHORT ==> UNIT: "undefined" (min: undefined, max: undefined) From "true" => "true"
      
      hm-rpc.1
      2023-05-30 18:07:47.159	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50","000B5D89BBCC94:1","PRESS_SHORT",true]
      
      hm-rpc.1
      2023-05-30 18:07:47.148	debug	hm-rpc.1.000B5D89BBCC94.0.UNREACH ==> UNIT: "undefined" (min: undefined, max: undefined) From "false" => "false"
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50","000B5D89BBCC94:0","UNREACH",false]
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50,000B5D89BBCC94:0,UNREACH,false
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	hm-rpc.1.000B5D89BBCC94.0.LOW_BAT ==> UNIT: "undefined" (min: undefined, max: undefined) From "false" => "false"
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50","000B5D89BBCC94:0","LOW_BAT",false]
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50,000B5D89BBCC94:0,LOW_BAT,false
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	hm-rpc.1.000B5D89BBCC94.0.RSSI_DEVICE ==> UNIT: "undefined" (min: -128, max: 127) From "-86" => "-86"
      
      hm-rpc.1
      2023-05-30 18:07:47.147	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50","000B5D89BBCC94:0","RSSI_DEVICE",-86]
      
      hm-rpc.1
      2023-05-30 18:07:47.146	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50,000B5D89BBCC94:0,RSSI_DEVICE,-86
      
      hm-rpc.1
      2023-05-30 18:07:47.146	debug	hm-rpc.1.000B5D89BBCC94.0.CONFIG_PENDING ==> UNIT: "undefined" (min: undefined, max: undefined) From "false" => "false"
      
      hm-rpc.1
      2023-05-30 18:07:47.146	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50","000B5D89BBCC94:0","CONFIG_PENDING",false]
      
      hm-rpc.1
      2023-05-30 18:07:47.146	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:29605d347a674c4e7a02b87b61204e50,000B5D89BBCC94:0,CONFIG_PENDING,false
      

      Und hier das von dem neuen, der nicht funktioniert:

      
      hm-rpc.1
      2023-05-30 18:37:27.954	debug	hm-rpc.1.000B5F2991B6E4.0.RSSI_DEVICE ==> UNIT: "undefined" (min: -128, max: 127) From "-87" => "-87"
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1","000B5F2991B6E4:0","RSSI_DEVICE",-87]
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1,000B5F2991B6E4:0,RSSI_DEVICE,-87
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	hm-rpc.1.000B5F2991B6E4.0.UNREACH ==> UNIT: "undefined" (min: undefined, max: undefined) From "false" => "false"
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1","000B5F2991B6E4:0","UNREACH",false]
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1,000B5F2991B6E4:0,UNREACH,false
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	hm-rpc.1.000B5F2991B6E4.0.CONFIG_PENDING ==> UNIT: "undefined" (min: undefined, max: undefined) From "false" => "false"
      
      hm-rpc.1
      2023-05-30 18:37:27.953	debug	xmlrpc <- event ["vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1","000B5F2991B6E4:0","CONFIG_PENDING",false]
      
      hm-rpc.1
      2023-05-30 18:37:27.952	debug	xml multicall <event>: vm-iobroker-02:hm-rpc.1:f2f58d0321d455919dc635a8b8d7a0b1,000B5F2991B6E4:0,CONFIG_PENDING,false
      

      Da fehlt ein Teil, insbesondere, der, der den Status für PRESS SHORT aktualisiert.

      Erstelle ich in der CCU eine Direktverknüpfung z.B. mit einem Markisenaktor, lässt sich dieser mit dem Taster problemlos bedienen.

      Ich habe das Ding jetzt schon 3x ab- und angelernt und zurückgesetzt und auch die HM RPC Instanz neu gestartet. An einer zweiten CCU3 das gleiche.

      Habe ich ein Brett vor dem Kopf? Wo liegt der Fehler?

      js-controller: 4.0.24
      hm rpc: 1.15.16
      CCU: 3.69.7

      Danke vorab.

      Frank

      posted in ioBroker Allgemein
      frank2604
      frank2604
    • RE: Material Design Widgets: Top App Bar Widget

      Hier kurz mein Workaround für den Github-Issue #212 "Top Bar App: Objekt ID wird ab Element 9 wieder auf 0 gesetzt"

      Ich verwende zwei Datenpunkte:

      2023-01-22_09-25-00.jpg

      und ein Skript:

      2023-01-22_09-24-15.jpg

      Datenpunkt in Top App Bar:

      2023-01-22_09-26-15.jpg

      Datenpunkt in View in Widget8:

      2023-01-22_09-26-40.jpg

      posted in Visualisierung
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @marc9025
      Das Problem kenne ich so nicht. Ich schreibe die Werte kontinuierlich ich die influx-DB, auch die 0 Werte. Vielleicht liegt es daran.

      posted in Visualisierung
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @marc9025
      Ich habe ein Skript für jedes Chart. Wenn in dem Chart mehrere Datenpunkte dargestellt werden sollen, müssen die ja ohnehin zusammen in einem JSON aufbereitet werden.

      Das Original-Skript von Scrounger ist - wenn ich mich recht erinnere - so aufgebaut, dass das mit einer Schleife durch verschiedene DP laufen kann. Um mich da überhaupt einzufinden und durchzusteigen, habe ich das aber erstmal runtergebrochen und vereinfacht und ein Skript je JSON erstellt. Ich bin halt kein Programmierer und komme so damit klar.

      posted in Visualisierung
      frank2604
      frank2604
    • RE: Material Design Widgets: JSON Chart Widget

      @marc9025

      Ich glaube nicht mit dem JSON Chart, jedenfalls habe ich bei der Durchsicht weder im Editor noch in den JSON Properties dazu etwas gefunden. Aber das Bar Chart hier aus der MDW-Serie kann in der Ausrichtung umgeschaltet werden (Im Editor -> Diagrammtyp: senkrecht/horizontal).

      posted in Visualisierung
      frank2604
      frank2604
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo