Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Visualisierung einer Viessmann Hybridheizung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Visualisierung einer Viessmann Hybridheizung

    This topic has been deleted. Only users with topic management privileges can see it.
    • icebear
      icebear last edited by

      @legro

      Ich wollte mir das jetzt mal anschauen, ob ich das hinbekomme, scheitere aber schon beim ersten Schritt.

      Ich hab das folgende Script mal kopiert und bei mir eingefügt, das zeigt aber direkt jede Menge Fehler bei mir an.

      flex1.png

      Fehlt mir da noch irgendwas?

      L 1 Reply Last reply Reply Quote 0
      • L
        legro @icebear last edited by legro

        @icebear

        Ich habe im ersten Beitrag die aktuell verwendete Version eingefügt. Die funktioniert bei mir und sollte auch bei dir nun funktionieren.

        Da ist der Text „code“ in der Funktionsdefinition zu viel. Weiß der Teufel, wo das herkam.

        icebear 1 Reply Last reply Reply Quote 0
        • icebear
          icebear @legro last edited by

          @legro

          Ok. Super, läuft jetzt.

          Jetzt hab ich noch eine Frage, du hast dja das Script wo du die mittlere Temperatur ermittelst und in die Struktur einträgst. Wo oder wie kommen den die anderen Werte für die Energy DP's her?

          z.B. 'generierte Waerme' oder 'Stromverbrauch' oder ?

          Kopierst du die einfach aus den vorhanden DP's oder hast du da auch ein Script für?

          L 1 Reply Last reply Reply Quote 0
          • L
            legro @icebear last edited by legro

            @icebear sagte in Visualisierung einer Viessmann Hybridheizung:

            Jetzt hab ich noch eine Frage, du hast dja das Script wo du die mittlere Temperatur ermittelst und in die Struktur einträgst. Wo oder wie kommen den die anderen Werte für die Energy DP's her?

            Das entsprechende Script zum Füllen der Charts steht doch ebenfalls in dem Beitrag. Das Script greift hierzu auf die oben dargestellte Ordnerstruktur im Objektbaum von ioBroker zu.

            Oder willst du wissen, wie die Datenpunkte (Arrays) im Objektbaum gefüllt werden?

            Da letzteres natürlich im Allgemeinen je nach vorliegenden Gegebenheiten individuell unterschiedlich sein dürfte, habe ich dies in meinem ersten Beitrag (noch) nicht eingepflegt. Wenn du dazu Hilfen benötigst, melde dich. Ich habe dies alles mittels Trigger realisiert.

            icebear 1 Reply Last reply Reply Quote 0
            • icebear
              icebear @legro last edited by icebear

              @legro

              Hallo, ja das wäre super wenn du mal erklärst wie du die Datenpunkte im Objektbaum gefüllt werden.

              Allerdings hab ich auch noch ein Problem mit dem 'meanTemp' Script, ich bekomm immer folgenden Fehler im Log:

              
              javascript.0
              2025-02-04 17:22:05.294	error	at processImmediate (node:internal/timers:483:21)
              
              javascript.0
              2025-02-04 17:22:05.294	error	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11048:62)
              
              javascript.0
              2025-02-04 17:22:05.294	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:645:29)
              
              javascript.0
              2025-02-04 17:22:05.292	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1452:38)
              
              javascript.0
              2025-02-04 17:22:05.292	error	at Object.<anonymous> (script.js.Energie_Strom.WP.Flexcharts.MeanTemp:88:5)
              
              javascript.0
              2025-02-04 17:22:05.292	error	at calcMeanTemp (script.js.Energie_Strom.WP.Flexcharts.MeanTemp:33:28)
              
              javascript.0
              2025-02-04 17:22:05.291	error	Error in callback: TypeError: Cannot read properties of undefined (reading 'min')
              

              Das Script hat auch noch angemeckert das es folgende DP nicht findet:

              setState(`0_userdata.0.Heizung.MonatsTabellen.${year}.${month}.meanTemp`,JSON.stringify(tbl),true)
              

              Den hab ich dann manuell angelegt so wie der andere 'meanTmp'

              M L 2 Replies Last reply Reply Quote 0
              • M
                MartyBr @icebear last edited by

                @icebear
                Du musst den Datenpunkt Vorausfüllen, er wird vom Script nicht angelegt. Einfach die folgenden Daten dort reinkopieren.

                [
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  },
                  {
                    "min": 0,
                    "mean": 0,
                    "max": 0
                  }
                ]
                
                1 Reply Last reply Reply Quote 0
                • L
                  legro @icebear last edited by legro

                  @icebear sagte in Visualisierung einer Viessmann Hybridheizung:

                  Allerdings hab ich auch noch ein Problem mit dem 'meanTemp' Script, ..

                  Wie du an dem Skript erkennen kannst, verwende ich wiederum Datenpunkte aus dem Objektbaum, die ich in meinem ersten Beitrag jedoch nicht explizit dargestellt habe. Bei mir sieht's so aus ..

                  92f895fc-053a-4a12-923a-3d1837d54c93-image.png

                  In diesen Datenpunkte legt das Skript zur Berechnung der mittleren Temperatur seine Ressourcen ab bzw. an. Diese Datenpunkte ermöglichen es, dass du ioBroker neu starten kannst, ohne dass die laufende Berechnung des aktuellen Tages von vorne beginnt.

                  Diese Datenpunkte musst du selbstverständlich ebenfalls bereitstellen.

                  In der aktuellen Version wird der Datenpunkt meanTemp durch meanTmp ersetzt.

                  icebear 1 Reply Last reply Reply Quote 0
                  • icebear
                    icebear @legro last edited by

                    @legro said in Visualisierung einer Viessmann Hybridheizung:

                    Diese Datenpunkte musst du selbstverständlich ebenfalls bereitstellen.

                    Das hatte ich gemacht, sieht jetzt auch so aus:

                    flex2.png

                    und in den Tabellen so:

                    flex3.png

                    diesen meanTemp hab ich von Hand angelegt weil das Script gemeckert hat das es den nicht findet

                    L 1 Reply Last reply Reply Quote 0
                    • L
                      legro @icebear last edited by legro

                      @icebear

                      Das nachfolgende Skript, welches zum Füllen der Energiewerte in die entsprechenden Datenpunkte dient, musst du natürlich an deine Gegebenheiten anpassen. Insbesondere musst du die Quellen hierfür in deinem System ausfindig machen.

                      Wenn du eine Viessmann Wärmepumpe (mit E3) hast, sollten die Register dieselben sein. Einzig die Ermittlung des Gasverbrauchs ist bei uns speziell: Ich lese mittels eines Shelly-Addon den Gaszähler aus, d.h.: Mittels eines Reed-Kontaktes bestimme ich den Gasfluss. Die vorletzte Ziffer unseres Gaszählers löst je einmal pro Umdrehung einen Impuls aus. Darüber hinaus werden hierzu weitere Datenpunkte, die ich hier (noch) nicht dokumentiert habe, verwendet.

                      /*
                          Dieses Skript aktualisiert die Energiewerte der Gastherme und Wärmepumpe mittels Trigger
                          in den Objektbaum in die Monatstabellen.
                      */
                      
                      let eventGas = null
                      let eventPH = null
                      let eventPW = null
                      let eventGH = null
                      let eventGW = null
                      
                      let Umrechnungsfaktor = getState('0_userdata.0.Heizung.Umrechnungsfaktor').val
                      let Zustandszahl = getState('0_userdata.0.Heizung.Zustandszahl').val
                      let partsDatum = {jahr: '', monat: '', tag: ''}
                      
                      setPartsDate()
                      setTrigger()
                      
                      //die Datumsangaben auf den neuen Tag ausrichten
                      schedule({hour: 0, minute: 0}, function () {
                          delTrigger() // alte Trigger löschen
                          setPartsDate()
                          setTimeout(setTrigger, 2000) // um 2s verzögert alle Trigger neu einrichten
                      })
                      
                      
                      // ========== Funktionsdefinitionen ==========
                      
                      function setPartsDate() {
                          let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
                          let d = new Date()
                          partsDatum = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()}
                      }
                      
                      
                      function setTrigger() {
                      
                      // Da die Trigger auf Änderungen in einem bestimmten Tagesverzeichnis eingestellt
                      // sind, müssen sie gelöscht und täglich neu eingerichtet bzw. registriert werden.
                      
                          let d = '0' + partsDatum.tag
                          d = d.slice(-2)
                      
                          //Gas
                          eventGas = on({id: '0_userdata.0.Heizung.tmp_tag', change: 'gt'}, function() {
                              let tmpGas = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas`).val)
                              let tmpGasKWh = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas_KWh`).val)
                      
                              tmpGas[Number(partsDatum.tag)-1] = Number((getState(`0_userdata.0.Heizung.tmp_tag`).val).toFixed(3))
                              tmpGasKWh[Number(Number(partsDatum.tag)-1)] = Number((getState(`0_userdata.0.Heizung.tmp_tag`).val * Umrechnungsfaktor * Zustandszahl).toFixed(1))
                      
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas`,JSON.stringify(tmpGas),true)
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas_KWh`,JSON.stringify(tmpGasKWh),true)
                          })
                      
                          //genHeizen
                          eventGH = on({id: `e3oncan.0.Vitocal.tree.1315_GeneratedCentralHeatingOutputMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                              let tmpGH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`).val)
                              tmpGH[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1315_GeneratedCentralHeatingOutputMonthMatrix.CurrentMonth.${d}`).val
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`,JSON.stringify(tmpGH),true)
                          })
                      
                          //genWasser
                          eventGW = on({id: `e3oncan.0.Vitocal.tree.1392_GeneratedDomesticHotWaterOutputMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                              let tmpGW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`).val)
                              tmpGW[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1392_GeneratedDomesticHotWaterOutputMonthMatrix.CurrentMonth.${d}`).val
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`,JSON.stringify(tmpGW),true)
                          })
                      
                          //primHeizen
                          eventPH = on({id: `e3oncan.0.Vitocal.tree.1294_EnergyConsumptionCentralHeatingMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                              let tmpPH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`).val)
                              tmpPH[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1294_EnergyConsumptionCentralHeatingMonthMatrix.CurrentMonth.${d}`).val
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`,JSON.stringify(tmpPH),true)
                          })
                      
                          //primWasser
                          eventPW = on({id: `e3oncan.0.Vitocal.tree.1311_EnergyConsumptionDomesticHotWaterMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                              let tmpPW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`).val)
                              tmpPW[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1311_EnergyConsumptionDomesticHotWaterMonthMatrix.CurrentMonth.${d}`).val
                              setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`,JSON.stringify(tmpPW),true)
                          })
                      
                      }
                      
                      function delTrigger() {
                          //Bei Tageswechsel müssen die Trigger gelöscht und auf den neuen Tag umgestellt werden.
                          unsubscribe(eventGas)
                          unsubscribe(eventGH)
                          unsubscribe(eventGW)
                          unsubscribe(eventPH)
                          unsubscribe(eventPW)
                      }
                      
                      icebear 2 Replies Last reply Reply Quote 0
                      • icebear
                        icebear @legro last edited by

                        @legro said in Visualisierung einer Viessmann Hybridheizung:

                        Das nachfolgende Skript, welches zum Füllen der Energiewerte in die entsprechenden Datenpunkte dient, musst du natürlich an deine Gegebenheiten anpassen.

                        Danke, ich schau es mir an. Das mit dem Gaszähler brauch ich eh nich, hab nur noch Strom.
                        Waermepumpe halt, deswegen hab ich eh nur Stromwerte.

                        Das übrige scheint jetzt erstmal zu laufen, jedenfalls meckert das Script nicht mehr rum.

                        In das json wird jetrzt auch was geschrieben, allerdings, ist das richtig das nur bei 'max' ein Wert steht und bei min und mean 0 ?

                        flex4.png

                        L 1 Reply Last reply Reply Quote 0
                        • L
                          legro @icebear last edited by legro

                          @icebear

                          Die Arbeitsweise des Skriptes zur Berechnung der mittleren Temperatur kannst du ja in den Datenpunkten einsehen. Dieses Skript liefert nur den Wert für mean in den Objekten mit den Temperaturwerten. So wie's aussieht, scheinen die min/max-Werte ja aktualisiert zu werden.

                          min wird natürlich erst beschrieben, wenn die aktuelle Temperatur 0°C unterschreitet.

                          1 Reply Last reply Reply Quote 0
                          • L
                            legro @legro last edited by legro

                            Chart: Energien & COPs

                            1e7486c7-9163-4594-8387-516b2de40a67-image.png

                            Über die Drop/Down-Widgets können Jahr und Monat gewählt werden, deren Daten dargestellt werden sollen. Damit nur die wirklich vorhandenen Jahre und Monate in diesen Listen angezeigt werden, wird der Objektbaum in ioBroker nach den entsprechenden Verzeichnissen durchsucht und nur die vorgefundenen Jahre und Monate werden angezeigt.

                            86407921-c61a-4b43-9200-4b86db9a1efd-image.png e9d420c2-8865-4ff0-b3c8-b3c71da401f1-image.png 0f6fa46a-4f28-4247-9da5-2bd9485e4144-image.png 7f446bea-7a77-4f07-89a2-56a0e25196e3-image.png

                            Die erforderlichen Ressourcen aller ECharts werden wiederum im Objektbaum von ioBroker in einem eigenen Verzeichnis abgelegt. Enthalten Chart_Energy und Chart_COP die ECharts im JSON-Format, so dienen die übrigen zur Auswahl der Jahre und Monate, von denen die Daten angezeigt werden sollen. Die DropDown-Widgets werden mit Listen für Jahre bzw. Monate (list_Year, list_Month) und für die konkrete Auswahl eines Jahres und Monats (sel_Year, sel_Month) verknüpft. Für beide Diagramme, die jeweils in einem iFrame eingebunden sind, wird der Datenpunkt update_EnergyCOP verwendet, durch den die Aktualisierungszeit der Diagramme eingestellt wird. Alle diese Daten werden mittels Binding an die DropDown-Widgets übergeben. Die Object-ID (DropDown) und die Charts im iFrame werden direkt adressiert.

                            f21bbcd7-cf26-4e1e-81c0-3350b2ac5335-image.png

                            Im Energie-Chart werden angezeigt ..

                            • Gas (primäre Energie), als generiere Wärme werden (in anderen Diagrammen) pauschal 96% angesetzt.
                            • Wasser (primäre elektrische Energie)
                            • Heizen (primäre elektrische Energie)
                            • Wasser (generierte Wärme)
                            • Heizen (generierte Wärme)

                            Im COP-Diagramm werden folgende Werte angezeigt ..

                            • Warmwasser: erzeugte Wärme / primäre elektrische Energie
                            • Heizen: wie bei Warmwassererzeugung
                            • Es wird ein Gesamt-COP ermittelt: erzeugte Wärme für Warmwasser und Heizung / primäre elektrische Energie

                            Hier nun alles rund um das Chart zur Darstellung der Tageswerte der Energien und COPs für einen frei wählbaren Monat.

                            Das Skript zum erzeugen des JSON des Charts ..

                            //COP-DIAGRAMM: COP-Werte berechnen und Datenreihen des Diagramms damit befüllen
                            function COPs() {
                            
                                let selYear = getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Year').val
                                let selMonth = getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Month').val
                                if (selYear == '' || selMonth == '') {return}
                                let Chart = JSON.parse(getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.Chart_COP').val)
                            
                            //Liefert die Anzahl der Tage eines Monats : Feb.2024 -> 29; Feb.2000 -> 28; usw.
                            
                            /*
                                if (srcWP === undefined || srcWP.val === null) {
                                    console.log('Der Datenpunkt existiert nicht oder enthält null')
                                } else {
                                    srcWP = JSON.parse(srcWP.val);
                                }
                            */
                                let srcWP = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.primWasser`).val)
                                let srcHP = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.primHeizen`).val);
                                let srcWG = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.genWasser`).val);
                                let srcHG = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.genHeizen`).val);
                            
                                let tage = getDaysInMonth(selYear, selMonth)
                            
                                //Titelzeile des Diagramms setzen
                                Chart.title.text = `COP-Werte im ${selMonth} ${selYear}`
                                
                                //x-Achse mit den Tagen des laufenden Monats füllen
                                Chart.xAxis[0].data = []  //new Array(srcWP.length).fill(0)
                                for (let j=0; j<getDaysInMonth(selYear,selMonth); j++) {
                                    Chart.xAxis[0].data.push(j+1)
                                }
                            
                                //Datenreihen des Diagramms leeren
                                for (let i=0; i<3; i++) {
                                    Chart.series[i].data = []
                                }
                            
                                //Datenreihen mit den Energiewerten befüllen
                                for (let i=0; i<tage; i++) {
                            
                                    //COP für Warmwasser
                                    if (srcWP[i] > 0) {
                                        Chart.series[0].data.push((srcWG[i] / srcWP[i]).toFixed(1))
                                    } else {
                                        Chart.series[0].data.push(0)
                                    }
                                    //COP für Heizen
                                    if (srcHP[i] > 0) {
                                        Chart.series[1].data.push((srcHG[i] / srcHP[i]).toFixed(1))
                                    } else {
                                        Chart.series[1].data.push(0)
                                    }
                                    //gesamter COP (Warmwasser und Heizen)
                                    if (srcWP[i] + srcHP[i] > 0) {
                                        Chart.series[2].data.push(((srcWG[i] + srcHG[i]) / (srcWP[i] + srcHP[i])).toFixed(1))
                                    } else {
                                        Chart.series[2].data.push(0)
                                    }
                                }
                                //COP-Chart im Objektbaum von ioBroker ablegen
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.Chart_COP',JSON.stringify(Chart),true)
                            
                            }
                            
                            //ENERGIEDIAGRAMM: Energiewerte ermitteln und Datenreihen des Diagramms damit befüllen
                            function Energies() {
                            
                                let selYear = getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Year').val
                                let selMonth = getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Month').val
                                if (selYear == '' || selMonth == '') {return}
                                let Chart = JSON.parse(getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.Chart_Energy').val)
                            
                                Chart.title.text = `Energiewerte Wasser&Heizen im ${selMonth} ${selYear}`
                            
                                let srcGas = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.Gas_KWh`).val);
                                let srcWP = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.primWasser`).val);
                                let srcHP = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.primHeizen`).val);
                                let srcWG = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.genWasser`).val);
                                let srcHG = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${selYear}.${selMonth}.genHeizen`).val);
                            
                                //x-Achse mit den Tagen des laufenden Monats füllen
                                //Chart.xAxis[0].data = new Array(srcWP.length).fill(0)
                                Chart.xAxis[0].data = []
                                for (let j=0; j<getDaysInMonth(selYear,selMonth); j++) {
                                    Chart.xAxis[0].data.push(j+1)
                                }
                            
                                for (let j=0; j<7; j++) {
                                    Chart.series[j].data = []
                                }
                            
                                Chart.series[0].data = srcGas   //Gas
                                Chart.series[1].data = srcWP    //Warmwasser primär
                                Chart.series[2].data = srcWG    //Warmwasser erzeugt
                                Chart.series[3].data = srcHP    //Heizung primär
                                Chart.series[4].data = srcHG    //Heizung erzeugt
                            
                                //let currentDays = Math.max(srcWP.length,srcGas.length)
                                let currentDays = getDaysInMonth(selYear,selMonth)
                            
                                for (let i=0; i<currentDays; i++) {
                                    if (srcWP[i] == undefined) {srcWP[i] = 0}
                                    if (srcHP[i] == undefined) {srcHP[i] = 0}
                                    if (srcWP[i] == undefined) {srcWG[i] = 0}
                                    if (srcWP[i] == undefined) {srcWG[i] = 0}
                                    if (srcGas[i] == undefined) {srcGas[i] = 0}
                                    Chart.series[5].data[i] = Number((srcWP[i] + srcHP[i] + srcGas[i]).toFixed(1))      //primäre Gesamtenergie
                                    Chart.series[6].data[i] = Number((srcWG[i] + srcHG[i] + srcGas[i]*0.96).toFixed(1)) //generierte Gesamtenergie
                                }
                            
                                //Chart als JSON im Objektbaum von ioBroker ablegen
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.Chart_Energy',JSON.stringify(Chart),true)
                            }
                            
                            //====================================================================================================================
                            
                            function listEntries(parentPath) {
                            
                                let Elemente = [];
                                //Pfadlänge parentPath
                                let maxSplit = parentPath.split('.').length + 1
                            
                                $(`${parentPath}.*`).each(function(id) {
                                    let arr = id.split('.',maxSplit+1)
                                    let child = id.split('.',maxSplit).join('.')
                                    if (!Elemente.includes(arr[maxSplit-1]) && (getObject(child).type === 'folder')) {
                                        Elemente.push(arr[maxSplit-1]);
                                    }
                            
                                });
                            
                                return Elemente;
                            }
                            
                            //listMonth des zugehörigen DropDown-Widgets füllen
                            function listMonthYear() {
                            
                                let year = getState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Year').val
                                let parentFolder = `0_userdata.0.Heizung.MonatsTabellen.${year}`;
                                let entries = listEntries(parentFolder);
                                
                                //Monatsnamen in die richtige Reihenfolge bringen
                                let Months = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
                                let listMonth = []
                                Months.forEach(function(eintrag) {
                                    if (entries.includes(eintrag)) {
                                        listMonth.push(eintrag)
                                    }
                                })
                                //DropDown-Widget der Monate befüllen
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.list_Month',listMonth.join(';'),true)
                            
                            }
                            
                            //Beim Start des Skripts wird das DropDown-Widget für die Jahre gefüllt.
                            let parentFolder = '0_userdata.0.Heizung.MonatsTabellen';
                            let entries = listEntries(parentFolder);
                            entries.sort
                            setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.list_Year',entries.join(';'),true)
                            
                            //Liefert die Anzahl der Tage eines Monats : Feb.2024 -> 29; Feb.2000 -> 28; usw.
                            function getDaysInMonth(jahr, monat) {
                            
                                //Liefert die Anzahl der Tage eines Monats
                                //Jan. -> 1, Feb. -> 2, ..
                                // Feb. 2024 -> 29; Feb. 1900 -> 28; Feb. 2000 -> 29, usw.
                            
                                let year = Number(jahr)
                                let month = 0
                                switch (monat) {
                                    case 'Januar':
                                        month = 1; break;
                                    case 'Februar':
                                        month = 2; break;
                                    case 'Maerz':
                                        month = 3; break;
                                    case 'April':
                                        month = 4; break;
                                    case 'Mai':
                                        month = 5; break;
                                    case 'Juni':
                                        month = 6; break
                                    case 'Juli':
                                        month = 7; break;
                                    case 'August':
                                        month = 8; break;
                                    case 'September':
                                        month = 9; break;
                                    case 'Oktober':
                                        month = 10; break;
                                    case 'November':
                                        month = 11; break;
                                    case 'Dezember':
                                        month = 12;
                                }
                                
                                if ( 0 < month && month <= 12  && 1700 <= year && Number.isInteger(month) && Number.isInteger(year)) {
                                    return new Date(year, month, 0).getDate();
                                } else {
                                    return 'Jahr oder Monat unültig'
                                }
                            }
                            
                            //Bei Auswahl des Jahres muss das DropDown-Widget für die Monate aktualisiert werden
                            on({id: '0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Year', change: 'any'}, function(obj) {
                                listMonthYear()
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Month','',true)
                            });
                            
                            //Bei Auswahl eines Monats im DropDown-Widget werden COP- und Energie-Diagramm neu aufgebaut
                            on({id: '0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Month', change: 'any'}, function() {
                            
                                COPs()
                                Energies()
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.update_EnergyCOP',3000000,true)
                            });
                            
                            on({ id: '0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.sel_Month', change: 'any' }, () => {
                                setState('0_userdata.0.Heizung.FlexCharts.Auswahl_EnergyCOP.update_EnergyCOP', 3000000, true)
                            });
                            

                            Es folgen nun die mit dem Skript erzeugte JSON der zugehörigen ECharts.

                            Zunächst das Energie-Chart ..

                            {
                              "backgroundColor": "#333333",
                              "toolbox": {
                                "show": true,
                                "feature": {
                                  "saveAsImage": {
                                    "type": "png",
                                    "name": "meinDiagramm",
                                    "backgroundColor": "#ffffff",
                                    "pixelRatio": 2
                                  }
                                }
                              },
                              "dataZoom": [
                                {
                                  "show": true,
                                  "start": 0,
                                  "end": 100,
                                  "bottom": "3%",
                                  "height": "7%"
                                }
                              ],
                              "grid": {
                                "left": "8%",
                                "right": "6%",
                                "top": "20%",
                                "bottom": "15%"
                              },
                              "legend": {
                                "show": true,
                                "top": "8%",
                                "textStyle": {
                                  "fontSize": 10,
                                  "color": "#ffffff"
                                }
                              },
                              "title": {
                                "text": "COP-Werte im Januar 2025",
                                "left": "center",
                                "textStyle": {
                                  "fontSize": 19,
                                  "color": "#ffffff"
                                }
                              },
                              "tooltip": {
                                "trigger": "axis",
                                "axisPointer": {
                                  "type": "shadow"
                                }
                              },
                              "xAxis": [
                                {
                                  "axisLabel": {
                                    "fontSize": 12,
                                    "color": "#ffffff"
                                  },
                                  "name": "Tag",
                                  "nameLocation": "end",
                                  "nameTextStyle": {
                                    "color": "#ffffff",
                                    "fontSize": 10
                                  },
                                  "type": "category",
                                  "data": [
                                    1,
                                    2,
                                    3,
                                    4,
                                    5,
                                    6,
                                    7,
                                    8,
                                    9,
                                    10,
                                    11,
                                    12,
                                    13,
                                    14,
                                    15,
                                    16,
                                    17,
                                    18,
                                    19,
                                    20,
                                    21,
                                    22,
                                    23,
                                    24,
                                    25,
                                    26,
                                    27,
                                    28,
                                    29,
                                    30,
                                    31
                                  ]
                                }
                              ],
                              "yAxis": [
                                {
                                  "name": "COP",
                                  "nameLocation": "end",
                                  "nameTextStyle": {
                                    "color": "#ffffff",
                                    "fontSize": 16
                                  },
                                  "type": "value",
                                  "axisLabel": {
                                    "formatter": "{value}",
                                    "fontSize": 16,
                                    "color": "#ffffff"
                                  }
                                }
                              ],
                              "series": [
                                {
                                  "name": "Warmwasser",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#0000ff",
                                  "data": [
                                    "2.8",
                                    "2.9",
                                    "2.6",
                                    "2.9",
                                    "3.3",
                                    "3.6",
                                    "3.0",
                                    "2.8",
                                    "3.3",
                                    "3.4",
                                    0,
                                    0,
                                    0,
                                    0,
                                    "2.9",
                                    "3.0",
                                    0,
                                    "2.6",
                                    "2.6",
                                    0,
                                    "2.8",
                                    "2.7",
                                    "2.9",
                                    "3.2",
                                    "3.3",
                                    "2.8",
                                    "3.4",
                                    "3.3",
                                    "3.3",
                                    "3.5",
                                    "2.7"
                                  ]
                                },
                                {
                                  "name": "Heizung",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#ff0000",
                                  "data": [
                                    "4.5",
                                    "3.9",
                                    "3.6",
                                    "3.6",
                                    "5.2",
                                    "5.4",
                                    "4.1",
                                    "3.8",
                                    "0.0",
                                    "3.5",
                                    "0.0",
                                    "3.8",
                                    "0.0",
                                    "2.2",
                                    "3.9",
                                    "3.7",
                                    "0.0",
                                    "3.6",
                                    "3.6",
                                    "0.0",
                                    "3.9",
                                    "4.1",
                                    "4.1",
                                    "4.7",
                                    "5.5",
                                    "4.5",
                                    "5.3",
                                    "4.8",
                                    "4.8",
                                    "4.6",
                                    "3.9"
                                  ]
                                },
                                {
                                  "name": "Gesamt",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#ff00ff",
                                  "data": [
                                    "4.3",
                                    "3.8",
                                    "3.6",
                                    "3.5",
                                    "4.9",
                                    "5.3",
                                    "4.0",
                                    "3.7",
                                    "1.4",
                                    "3.5",
                                    "0.0",
                                    "3.8",
                                    "0.0",
                                    "2.2",
                                    "3.8",
                                    "3.7",
                                    "0.0",
                                    "3.2",
                                    "3.2",
                                    "0.0",
                                    "3.7",
                                    "3.9",
                                    "4.1",
                                    "4.6",
                                    "5.3",
                                    "4.4",
                                    "5.2",
                                    "4.6",
                                    "4.7",
                                    "4.5",
                                    "3.9"
                                  ]
                                }
                              ]
                            }
                            

                            .. und hier das EChart zu den COP-Werten ..

                            {
                              "backgroundColor": "#333333",
                              "darkMode": true,
                              "dataZoom": [
                                {
                                  "show": true,
                                  "start": 0,
                                  "end": 100,
                                  "height": "7%",
                                  "bottom": "3%"
                                }
                              ],
                              "grid": {
                                "left": "8%",
                                "right": "6%",
                                "top": "20%",
                                "bottom": "15%"
                              },
                              "legend": {
                                "top": "6%"
                              },
                              "title": {
                                "text": "Energiewerte Wasser&Heizen im Januar 2025",
                                "left": "center",
                                "textStyle": {
                                  "fontSize": 20,
                                  "color": "#ffffff"
                                }
                              },
                              "tooltip": {
                                "trigger": "axis",
                                "axisPointer": {
                                  "type": "shadow"
                                }
                              },
                              "xAxis": [
                                {
                                  "axisLabel": {
                                    "fontSize": 12,
                                    "color": "#ffffff"
                                  },
                                  "name": "Tag",
                                  "nameLocation": "end",
                                  "nameTextStyle": {
                                    "color": "#ffffff",
                                    "fontSize": 10
                                  },
                                  "type": "category",
                                  "data": [
                                    1,
                                    2,
                                    3,
                                    4,
                                    5,
                                    6,
                                    7,
                                    8,
                                    9,
                                    10,
                                    11,
                                    12,
                                    13,
                                    14,
                                    15,
                                    16,
                                    17,
                                    18,
                                    19,
                                    20,
                                    21,
                                    22,
                                    23,
                                    24,
                                    25,
                                    26,
                                    27,
                                    28,
                                    29,
                                    30,
                                    31
                                  ]
                                }
                              ],
                              "yAxis": [
                                {
                                  "name": "Energie",
                                  "nameLocation": "end",
                                  "nameTextStyle": {
                                    "color": "#ffffff",
                                    "fontSize": 15
                                  },
                                  "type": "value",
                                  "axisLabel": {
                                    "formatter": "{value} KWh",
                                    "fontSize": 12,
                                    "color": "#ffffff"
                                  }
                                }
                              ],
                              "series": [
                                {
                                  "name": "Gas",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#afcfcf",
                                  "stack": "gas",
                                  "data": [
                                    8.448,
                                    1.919,
                                    14.862,
                                    29.182,
                                    35.7,
                                    0.96,
                                    1.815,
                                    25.333,
                                    91.08,
                                    82.8,
                                    90.3,
                                    59.4,
                                    114.1,
                                    103.1,
                                    13.5,
                                    29,
                                    89.7,
                                    86.6,
                                    108.2,
                                    105.6,
                                    84.2,
                                    51.3,
                                    1.4,
                                    0.9,
                                    0.3,
                                    0.5,
                                    0.2,
                                    0.7,
                                    0.3,
                                    0.7,
                                    16.9
                                  ]
                                },
                                {
                                  "name": "Wasser (prim.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#0000ff",
                                  "stack": "primär",
                                  "data": [
                                    1.4,
                                    1.9,
                                    1.6,
                                    1.9,
                                    1.5,
                                    1.2,
                                    2,
                                    1.7,
                                    0.3,
                                    1,
                                    0,
                                    0,
                                    0,
                                    0,
                                    1.8,
                                    2.1,
                                    0,
                                    1.8,
                                    1.8,
                                    0,
                                    1.6,
                                    1.9,
                                    1.8,
                                    1.4,
                                    1.3,
                                    1.8,
                                    1.4,
                                    1.6,
                                    1.8,
                                    1.6,
                                    1.5
                                  ]
                                },
                                {
                                  "name": "Wasser (gen.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#7f7fff",
                                  "stack": "erzeugt",
                                  "data": [
                                    3.9,
                                    5.5,
                                    4.2,
                                    5.5,
                                    5,
                                    4.3,
                                    5.9,
                                    4.7,
                                    1,
                                    3.4,
                                    0,
                                    0,
                                    0,
                                    0,
                                    5.3,
                                    6.4,
                                    0,
                                    4.7,
                                    4.7,
                                    0,
                                    4.5,
                                    5.2,
                                    5.3,
                                    4.5,
                                    4.3,
                                    5.1,
                                    4.7,
                                    5.3,
                                    6,
                                    5.6,
                                    4.1
                                  ]
                                },
                                {
                                  "name": "Heizung (prim.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#ff0000",
                                  "stack": "primär",
                                  "data": [
                                    14.9,
                                    22.3,
                                    21.1,
                                    21.1,
                                    8.3,
                                    13.8,
                                    22.8,
                                    12.3,
                                    0.4,
                                    4.1,
                                    0.3,
                                    5.3,
                                    0.3,
                                    0.6,
                                    24.2,
                                    21,
                                    0.3,
                                    3.2,
                                    3.2,
                                    0.3,
                                    5.5,
                                    12.4,
                                    23.9,
                                    17.3,
                                    13.8,
                                    20,
                                    14.1,
                                    16.5,
                                    15.8,
                                    17.8,
                                    19.3
                                  ]
                                },
                                {
                                  "name": "Heizung (gen.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#ff7f7f",
                                  "stack": "erzeugt",
                                  "data": [
                                    66.6,
                                    87.4,
                                    76.7,
                                    75.8,
                                    43.5,
                                    74.5,
                                    93.2,
                                    47,
                                    0,
                                    14.3,
                                    0,
                                    20.4,
                                    0,
                                    1.3,
                                    93.8,
                                    78.6,
                                    0,
                                    11.4,
                                    11.4,
                                    0,
                                    21.6,
                                    51,
                                    98.9,
                                    80.9,
                                    75.4,
                                    89.9,
                                    75.4,
                                    78.4,
                                    76.2,
                                    81.9,
                                    76.2
                                  ]
                                },
                                {
                                  "name": "Gesamt (prim.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#007f00",
                                  "stack": "gesamt0",
                                  "data": [
                                    24.7,
                                    26.1,
                                    37.6,
                                    52.2,
                                    45.5,
                                    16,
                                    26.6,
                                    39.3,
                                    91.8,
                                    87.9,
                                    90.6,
                                    64.7,
                                    114.4,
                                    103.7,
                                    39.5,
                                    52.1,
                                    90,
                                    91.6,
                                    113.2,
                                    105.9,
                                    91.3,
                                    65.6,
                                    27.1,
                                    19.6,
                                    15.4,
                                    22.3,
                                    15.7,
                                    18.8,
                                    17.9,
                                    20.1,
                                    37.7
                                  ]
                                },
                                {
                                  "name": "Gesamt (gen.)",
                                  "type": "bar",
                                  "barGap": "30%",
                                  "color": "#5faf5f",
                                  "stack": "gesamt1",
                                  "data": [
                                    78.6,
                                    94.7,
                                    95.2,
                                    109.3,
                                    82.8,
                                    79.7,
                                    100.8,
                                    76,
                                    88.4,
                                    97.2,
                                    86.7,
                                    77.4,
                                    109.5,
                                    100.3,
                                    112.1,
                                    112.8,
                                    86.1,
                                    99.2,
                                    120,
                                    101.4,
                                    106.9,
                                    105.4,
                                    105.5,
                                    86.3,
                                    80,
                                    95.5,
                                    80.3,
                                    84.4,
                                    82.5,
                                    88.2,
                                    96.5
                                  ]
                                }
                              ]
                            }
                            
                            1 Reply Last reply Reply Quote 1
                            • icebear
                              icebear @legro last edited by

                              @legro said in Visualisierung einer Viessmann Hybridheizung:

                              Das nachfolgende Skript, welches zum Füllen der Energiewerte in die entsprechenden Datenpunkte dient, musst du natürlich an deine Gegebenheiten anpassen.

                              Hi, also ich hab das Script mal auf meine DP von der WP angepasst, den Part für GAS hab ich entfernt.
                              Damit ich nich bis morgen warten muß hab ich mal bei schedule die hour und min auf eine Uhrzeit gestzt, aber es passiert nix. Ich bekomm aber auch keine Fehlermeldung oder sonstwas.

                              Also im Prinzip brauch ich ja nur mal ein Denkanstoß (bzw. Beispiel) wie ich das folgende Scenario darstellen kann.

                              Ich habe folgende DP's die täglich um 23:59:59 aktualisiert werden und dann in eine influxDB geschrieben werden. (Diese würde ich dann gerne so wie oben gezeigt in flexchart dastellen wollen).

                              Energie2.png

                              Dafür hab ich auch mit deinem Script (was ich angepasst habe) die folgende Struktur erzeugt.

                              Energie1.png

                              Wie müßte jetzt ein Script ausehen das mir die Werte in die Monatstabellen einträgt, so das ich dann ein Flexchart daraus erstellen kann, welches mir dann auf Wunsch so wie du oben gezeigt hast mir die Daten nach Tag, Monat, Jahr anzeigt?

                              Muß dann auch erst so wie bei dem Temperaturscript eine Struktur vorher in den DP kopiert werden?

                              Das Temperatur Script läuft übrigens so wie erwünscht.

                              Sorry das ich soviel frag, aber meine Programierkentnisse halten sich da in Grenzen.

                              L 1 Reply Last reply Reply Quote 0
                              • L
                                legro @icebear last edited by legro

                                @icebear

                                Leider verstehe ich wohl noch nicht so richtig, wie das Ganze sich bei dir gestaltet.

                                So schreibst du, dass du alles in InfluxDB schreibst, aber die von mir vorgeschlagene Lösung verwendet dieses Programm gar nicht. Die Daten sollten, durch Trigger gesteuert, direkt aus der Quelle in die Tabellen geschrieben werden.

                                Ein Beispiel, wie das abläuft, findest du in meinem ersten Beitrag im Script, das die Temperaturwerte abspeichert. Zugegeben, der eigentliche Speichervorgang geht in dem umfangreichen Programmcode fast schon unter. Lediglich die Zeilen 88 - 90 sind hierfür verantwortlich, wobei die Aufbereitung und das eigentliche Abspeichern (s. Zeile 38) in der Funktion calcMeanTemp() erfolgen.

                                Ich bin ohnehin dabei, das Script hier zu dokumentieren, das alle übrigen Daten in diese Tabellen schreibt. Dort findest du recht übersichtlich alles detailliert beschrieben.

                                Noch eine Bitte. Verwende keine Bilder, sondern </> zum Einfügen von Programmcode.

                                icebear L 2 Replies Last reply Reply Quote 0
                                • icebear
                                  icebear @legro last edited by

                                  @legro said in Visualisierung einer Viessmann Hybridheizung:

                                  Leider verstehe ich wohl noch nicht so richtig, wie das Ganze sich bei dir gestaltet.
                                  So schreibst du, dass du alles in InfluxDB schreibst,

                                  Hallo, das mit der InfluxDB war nur eine Randinformation, das ich diese Daten zusätzlich dort speicher.

                                  Ansonsten hab ich glaub ich alles so gemacht wie du das geschrieben hast bzw. wie die Scripte angelegt sind.
                                  Lediglich das Script zum anlegen der DP's für meine Stromwerte (siehe oben ScreenShot) ab ich auf einen anderen Pfad angepasst.
                                  Die DP's sind alle da.

                                  Dann hab ich das Trigger Script wie folgt angepasst:

                                  /*
                                      Dieses Skript aktualisiert die Energiewerte der Gastherme und Wärmepumpe mittels Trigger
                                      in den Objektbaum in die Monatstabellen.
                                  */
                                   
                                  let eventEinspeisung = null
                                  let eventHausverbrauch = null
                                  let eventPVErzeugung = null
                                  let eventSpeicherIn = null
                                  let eventSpeicherOut = null
                                  let eventStrombezug = null
                                  let eventWP = null
                                  let eventWallbox = null
                                   
                                  //let Umrechnungsfaktor = getState('0_userdata.0.Heizung.Umrechnungsfaktor').val
                                  //let Zustandszahl = getState('0_userdata.0.Heizung.Zustandszahl').val
                                  let partsDatum = {jahr: '', monat: '', tag: ''}
                                   
                                  setPartsDate()
                                  setTrigger()
                                   
                                  //die Datumsangaben auf den neuen Tag ausrichten
                                  schedule({hour: 0, minute: 0}, function () {
                                      delTrigger() // alte Trigger löschen
                                      setPartsDate()
                                      setTimeout(setTrigger, 2000) // um 2s verzögert alle Trigger neu einrichten
                                  })
                                   
                                   
                                  // ========== Funktionsdefinitionen ==========
                                   
                                  function setPartsDate() {
                                      let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
                                      let d = new Date()
                                      partsDatum = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()}
                                  }
                                   
                                   
                                  function setTrigger() {
                                   
                                  // Da die Trigger auf Änderungen in einem bestimmten Tagesverzeichnis eingestellt
                                  // sind, müssen sie gelöscht und täglich neu eingerichtet bzw. registriert werden.
                                   
                                      let d = '0' + partsDatum.tag
                                      d = d.slice(-2)
                                    
                                      //genEinsp
                                      eventEinspeisung = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.Einspeisung.${d}`, change: 'gt'}, () => {
                                          let tmpEinspeisung = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Einspeisung`).val)
                                          tmpEinspeisung[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.Einspeisung.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Einspeisung`,JSON.stringify(tmpEinspeisung),true)
                                      })
                                   
                                      //genHaus
                                      eventHausverbrauch = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.Hausverbrauch.${d}`, change: 'gt'}, () => {
                                          let tmpHausverbrauch = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Hausverbrauch`).val)
                                          tmpHausverbrauch[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.Hausverbrauch.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Hausverbrauch`,JSON.stringify(tmpHausverbrauch),true)
                                      })
                                  	
                                      //genErz
                                      eventPVErzeugung = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.PVErzeugung.${d}`, change: 'gt'}, () => {
                                          let tmpPVErzeugung = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.PVErzeugung`).val)
                                          tmpPVErzeugung[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.PVErzeugung.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.PVErzeugung`,JSON.stringify(tmpPVErzeugung),true)
                                      })
                                  
                                      //genBatIn
                                      eventSpeicherIn = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.SpeicherIn.${d}`, change: 'gt'}, () => {
                                          let tmpSpeicherIn = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.SpeicherIn`).val)
                                          tmpSpeicherIn[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.SpeicherIn.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.SpeicherIn`,JSON.stringify(tmpSpeicherIn),true)
                                      })
                                  
                                      //genBatOut
                                      eventSpeicherOut = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.SpeicherOut.${d}`, change: 'gt'}, () => {
                                          let tmpSpeicherOut = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.SpeicherOut`).val)
                                          tmpSpeicherOut[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.SpeicherOut.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.SpeicherOut`,JSON.stringify(tmpSpeicherOut),true)
                                      })
                                  
                                      //genBezug
                                      eventStrombezug = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.Strombezug.${d}`, change: 'gt'}, () => {
                                          let tmpStrombezug = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Strombezug`).val)
                                          tmpStrombezug[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.Strombezug.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Strombezug`,JSON.stringify(tmpStrombezug),true)
                                      })
                                  
                                      //genWP
                                      eventWP = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.WP.${d}`, change: 'gt'}, () => {
                                          let tmpWP = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.WP`).val)
                                          tmpWP[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.WP.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.WP`,JSON.stringify(tmpWP),true)
                                      })
                                  
                                      //genWB
                                      eventWallbox = on({id: `0_userdata.0.Energie.Statistik.Database.Tag.Wallbox.${d}`, change: 'gt'}, () => {
                                          let tmpWallbox = JSON.parse(getState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Wallbox`).val)
                                          tmpWallbox[Number(partsDatum.tag)-1] = getState(`0_userdata.0.Energie.Statistik.Database.Tag.Wallbox.${d}`).val
                                          setState(`0_userdata.0.Energie.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Wallbox`,JSON.stringify(tmpWallbox),true)
                                      })		
                                  } 
                                  function delTrigger() {
                                      //Bei Tageswechsel müssen die Trigger gelöscht und auf den neuen Tag umgestellt werden.
                                      unsubscribe(eventEinspeisung)
                                      unsubscribe(eventHausverbrauch)
                                      unsubscribe(eventPVErzeugung)
                                      unsubscribe(eventSpeicherIn)
                                      unsubscribe(eventSpeicherOut)
                                      unsubscribe(eventStrombezug)
                                      unsubscribe(eventWP)
                                      unsubscribe(eventWallbox)
                                  }
                                  

                                  aber es passiert nix, das Script schreibt nix in die DP's, die heute morgen immernoch so aussehen

                                  flex5.png

                                  Ich hatte ja wie @MartyBr oben gepostet hat das gleiche Problem mit dem TempScript und nachdem ich dann das was er gepostet hat in den DP-Wert kopiert hatte, da lief dann auch alles mit den Temperaturen.

                                  Jetzt dachte ich ich muß bei den anderen DP's auch erst eine Struktur (wie oben in den DP-Wert kopieren, das er die Werte da reinschreibt.

                                  Das gleiche ist aber auch bei deinem Script für die Heizungswerte, da hab ich den Part für GAS rausgenommen, auch da speichert das Script nix in den Monatstabellen

                                  /*
                                      Dieses Skript aktualisiert die Energiewerte der Gastherme und Wärmepumpe mittels Trigger
                                      in den Objektbaum in die Monatstabellen.
                                  */
                                   
                                  
                                  let eventPH = null
                                  let eventPW = null
                                  let eventGH = null
                                  let eventGW = null
                                   
                                  //let Umrechnungsfaktor = getState('0_userdata.0.Heizung.Umrechnungsfaktor').val
                                  //let Zustandszahl = getState('0_userdata.0.Heizung.Zustandszahl').val
                                  let partsDatum = {jahr: '', monat: '', tag: ''}
                                   
                                  setPartsDate()
                                  setTrigger()
                                   
                                  //die Datumsangaben auf den neuen Tag ausrichten
                                  schedule({hour: 0, minute: 0}, function () {
                                      delTrigger() // alte Trigger löschen
                                      setPartsDate()
                                      setTimeout(setTrigger, 2000) // um 2s verzögert alle Trigger neu einrichten
                                  })
                                   
                                   
                                  // ========== Funktionsdefinitionen ==========
                                   
                                  function setPartsDate() {
                                      let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
                                      let d = new Date()
                                      partsDatum = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()}
                                  }
                                   
                                   
                                  function setTrigger() {
                                   
                                  // Da die Trigger auf Änderungen in einem bestimmten Tagesverzeichnis eingestellt
                                  // sind, müssen sie gelöscht und täglich neu eingerichtet bzw. registriert werden.
                                   
                                      let d = '0' + partsDatum.tag
                                      d = d.slice(-2)
                                   
                                   
                                      //genHeizen
                                      eventGH = on({id: `vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.EARNED_ENVIRONMENT_ENERGY.HEATING.month.data01.value.${d}`, change: 'gt'}, () => {
                                          let tmpGH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`).val)
                                          tmpGH[Number(partsDatum.tag)-1] = getState(`vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.EARNED_ENVIRONMENT_ENERGY.HEATING.month.data01.value.${d}`).val
                                          setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`,JSON.stringify(tmpGH),true)
                                      })
                                   
                                      //genWasser
                                      eventGW = on({id: `vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.EARNED_ENVIRONMENT_ENERGY.DOMESTIC_HOT_WATER.month.data01.value.${d}`, change: 'gt'}, () => {
                                          let tmpGW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`).val)
                                          tmpGW[Number(partsDatum.tag)-1] = getState(`vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.EARNED_ENVIRONMENT_ENERGY.DOMESTIC_HOT_WATER.month.data01.value.${d}`).val
                                          setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`,JSON.stringify(tmpGW),true)
                                      })
                                   
                                      //primHeizen
                                      eventPH = on({id: `vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.CONSUMED_ELECTRICAL_ENERGY.HEATING.month.data01.value.${d}`, change: 'gt'}, () => {
                                          let tmpPH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`).val)
                                          tmpPH[Number(partsDatum.tag)-1] = getState(`vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.CONSUMED_ELECTRICAL_ENERGY.HEATING.month.data01.value.${d}`).val
                                          setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`,JSON.stringify(tmpPH),true)
                                      })
                                   
                                      //primWasser
                                      eventPW = on({id: `vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.CONSUMED_ELECTRICAL_ENERGY.DOMESTIC_HOT_WATER.month.data01.value.${d}`, change: 'gt'}, () => {
                                          let tmpPW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`).val)
                                          tmpPW[Number(partsDatum.tag)-1] = getState(`vaillant.0.6b937161-abe1-4904-8c91-7ac2b3be2c93.stats.primary_heat_generator.CONSUMED_ELECTRICAL_ENERGY.DOMESTIC_HOT_WATER.month.data01.value.${d}`).val
                                          setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`,JSON.stringify(tmpPW),true)
                                      })
                                   
                                  }
                                   
                                  function delTrigger() {
                                      //Bei Tageswechsel müssen die Trigger gelöscht und auf den neuen Tag umgestellt werden.
                                      unsubscribe(eventGH)
                                      unsubscribe(eventGW)
                                      unsubscribe(eventPH)
                                      unsubscribe(eventPW)
                                  }
                                  

                                  Ich hätte natürlich noch mehr Fragen, aber eins nach dem anderen, erstmal müßte das grundsätzlich laufen.

                                  1 Reply Last reply Reply Quote 0
                                  • L
                                    legro @legro last edited by legro

                                    Tageswerte in die Monatstabellen eintragen

                                    38f54c67-9c81-4cc0-85b2-3eb56ef2bc18-image.png

                                    In der hier vorgestellten Hybridanlage sind es sieben Werte, die tagesaktuell in diese Tabellen eingetragen werden müssen:

                                    • primäre Energien
                                      • elektrische Energien für Warmwassererzeugung und Heizen (primWasser, primHeizen)
                                      • von der Wärmepumpe erzeugte Wärme für Wasser und Heizen (genWasser, genHeizen)
                                      • Das benötigte Gas wird sowohl als Volumen (m³) als auch Energie (KWh) angegeben. Der Hintergrund ist, dass die Umrechnung von Volumen- (m³) in Energieeinheiten (KWh) übers Jahr gesehen Schwankungen unterworfen: Volumen x Zustandszahl x Umrechnungsfaktor = Energie )
                                    • In meanTmp werden die drei Temperaturwerte min, mean und max (für niedrigste, mittlere und höchste Tagestemperatur in °C) eingetragen. (s. ersten Beitrag!)

                                    Wie zuvor bei den Aktualisierungen der ECharts beschrieben werden die Tabellen mittels JSON.parse im RAM allokiert, aktualisiert und mittels JSON.stringify wieder zurück in die Datenpunkte geschrieben.

                                    Um diese Werte aktuell zu halten, genügt es nicht, für jeden Wert einen Trigger zu programmieren. Es gilt zu berücksichtigen, dass sich diese bei einem Tageswechsel ändern müssen. Hierzu dient die Funktion setTrigger, die um 00:00 Uhr eines jeden Tages die alten Trigger vom Vortag löscht und neue einrichtet.

                                    /*
                                        Dieses Skript aktualisiert die Energiewerte der Gastherme und Wärmepumpe mittels Trigger
                                        in den Objektbaum in die Monatstabellen.
                                    */
                                    
                                    let eventGas = null
                                    let eventPH = null
                                    let eventPW = null
                                    let eventGH = null
                                    let eventGW = null
                                    
                                    let Umrechnungsfaktor = getState('0_userdata.0.Heizung.Umrechnungsfaktor').val
                                    let Zustandszahl = getState('0_userdata.0.Heizung.Zustandszahl').val
                                    let partsDatum = {jahr: '', monat: '', tag: ''}
                                    
                                    setPartsDate()
                                    setTrigger()
                                    
                                    //die Datumsangaben auf den neuen Tag ausrichten
                                    schedule({hour: 0, minute: 0}, function () {
                                        delTrigger() // alte Trigger löschen
                                        setPartsDate()
                                        setTimeout(setTrigger, 2000) // um 2s verzögert alle Trigger neu einrichten
                                    })
                                    
                                    
                                    // ========== Funktionsdefinitionen ==========
                                    
                                    function setPartsDate() {
                                        let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
                                        let d = new Date()
                                        partsDatum = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()}
                                    }
                                    
                                    
                                    function setTrigger() {
                                    
                                    // Da die Trigger auf Änderungen in einem bestimmten Tagesverzeichnis eingestellt
                                    // sind, müssen sie gelöscht und täglich neu eingerichtet bzw. registriert werden.
                                    
                                        let d = '0' + partsDatum.tag
                                        d = d.slice(-2)
                                    
                                        //Gas
                                        eventGas = on({id: '0_userdata.0.Heizung.tmp_tag', change: 'gt'}, function() {
                                            let tmpGas = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas`).val)
                                            let tmpGasKWh = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas_KWh`).val)
                                    
                                            tmpGas[Number(partsDatum.tag)-1] = Number((getState(`0_userdata.0.Heizung.tmp_tag`).val).toFixed(3))
                                            tmpGasKWh[Number(Number(partsDatum.tag)-1)] = Number((getState(`0_userdata.0.Heizung.tmp_tag`).val * Umrechnungsfaktor * Zustandszahl).toFixed(1))
                                    
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas`,JSON.stringify(tmpGas),true)
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.Gas_KWh`,JSON.stringify(tmpGasKWh),true)
                                        })
                                    
                                        //genHeizen
                                        eventGH = on({id: `e3oncan.0.Vitocal.tree.1315_GeneratedCentralHeatingOutputMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                                            let tmpGH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`).val)
                                            tmpGH[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1315_GeneratedCentralHeatingOutputMonthMatrix.CurrentMonth.${d}`).val
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genHeizen`,JSON.stringify(tmpGH),true)
                                        })
                                    
                                        //genWasser
                                        eventGW = on({id: `e3oncan.0.Vitocal.tree.1392_GeneratedDomesticHotWaterOutputMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                                            let tmpGW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`).val)
                                            tmpGW[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1392_GeneratedDomesticHotWaterOutputMonthMatrix.CurrentMonth.${d}`).val
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.genWasser`,JSON.stringify(tmpGW),true)
                                        })
                                    
                                        //primHeizen
                                        eventPH = on({id: `e3oncan.0.Vitocal.tree.1294_EnergyConsumptionCentralHeatingMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                                            let tmpPH = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`).val)
                                            tmpPH[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1294_EnergyConsumptionCentralHeatingMonthMatrix.CurrentMonth.${d}`).val
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primHeizen`,JSON.stringify(tmpPH),true)
                                        })
                                    
                                        //primWasser
                                        eventPW = on({id: `e3oncan.0.Vitocal.tree.1311_EnergyConsumptionDomesticHotWaterMonthMatrix.CurrentMonth.${d}`, change: 'gt'}, () => {
                                            let tmpPW = JSON.parse(getState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`).val)
                                            tmpPW[Number(partsDatum.tag)-1] = getState(`e3oncan.0.Vitocal.tree.1311_EnergyConsumptionDomesticHotWaterMonthMatrix.CurrentMonth.${d}`).val
                                            setState(`0_userdata.0.Heizung.MonatsTabellen.${partsDatum.jahr}.${partsDatum.monat}.primWasser`,JSON.stringify(tmpPW),true)
                                        })
                                    
                                    }
                                    
                                    function delTrigger() {
                                        //Bei Tageswechsel müssen die Trigger gelöscht und auf den neuen Tag umgestellt werden.
                                        unsubscribe(eventGas)
                                        unsubscribe(eventGH)
                                        unsubscribe(eventGW)
                                        unsubscribe(eventPH)
                                        unsubscribe(eventPW)
                                    }
                                    
                                    icebear 1 Reply Last reply Reply Quote 0
                                    • icebear
                                      icebear @legro last edited by icebear

                                      @legro

                                      genauso sieht es bei mir ja auch aus , von der Struktur her, aber ausser bei meanTmp trägt das Script da nix ein.

                                      Und bei meanTmp hat er auch erst etwas eingetragen als ich die von @MartyBr gepostete Struktur reinkopiert hab.

                                      Hier mal der Wert vom DP meanTmp

                                      [
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": -1.13,
                                          "mean": 0,
                                          "max": 2
                                        },
                                        {
                                          "min": -0.77,
                                          "mean": 3.14,
                                          "max": 5.04
                                        },
                                        {
                                          "min": 2.23,
                                          "mean": 2.72,
                                          "max": 3.12
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        },
                                        {
                                          "min": 0,
                                          "mean": 0,
                                          "max": 0
                                        }
                                      ]
                                      

                                      Da sieht man ja das das wunderbar läuft.

                                      Wie muß den der Wert z.B. für den DP primHeizen aussehen?

                                      L 2 Replies Last reply Reply Quote 0
                                      • L
                                        legro @icebear last edited by legro

                                        @icebear

                                        Zu meanTemp und meanTmp habe ich oben ja schon geschrieben, das die erste Tabelle in der aktuellen Version nicht mehr benötigt wird. Übrigens musst du - am besten zu Beginn eines Jahres derzeit noch - alle Tabellen für die laufenden Monate vorab anlegen und mit [] initialisieren.

                                        Wenn du dies alles gemacht hast und dennoch nichts in die Tabellen geschrieben wird, solltest du als nächstes kontrollieren, ob die Trigger überhaupt ausgelöst werden. Da leider kein Debugger zur Verfügung steht, ist das Ganze wohl nur durch Ausgaben in die sog. Console mit console.log möglich.

                                        In dem Skript (s. erster Beitrag), das die Temperaturwerte in meanTmp schreibt, sind die Zeilen 32 und 33 (s. ersten Beitrag) dafür verantwortlich, dass die Werte für min, max geschrieben werden.

                                        1 Reply Last reply Reply Quote 0
                                        • L
                                          legro @icebear last edited by legro

                                          @icebear sagte in Visualisierung einer Viessmann Hybridheizung:

                                          Wie muß den der Wert z.B. für den DP primHeizen aussehen?

                                          Wie schon mehrmals gesagt: Du legst ein leeres Array an und initialisiert es mit [], dann füllt das oben angegebenen Skript dieses mit den gewünschten Werten. Du musst keine leeren (etwa vorweg mit 0 initialisierte) Werte für die einzelnen Tage reinschreiben. JavaScript erledigt das alles für dich.

                                          Ein Beispiel ..

                                          let arr = []
                                          arr[3] = 4
                                          
                                          log(arr) //liefert: [null, null, null, 4]
                                          
                                          arr[1] = 6
                                          log(arr) //liefert: [null, 6, null, 4]
                                          

                                          Das Befüllen des Arrays meanTmp, .. scheint ja mittlerweile prächtig zu funktionierten.🙂

                                          icebear 1 Reply Last reply Reply Quote 0
                                          • icebear
                                            icebear @legro last edited by icebear

                                            @legro

                                            Hm, ich glaub ich bin raus.
                                            Ich habe mittlerweile alle DP's zweimal neu angelegt, die Scripte neu angelegt und alles überprüft und den Thread hier mindestens 20x durchgelesen, ich komm nich dahinter warum er nix in die DP's Bzw. Array's schreibt.

                                            Es verändert sich einfach garnix wenn das Script läuft, keine Fehlermeldung kein garnix. Wenn ich wenigstens eine Fehlermeldung bekommen würde, dann könnte man ja schauen wo es hängt.

                                            Macht das Script denn auch irgendwas, wenn ich bei

                                            schedule({hour: 0, minute: 0}, function () {
                                                delTrigger() // alte Trigger löschen
                                                setPartsDate()
                                                setTimeout(setTrigger, 2000) // um 2s verzögert alle Trigger neu einrichten
                                            })
                                            

                                            anstatt hour: 0, minute: 0 z.B. hour: 14, minute: 5 eintrage oder bringt das garnix und ich muß immer warten bis es 00:00 Uhr ist und ich seh dann erst am nächsten Tag ob was passiert ist.

                                            Wenn ich am Ende des ersten Triggers ein

                                            console.log(eventEinspeisung) im Script hinzufüge, dann kommt das im Log:

                                            script.js.Energie_Strom.WP.Flexcharts.COP: { pattern: { id: '0_userdata.0.Energie.Statistik.Database.Tag.Einspeisung.${d}', change: 'gt', q: 0 }, callback: [Function: callback], name: 'script.js.Energie_Strom.WP.Flexcharts.COP', patternCompareFunctions: [ [Function (anonymous)], [Function (anonymous)], [Function (anonymous)], logic: 'and' ]}
                                            

                                            Fehlt mir vielleicht irgendein javascript modul?

                                            L 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            951
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            54
                                            2175
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo