Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. X/Y Plots in VIS2 views

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    864

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

X/Y Plots in VIS2 views

Geplant Angeheftet Gesperrt Verschoben Visualisierung
3 Beiträge 2 Kommentatoren 25 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • MartinPM Online
    MartinPM Online
    MartinP
    schrieb zuletzt editiert von MartinP
    #1

    Ich habe seit gut einem Monat eine Wärmepumpe (Buderus WLW186) und quäle mich etwas mit dem Herantasten an die Vorlaufgrenze, ab der es in der Bude nicht mehr warm genug wird...

    Jedes Grad weniger Vorlauftemperatur bringt ein wenig mehr Effizienz der Wärmepumpe.

    Was mich da behindert, ist, dass es trotz einem ziemliche Stapel Dokumentation, den die Installateure dagelassen haben nicht so ganz nachvollziehbar ist, wie sich welche "Stellschrauben" im Detail auf die Vorlauftemperatur auswirken...
    Heizkurve mit Fußpunkt und Komfortpunkt, Temperatur für "Heizen" und "Absenken" gehen wohl in die Berechnung der Vorlauftemperatur ein....

    Ich nutze EMS-ESP, um der Anlage auf die Finger zu schauen. Habe schon festgestellt, dass die Vorlauftemperatur nicht direkt der Außentemperatur folgt, sondern der "gedämpften Außentemperatur", das Auf-und Ab ist bei dieser wirklich deutlich glatter, und eilt der realen Temperatur um ca 2 Stunden hinterher.
    Das soll wohl die "Trägheit" des Gebäudes abbilden ...

    Im EMS-ESP-Adapter gibt es sowohl die Soll-Vorlauftemperatur, als auch die gedämpfte Außentemperatur als Datenpunkt.

    Ich würde gerne dieses als Grafik mit Außentemperatur auf der X-Achse, und Vorlauftemperatur auf der Y-Achse mit allen im Verlauf erfassten Wertepaaren darstellen.
    Wenn ich dann meine, genug Werte gesammelt zu haben, und wieder an den Stellschrauben drehen will, sollte die Grafik "genullt" werden können, und man erfasst die sich ergebende neue Heizkurve mit einiger Geduld über die dann kommenden Kalt und Warmfronten über gesammelte Wertepaare gedämpfteAußentemperatur -> Vorlauftemperatur.

    Gibt es irgendwelche Bordmittel über Adapter, um solche X/Y Graphen zu generieren, und in VIS2 Views einzubetten?

    Derzeit erfasse ich die Wertepaare mit einem Blockly Script, hänge sie am Ende an eine Textdatei an, und werte sie extern mit Gnuplot aus...
    Es wäre auch eine Lösung, mit Cronjob und Gnuplot eine Grafikdatei zu erzeugen, und diese dann in einen Vis View einzubetten.

    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
    Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
    Linux pve 6.8.12-16-pve
    6 GByte RAM für den Container
    Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
    Remote-Access über Wireguard der Fritzbox

    M 1 Antwort Letzte Antwort
    0
    • MartinPM MartinP

      Ich habe seit gut einem Monat eine Wärmepumpe (Buderus WLW186) und quäle mich etwas mit dem Herantasten an die Vorlaufgrenze, ab der es in der Bude nicht mehr warm genug wird...

      Jedes Grad weniger Vorlauftemperatur bringt ein wenig mehr Effizienz der Wärmepumpe.

      Was mich da behindert, ist, dass es trotz einem ziemliche Stapel Dokumentation, den die Installateure dagelassen haben nicht so ganz nachvollziehbar ist, wie sich welche "Stellschrauben" im Detail auf die Vorlauftemperatur auswirken...
      Heizkurve mit Fußpunkt und Komfortpunkt, Temperatur für "Heizen" und "Absenken" gehen wohl in die Berechnung der Vorlauftemperatur ein....

      Ich nutze EMS-ESP, um der Anlage auf die Finger zu schauen. Habe schon festgestellt, dass die Vorlauftemperatur nicht direkt der Außentemperatur folgt, sondern der "gedämpften Außentemperatur", das Auf-und Ab ist bei dieser wirklich deutlich glatter, und eilt der realen Temperatur um ca 2 Stunden hinterher.
      Das soll wohl die "Trägheit" des Gebäudes abbilden ...

      Im EMS-ESP-Adapter gibt es sowohl die Soll-Vorlauftemperatur, als auch die gedämpfte Außentemperatur als Datenpunkt.

      Ich würde gerne dieses als Grafik mit Außentemperatur auf der X-Achse, und Vorlauftemperatur auf der Y-Achse mit allen im Verlauf erfassten Wertepaaren darstellen.
      Wenn ich dann meine, genug Werte gesammelt zu haben, und wieder an den Stellschrauben drehen will, sollte die Grafik "genullt" werden können, und man erfasst die sich ergebende neue Heizkurve mit einiger Geduld über die dann kommenden Kalt und Warmfronten über gesammelte Wertepaare gedämpfteAußentemperatur -> Vorlauftemperatur.

      Gibt es irgendwelche Bordmittel über Adapter, um solche X/Y Graphen zu generieren, und in VIS2 Views einzubetten?

      Derzeit erfasse ich die Wertepaare mit einem Blockly Script, hänge sie am Ende an eine Textdatei an, und werte sie extern mit Gnuplot aus...
      Es wäre auch eine Lösung, mit Cronjob und Gnuplot eine Grafikdatei zu erzeugen, und diese dann in einen Vis View einzubetten.

      M Online
      M Online
      MCU
      schrieb zuletzt editiert von
      #2

      @MartinP flexCharts-Adapter

      http://192.168.178.XXX:8082/flexcharts/echarts.html?source=state&id=0_userdata.0.wp.xy.chart&refresh=10&darkmode=auto
      

      [
        [
          12.5,
          24
        ],
        [
          11.8,
          24.3
        ],
        [
          10.9,
          24.8
        ],
        [
          10.1,
          25.2
        ],
        [
          9.4,
          25.7
        ],
        [
          8.6,
          26.1
        ],
        [
          7.9,
          26.6
        ],
        [
          7.1,
          27.1
        ],
        [
          6.4,
          27.6
        ],
        [
          5.6,
          28
        ],
        [
          4.9,
          28.7
        ],
        [
          4.1,
          29.2
        ],
        [
          3.4,
          29.7
        ],
        [
          2.6,
          30.3
        ],
        [
          1.9,
          30.8
        ],
        [
          1.1,
          31.4
        ],
        [
          0.4,
          32
        ],
        [
          -0.3,
          32.6
        ],
        [
          -1.1,
          33.1
        ],
        [
          -1.8,
          33.7
        ],
        [
          -2.6,
          34.2
        ],
        [
          -3.3,
          34.8
        ],
        [
          -4.1,
          35.4
        ],
        [
          -4.8,
          36
        ],
        [
          -5.6,
          36.7
        ],
        [
          -6.3,
          37.3
        ],
        [
          -7.1,
          38
        ],
        [
          0,
          0
        ]
      ]
      

      /***********************
      * X/Y-Scatter für Heizkurve (VIS2 via FlexCharts)
      *  - sammelt Paare: gedämpfte AT (X) -> Soll-VL (Y)
      *  - "Nullen" per Reset-State
      ***********************/
      
      const DP_X = 'ems-esp.0.DEIN_GERAET.dampedOutsideTemp';   // <-- anpassen
      const DP_Y = 'ems-esp.0.DEIN_GERAET.flowTempSetpoint';    // <-- anpassen
      
      const STATE_POINTS = '0_userdata.0.wp.xy.points';
      const STATE_CHART  = '0_userdata.0.wp.xy.chart';
      const STATE_RESET  = '0_userdata.0.wp.xy.reset';
      
      const SAMPLE_SECONDS = 60;     // Abtastrate
      const MAX_POINTS     = 4000;   // Begrenzung (DB-frei bleiben)
      const DEC_X          = 1;      // Rundung
      const DEC_Y          = 1;
      
      function round(v, d) {
       const p = Math.pow(10, d);
       return Math.round(v * p) / p;
      }
      
      function safeParseJson(str, fallback) {
       try { return JSON.parse(str); } catch (e) { return fallback; }
      }
      
      function buildOption(points) {
       return {
         animation: false,
         grid: { left: 60, right: 20, top: 40, bottom: 55 },
         tooltip: { trigger: 'item' }, // zeigt [x,y] automatisch
         xAxis: {
           type: 'value',
           name: 'gedämpfte AT [°C]',
           nameLocation: 'middle',
           nameGap: 35
         },
         yAxis: {
           type: 'value',
           name: 'Soll-VL [°C]',
           nameLocation: 'middle',
           nameGap: 45
         },
         dataZoom: [
           { type: 'inside' },
           { type: 'slider', height: 18 }
         ],
         series: [{
           name: 'Heizkurve (Messpunkte)',
           type: 'scatter',
           symbolSize: 6,
           data: points
         }]
       };
      }
      
      function writeChart(points) {
       const option = buildOption(points);
       setState(STATE_CHART, JSON.stringify(option), true);
      }
      
      function loadPoints() {
       const s = getState(STATE_POINTS);
       const raw = s && s.val ? String(s.val) : '[]';
       const arr = safeParseJson(raw, []);
       return Array.isArray(arr) ? arr : [];
      }
      
      function savePoints(points) {
       setState(STATE_POINTS, JSON.stringify(points), true);
       writeChart(points);
      }
      
      function addSample() {
       if(existsState(DP_X) && existsState(DP_Y)){
         const sx = getState(DP_X);
       
         const sy = getState(DP_Y);
         const x = sx ? Number(sx.val) : NaN;
         const y = sy ? Number(sy.val) : NaN;
      
         if (!Number.isFinite(x) || !Number.isFinite(y)) return;
      
         const px = round(x, DEC_X);
         const py = round(y, DEC_Y);
      
         const points = loadPoints();
      
         // optional: Duplikate vermeiden (gleicher Punkt wie zuletzt)
         const last = points.length ? points[points.length - 1] : null;
         if (last && last[0] === px && last[1] === py) return;
      
         points.push([px, py]);
      
         // Limit
         if (points.length > MAX_POINTS) {
             points.splice(0, points.length - MAX_POINTS);
         }
      
         savePoints(points);
       }else{
           log('DPs sind nicht vorhanden')
       }
      }
      
      // States anlegen (falls nicht vorhanden)
      createState(STATE_POINTS, '[]', { type: 'string', role: 'json', read: true, write: true });
      createState(STATE_CHART,  '{}', { type: 'string', role: 'json', read: true, write: true });
      createState(STATE_RESET,  false, { type: 'boolean', role: 'button', read: true, write: true });
      
      // Initial
      writeChart(loadPoints());
      
      // Sampling
      setInterval(addSample, SAMPLE_SECONDS * 1000);
      
      // Reset-Handling ("nullen")
      on({ id: STATE_RESET, change: 'ne' }, obj => {
       if (obj.state && obj.state.val === true) {
         savePoints([]);
         setState(STATE_RESET, false, true);
       }
      });
      
      

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      1 Antwort Letzte Antwort
      0
      • MartinPM Online
        MartinPM Online
        MartinP
        schrieb zuletzt editiert von
        #3

        Hmm, bei mir gibt es noch eine Falle ... Derzeit wird eine Umschaltung vorgenommen Tags 21.0°C Temperatur Nachts 19,5°C...

        Eigentlich braucht man da noch eine "Weiche" die in zwei "Sammelbehälter" eintütet...

        Also Tagsüber savePointsDay() und Nachts savePointsNight() in Abhängigkeit von hc1.seltemp

        bei meinen Basteleien hat sich aber herausgestellt, dass das manchmal nicht richtig synchronisiert umgeschaltet wird ... deshalb werden Vorlauf/Außentemperaturpaare nicht immer der richtigen "seltemp" zugeordnet ...
        Muss da wohl noch ein wenig basteln, aber Dein Code ist da eine schöne Grundlage... Vielen Dank dafür.

        Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
        Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
        Linux pve 6.8.12-16-pve
        6 GByte RAM für den Container
        Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
        Remote-Access über Wireguard der Fritzbox

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        807

        Online

        32.6k

        Benutzer

        82.1k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe