Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  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.0k

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

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

TibberLink Adapter

Scheduled Pinned Locked Moved ioBroker Allgemein
613 Posts 85 Posters 192.8k Views 78 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H HansJochen

    Hi @reblausgt ,

    danke für Dein Feedback.

    Klar, bau es gerne ein. Ich habe das ja hier gepostet, weil ich dachte, dass es auch für andere praktisch sein kann.

    R Offline
    R Offline
    ReblausGT
    Developer
    wrote on last edited by
    #601

    Mal was anderes.... die X-Achse mit Strings war ein Entwurf der 1h Zeitscheiben.... jetzt, mit den 15 Minuten Scheiben überlege ich ob man das doch lieber im category time ändern sollte.... das zerschmeißt dann halt alles was man sich da schon an template gebastelt hatte.... Ist das ne Katastrophe? oder Überwiegen die Vorteile?

    H 1 Reply Last reply
    0
    • S Online
      S Online
      Schimi
      wrote on last edited by
      #602

      Ich brauche mal ne Erklärung zum "Batterie laden" Kanal nach der 15min Umstellung 🙂

      a5dfc580-d177-40be-aaad-749936c05b44-image.png

      Wenn ich die AmountHours auf z.B. "0,5" stelle, schaltet er dann jede verfügbaren 30min Slot, wo der Preis 25% unter dem höchsten Tagespreis ist auf true? (den highest nutze ich nicht)

      1 Reply Last reply
      0
      • R Offline
        R Offline
        ReblausGT
        Developer
        wrote on last edited by
        #603

        @schimi said in TibberLink Adapter:

        Ich brauche mal ne Erklärung zum "Batterie laden" Kanal nach der 15min Umstellung 🙂

        Er sucht die 2 billigsten 15 Minuten und lädt die Batterie. Dann nimmt er den Preis der teuersten Phase = die teuerste Wattstunde im Speicher und rechnet dazu den Wirkungsgradverlust hinzu.... alles was da drunter liegt sperrt er das Entladen, was darüber liegt wird entladen.

        S 1 Reply Last reply
        0
        • R ReblausGT

          Mal was anderes.... die X-Achse mit Strings war ein Entwurf der 1h Zeitscheiben.... jetzt, mit den 15 Minuten Scheiben überlege ich ob man das doch lieber im category time ändern sollte.... das zerschmeißt dann halt alles was man sich da schon an template gebastelt hatte.... Ist das ne Katastrophe? oder Überwiegen die Vorteile?

          H Online
          H Online
          HansJochen
          wrote on last edited by
          #604

          @reblausgt

          Gute Frage. Für mich war das mein erster Berührpunkt mit ECharts. So, wie es jetzt ist, passt es bei mir mit der Skalierung relativ gut. Je nach Fenstergröße auf unterschiedlichen Größen wählt ECharts hier recht vernünftig, welche Punkte auf der Skala weggelassen werden. Beispielsweise sehe ich in dem kleinen Ausschnitt, den ich dem Chart in meiner Visualisierung gönne, die vollen Stunden und wenn ich das Chart alleine im Browser Fullscreen öffne auch die Viertelstunden.

          Ich habe mir aber jetzt gerade eine Echart Demo angeschaut (https://echarts.apache.org/examples/en/editor.html?c=area-time-axis), da lässt sich in dem Chart mit dem Mausrad zoomen. Das geht bei uns nicht. Ob die String-Skala der Grund ist, weiß ich nicht. Das könnte ich mir aber vorstellen.

          Was wohl in jedem Fall schöner wäre: Es wäre halt der Weg, den ECharts für Zeitserien vorsieht. Das Datum würde nicht ständig wiederholt, sondern nur einmal angezeigt und ansonsten nur die Uhrzeit. Die X-Achse wäre also etwas übersichtlicher.

          Mir persönlich wäre die Änderung nicht wichtig, das Template wäre aber leicht anzupassen. Ich kann da bei Bedarf auch gerne unterstützen. Wer sich beispielsweise veränderte Tooltips eingebaut hat, müsste halt selbst noch mal Hand anlegen. Ich würde aber vermuten, wer das hinbekommen hat, wird auch an dem Umbau nicht scheitern.

          Übrigens: Ich vermute, dass es einige Nutzer gibt, die mit ECharts keine Berührpunkte hatten und die in ihrer Automatisierung nur für die Tibberpreise benutzen. Dann ist es schon etwas knifflig, die URL für die generierten Charts herauszufinden und die Templates in den Editor zu kopieren könnte auf manche auch etwas abschreckend wirken. Vermutlich benutzen die Meisten eines der Standard Templates ohne Veränderungen.

          Da könnte es aus meiner Sicht helfen, wenn die URL im Adapter direkt angezeigt würde und es eine Auswahl der Art "Standard Darstellung", "alternative Darstellung" oder "benutzerdefinierte Darstellung" gäbe und damit der ganze Flexchart Hintergrund samt Erklärungen, Beispielen und Editor nur sichtbar wird, wenn man zuvor "benutzerdefiniert" ausgewählt hat.

          1 Reply Last reply
          0
          • S Online
            S Online
            Schimi
            wrote on last edited by
            #605

            ist das was?

            {
            	backgroundColor: "#ffffff",
            
            	title: {
            		text: "Tibber Preis",
            		left: "center",
            		textStyle: { color: "#333", fontSize: 16 }
            	},
            
            	tooltip: {
            		trigger: "axis",
            		axisPointer: { type: "cross" },
            		valueFormatter: value => value.toFixed(3) + " €"
            	},
            
            	grid: {
            		left: "8%", right: "4%", top: "10%", bottom: "10%"
            	},
            
            	xAxis: {
            		type: "time",
            		name: "Zeit",
            		axisLabel: {
            			formatter: value => {
            				const date = new Date(value);
            				const hours = date.getHours().toString().padStart(2, "0");
            				const minutes = date.getMinutes().toString().padStart(2, "0");
            				return hours + ":" + minutes;
            			}
            		},
            		splitLine: { show: false }
            	},
            
            	yAxis: {
            		type: "value",
            		name: "Preis (€)",
            		axisLabel: { formatter: "{value} €" },
            		splitLine: { show: true }
            	},
            
            	visualMap: {
            		show: false,
            		min: 0.2,
            		max: 0.4,
            		inRange: {
            			color: ["green", "yellow", "red"]
            		}
            	},
            
            	series: [
            		{
            			name: "Preis",
            			type: "line",
            			symbol: "none",
            			step: "end",
            			data: %%yAxisData%%, // Format: [ [timestamp, value], [timestamp, value], ... ]
            
            			markArea: {
            				itemStyle: { color: "rgba(120, 200, 120, 0.2)" },
            				data: [ %%CalcChannelsData%% ] // z. B. [[{ xAxis: "2025-11-04T10:00" }, { xAxis: "2025-11-04T14:00" }]]
            			},
            
            			markLine: {
            				symbol: "none",
            				label: {
            					formatter: "Jetzt",
            					position: "end",
            					color: "#333"
            				},
            				lineStyle: { color: "red", type: "solid" },
            				data: [
            					{
            						xAxis: new Date().toISOString()
            					}
            				]
            			}
            		}
            	]
            }
            
            
            H 1 Reply Last reply
            0
            • S Schimi

              ist das was?

              {
              	backgroundColor: "#ffffff",
              
              	title: {
              		text: "Tibber Preis",
              		left: "center",
              		textStyle: { color: "#333", fontSize: 16 }
              	},
              
              	tooltip: {
              		trigger: "axis",
              		axisPointer: { type: "cross" },
              		valueFormatter: value => value.toFixed(3) + " €"
              	},
              
              	grid: {
              		left: "8%", right: "4%", top: "10%", bottom: "10%"
              	},
              
              	xAxis: {
              		type: "time",
              		name: "Zeit",
              		axisLabel: {
              			formatter: value => {
              				const date = new Date(value);
              				const hours = date.getHours().toString().padStart(2, "0");
              				const minutes = date.getMinutes().toString().padStart(2, "0");
              				return hours + ":" + minutes;
              			}
              		},
              		splitLine: { show: false }
              	},
              
              	yAxis: {
              		type: "value",
              		name: "Preis (€)",
              		axisLabel: { formatter: "{value} €" },
              		splitLine: { show: true }
              	},
              
              	visualMap: {
              		show: false,
              		min: 0.2,
              		max: 0.4,
              		inRange: {
              			color: ["green", "yellow", "red"]
              		}
              	},
              
              	series: [
              		{
              			name: "Preis",
              			type: "line",
              			symbol: "none",
              			step: "end",
              			data: %%yAxisData%%, // Format: [ [timestamp, value], [timestamp, value], ... ]
              
              			markArea: {
              				itemStyle: { color: "rgba(120, 200, 120, 0.2)" },
              				data: [ %%CalcChannelsData%% ] // z. B. [[{ xAxis: "2025-11-04T10:00" }, { xAxis: "2025-11-04T14:00" }]]
              			},
              
              			markLine: {
              				symbol: "none",
              				label: {
              					formatter: "Jetzt",
              					position: "end",
              					color: "#333"
              				},
              				lineStyle: { color: "red", type: "solid" },
              				data: [
              					{
              						xAxis: new Date().toISOString()
              					}
              				]
              			}
              		}
              	]
              }
              
              
              H Online
              H Online
              HansJochen
              wrote on last edited by
              #606

              @schimi sagte in TibberLink Adapter:

              ist das was?

              Kunst am Bau? 🙂

              Bildschirmfoto_20251104_184922.png

              S 1 Reply Last reply
              0
              • H HansJochen

                @schimi sagte in TibberLink Adapter:

                ist das was?

                Kunst am Bau? 🙂

                Bildschirmfoto_20251104_184922.png

                S Online
                S Online
                Schimi
                wrote on last edited by
                #607

                @hansjochen

                hehe, dachte ich bin mal "clever" und jag es einfach durch ChatGPT 😄

                scheint wohl nicht geklappt zu haben....

                besser? 😄

                {
                	backgroundColor: "#ffffff",
                
                	title: {
                		text: "Tibber Preis",
                		left: "center",
                		textStyle: { color: "#333", fontSize: 16 }
                	},
                
                	tooltip: {
                		trigger: "axis",
                		axisPointer: { type: "cross" },
                		valueFormatter: value => value.toFixed(3) + " €"
                	},
                
                	grid: {
                		left: "8%", right: "4%", top: "10%", bottom: "10%"
                	},
                
                	xAxis: {
                		type: "time",
                		name: "Zeit",
                		axisLabel: {
                			formatter: value => {
                				const date = new Date(value);
                				const hours = date.getHours().toString().padStart(2, "0");
                				const minutes = date.getMinutes().toString().padStart(2, "0");
                				return hours + ":" + minutes;
                			}
                		},
                		splitLine: { show: false }
                	},
                
                	yAxis: {
                		type: "value",
                		name: "Preis (€)",
                		axisLabel: { formatter: "{value} €" },
                		splitLine: { show: true }
                	},
                
                	visualMap: {
                		show: false,
                		min: 0.2,
                		max: 0.4,
                		inRange: {
                			color: ["green", "yellow", "red"]
                		}
                	},
                
                	series: [
                		{
                			name: "Preis",
                			type: "line",
                			symbol: "none",
                			smooth: true,          // <<< weiche Kurve statt Stufen
                			data: %%yAxisData%%,   // Format: [ [timestamp, value], [timestamp, value], ... ]
                
                			lineStyle: {
                				width: 2
                			},
                
                			markArea: {
                				itemStyle: { color: "rgba(120, 200, 120, 0.2)" },
                				data: [ %%CalcChannelsData%% ]
                			},
                
                			markLine: {
                				symbol: "none",
                				label: {
                					formatter: "Jetzt",
                					position: "end",
                					color: "#333"
                				},
                				lineStyle: { color: "red", type: "solid" },
                				data: [
                					{
                						xAxis: new Date().toISOString()
                					}
                				]
                			}
                		}
                	]
                }
                
                

                Falls das auch nichts ist, gebe ich auf 😉

                H 1 Reply Last reply
                0
                • S Schimi

                  @hansjochen

                  hehe, dachte ich bin mal "clever" und jag es einfach durch ChatGPT 😄

                  scheint wohl nicht geklappt zu haben....

                  besser? 😄

                  {
                  	backgroundColor: "#ffffff",
                  
                  	title: {
                  		text: "Tibber Preis",
                  		left: "center",
                  		textStyle: { color: "#333", fontSize: 16 }
                  	},
                  
                  	tooltip: {
                  		trigger: "axis",
                  		axisPointer: { type: "cross" },
                  		valueFormatter: value => value.toFixed(3) + " €"
                  	},
                  
                  	grid: {
                  		left: "8%", right: "4%", top: "10%", bottom: "10%"
                  	},
                  
                  	xAxis: {
                  		type: "time",
                  		name: "Zeit",
                  		axisLabel: {
                  			formatter: value => {
                  				const date = new Date(value);
                  				const hours = date.getHours().toString().padStart(2, "0");
                  				const minutes = date.getMinutes().toString().padStart(2, "0");
                  				return hours + ":" + minutes;
                  			}
                  		},
                  		splitLine: { show: false }
                  	},
                  
                  	yAxis: {
                  		type: "value",
                  		name: "Preis (€)",
                  		axisLabel: { formatter: "{value} €" },
                  		splitLine: { show: true }
                  	},
                  
                  	visualMap: {
                  		show: false,
                  		min: 0.2,
                  		max: 0.4,
                  		inRange: {
                  			color: ["green", "yellow", "red"]
                  		}
                  	},
                  
                  	series: [
                  		{
                  			name: "Preis",
                  			type: "line",
                  			symbol: "none",
                  			smooth: true,          // <<< weiche Kurve statt Stufen
                  			data: %%yAxisData%%,   // Format: [ [timestamp, value], [timestamp, value], ... ]
                  
                  			lineStyle: {
                  				width: 2
                  			},
                  
                  			markArea: {
                  				itemStyle: { color: "rgba(120, 200, 120, 0.2)" },
                  				data: [ %%CalcChannelsData%% ]
                  			},
                  
                  			markLine: {
                  				symbol: "none",
                  				label: {
                  					formatter: "Jetzt",
                  					position: "end",
                  					color: "#333"
                  				},
                  				lineStyle: { color: "red", type: "solid" },
                  				data: [
                  					{
                  						xAxis: new Date().toISOString()
                  					}
                  				]
                  			}
                  		}
                  	]
                  }
                  
                  

                  Falls das auch nichts ist, gebe ich auf 😉

                  H Online
                  H Online
                  HansJochen
                  wrote on last edited by
                  #608

                  @schimi sagte in TibberLink Adapter:

                  scheint wohl nicht geklappt zu haben....

                  Schwer zu sagen. Falls Du das hier erreichen wolltest, hat es geklappt:

                  Bildschirmfoto_20251104_192150.png

                  Was ist denn Dein Ziel?

                  S 1 Reply Last reply
                  0
                  • H HansJochen

                    @schimi sagte in TibberLink Adapter:

                    scheint wohl nicht geklappt zu haben....

                    Schwer zu sagen. Falls Du das hier erreichen wolltest, hat es geklappt:

                    Bildschirmfoto_20251104_192150.png

                    Was ist denn Dein Ziel?

                    S Online
                    S Online
                    Schimi
                    wrote on last edited by
                    #609

                    @hansjochen sieht nicht richtig aus 😄

                    wollte dein script (für welche die es brauchen, ich habe aktuell keine Verwendung für die Funktion)
                    umbauen das unten nur Uhrzeit angezeigt wird und nicht immer das Datum (quasi wie ihr danach drüber geschrieben habt)

                    H 1 Reply Last reply
                    0
                    • S Schimi

                      @hansjochen sieht nicht richtig aus 😄

                      wollte dein script (für welche die es brauchen, ich habe aktuell keine Verwendung für die Funktion)
                      umbauen das unten nur Uhrzeit angezeigt wird und nicht immer das Datum (quasi wie ihr danach drüber geschrieben habt)

                      H Online
                      H Online
                      HansJochen
                      wrote on last edited by
                      #610

                      @Schimi

                      Okay, das fällt dann wohl in die Kategorie "gut gemeint" 🙂

                      Das Verhalten von Hand nachzubilden, solange der Adapter hier noch auf Strings basiert, wäre ziemlich müßig. Echarts macht das ja schon automatisch, wenn @ReblausGT , wie er es hier angedacht hat, den Adapter auf Datumsobjekte umstellt. Das sollte dann aber synchron passieren: Im Adapter und in den Templates.

                      1 Reply Last reply
                      1
                      • R ReblausGT

                        @schimi said in TibberLink Adapter:

                        Ich brauche mal ne Erklärung zum "Batterie laden" Kanal nach der 15min Umstellung 🙂

                        Er sucht die 2 billigsten 15 Minuten und lädt die Batterie. Dann nimmt er den Preis der teuersten Phase = die teuerste Wattstunde im Speicher und rechnet dazu den Wirkungsgradverlust hinzu.... alles was da drunter liegt sperrt er das Entladen, was darüber liegt wird entladen.

                        S Online
                        S Online
                        Schimi
                        wrote on last edited by
                        #611

                        @reblausgt also nicht zusammenhängende 15 min (30min am stück)... sondern einfach nur 2 x 15min egal wie verteilt?

                        wenn ich "AmountHours" auf 0.75 stelle, dann wären es 3 x 15min?

                        Habe das zuerst so verstanden, das er schaut das er (bei 0.5) 30min am stück findet die 25% günstiger als der max preis ist...

                        B 1 Reply Last reply
                        0
                        • S Schimi

                          @reblausgt also nicht zusammenhängende 15 min (30min am stück)... sondern einfach nur 2 x 15min egal wie verteilt?

                          wenn ich "AmountHours" auf 0.75 stelle, dann wären es 3 x 15min?

                          Habe das zuerst so verstanden, das er schaut das er (bei 0.5) 30min am stück findet die 25% günstiger als der max preis ist...

                          B Offline
                          B Offline
                          bakerman23
                          wrote on last edited by
                          #612

                          @schimi wie kommst du auf 25%?
                          Es ist der günstigste Preis vom Tag.

                          S 1 Reply Last reply
                          0
                          • B bakerman23

                            @schimi wie kommst du auf 25%?
                            Es ist der günstigste Preis vom Tag.

                            S Online
                            S Online
                            Schimi
                            wrote on last edited by
                            #613

                            @bakerman23 beim "Batterie laden"-kanal?

                            Dann sollte die Erklärung überarbeitet werden (vielleicht mit einem Beispiel zu den Einstellungen), habe ich dann total anders/falsch verstanden?

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

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

                            625

                            Online

                            32.4k

                            Users

                            81.3k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe