NEWS
Jarvis 3.1.8 - zukünftige Strompreise - Skalierung, Farben
-
@eds Hochkant-Modus? So das die Balken nach rechts zeigen?
700px reichen auch für den Normal-Modus -
Hallo,
ich habe heute tibberHTML wie in der Anleitung https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/tibber/tibberhtml-pro beschrieben eingestellt
Leider bleiben sowohl today als auch tomorrow leer.
Hier der DP htmltoday:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Tibber-Tageswert</title><script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script></head><body><div id="chart-container" style="width: 100%; height:400px;"></div><script> var data = [{"time":1738537200000,"value":0.398,"tax":0.2685,"energy":0.1295,"level":"NORMAL"},{"time":1738540800000,"value":0.3945,"tax":0.2679,"energy":0.1266,"level":"NORMAL"},{"time":1738544400000,"value":0.3922,"tax":0.2675,"energy":0.1247,"level":"NORMAL"},{"time":1738548000000,"value":0.3867,"tax":0.2667,"energy":0.12,"level":"NORMAL"},{"time":1738551600000,"value":0.3905,"tax":0.2673,"energy":0.1232,"level":"NORMAL"},{"time":1738555200000,"value":0.3959,"tax":0.2681,"energy":0.1278,"level":"NORMAL"},{"time":1738558800000,"value":0.4332,"tax":0.274,"energy":0.1592,"level":"NORMAL"},{"time":1738562400000,"value":0.4912,"tax":0.2833,"energy":0.2079,"level":"EXPENSIVE"},{"time":1738566000000,"value":0.5333,"tax":0.2901,"energy":0.2432,"level":"EXPENSIVE"},{"time":1738569600000,"value":0.4557,"tax":0.2777,"energy":0.178,"level":"NORMAL"},{"time":1738573200000,"value":0.4222,"tax":0.2722,"energy":0.15,"level":"NORMAL"},{"time":1738576800000,"value":0.3938,"tax":0.2678,"energy":0.126,"level":"NORMAL"},{"time":1738580400000,"value":0.3834,"tax":0.2661,"energy":0.1173,"level":"NORMAL"},{"time":1738584000000,"value":0.381,"tax":0.2657,"energy":0.1153,"level":"NORMAL"},{"time":1738587600000,"value":0.3916,"tax":0.2674,"energy":0.1242,"level":"NORMAL"},{"time":1738591200000,"value":0.4174,"tax":0.2715,"energy":0.1459,"level":"NORMAL"},{"time":1738594800000,"value":0.447,"tax":0.2763,"energy":0.1707,"level":"NORMAL"},{"time":1738598400000,"value":0.5008,"tax":0.2848,"energy":0.216,"level":"EXPENSIVE"},{"time":1738602000000,"value":0.4827,"tax":0.282,"energy":0.2007,"level":"EXPENSIVE"},{"time":1738605600000,"value":0.4831,"tax":0.282,"energy":0.2011,"level":"EXPENSIVE"},{"time":1738609200000,"value":0.4434,"tax":0.2757,"energy":0.1677,"level":"NORMAL"},{"time":1738612800000,"value":0.4259,"tax":0.2729,"energy":0.153,"level":"NORMAL"},{"time":1738616400000,"value":0.4154,"tax":0.2712,"energy":0.1442,"level":"NORMAL"},{"time":1738620000000,"value":0.4054,"tax":0.2696,"energy":0.1358,"level":"NORMAL"}]; var chartContainer = document.getElementById("chart-container"); var myChart = echarts.init(chartContainer); function formatTime(time) { return moment(time).format("HH"); } function calculateArrowPosition(hour){ return (hour / 24) * 100 +1 + "%"; } function updateChart() { var minValue = Math.min.apply(null, data.map(function (item) { return item.value; })); var yAxisMin = 0.36; var maxValue = 0.533; let avgValue = 0.428; var visualMapPieces =[{"gt":0,"lte":0.15,"color":"lightgreen"},{"gt":0.15,"lte":0.22,"color":"green"},{"gt":0.22,"lte":0.29,"color":"yellow"},{"gt":0.29,"lte":0.35,"color":"orange"},{"gt":0.35,"color":"red"}]; var values = data.map(item => (item.value-minValue).toFixed(2)); var maxLineValue = Math.max.apply(null, values); var maxLineIndex = values.indexOf(maxLineValue); var maxLineData = {time:1738566000000,value:0.533}; var currentHour = new Date().getHours() ; var currentDay = new Date().getDate(); var endOfDayTimestamp = 1738623599999; var colorStops = []; visualMapPieces.map(piece => { if(piece["lte"] >=yAxisMin && piece["gt"]<=maxValue){ if(piece["gt"]>=yAxisMin){ colorStops.push({ offset: ((piece["gt"]-yAxisMin)/(maxValue-yAxisMin)), color: piece.color }); } if(piece["lte"]<=maxValue){ colorStops.push({ offset: ((piece["lte"]-yAxisMin)/(maxValue-yAxisMin)), color: piece.color }); } if(piece["lte"]>maxValue ){ colorStops.push({ offset: 1, color: piece.color }); }; }else{ if(piece["lte"]>=maxValue && piece["gt"]<=maxValue ){ colorStops.push({ offset: ((piece["lte"]-yAxisMin)/(maxValue-yAxisMin)), color: piece.color }); }else if(piece["lte"]>=maxValue && piece["gt"] <= maxValue){ colorStops.push({ offset: ((piece["lte"]-yAxisMin)/(maxValue-yAxisMin)), color: piece.color }); } }; }); colorStops.push({ offset: 1, color: colorStops[colorStops.length-1].color }); colorStops.splice(0, 0, {offset: 0,color:colorStops[0].color}); myChart.setOption({ title: { text: "Today-Tageswerte", show: true }, visualMap: { type: "piecewise", pieces: visualMapPieces, dimension: 1, showLabel: true, precision: 2, itemWidth: 6, orient: "horizontal", left: "center", calculable: true,selectedMode: "multiple", bottom: 10, text: ["High", "Low"], textStyle: { color: "white" }, }, grid: { right: 50, left: 10, containLabel: true }, areaStyle: { color: colorStops }, toolbox: { feature: { saveAsImage: { backgroundColor: "rgba(38, 37, 37, 1)", title: "Speichern", name: "TibberHTML Today 03.02.2025" }, magicType: { type: ["line", "bar"], title:{ line: "Line-Chart", bar: "Bar-Chart", } }, dataView: { title: "Daten aus der Serie", lang: ["Daten der Kurve", "Schließen", "Aktualisieren"], optionToContent: function (opt) { var table = '<table style="width:100%;"><tbody><tr style="text-align: left;"><th>Stunde</th><th>Wert</th><th>Energie</th><th>Steuer</th><th>Level</th></tr>'; for (var i = 0; i< opt.series[0].data.length;i++) { table += "<tr>"; for(let x =0; x < opt.series[0].data[i].value.length; x++){ if(x==0){ table += "<td>" + ("0"+new Date(opt.series[0].data[i].value[x]).getHours()).slice(-2) + "</td>"; }else{ table += "<td>" + opt.series[0].data[i].value[x] + "</td>"; } } table += "</tr>"; } table += "</tbody></table>"; return table; }, readOnly: true }, } }, xAxis: { type: "time", axisLabel: { show: true, formatter: function (value) { return formatTime(value); } }, splitNumber: 10, }, yAxis: { type: "value", axisLabel: { formatter: function (value) { return value.toFixed(3) + " €"; } }, min: 0.36, max: 0.55, }, series: [{ z:1, data: data.map(function (item) { var hour = new Date(item.time).getHours(); var day = new Date(item.time).getDate(); return { value: [item.time, item.value, item.energy, item.tax, item.level], symbol: "circle", symbolSize: day === currentDay && hour === currentHour ? 10:null, itemStyle: { borderColor: day === currentDay && hour === currentHour ? "white":null, shadowColor: day === currentDay && hour === currentHour ? "white":null, borderWidth: day === currentDay && hour === currentHour ? 2:null, shadowBlur: day === currentDay && hour === currentHour ? 20:null, }, emphasis: { itemStyle: { color: "white" }, label: { show: true, formatter: function (params) { return params.data.value[1].toFixed(3) + " €"; }, color: "black", fontWeight: "bold", backgroundColor: "white" } } } }), step: "end", areaStyle:{ color: new echarts.graphic.LinearGradient(0, 1, 0, 0, colorStops), }, type: "line", markLine: { symbol: "none", lineStyle: { color: "red", type: "dashed" }, z:0, data: [ {yAxis: minValue ,name: "MIN", lineStyle: { color: "lime" },label: { show: true, position: "end", formatter: "Min\n"+ minValue.toFixed(3)+" €",textStyle: { fontSize: 12,fontWeight: "bold", color:"white" } } }, {yAxis: maxValue,name: "MAX", lineStyle: { color: "red" },label: { show: true, position: "end", formatter: "Max\n"+ maxValue.toFixed(3)+" €",textStyle: { fontSize: 12,fontWeight: "bold", color:"white" } } }, {yAxis: avgValue ,name: "AVG", lineStyle: { color: "blue" },label: { show: true, position: "end", formatter: "Avg\n"+ avgValue.toFixed(3)+" €",textStyle: { fontSize: 12,fontWeight: "bold", color:"white" } } }, ], }, }], tooltip: { trigger: "axis", axisPointer: { type: "shadow" }, textStyle: { fontFamily: "Courier", fontWeight: "bold" }, formatter: function (params) { let time = "Start ab: "+ moment(params[0].axisValue).format("HH:mm")+ " Uhr"; let value = "Preis:    "+params[0].value[1].toFixed(4) + " €"; let energy = "Energie:  "+params[0].value[2].toFixed(4) + " €"; let tax = "Steuer:   "+params[0].value[3].toFixed(4) + " €"; let lev = "Level:    "+ params[0].value[4]; return `${time}<br/>${value}<br/>${energy}<br/>${tax}<br/>${lev}` ; } }, }) } updateChart(); var updateInterval = setInterval(updateChart, 3600000);</script></body></html>
Diese Meldung kommt im F12 Menu:
13:18:14.304 App Welcome to jarvis v3.1.8 index-2c99918a.js:112:44201 13:18:14.308 App using instance 0. index-2c99918a.js:112:45143 13:18:14.344 TypeError: a.default.detectStore(...) is undefined h1-check.js:1:1301 13:18:16.330 App Sentry is turned on. You may deactivate it in the adapter settings. index-2c99918a.js:112:38413 13:37:24.569 Uncaught TypeError: colorStops[(colorStops.length - 1)] is undefined updateChart about:srcdoc:1 <anonymous> about:srcdoc:1 srcdoc:1:4775 13:37:24.571 Uncaught TypeError: colorStops[(colorStops.length - 1)] is undefined updateChart about:srcdoc:1 <anonymous> about:srcdoc:1
an was kann das liegen?
Pro Version habe ich in v 3.1.8
-
@m-a-hueb Du musst die Werte im DP colorJSON anpassen, dort sind sie nur bis 0.35 definiert.
Deine Werte gehen bis 0.53, dafür ist nichts definiert.
Ausserdem gibt jetzt mit der neuen tibberlink-Version ein dazugehöriges flexCharts. -
@mcu ist gt nicht greater than? dann müsste das doch bei 0.53 rot sein
[ { "gt": 0, "lte": 0.15, "color": "lightgreen" }, { "gt": 0.15, "lte": 0.22, "color": "green" }, { "gt": 0.22, "lte": 0.29, "color": "yellow" }, { "gt": 0.29, "lte": 0.35, "color": "orange" }, { "gt": 0.35, "color": "red" } ]
Wo finde ich den FlexChart? ich seh da nix im Adapter
-
@m-a-hueb flexcharts ist ein neuer Adapter.
https://forum.iobroker.net/topic/76137/test-adapter-flexcharts-stapeldiagramme-und-mehr/174
Ja, muss ich mir näher anschauen.
Also, wenn alle Werte niedriger sind als die Tibberwerte, dann kommt es zu dem Fehler.
-
@mcu Danke für die Erklärung
-
@mcu
Der Fehler tritt nur auf, wenn alle Preise in die letzte Preisdefinition fallen, also alles größer als. Setzt man die vorletzte Preispanne in den Bereich der zur Zeit "günstigsten" Stunde, wird alles korrekt angezeigt. Ging letztes Jahr auch auf 3 Euro/Stunde, ohne das ich diese Preisschwelle definiert hatte. -
@quarkmax Ok, hab es angepasst gleiche Version 1.0.30
Man kann es einfach in dem Programm ab Zeile ~ 570 anpassen.html += ' if(colorStops.length >0){' html += ' colorStops.push({' html += ' offset: 1,' html += ' color: colorStops[colorStops.length-1].color' html += ' });' html += ' }else{' html += ' colorStops.push({' html += ' offset: 1,' html += ' color: "red"' html += ' });' html += ' }'
-
Können bitte alle, die das Programm noch nutzen und nicht flexCharts, diesen Post hochvoten, damit ich abschätzen kann, ob sich eine Weiterentwicklung lohnt?
Danke. -
@mcu
Läuft.Großes Danke