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

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

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. TibberLink Adapter

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

TibberLink Adapter

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
621 Beiträge 85 Kommentatoren 194.2k Aufrufe 78 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B BMP

    @jrbwh Danke dir.
    Den DataZoom teste ich sofort ;-)
    Mit DataZoom schaffe ich es nicht, bei mir haben die Parameter keine änderungem im Flow erwirkt.

    icebearI Online
    icebearI Online
    icebear
    schrieb am zuletzt editiert von icebear
    #555

    @bmp said in TibberLink Adapter:

    Mit DataZoom schaffe ich es nicht, bei mir haben die Parameter keine änderungem im Flow erwirkt.

    Ich habs grad mal eingfügt, funktioniert doch.

    datazoom.png

    Hier der Code mit 'data-zoom'

    option = {
    	backgroundColor: "rgb(0, 0, 0)",
    	title: {
    		text: "Tibber Preis",
    		textStyle: {
    			color: "#ffffff"
    		}
    	},
      "dataZoom": [
        {
          "show": true,
          "start": 0,
          "end": 100,
          "bottom": "3%",
          "height": "7%"
        }
      ],
    	tooltip: {
    		trigger: "axis",
    		axisPointer: {
    			type: "cross"
    		}
    	},
    	grid: { // Randabstände
    		left: "10%", right: "4%", top: "8%", bottom: "8%"
    	},
    	xAxis: {
    		type: "category",
    		axisLabel: {formatter: "{value} Uhr"},
    		boundaryGap: false,
    		dataZoom: {id: 'dataZoomX',
                type: 'slider',
                xAxisIndex: [0],
                filterMode: 'filter',   // Set as 'filter' so that the modification
                                        // of window of xAxis will effect the
                                        // window of yAxis.
                start: 20,
                end: 40},
    		data: %%xAxisData%%,
    	},
    	yAxis: {
    		type: "value",
    		axisLabel: {formatter: "{value} ct/kWh"},
    		axisPointer: {
    			snap: true
    		}
    	},
    	visualMap: {
    		min: 0.2,
    		max: 0.3,
    		inRange: {
    			color: ["green", "yellow", "red"] // Verlauf von grün über gelb nach rot
    		},
    		show: true
    	},
    	series: [
    		{
    			name: "Total",
    			type: "bar",
    			step: "end",
    			symbol: "none",
    			label: {
                show: true, // Zeigt die Labels an
                position: 'top', // Positioniert die Labels über den Balken
                formatter: function(params) {
                    // Kürze das Label auf 2 Stellen
                    return params.value.toString().substring(0, 4);
                }
            },
    			data: %%yAxisData%%,
    			
    			      markPoint: {
            data: [
              { type: 'max', name: 'Max', itemStyle: { color: 'red' }  },
              { type: 'min', name: 'Min', itemStyle: { color: 'green' }  }
            ]
          },
     
    			markArea: {
    				itemStyle: {
    					color: "rgba(120, 200, 120, 0.2)"
    				},
    				data: [
    					%%CalcChannelsData%%
    				]
    			}
    		}
    	]
    };
    
    
    B 1 Antwort Letzte Antwort
    0
    • icebearI icebear

      @bmp said in TibberLink Adapter:

      Mit DataZoom schaffe ich es nicht, bei mir haben die Parameter keine änderungem im Flow erwirkt.

      Ich habs grad mal eingfügt, funktioniert doch.

      datazoom.png

      Hier der Code mit 'data-zoom'

      option = {
      	backgroundColor: "rgb(0, 0, 0)",
      	title: {
      		text: "Tibber Preis",
      		textStyle: {
      			color: "#ffffff"
      		}
      	},
        "dataZoom": [
          {
            "show": true,
            "start": 0,
            "end": 100,
            "bottom": "3%",
            "height": "7%"
          }
        ],
      	tooltip: {
      		trigger: "axis",
      		axisPointer: {
      			type: "cross"
      		}
      	},
      	grid: { // Randabstände
      		left: "10%", right: "4%", top: "8%", bottom: "8%"
      	},
      	xAxis: {
      		type: "category",
      		axisLabel: {formatter: "{value} Uhr"},
      		boundaryGap: false,
      		dataZoom: {id: 'dataZoomX',
                  type: 'slider',
                  xAxisIndex: [0],
                  filterMode: 'filter',   // Set as 'filter' so that the modification
                                          // of window of xAxis will effect the
                                          // window of yAxis.
                  start: 20,
                  end: 40},
      		data: %%xAxisData%%,
      	},
      	yAxis: {
      		type: "value",
      		axisLabel: {formatter: "{value} ct/kWh"},
      		axisPointer: {
      			snap: true
      		}
      	},
      	visualMap: {
      		min: 0.2,
      		max: 0.3,
      		inRange: {
      			color: ["green", "yellow", "red"] // Verlauf von grün über gelb nach rot
      		},
      		show: true
      	},
      	series: [
      		{
      			name: "Total",
      			type: "bar",
      			step: "end",
      			symbol: "none",
      			label: {
                  show: true, // Zeigt die Labels an
                  position: 'top', // Positioniert die Labels über den Balken
                  formatter: function(params) {
                      // Kürze das Label auf 2 Stellen
                      return params.value.toString().substring(0, 4);
                  }
              },
      			data: %%yAxisData%%,
      			
      			      markPoint: {
              data: [
                { type: 'max', name: 'Max', itemStyle: { color: 'red' }  },
                { type: 'min', name: 'Min', itemStyle: { color: 'green' }  }
              ]
            },
       
      			markArea: {
      				itemStyle: {
      					color: "rgba(120, 200, 120, 0.2)"
      				},
      				data: [
      					%%CalcChannelsData%%
      				]
      			}
      		}
      	]
      };
      
      
      B Offline
      B Offline
      BMP
      schrieb am zuletzt editiert von
      #556

      @icebear said in TibberLink Adapter:

      Ich habs grad mal eingfügt, funktioniert doch.

      Hmmm, danke dir, mit dem Code klappt es. Da sitzt der fehler mal wieder vor der Tastatur ;-)
      Jetzt schue ich mal, ob ich da einen Filter rein bekomme für die aktuelle Stunde .

      1 Antwort Letzte Antwort
      0
      • B BMP

        @reblausgt
        Hallo Reblaus,

        das hört sich doch schon mal vielversprechend an.
        Bislang hatte ich mir das per Skript rausgesucht und als Tabelle anzeigen lassen.

        Dort hatte ich immer zwei Tabellen. Die heutige und eine für morgen.
        Letzendlich Interessieren mich aber nur die aktuelle Stunde und kommenden.
        Ein Cutoff von 0h vergangene Stunden wäre also für mich der Optimale weg ;-)

        R Offline
        R Offline
        ReblausGT
        Developer
        schrieb am zuletzt editiert von
        #557

        @bmp said in TibberLink Adapter:

        @reblausgt
        das hört sich doch schon mal vielversprechend an.
        Ein Cutoff von 0h vergangene Stunden wäre also für mich der Optimale weg ;-)

        Ist in 4.4.0 implementiert

        1 Antwort Letzte Antwort
        0
        • Merlin123M Merlin123

          @reblausgt Du kannst das meines Wissens nach ganz normal weiter auslesen. Nur historische Daten bekommst Du nicht mehr. Nur den laufenden Tag.

          Werd ich ab 27.2. aber auch sehen, da auch auch gewechselt. bin.

          lobomauL Offline
          lobomauL Offline
          lobomau
          schrieb am zuletzt editiert von
          #558

          @merlin123 ich bin seit gestern von tibber zu octopus gewechselt. Ich habe im Tibber Adapter mein API-Token und Tibber-Home Daten so gelassen. Es werden weiterhin die Live-Daten vom Zähler gezeigt. Kann man das so lassen? Du hattest den Wechsel vor 2 Wochen. Wie hast du es gemacht? Ansonsten wollte ich mich sowieso mit der lokalen Auslesung auseinandersetzen.

          Host: NUC8i3 mit Proxmox:

          • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
          • Slave: Pi4
          mcBirneM Merlin123M 2 Antworten Letzte Antwort
          0
          • lobomauL lobomau

            @merlin123 ich bin seit gestern von tibber zu octopus gewechselt. Ich habe im Tibber Adapter mein API-Token und Tibber-Home Daten so gelassen. Es werden weiterhin die Live-Daten vom Zähler gezeigt. Kann man das so lassen? Du hattest den Wechsel vor 2 Wochen. Wie hast du es gemacht? Ansonsten wollte ich mich sowieso mit der lokalen Auslesung auseinandersetzen.

            mcBirneM Offline
            mcBirneM Offline
            mcBirne
            schrieb am zuletzt editiert von
            #559

            @lobomau
            Ich bin auch von Tibber weg und warte bei Octopus auf mein SmartMeter.
            Mit dem Tibber-Adapter funktioniert bei mir alles weiter. Man muss nur die täglichen Preise deaktivieren. Das lokale Auslesen hat bei mir nie funktioniert.
            Bin gespannt, wie ich dann auf das SmartMeter zugreifen kann.

            1 Antwort Letzte Antwort
            0
            • lobomauL lobomau

              @merlin123 ich bin seit gestern von tibber zu octopus gewechselt. Ich habe im Tibber Adapter mein API-Token und Tibber-Home Daten so gelassen. Es werden weiterhin die Live-Daten vom Zähler gezeigt. Kann man das so lassen? Du hattest den Wechsel vor 2 Wochen. Wie hast du es gemacht? Ansonsten wollte ich mich sowieso mit der lokalen Auslesung auseinandersetzen.

              Merlin123M Offline
              Merlin123M Offline
              Merlin123
              schrieb am zuletzt editiert von
              #560

              @lobomau Ich hab das einfach weiterlaufen lassen. Scheint zu gehen.

              Beta-Tester

              R 1 Antwort Letzte Antwort
              0
              • Merlin123M Merlin123

                @lobomau Ich hab das einfach weiterlaufen lassen. Scheint zu gehen.

                R Offline
                R Offline
                ReblausGT
                Developer
                schrieb am zuletzt editiert von
                #561

                @merlin123 said in TibberLink Adapter:

                @lobomau Ich hab das einfach weiterlaufen lassen. Scheint zu gehen.

                Aus Sicht TibberLink Adapter müsste das lokal weiterlaufen... es sein den Tibber "aktualisiert" die Bridge um es zu verhindern - da aber Pulse und Bridge dein Eigentum sind, wär das nach Vertragsende "komisch"...

                -> Wie das dann mit dem neuen Zähler = Smartmeter geht sehe ich fraglich. Kann mir eigentlich nicht vorstellen dass der mit Tibber einrichtbar ist (ohne Vertrag)

                1 Antwort Letzte Antwort
                0
                • icebearI Online
                  icebearI Online
                  icebear
                  schrieb am zuletzt editiert von
                  #562

                  Hat sich von euch schonmal einer Gedanken darüber gemacht, wie man die Tibberpreise ab nächsten Monat (01.06.2025) am besten umsetzt?

                  Siehe hier:

                  Ab Juni kommt die 15-Minuten-Abrechnung
                  Im Juni 2025 wird die europäische Strombörse nun den nächsten wichtigen Schritt in Sachen zukunftsfähige Energienutzung einleiten. Dann werden die Handelspreise nämlich nicht mehr stündlich, sondern im 15-Minuten-Takt gebildet. Diese systemische Umstellung ist Teil einer neuen EU-Richtlinie und betrifft alle Stromunternehmen, die ihre Mengen an der Börse einkaufen. Wir bei Tibber begrüßen diese Entwicklung, denn sie gibt Verbraucher:innen noch mehr Freiheiten, kluge Entscheidungen zu treffen und erlaubt ihnen, sich besser auf die schwankenden Produktionsmengen aus Wind und Solar einzustellen. Im Folgenden haben wir die Benefits, die die Umstellung mit sich bringt, zusammengefasst.

                  L 1 Antwort Letzte Antwort
                  0
                  • icebearI icebear

                    Hat sich von euch schonmal einer Gedanken darüber gemacht, wie man die Tibberpreise ab nächsten Monat (01.06.2025) am besten umsetzt?

                    Siehe hier:

                    Ab Juni kommt die 15-Minuten-Abrechnung
                    Im Juni 2025 wird die europäische Strombörse nun den nächsten wichtigen Schritt in Sachen zukunftsfähige Energienutzung einleiten. Dann werden die Handelspreise nämlich nicht mehr stündlich, sondern im 15-Minuten-Takt gebildet. Diese systemische Umstellung ist Teil einer neuen EU-Richtlinie und betrifft alle Stromunternehmen, die ihre Mengen an der Börse einkaufen. Wir bei Tibber begrüßen diese Entwicklung, denn sie gibt Verbraucher:innen noch mehr Freiheiten, kluge Entscheidungen zu treffen und erlaubt ihnen, sich besser auf die schwankenden Produktionsmengen aus Wind und Solar einzustellen. Im Folgenden haben wir die Benefits, die die Umstellung mit sich bringt, zusammengefasst.

                    L Offline
                    L Offline
                    lesiflo
                    Most Active
                    schrieb am zuletzt editiert von
                    #563

                    @icebear Eigentlich so wie bisher. Eventuell muss der Adapter an die 15 Minuten angepasst werden muss. Hängt davon ab ob er die Daten abholt oder ob sie gesendet werden.

                    icebearI 1 Antwort Letzte Antwort
                    0
                    • L lesiflo

                      @icebear Eigentlich so wie bisher. Eventuell muss der Adapter an die 15 Minuten angepasst werden muss. Hängt davon ab ob er die Daten abholt oder ob sie gesendet werden.

                      icebearI Online
                      icebearI Online
                      icebear
                      schrieb am zuletzt editiert von icebear
                      #564

                      @lesiflo

                      Das Problem ist dann nur die Darstellung, du hast dann nicht mehr 24 Werte pro Tag sondern 96.

                      Wenn ich jetzt an meine VIS denke wird das nix mit dem Preis-Label soviel Platz hat ja glaub ich keiner, ausser du hast ein 28" Zoll Monitor

                      L 1 Antwort Letzte Antwort
                      0
                      • icebearI icebear

                        @lesiflo

                        Das Problem ist dann nur die Darstellung, du hast dann nicht mehr 24 Werte pro Tag sondern 96.

                        Wenn ich jetzt an meine VIS denke wird das nix mit dem Preis-Label soviel Platz hat ja glaub ich keiner, ausser du hast ein 28" Zoll Monitor

                        L Offline
                        L Offline
                        lesiflo
                        Most Active
                        schrieb am zuletzt editiert von
                        #565

                        @icebear sagte in TibberLink Adapter:

                        @lesiflo

                        Das Problem ist dann nur die Darstellung, du hast dann nicht mehr 24 Werte pro Tag sondern 96.

                        Wenn ich jetzt an meine VIS denke wird das nix mit dem Preis-Label soviel Platz hat ja glaub ich keiner, ausser du hast ein 28" Zoll Monitor

                        Stimmt, dürfte etwas eng werden. 30 Minuten könnte ja noch gehen aber 15 wird dann etwas zu viel werden. Dann das Label weglassen. Bei meiner Anzeige kommt das zum Glück nicht vor. Eventuell sollte man im Adapter die Schrittweite auswählen können.

                        1eeaf940-e0de-436e-959d-d2915af299c7-image.png

                        1 Antwort Letzte Antwort
                        0
                        • L Offline
                          L Offline
                          lesiflo
                          Most Active
                          schrieb am zuletzt editiert von lesiflo
                          #566

                          Moin,
                          hat jemand von euch einen Tip für mich wie ich die teuren Stunden richtig angezeigt bekomme? Im Adapter habe
                          das schon vertauscht, in der Anzeige wird das jedoch so angezeigt.

                          158202d5-0891-4274-b3da-34489e85870d-image.png

                          Die grünen Bereiche sollten eigentlich genau andersherum sein. So wie hier: Link Text

                          5f333952-4633-4647-8146-a63db16bc363-image.png

                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            lesiflo
                            Most Active
                            schrieb am zuletzt editiert von lesiflo
                            #567

                            Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                            // =================== KONFIG ===================
                            const jsonDP         = 'tibberlink.0.Homes.xxxxxxxxxxxx.Consumption.jsonDaily';
                            const resultCostDP   = '0_userdata.0.Tibber.SumUnitCostThisMonth';    // Ziel-DP Kosten (Summe)
                            const resultConsDP   = '0_userdata.0.Tibber.SumConsumptionThisMonth'; // Ziel-DP Verbrauch
                            const resultPriceDP  = '0_userdata.0.Tibber.AvgUnitPriceThisMonth';   // Ziel-DP Durchschnittspreis
                            
                            // =================== FUNKTION ===================
                            function calcMonthValues() {
                                try {
                                    const raw = getState(jsonDP).val;
                                    if (!raw) {
                                        log('Keine Daten im JSON-DP vorhanden', 'warn');
                                        return;
                                    }
                            
                                    const data = JSON.parse(raw);
                                    let sumCost = 0;
                                    let sumCons = 0;
                            
                                    // aktuelles Jahr & Monat bestimmen
                                    const now = new Date();
                                    const currentYear  = now.getFullYear();
                                    const currentMonth = now.getMonth(); // 0-basiert (0=Jan, 11=Dez)
                            
                                    data.forEach(entry => {
                                        if (!entry.from) return;
                            
                                        const d = new Date(entry.from);
                                        if (d.getFullYear() === currentYear && d.getMonth() === currentMonth) {
                                            if (entry.totalCost !== undefined && !isNaN(entry.totalCost)) {
                                                sumCost += parseFloat(entry.totalCost);
                                            }
                                            if (entry.consumption !== undefined && !isNaN(entry.consumption)) {
                                                sumCons += parseFloat(entry.consumption);
                                            }
                                        }
                                    });
                            
                                    // Durchschnitt berechnen
                                    let avgPrice = sumCost/sumCons;
                            
                                    // Ergebnisse in DP schreiben
                                    setState(resultCostDP, sumCost, true);
                                    setState(resultConsDP, sumCons, true);
                                    setState(resultPriceDP, avgPrice, true);
                            
                                    log(`Summe unitCost (aktueller Monat): ${sumCost.toFixed(4)} €`, 'info');
                                    log(`Summe consumption (aktueller Monat): ${sumCons.toFixed(3)} kWh`, 'info');
                                    log(`Ø unitPrice (aktueller Monat): ${avgPrice.toFixed(4)} €/kWh`, 'info');
                            
                                } catch (e) {
                                    log(`Fehler beim Verarbeiten des JSON: ${e}`, 'error');
                                }
                            }
                            
                            // =================== TRIGGER ===================
                            // 1x direkt beim Start
                            calcMonthValues();
                            
                            // bei Änderungen des JSON-DPs neu berechnen
                            on({id: jsonDP, change: 'any'}, () => {
                                calcMonthValues();
                            });
                            
                            // =================== DATENPUNKTE ANLEGEN ===================
                            createState(resultCostDP, 0, {
                                name: 'Summe unitCost aktueller Monat (Tibber)',
                                type: 'number',
                                unit: '€',
                                role: 'value'
                            });
                            
                            createState(resultConsDP, 0, {
                                name: 'Summe Verbrauch aktueller Monat (Tibber)',
                                type: 'number',
                                unit: 'kWh',
                                role: 'value'
                            });
                            
                            createState(resultPriceDP, 0, {
                                name: 'Durchschnitt unitPrice aktueller Monat (Tibber)',
                                type: 'number',
                                unit: '€/kWh',
                                role: 'value'
                            });
                            
                            
                            icebearI E 3 Antworten Letzte Antwort
                            0
                            • L lesiflo

                              Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                              // =================== KONFIG ===================
                              const jsonDP         = 'tibberlink.0.Homes.xxxxxxxxxxxx.Consumption.jsonDaily';
                              const resultCostDP   = '0_userdata.0.Tibber.SumUnitCostThisMonth';    // Ziel-DP Kosten (Summe)
                              const resultConsDP   = '0_userdata.0.Tibber.SumConsumptionThisMonth'; // Ziel-DP Verbrauch
                              const resultPriceDP  = '0_userdata.0.Tibber.AvgUnitPriceThisMonth';   // Ziel-DP Durchschnittspreis
                              
                              // =================== FUNKTION ===================
                              function calcMonthValues() {
                                  try {
                                      const raw = getState(jsonDP).val;
                                      if (!raw) {
                                          log('Keine Daten im JSON-DP vorhanden', 'warn');
                                          return;
                                      }
                              
                                      const data = JSON.parse(raw);
                                      let sumCost = 0;
                                      let sumCons = 0;
                              
                                      // aktuelles Jahr & Monat bestimmen
                                      const now = new Date();
                                      const currentYear  = now.getFullYear();
                                      const currentMonth = now.getMonth(); // 0-basiert (0=Jan, 11=Dez)
                              
                                      data.forEach(entry => {
                                          if (!entry.from) return;
                              
                                          const d = new Date(entry.from);
                                          if (d.getFullYear() === currentYear && d.getMonth() === currentMonth) {
                                              if (entry.totalCost !== undefined && !isNaN(entry.totalCost)) {
                                                  sumCost += parseFloat(entry.totalCost);
                                              }
                                              if (entry.consumption !== undefined && !isNaN(entry.consumption)) {
                                                  sumCons += parseFloat(entry.consumption);
                                              }
                                          }
                                      });
                              
                                      // Durchschnitt berechnen
                                      let avgPrice = sumCost/sumCons;
                              
                                      // Ergebnisse in DP schreiben
                                      setState(resultCostDP, sumCost, true);
                                      setState(resultConsDP, sumCons, true);
                                      setState(resultPriceDP, avgPrice, true);
                              
                                      log(`Summe unitCost (aktueller Monat): ${sumCost.toFixed(4)} €`, 'info');
                                      log(`Summe consumption (aktueller Monat): ${sumCons.toFixed(3)} kWh`, 'info');
                                      log(`Ø unitPrice (aktueller Monat): ${avgPrice.toFixed(4)} €/kWh`, 'info');
                              
                                  } catch (e) {
                                      log(`Fehler beim Verarbeiten des JSON: ${e}`, 'error');
                                  }
                              }
                              
                              // =================== TRIGGER ===================
                              // 1x direkt beim Start
                              calcMonthValues();
                              
                              // bei Änderungen des JSON-DPs neu berechnen
                              on({id: jsonDP, change: 'any'}, () => {
                                  calcMonthValues();
                              });
                              
                              // =================== DATENPUNKTE ANLEGEN ===================
                              createState(resultCostDP, 0, {
                                  name: 'Summe unitCost aktueller Monat (Tibber)',
                                  type: 'number',
                                  unit: '€',
                                  role: 'value'
                              });
                              
                              createState(resultConsDP, 0, {
                                  name: 'Summe Verbrauch aktueller Monat (Tibber)',
                                  type: 'number',
                                  unit: 'kWh',
                                  role: 'value'
                              });
                              
                              createState(resultPriceDP, 0, {
                                  name: 'Durchschnitt unitPrice aktueller Monat (Tibber)',
                                  type: 'number',
                                  unit: '€/kWh',
                                  role: 'value'
                              });
                              
                              
                              icebearI Online
                              icebearI Online
                              icebear
                              schrieb am zuletzt editiert von
                              #568

                              @lesiflo

                              Du solltest deine Home-ID unkenntlich machen!!

                              L 1 Antwort Letzte Antwort
                              0
                              • icebearI icebear

                                @lesiflo

                                Du solltest deine Home-ID unkenntlich machen!!

                                L Offline
                                L Offline
                                lesiflo
                                Most Active
                                schrieb am zuletzt editiert von
                                #569

                                @icebear Erledigt.

                                1 Antwort Letzte Antwort
                                0
                                • L lesiflo

                                  Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                                  // =================== KONFIG ===================
                                  const jsonDP         = 'tibberlink.0.Homes.xxxxxxxxxxxx.Consumption.jsonDaily';
                                  const resultCostDP   = '0_userdata.0.Tibber.SumUnitCostThisMonth';    // Ziel-DP Kosten (Summe)
                                  const resultConsDP   = '0_userdata.0.Tibber.SumConsumptionThisMonth'; // Ziel-DP Verbrauch
                                  const resultPriceDP  = '0_userdata.0.Tibber.AvgUnitPriceThisMonth';   // Ziel-DP Durchschnittspreis
                                  
                                  // =================== FUNKTION ===================
                                  function calcMonthValues() {
                                      try {
                                          const raw = getState(jsonDP).val;
                                          if (!raw) {
                                              log('Keine Daten im JSON-DP vorhanden', 'warn');
                                              return;
                                          }
                                  
                                          const data = JSON.parse(raw);
                                          let sumCost = 0;
                                          let sumCons = 0;
                                  
                                          // aktuelles Jahr & Monat bestimmen
                                          const now = new Date();
                                          const currentYear  = now.getFullYear();
                                          const currentMonth = now.getMonth(); // 0-basiert (0=Jan, 11=Dez)
                                  
                                          data.forEach(entry => {
                                              if (!entry.from) return;
                                  
                                              const d = new Date(entry.from);
                                              if (d.getFullYear() === currentYear && d.getMonth() === currentMonth) {
                                                  if (entry.totalCost !== undefined && !isNaN(entry.totalCost)) {
                                                      sumCost += parseFloat(entry.totalCost);
                                                  }
                                                  if (entry.consumption !== undefined && !isNaN(entry.consumption)) {
                                                      sumCons += parseFloat(entry.consumption);
                                                  }
                                              }
                                          });
                                  
                                          // Durchschnitt berechnen
                                          let avgPrice = sumCost/sumCons;
                                  
                                          // Ergebnisse in DP schreiben
                                          setState(resultCostDP, sumCost, true);
                                          setState(resultConsDP, sumCons, true);
                                          setState(resultPriceDP, avgPrice, true);
                                  
                                          log(`Summe unitCost (aktueller Monat): ${sumCost.toFixed(4)} €`, 'info');
                                          log(`Summe consumption (aktueller Monat): ${sumCons.toFixed(3)} kWh`, 'info');
                                          log(`Ø unitPrice (aktueller Monat): ${avgPrice.toFixed(4)} €/kWh`, 'info');
                                  
                                      } catch (e) {
                                          log(`Fehler beim Verarbeiten des JSON: ${e}`, 'error');
                                      }
                                  }
                                  
                                  // =================== TRIGGER ===================
                                  // 1x direkt beim Start
                                  calcMonthValues();
                                  
                                  // bei Änderungen des JSON-DPs neu berechnen
                                  on({id: jsonDP, change: 'any'}, () => {
                                      calcMonthValues();
                                  });
                                  
                                  // =================== DATENPUNKTE ANLEGEN ===================
                                  createState(resultCostDP, 0, {
                                      name: 'Summe unitCost aktueller Monat (Tibber)',
                                      type: 'number',
                                      unit: '€',
                                      role: 'value'
                                  });
                                  
                                  createState(resultConsDP, 0, {
                                      name: 'Summe Verbrauch aktueller Monat (Tibber)',
                                      type: 'number',
                                      unit: 'kWh',
                                      role: 'value'
                                  });
                                  
                                  createState(resultPriceDP, 0, {
                                      name: 'Durchschnitt unitPrice aktueller Monat (Tibber)',
                                      type: 'number',
                                      unit: '€/kWh',
                                      role: 'value'
                                  });
                                  
                                  
                                  icebearI Online
                                  icebearI Online
                                  icebear
                                  schrieb am zuletzt editiert von
                                  #570

                                  @lesiflo said in TibberLink Adapter:

                                  Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                                  Ich hab da jetzt doch mal eine Frage dazu, wieso rechnest du nicht mit den Bruttowerten, damit man direkt die tatsächlichen Kosten sieht? Anstatt von 'unitCost' steht doch schon der Preis/Tag im JSON drin = 'totalCost'

                                  Und bei 'avgPrice' brauchst du doch auch nur 'consumption' / 'totalPrice' = avgPrice/d

                                  L 1 Antwort Letzte Antwort
                                  0
                                  • icebearI icebear

                                    @lesiflo said in TibberLink Adapter:

                                    Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                                    Ich hab da jetzt doch mal eine Frage dazu, wieso rechnest du nicht mit den Bruttowerten, damit man direkt die tatsächlichen Kosten sieht? Anstatt von 'unitCost' steht doch schon der Preis/Tag im JSON drin = 'totalCost'

                                    Und bei 'avgPrice' brauchst du doch auch nur 'consumption' / 'totalPrice' = avgPrice/d

                                    L Offline
                                    L Offline
                                    lesiflo
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #571

                                    @icebear Guter Einwand, ist korrigiert.

                                    1 Antwort Letzte Antwort
                                    0
                                    • L lesiflo

                                      Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.

                                      // =================== KONFIG ===================
                                      const jsonDP         = 'tibberlink.0.Homes.xxxxxxxxxxxx.Consumption.jsonDaily';
                                      const resultCostDP   = '0_userdata.0.Tibber.SumUnitCostThisMonth';    // Ziel-DP Kosten (Summe)
                                      const resultConsDP   = '0_userdata.0.Tibber.SumConsumptionThisMonth'; // Ziel-DP Verbrauch
                                      const resultPriceDP  = '0_userdata.0.Tibber.AvgUnitPriceThisMonth';   // Ziel-DP Durchschnittspreis
                                      
                                      // =================== FUNKTION ===================
                                      function calcMonthValues() {
                                          try {
                                              const raw = getState(jsonDP).val;
                                              if (!raw) {
                                                  log('Keine Daten im JSON-DP vorhanden', 'warn');
                                                  return;
                                              }
                                      
                                              const data = JSON.parse(raw);
                                              let sumCost = 0;
                                              let sumCons = 0;
                                      
                                              // aktuelles Jahr & Monat bestimmen
                                              const now = new Date();
                                              const currentYear  = now.getFullYear();
                                              const currentMonth = now.getMonth(); // 0-basiert (0=Jan, 11=Dez)
                                      
                                              data.forEach(entry => {
                                                  if (!entry.from) return;
                                      
                                                  const d = new Date(entry.from);
                                                  if (d.getFullYear() === currentYear && d.getMonth() === currentMonth) {
                                                      if (entry.totalCost !== undefined && !isNaN(entry.totalCost)) {
                                                          sumCost += parseFloat(entry.totalCost);
                                                      }
                                                      if (entry.consumption !== undefined && !isNaN(entry.consumption)) {
                                                          sumCons += parseFloat(entry.consumption);
                                                      }
                                                  }
                                              });
                                      
                                              // Durchschnitt berechnen
                                              let avgPrice = sumCost/sumCons;
                                      
                                              // Ergebnisse in DP schreiben
                                              setState(resultCostDP, sumCost, true);
                                              setState(resultConsDP, sumCons, true);
                                              setState(resultPriceDP, avgPrice, true);
                                      
                                              log(`Summe unitCost (aktueller Monat): ${sumCost.toFixed(4)} €`, 'info');
                                              log(`Summe consumption (aktueller Monat): ${sumCons.toFixed(3)} kWh`, 'info');
                                              log(`Ø unitPrice (aktueller Monat): ${avgPrice.toFixed(4)} €/kWh`, 'info');
                                      
                                          } catch (e) {
                                              log(`Fehler beim Verarbeiten des JSON: ${e}`, 'error');
                                          }
                                      }
                                      
                                      // =================== TRIGGER ===================
                                      // 1x direkt beim Start
                                      calcMonthValues();
                                      
                                      // bei Änderungen des JSON-DPs neu berechnen
                                      on({id: jsonDP, change: 'any'}, () => {
                                          calcMonthValues();
                                      });
                                      
                                      // =================== DATENPUNKTE ANLEGEN ===================
                                      createState(resultCostDP, 0, {
                                          name: 'Summe unitCost aktueller Monat (Tibber)',
                                          type: 'number',
                                          unit: '€',
                                          role: 'value'
                                      });
                                      
                                      createState(resultConsDP, 0, {
                                          name: 'Summe Verbrauch aktueller Monat (Tibber)',
                                          type: 'number',
                                          unit: 'kWh',
                                          role: 'value'
                                      });
                                      
                                      createState(resultPriceDP, 0, {
                                          name: 'Durchschnitt unitPrice aktueller Monat (Tibber)',
                                          type: 'number',
                                          unit: '€/kWh',
                                          role: 'value'
                                      });
                                      
                                      
                                      E Offline
                                      E Offline
                                      ETGermany
                                      schrieb am zuletzt editiert von
                                      #572

                                      @lesiflo

                                      Nur zur Info:

                                      Method "createState" is deprecated and will be removed in js-controller 7.1, use "extendObject/setObjectNotExists"

                                      A 1 Antwort Letzte Antwort
                                      0
                                      • E ETGermany

                                        @lesiflo

                                        Nur zur Info:

                                        Method "createState" is deprecated and will be removed in js-controller 7.1, use "extendObject/setObjectNotExists"

                                        A Offline
                                        A Offline
                                        ArnoD
                                        schrieb am zuletzt editiert von
                                        #573

                                        @etgermany

                                        Nur zur Info:
                                        Method "createState" is deprecated and will be removed in js-controller 7.1, use "extendObject/setObjectNotExists"

                                        Nur zur Info:
                                        das betrifft nicht den JavaScript Adapter

                                        E 1 Antwort Letzte Antwort
                                        0
                                        • B Offline
                                          B Offline
                                          bakerman23
                                          schrieb am zuletzt editiert von
                                          #574

                                          Ab morgen kommen bei Tibber die Preise im 15 Minutentakt. Hat jemand eine Information, wie die Kanäle in zukunft funktionieren sollen?
                                          Da ist ja alles auf Stunden ausgelegt.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          731

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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