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. Praktische Anwendungen (Showcase)
  4. Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

NEWS

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

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

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

Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
awattarbilligbörseepexgünstigstrompreisstündlichtibber
156 Beiträge 24 Kommentatoren 38.1k Aufrufe 33 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.
  • W Wesertaler

    @mikerow

    Leider hat mein 16:30 gestern auch nicht funktioniert :-(

    M Offline
    M Offline
    MikeRow
    schrieb am zuletzt editiert von
    #51

    @wesertaler Jo, hab ich auch bemerkt. Die Preise waren ca 18:00 Uhr da

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      shellyrulestheworld
      schrieb am zuletzt editiert von
      #52

      @ThomKast ganz tolle Arbeit, genau das was ich gesucht habe. Ich würde gerne die Scripte verwenden, aber erst einmal ohne Tibber.

      Gehe ich richtig in der Annahme, dass es am besten wäre die neuen Scripts zu verwenden und die Auswahl auf PV Überschuss zu stellen? Tibber sollte mich dann nicht tangieren oder muss der Adapter installiert sein? (Welcher Adapter wird von dir verwendet, der "alte" oder der "neue"?

      Oder ist es dann sinnvoller die "alten" Scripte aus dem früheren Beitrag zu verwenden?

      S T 2 Antworten Letzte Antwort
      0
      • S shellyrulestheworld

        @ThomKast ganz tolle Arbeit, genau das was ich gesucht habe. Ich würde gerne die Scripte verwenden, aber erst einmal ohne Tibber.

        Gehe ich richtig in der Annahme, dass es am besten wäre die neuen Scripts zu verwenden und die Auswahl auf PV Überschuss zu stellen? Tibber sollte mich dann nicht tangieren oder muss der Adapter installiert sein? (Welcher Adapter wird von dir verwendet, der "alte" oder der "neue"?

        Oder ist es dann sinnvoller die "alten" Scripte aus dem früheren Beitrag zu verwenden?

        S Online
        S Online
        Schimi
        schrieb am zuletzt editiert von
        #53

        @shellyrulestheworld

        Es muss garkein Adapter installiert werden....

        Das läuft ganz auf "Scriptebene".... im Script kannst du deine Token von Tibber eintragen.... ich vermute, wenn du es nicht machst, spuckt er im Log nen fehler aus aber PV funktioniert... (reine annahme)

        1 Antwort Letzte Antwort
        1
        • S shellyrulestheworld

          @ThomKast ganz tolle Arbeit, genau das was ich gesucht habe. Ich würde gerne die Scripte verwenden, aber erst einmal ohne Tibber.

          Gehe ich richtig in der Annahme, dass es am besten wäre die neuen Scripts zu verwenden und die Auswahl auf PV Überschuss zu stellen? Tibber sollte mich dann nicht tangieren oder muss der Adapter installiert sein? (Welcher Adapter wird von dir verwendet, der "alte" oder der "neue"?

          Oder ist es dann sinnvoller die "alten" Scripte aus dem früheren Beitrag zu verwenden?

          T Offline
          T Offline
          ThomKast
          schrieb am zuletzt editiert von
          #54

          @shellyrulestheworld

          Hallo, das freut mich. Vielen Dank :hugging_face:

          Der neuere Artikel hat das aktuelle Script. Und da ich nur an dem aktuellen Script weiterarbeite, wäre es besser dieses zu verwenden.´
          Wie @Schimi geschrieben hat, kommt kein Adapter zum Einsatz. Im Script ist es dafür nötig Dein Tibber-Token einzutragen.

          Neidisch bin ich ja schon..., denn ich würde auch mal gerne wieder PV-Überschuss verwenden können. Bei uns regnet es gefühlt seit Wochen und Erträge von rund 8 kWh werden direkt verfrühstückt. Wann wird's mal wieder richtig Sommer... :man-shrugging: :blush:

          S 1 Antwort Letzte Antwort
          2
          • M MikeRow

            @thomkast Hi, ja es gibt einen alten und neuen Tibber Adapter.

            Für den alten Adapter (wird wohl nicht weiterentwickelt) gibt es einen brauchbaren JSON Chart.

            16c08f01-c5ee-45e1-889f-ed9e11f2b39e-image.png


            var myName = "tibber.createchartdata";

            var logOn = false; // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden immer ausgegeben.
            var forceCreation = false; // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)

            var tibberPricesToday = "tibber.0.priceInfo.today."; // mit . am Ende!
            var tibberPricesTomorrow = "tibber.0.priceInfo.tomorrow."; // mit . am Ende!

            var tibberStartsAt = "startsAt";
            var tibberTotal = "total";

            // Datenpunkte anlegen:
            // -----------------------------------------------------------------------------
            var idChartData = "tibber.prices.chartData"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
            createState(idChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
            name: 'Chart-Data Price Forecast',
            desc: 'Chart-Data Price Forecast',
            type: 'string',
            role: 'value'
            });

            // Datenpunkte anlegen:
            // -----------------------------------------------------------------------------
            var idBarChartData = "tibber.prices.barChartData"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
            createState(idBarChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
            name: 'Bar Chart-Data Price Forecast',
            desc: 'Bar Chart-Data Price Forecast',
            type: 'string',
            role: 'value'
            });

            createBarChartData();

            // Cron-Job, zum Stundenwechsel
            // Stundenwechsel, Ausführen immer um *:00:10
            schedule('10 0 * * * *', function () {createBarChartData()});

            function createBarChartData () {
            if(logOn) console.log(myName + " Stundenwechsel");

            let barChart = [];
            
            var jetzt = new Date(Date.now());
            var aktStunde = jetzt.getHours();
            var unixTimestamp=new Date().getTime();
            
            // bis zu 18 Stunden in die Zukunft
            const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
            
            for (let offset of offsets)
            {
                // Template Objekt für BarChart erzeugen
                let itemData ={label:"", value:0.0, dataColor: "#c2c2c2", valueColor: "#dddddd"}; //, valueAppendix: "", valueColor: #ffffff"
            
                // Vorbereitung um Werte aus Tibber Adapter zu holen         
                var prefix="";
                aktStunde=jetzt.getHours()+offset;
                if (aktStunde>23)
                {
                    aktStunde=aktStunde-24;
                    prefix=tibberPricesTomorrow;
                }
                else
                {
                    prefix=tibberPricesToday;
                }
            
                var strStunde = ("0" + aktStunde.toString()).slice(-2);
                itemData['label']=strStunde;
            
                prefix=prefix+strStunde+'.';
            
                var aktPrice=getState(prefix+tibberTotal).val;
            
                // falls keine Daten vorliegen, weiter ohne diese ItemData an das Chart-Objekt anzuhängen
                if (aktPrice==null && aktStunde>=0)
                    continue;
            
                // von 0.2345 € auf Cent mit einer Nachkomma-Stelle umrechnen
                itemData['value']=Math.round(aktPrice*1000)/10.0;
            
                // Je nach Preis den Balken einfärben
                if (aktPrice<0.30)
                    itemData['dataColor']="green";
                else
                if (aktPrice<0.40)
                    itemData['dataColor']="yellow";
                else
                if (aktPrice<0.50)
                    itemData['dataColor']="orange";
                else
                if (aktPrice<0.60)
                    itemData['dataColor']="red";
                else
                    itemData['dataColor']="magenta";
            
                // Daten für diese Stunde dem Objekt zufügen
                barChart.push(itemData);
            }
            
            // fertiges Objekt in den Datenpunkt als JSON schreiben
            setState("javascript."+instance+"."+idBarChartData, JSON.stringify(barChart), true);
            

            };

            function createChartData () {
            if(logOn) console.log(myName + " Stundenwechsel");

            let chart = {};
            let axisLabels =[];
            let values =[];
            let datalabels =[];
            
            var jetzt = new Date(Date.now());
            var aktStunde = jetzt.getHours();
            var unixTimestamp=new Date().getTime();
            
            const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
            
            // Spaltenbeschriftungen
            
            //chart.graphs[0].axisLables=axisLabels;
            chart.graphs=new Array();
            chart.graphs.push({});
            chart.graphs[0].color="green";
            chart.graphs[0].type="bar";
            chart.graphs[0].datalabel_rotation=-90;
            chart.graphs[0].datalabel_color="lightgreen";
            chart.graphs[0].datalabel_fontSize=10;
            chart.graphs[0].yAxis_title_text="cent";
            chart.graphs[0].yAxis_show=true;
            chart.graphs[0].legendText="Uhrzeit";
            chart.graphs[0].datalabel_show=true;
            chart.graphs[0].yAxis_minimumDigits=1;
            chart.graphs[0].yAxis_maximumDigits=1;
            
            for (let offset of offsets)
            {
                // Spaltenbeschriftungen
                aktStunde=jetzt.getHours()+offset;
                if (aktStunde>23)
                    aktStunde=aktStunde-24;
                var strStunde = ("0" + aktStunde.toString()).slice(-2);
                axisLabels.push(strStunde)
                //axisLabels.push(aktStunde);
                       
                var prefix="";
                aktStunde=jetzt.getHours()+offset;
                if (aktStunde>23)
                {
                    aktStunde=aktStunde-24;
                    prefix=tibberPricesTomorrow+".";
                }
                else
                {
                    prefix=tibberPricesToday+".";
                }
            
                strStunde = ("0" + aktStunde.toString()).slice(-2);
                prefix=prefix+strStunde+'.';
            
                //if(logOn) console.log(myName + " Stundenwechsel, akt Stunde "+strStunde+", prefix "+prefix);
                var aktPrice=getState(prefix+tibberTotal).val;
                //var aktStartAt=getState(prefix+tibberStartsAt).val;
                //if(logOn) console.log(myName + " aktPrice "+aktPrice+", aktStartAt "+aktStartAt);
                //let itemData ={t:0, y:0.0};
                //itemData['t']=unixTimestamp+3600*offset;
                //itemData['y']=aktPrice;
                values.push(Math.round(aktPrice*1000)/10.0);
                var cents=(Math.round(aktPrice*1000)/10.0).toString();
                datalabels.push(cents);
            
            }
            chart.graphs[0].data=values;
            chart.graphs[0].datalabel_override=datalabels;
            chart.data=values;
            chart.datalabel_override=datalabels;
            chart.axisLables=axisLabels;
            
            setState("javascript."+instance+"."+idChartData, JSON.stringify(chart));
            

            };

            View


            {
            "settings": {
            "style": {
            "background-color": "",
            "background-image": "",
            "background-repeat": "",
            "background-attachment": "",
            "background-position": "",
            "background-size": "",
            "background-clip": "",
            "background-origin": "",
            "background_class": ""
            },
            "theme": "redmond",
            "sizex": "1280",
            "sizey": "800",
            "gridSize": "10",
            "snapType": 2,
            "class": "no-invert",
            "useBackground": false,
            "useAsDefault": false,
            "alwaysRender": false
            },
            "widgets": {
            "e00001": {
            "tpl": "tplHtml",
            "data": {
            "g_fixed": true,
            "g_visibility": false,
            "g_css_font_text": false,
            "g_css_background": false,
            "g_css_shadow_padding": false,
            "g_css_border": false,
            "g_gestures": false,
            "g_signals": false,
            "g_last_change": false,
            "visibility-cond": "==",
            "visibility-val": "",
            "visibility-groups-action": "hide",
            "refreshInterval": "0",
            "signals-cond-0": "==",
            "signals-val-0": true,
            "signals-icon-0": "/vis.0/main/lowbattery.png",
            "signals-icon-size-0": 0,
            "signals-blink-0": false,
            "signals-horz-0": 0,
            "signals-vert-0": 0,
            "signals-hide-edit-0": false,
            "signals-cond-1": "==",
            "signals-val-1": true,
            "signals-icon-1": "/vis.0/main/lowbattery.png",
            "signals-icon-size-1": 0,
            "signals-blink-1": false,
            "signals-horz-1": 0,
            "signals-vert-1": 0,
            "signals-hide-edit-1": false,
            "signals-cond-2": "==",
            "signals-val-2": true,
            "signals-icon-2": "/vis.0/main/lowbattery.png",
            "signals-icon-size-2": 0,
            "signals-blink-2": false,
            "signals-horz-2": 0,
            "signals-vert-2": 0,
            "signals-hide-edit-2": false,
            "lc-type": "last-change",
            "lc-is-interval": true,
            "lc-is-moment": false,
            "lc-format": "",
            "lc-position-vert": "top",
            "lc-position-horz": "right",
            "lc-offset-vert": 0,
            "lc-offset-horz": 0,
            "lc-font-size": "12px",
            "lc-font-family": "",
            "lc-font-style": "",
            "lc-bkg-color": "",
            "lc-color": "",
            "lc-border-width": "0",
            "lc-border-style": "",
            "lc-border-color": "",
            "lc-border-radius": 10,
            "lc-zindex": 0,
            "class": "no-invert",
            "locked": false,
            "html": ""
            },
            "style": {
            "left": "0px",
            "top": "169px",
            "width": "1264px",
            "height": "619px",
            "z-index": 0,
            "font-family": "Jura-DemiBold"
            },
            "widgetSet": "basic"
            },
            "e00002": {
            "tpl": "tplContainerView",
            "data": {
            "g_fixed": true,
            "g_visibility": false,
            "g_css_font_text": false,
            "g_css_background": false,
            "g_css_shadow_padding": false,
            "g_css_border": false,
            "g_gestures": false,
            "g_signals": false,
            "g_last_change": false,
            "visibility-cond": "==",
            "visibility-val": 1,
            "visibility-groups-action": "hide",
            "signals-cond-0": "==",
            "signals-val-0": true,
            "signals-icon-0": "/vis.0/main/lowbattery.png",
            "signals-icon-size-0": 0,
            "signals-blink-0": false,
            "signals-horz-0": 0,
            "signals-vert-0": 0,
            "signals-hide-edit-0": false,
            "signals-cond-1": "==",
            "signals-val-1": true,
            "signals-icon-1": "/vis.0/main/lowbattery.png",
            "signals-icon-size-1": 0,
            "signals-blink-1": false,
            "signals-horz-1": 0,
            "signals-vert-1": 0,
            "signals-hide-edit-1": false,
            "signals-cond-2": "==",
            "signals-val-2": true,
            "signals-icon-2": "/vis.0/main/lowbattery.png",
            "signals-icon-size-2": 0,
            "signals-blink-2": false,
            "signals-horz-2": 0,
            "signals-vert-2": 0,
            "signals-hide-edit-2": false,
            "lc-type": "last-change",
            "lc-is-interval": true,
            "lc-is-moment": false,
            "lc-format": "",
            "lc-position-vert": "top",
            "lc-position-horz": "right",
            "lc-offset-vert": 0,
            "lc-offset-horz": 0,
            "lc-font-size": "12px",
            "lc-font-family": "",
            "lc-font-style": "",
            "lc-bkg-color": "",
            "lc-color": "",
            "lc-border-width": "0",
            "lc-border-style": "",
            "lc-border-color": "",
            "lc-border-radius": 10,
            "lc-zindex": 0,
            "contains_view": "A_Menu",
            "name": "VIEW_Header-Menü",
            "locked": false
            },
            "style": {
            "left": "0px",
            "top": "0px",
            "width": "1280px",
            "height": "180px",
            "font-family": "Jura-DemiBold"
            },
            "widgetSet": "basic"
            },
            "e00003": {
            "tpl": "tplHtmlNav",
            "data": {
            "g_fixed": true,
            "g_visibility": false,
            "g_css_font_text": false,
            "g_css_background": false,
            "g_css_shadow_padding": false,
            "g_css_border": false,
            "g_gestures": false,
            "g_signals": false,
            "g_last_change": false,
            "visibility-cond": "==",
            "visibility-val": 1,
            "visibility-groups-action": "hide",
            "signals-cond-0": "==",
            "signals-val-0": true,
            "signals-icon-0": "/vis.0/main/lowbattery.png",
            "signals-icon-size-0": 0,
            "signals-blink-0": false,
            "signals-horz-0": 0,
            "signals-vert-0": 0,
            "signals-hide-edit-0": false,
            "signals-cond-1": "==",
            "signals-val-1": true,
            "signals-icon-1": "/vis.0/main/lowbattery.png",
            "signals-icon-size-1": 0,
            "signals-blink-1": false,
            "signals-horz-1": 0,
            "signals-vert-1": 0,
            "signals-hide-edit-1": false,
            "signals-cond-2": "==",
            "signals-val-2": true,
            "signals-icon-2": "/vis.0/main/lowbattery.png",
            "signals-icon-size-2": 0,
            "signals-blink-2": false,
            "signals-horz-2": 0,
            "signals-vert-2": 0,
            "signals-hide-edit-2": false,
            "lc-type": "last-change",
            "lc-is-interval": true,
            "lc-is-moment": false,
            "lc-format": "",
            "lc-position-vert": "top",
            "lc-position-horz": "right",
            "lc-offset-vert": 0,
            "lc-offset-horz": 0,
            "lc-font-size": "12px",
            "lc-font-family": "",
            "lc-font-style": "",
            "lc-bkg-color": "",
            "lc-color": "",
            "lc-border-width": "0",
            "lc-border-style": "",
            "lc-border-color": "",
            "lc-border-radius": 10,
            "lc-zindex": 0,
            "html": "Tibber",
            "class": "menu-item",
            "nav_view": "Tibber",
            "hide_effect": "show",
            "show_effect": "show",
            "sync": true,
            "body-background": "#ffffff"
            },
            "style": {
            "left": "378px",
            "top": "50px",
            "opacity": "",
            "z-index": "99",
            "width": "auto",
            "font-family": "Jura-DemiBold"
            },
            "widgetSet": "basic"
            },
            "e00004": {
            "tpl": "tplVis-materialdesign-Chart-Bar",
            "data": {
            "oid": "javascript.0.tibber.prices.barChartData",
            "g_fixed": true,
            "g_visibility": false,
            "g_css_font_text": true,
            "g_css_background": false,
            "g_css_shadow_padding": false,
            "g_css_border": false,
            "g_gestures": false,
            "g_signals": false,
            "g_last_change": false,
            "visibility-cond": "==",
            "visibility-val": 1,
            "visibility-groups-action": "hide",
            "chartDataMethod": "jsonStringObject",
            "dataCount": "0",
            "chartType": "vertical",
            "backgroundColor": "#mdwTheme:vis-materialdesign.0.colors.charts.background",
            "chartAreaBackgroundColor": "#mdwTheme:vis-materialdesign.0.colors.charts.background_chart",
            "titleLayout": "#mdwTheme:vis-materialdesign.0.fontSizes.card.title",
            "titleFontFamily": "Jura-DemiBold",
            "colorBackground": "#mdwTheme:vis-materialdesign.0.colors.card.background",
            "colorTitleSectionBackground": "#mdwTheme:vis-materialdesign.0.colors.card.background_title",
            "colorTextSectionBackground": "#mdwTheme:vis-materialdesign.0.colors.card.background_body",
            "colorTitle": "#mdwTheme:vis-materialdesign.0.colors.card.title",
            "globalColor": "#mdwTheme:vis-materialdesign.0.colors.charts.global",
            "hoverColor": "#mdwTheme:vis-materialdesign.0.colors.charts.bar.hover",
            "hoverBorderColor": "#mdwTheme:vis-materialdesign.0.colors.charts.bar.hover_border",
            "showValues": "showValuesOn",
            "valuesFontColor": "#mdwTheme:vis-materialdesign.0.colors.charts.value",
            "valuesFontFamily": "Jura-Medium",
            "valuesFontSize": "17",
            "valuesPositionAnchor": "end",
            "valuesPositionAlign": "center",
            "valuesTextAlign": "center",
            "yAxisPosition": "left",
            "yAxisTitleColor": "#mdwTheme:vis-materialdesign.0.colors.charts.y_axis_title",
            "yAxisTitleFontFamily": "Jura-DemiBold",
            "yAxisTitleFontSize": "0",
            "yAxisValueLabelColor": "#dddddd",
            "yAxisValueFontFamily": "#mdwTheme:vis-materialdesign.0.fonts.charts.y_axis_values",
            "yAxisValueFontSize": "#mdwTheme:vis-materialdesign.0.fontSizes.charts.y_axis_values",
            "yAxisValueDistanceToAxis": "10",
            "yAxisShowAxis": "true",
            "yAxisShowAxisLabels": "true",
            "yAxisShowGridLines": "true",
            "yAxisGridLinesColor": "#ffffff",
            "yAxisShowTicks": "true",
            "yAxisZeroLineColor": "#mdwTheme:vis-materialdesign.0.colors.charts.y_axis_zeroline",
            "xAxisPosition": "bottom",
            "xAxisTicksSource": "auto",
            "xAxisTitleColor": "#mdwTheme:vis-materialdesign.0.colors.charts.value",
            "xAxisTitleFontFamily": "Jura-DemiBold",
            "xAxisTitleFontSize": "2",
            "xAxisValueLabelColor": "#dddddd",
            "xAxisValueFontFamily": "#mdwTheme:vis-materialdesign.0.fonts.charts.x_axis_values",
            "xAxisValueFontSize": "#mdwTheme:vis-materialdesign.0.fontSizes.charts.x_axis_values",
            "xAxisValueDistanceToAxis": "0",
            "xAxisShowAxis": "true",
            "xAxisShowAxisLabels": "true",
            "xAxisShowGridLines": "true",
            "xAxisGridLinesColor": "#ffffff",
            "xAxisShowTicks": "true",
            "xAxisZeroLineColor": "#mdwTheme:vis-materialdesign.0.colors.charts.x_axis_zeroline",
            "xAxisMinRotation": "0",
            "xAxisMaxRotation": "0",
            "legendPosition": "right",
            "legendFontColor": "#mdwTheme:vis-materialdesign.0.colors.charts.legend",
            "legendFontFamily": "#mdwTheme:vis-materialdesign.0.fonts.charts.legend",
            "legendFontSize": "#mdwTheme:vis-materialdesign.0.fontSizes.charts.legend",
            "legendPointStyle": "true",
            "showTooltip": "true",
            "tooltipBackgroundColor": "#mdwTheme:vis-materialdesign.0.colors.charts.tooltip_background",
            "tooltipShowColorBox": "true",
            "tooltipTitleFontColor": "#mdwTheme:vis-materialdesign.0.colors.charts.tooltip_title",
            "tooltipTitleFontFamily": "#mdwTheme:vis-materialdesign.0.fonts.charts.tooltip_title",
            "tooltipTitleFontSize": "#mdwTheme:vis-materialdesign.0.fontSizes.charts.tooltip_title",
            "tooltipBodyFontColor": "#mdwTheme:vis-materialdesign.0.colors.charts.tooltip_text",
            "tooltipBodyFontFamily": "#mdwTheme:vis-materialdesign.0.fonts.charts.tooltip_text",
            "tooltipBodyFontSize": "#mdwTheme:vis-materialdesign.0.fontSizes.charts.tooltip_text",
            "signals-cond-0": "==",
            "signals-val-0": true,
            "signals-icon-0": "/vis/signals/lowbattery.png",
            "signals-icon-size-0": 0,
            "signals-blink-0": false,
            "signals-horz-0": 0,
            "signals-vert-0": 0,
            "signals-hide-edit-0": false,
            "signals-cond-1": "==",
            "signals-val-1": true,
            "signals-icon-1": "/vis/signals/lowbattery.png",
            "signals-icon-size-1": 0,
            "signals-blink-1": false,
            "signals-horz-1": 0,
            "signals-vert-1": 0,
            "signals-hide-edit-1": false,
            "signals-cond-2": "==",
            "signals-val-2": true,
            "signals-icon-2": "/vis/signals/lowbattery.png",
            "signals-icon-size-2": 0,
            "signals-blink-2": false,
            "signals-horz-2": 0,
            "signals-vert-2": 0,
            "signals-hide-edit-2": false,
            "lc-type": "last-change",
            "lc-is-interval": true,
            "lc-is-moment": false,
            "lc-format": "",
            "lc-position-vert": "top",
            "lc-position-horz": "right",
            "lc-offset-vert": 0,
            "lc-offset-horz": 0,
            "lc-font-size": "12px",
            "lc-font-family": "",
            "lc-font-style": "",
            "lc-bkg-color": "",
            "lc-color": "",
            "lc-border-width": "0",
            "lc-border-style": "",
            "lc-border-color": "",
            "lc-border-radius": 10,
            "lc-zindex": 0,
            "chartPaddingBottom": "1",
            "cardUse": false,
            "xAxisTitle": "",
            "showLegend": false,
            "axisValueAppendText": "",
            "axisLabelAutoSkip": false,
            "g_layoutForData_§0": false,
            "g_oids": false,
            "barWidth": "55",
            "valuesRotation": "0",
            "valuesPositionOffset": "",
            "valuesMaxDecimals": "1",
            "valuesMinDecimals": "1",
            "class": "no-invert",
            "chartPaddingTop": "0",
            "valuesSteps": "1",
            "colorScheme": ""
            },
            "style": {
            "left": "40px",
            "top": "210px",
            "width": "1000px",
            "height": "580px",
            "z-index": "100",
            "font-family": "Jura-DemiBold"
            },
            "widgetSet": "materialdesign"
            },
            "e00005": {
            "tpl": "tplHtml",
            "data": {
            "g_fixed": true,
            "g_visibility": false,
            "g_css_font_text": false,
            "g_css_background": true,
            "g_css_shadow_padding": false,
            "g_css_border": true,
            "g_gestures": false,
            "g_signals": false,
            "g_last_change": false,
            "visibility-cond": "==",
            "visibility-val": 1,
            "visibility-groups-action": "hide",
            "refreshInterval": "0",
            "signals-cond-0": "==",
            "signals-val-0": true,
            "signals-icon-0": "/vis.0/main/lowbattery.png",
            "signals-icon-size-0": 0,
            "signals-blink-0": false,
            "signals-horz-0": 0,
            "signals-vert-0": 0,
            "signals-hide-edit-0": false,
            "signals-cond-1": "==",
            "signals-val-1": true,
            "signals-icon-1": "/vis.0/main/lowbattery.png",
            "signals-icon-size-1": 0,
            "signals-blink-1": false,
            "signals-horz-1": 0,
            "signals-vert-1": 0,
            "signals-hide-edit-1": false,
            "signals-cond-2": "==",
            "signals-val-2": true,
            "signals-icon-2": "/vis.0/main/lowbattery.png",
            "signals-icon-size-2": 0,
            "signals-blink-2": false,
            "signals-horz-2": 0,
            "signals-vert-2": 0,
            "signals-hide-edit-2": false,
            "lc-type": "last-change",
            "lc-is-interval": true,
            "lc-is-moment": false,
            "lc-format": "",
            "lc-position-vert": "top",
            "lc-position-horz": "right",
            "lc-offset-vert": 0,
            "lc-offset-horz": 0,
            "lc-font-size": "12px",
            "lc-font-family": "",
            "lc-font-style": "",
            "lc-bkg-color": "",
            "lc-color": "",
            "lc-border-width": "0",
            "lc-border-style": "",
            "lc-border-color": "",
            "lc-border-radius": 10,
            "lc-zindex": 0,
            "class": "no-invert"
            },
            "style": {
            "left": "6px",
            "top": "197px",
            "width": "1262px",
            "height": "582px",
            "z-index": "0",
            "background-color": "#000000",
            "border-radius": "10px",
            "font-family": "Jura-DemiBold"
            },
            "widgetSet": "basic"
            }
            },
            "name": "Tibber",
            "filterList": []
            }

            und diesen Chart (der wurde schon auf den neuen Tibberconnect Adapter umgeschrieben, sieht aber nicht so schön aus
            de171329-b9f8-48e2-be79-8d1df7762192-image.png

            /****************************************************************************************************
            Script, um mittels Google Charts einen Wetter-Graph anzuzeigen
            Aktuelle Version: https://github.com/Mic-M/iobroker.google-charts-example/
            Support: https://forum.iobroker.net/topic/22779/vorlage-google-charts-beispiel
            Autor: Mic (ioBroker-Forum) / Mic-M (Github)
            changes for tibber: theGrinch (ioBroker-Forum), Tibber invite: https://invite.tibber.com/3ixvd5z5
            Change Log:
            0.3.2 changed for tibberconnect adapter
            0.3.1 show energy prices from tibber
            0.3 Mic * Added line color - https://forum.iobroker.net/post/389919
            0.2 Mic + Fix/improve file creation.
            0.1 Mic - Initial Release
            /
            /
            *

            Konfiguration
            ******************************************************************************/
            // Der Pfad der HTML-Datei, einfach entsprechend anpassen.
            // Die Datei wird abgelegt unterhalb von '/opt/iobroker/iobroker-data/files/vis.0/'
            const FILE_PATH = 'main/googleChartTibber2.html';

            // Schedule
            const M_SCHEDULE = '2 * * * *'; // Jede Stunde +2 Minuten

            // Ausgaben für Debug
            const LOG_DEBUG = true;

            /*******************************************************************************

            Global constants/variables
            /
            let mSchedule; // for the schedule
            /

            Executed on every script start.
            *******************************************************************************/
            main();
            function main() {

            // Write the file initially on script start
            writeGoogleHtml(function(success) {
            if (LOG_DEBUG) log('[Debug] We are now in the callback of writeWeatherHtml().');
            if (success) {
            if (LOG_DEBUG) log('[Debug] Successfully executed writeWeatherHtml(), so we schedule the updates.');
            clearSchedule(mSchedule);
            mSchedule = schedule(M_SCHEDULE, writeGoogleHtml);
            } else {
            log('File not successfully created/updated, so we stop at this point.', 'error');
            }
            });

            }

            /**

            Writing Google html file.
            @param {object} [callback] Optional: A callback function which is executed after proceeding this function.
            */
            function writeGoogleHtml(callback = undefined) {
            let result = writeFile('vis.0', FILE_PATH, buildHTML(), function (error) {
            if (error) {
            log('[Error] Error while executing writeFile(): ' + error);
            if (typeof callback === 'function') { // execute if a function was provided to parameter callback
            if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
            return callback(false);
            } else {
            return;
            }
            } else {
            if (LOG_DEBUG) log('[Debug] File successfully written: [' + FILE_PATH + ']');
            if (typeof callback === 'function') { // execute if a function was provided to parameter callback
            if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
            return callback(true);
            } else {
            return;
            }
            }
            })
            return result;
            }
            function buildHTML() {
            let html = '';
            html += '<html>\n';
            html += '<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>\n';
            html += '<script type="text/javascript">\n';
            html += "google.charts.load('current', {'packages':['corechart']});\n";
            html += "google.charts.setOnLoadCallback(drawChart);\n";
            html += "function drawChart() {"; + "\n";

            html += "var data = new google.visualization.DataTable();\n";
            html += "data.addColumn('number', 'hour');\n";
            html += "data.addColumn('number', 'today');\n";
            html += "data.addColumn({type: 'number', role: 'annotation'});\n";
            html += "data.addColumn('number', 'tomorrow');\n";
            html += "data.addColumn({type: 'number', role: 'annotation'});\n";
            for (let i = 0; i <= 9; i++) {
            let tLow = getState('tibberconnect.0.Homes.63e548f3-8b32-4eed-9c9b-9eacb9f9558e.PricesToday.' + i + '.total').val;
            let tHigh = getState('tibberconnect.0.Homes.63e548f3-8b32-4eed-9c9b-9eacb9f9558e.PricesTomorrow.' + i + '.total').val;
            html += " data.addRow([" + i + ", " + tLow + ", " + tLow + ", " + tHigh + ", " + tHigh + "]);\n";
            }
            for (let i = 10; i <= 23; i++) {
            let tLow = getState('tibberconnect.0.Homes.63e548f3-8b32-4eed-9c9b-9eacb9f9558e.PricesToday.' + i + '.total').val;
            let tHigh = getState('tibberconnect.0.Homes.63e548f3-8b32-4eed-9c9b-9eacb9f9558e.PricesTomorrow.' + i + '.total').val;
            html += " data.addRow([" + i + ", " + tLow + ", " + tLow + ", " + tHigh + ", " + tHigh + "]);\n";
            }

            // See: https://developers.google.com/chart/interactive/docs/gallery/linechart#configuration-options
            html += "var options = {\n";
            // Line colors (HTML): lower upper
            html += " colors: ['CornflowerBlue', 'DarkTurquoise'],\n";
            html += " curveType: 'function', backgroundColor: 'transparent', pointSize: 4,\n";
            html += " hAxis: { textStyle:{color:'black'}},\n";
            html += " vAxis: { textPosition: 'none', textStyle:{color:'red'},\n";
            html += " baselineColor:'transparent', gridlines:{count:0} }, legend: { position: 'bottom' },\n";
            html += " annotations: { stem: { length: 5, color: 'transparent' }, textStyle: {fontSize: 10, alwaysOutside: true, bold: false} }\n";
            html += "};\n";
            html += "var chart = new google.visualization.LineChart(document.getElementById('mychart'));\n";
            html += "chart.draw(data, options);\n";
            html += "}\n";
            html += "</script>\n";
            html += '<div id="mychart" style="width: 700px; height: 400px;"></div>\n';
            html += '</html>\n';
            return html;
            }

            T Offline
            T Offline
            theGrinch
            schrieb am zuletzt editiert von
            #55

            @mikerow sagte in Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben:

            und diesen Chart (der wurde schon auf den neuen Tibberconnect Adapter umgeschrieben, sieht aber nicht so schön aus

            Ey, ich kann hier auch lesen ;)

            Kannst du die Formatierung von dem BarChart-Skript in deinem Post mal fixen oder mit den Link zum Originalskript schicken? Das sollte relativ gut anpassbar sein an Werte aus dem neuen Adapter und/oder hier.
            Nur mit der kaputten Formatierung komm ich nicht klar.

            M 1 Antwort Letzte Antwort
            0
            • T theGrinch

              @mikerow sagte in Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben:

              und diesen Chart (der wurde schon auf den neuen Tibberconnect Adapter umgeschrieben, sieht aber nicht so schön aus

              Ey, ich kann hier auch lesen ;)

              Kannst du die Formatierung von dem BarChart-Skript in deinem Post mal fixen oder mit den Link zum Originalskript schicken? Das sollte relativ gut anpassbar sein an Werte aus dem neuen Adapter und/oder hier.
              Nur mit der kaputten Formatierung komm ich nicht klar.

              M Offline
              M Offline
              MikeRow
              schrieb am zuletzt editiert von
              #56

              @thegrinch

              Hi, Original Post hier https://forum.iobroker.net/topic/47195/diagramm-mit-festen-werten-in-vis-nur-wie/13?lang=en-GB von Familienvater.

              var myName = "tibber.createchartdata";
               
              var logOn           = false;     // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden immer ausgegeben.
              var forceCreation    = false;    // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
               
              var tibberPricesToday = "tibber.0.priceInfo.today.";        // mit . am Ende!
              var tibberPricesTomorrow = "tibber.0.priceInfo.tomorrow.";  // mit . am Ende!
               
              var tibberStartsAt = "startsAt";
              var tibberTotal = "total";
               
               
              // Datenpunkte anlegen:
              // -----------------------------------------------------------------------------
              var idChartData = "tibber.prices.chartData";                      // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
              createState(idChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
                   name: 'Chart-Data Price Forecast',
                   desc: 'Chart-Data Price Forecast',
                   type: 'string',
                   role: 'value'
              });
               
              // Datenpunkte anlegen:
              // -----------------------------------------------------------------------------
              var idBarChartData = "tibber.prices.barChartData";                      // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
              createState(idBarChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
                   name: 'Bar Chart-Data Price Forecast',
                   desc: 'Bar Chart-Data Price Forecast',
                   type: 'string',
                   role: 'value'
              });
               
              createBarChartData();
               
              // Cron-Job, zum Stundenwechsel
              // Stundenwechsel, Ausführen immer um *:00:10
              schedule('10 0 * * * *', function () {createBarChartData()});
               
              function createBarChartData () {    
              	if(logOn) console.log(myName + " Stundenwechsel");
                  
                  let barChart = [];
               
                  var jetzt = new Date(Date.now());
                  var aktStunde = jetzt.getHours();
                  var unixTimestamp=new Date().getTime();
               
                  // bis zu 18 Stunden in die Zukunft
                  const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
               
                  for (let offset of offsets)
                  {
                      // Template Objekt für BarChart erzeugen
                      let itemData ={label:"", value:0.0, dataColor: "#c2c2c2", valueColor: "#dddddd"}; //, valueAppendix: "", valueColor: #ffffff"
               
                      // Vorbereitung um Werte aus Tibber Adapter zu holen         
                      var prefix="";
                      aktStunde=jetzt.getHours()+offset;
                      if (aktStunde>23)
                      {
                          aktStunde=aktStunde-24;
                          prefix=tibberPricesTomorrow;
                      }
                      else
                      {
                          prefix=tibberPricesToday;
                      }
               
                      var strStunde = ("0" + aktStunde.toString()).slice(-2);
                      itemData['label']=strStunde;
               
                      prefix=prefix+strStunde+'.';
               
                      var aktPrice=getState(prefix+tibberTotal).val;
               
                      // falls keine Daten vorliegen, weiter ohne diese ItemData an das Chart-Objekt anzuhängen
                      if (aktPrice==null && aktStunde>=0)
                          continue;
               
                      // von 0.2345 € auf Cent mit einer Nachkomma-Stelle umrechnen
                      itemData['value']=Math.round(aktPrice*1000)/10.0;
               
                      // Je nach Preis den Balken einfärben
                      if (aktPrice<0.30)
                          itemData['dataColor']="green";
                      else
                      if (aktPrice<0.40)
                          itemData['dataColor']="yellow";
                      else
                      if (aktPrice<0.50)
                          itemData['dataColor']="orange";
                      else
                      if (aktPrice<0.60)
                          itemData['dataColor']="red";
                      else
                          itemData['dataColor']="magenta";
               
                      // Daten für diese Stunde dem Objekt zufügen
                      barChart.push(itemData);
                  }
               
                  // fertiges Objekt in den Datenpunkt als JSON schreiben
                  setState("javascript."+instance+"."+idBarChartData, JSON.stringify(barChart), true);
               
              };
               
              function createChartData () {    
              	if(logOn) console.log(myName + " Stundenwechsel");
                  
                  let chart = {};
                  let axisLabels =[];
                  let values =[];
                  let datalabels =[];
               
                  var jetzt = new Date(Date.now());
                  var aktStunde = jetzt.getHours();
                  var unixTimestamp=new Date().getTime();
               
                  const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
               
                  // Spaltenbeschriftungen
               
                  //chart.graphs[0].axisLables=axisLabels;
                  chart.graphs=new Array();
                  chart.graphs.push({});
                  chart.graphs[0].color="green";
                  chart.graphs[0].type="bar";
                  chart.graphs[0].datalabel_rotation=-90;
                  chart.graphs[0].datalabel_color="lightgreen";
                  chart.graphs[0].datalabel_fontSize=10;
                  chart.graphs[0].yAxis_title_text="cent";
                  chart.graphs[0].yAxis_show=true;
                  chart.graphs[0].legendText="Uhrzeit";
                  chart.graphs[0].datalabel_show=true;
                  chart.graphs[0].yAxis_minimumDigits=1;
                  chart.graphs[0].yAxis_maximumDigits=1;
               
                  for (let offset of offsets)
                  {
                      // Spaltenbeschriftungen
                      aktStunde=jetzt.getHours()+offset;
                      if (aktStunde>23)
                          aktStunde=aktStunde-24;
                      var strStunde = ("0" + aktStunde.toString()).slice(-2);
                      axisLabels.push(strStunde)
                      //axisLabels.push(aktStunde);
                             
                      var prefix="";
                      aktStunde=jetzt.getHours()+offset;
                      if (aktStunde>23)
                      {
                          aktStunde=aktStunde-24;
                          prefix=tibberPricesTomorrow+".";
                      }
                      else
                      {
                          prefix=tibberPricesToday+".";
                      }
               
                      strStunde = ("0" + aktStunde.toString()).slice(-2);
                      prefix=prefix+strStunde+'.';
               
                      //if(logOn) console.log(myName + " Stundenwechsel, akt Stunde "+strStunde+", prefix "+prefix);
                      var aktPrice=getState(prefix+tibberTotal).val;
                      //var aktStartAt=getState(prefix+tibberStartsAt).val;
                      //if(logOn) console.log(myName + " aktPrice "+aktPrice+", aktStartAt "+aktStartAt);
                      //let itemData ={t:0, y:0.0};
                      //itemData['t']=unixTimestamp+3600*offset;
                      //itemData['y']=aktPrice;
                      values.push(Math.round(aktPrice*1000)/10.0);
                      var cents=(Math.round(aktPrice*1000)/10.0).toString();
                      datalabels.push(cents);
               
                  }
                  chart.graphs[0].data=values;
                  chart.graphs[0].datalabel_override=datalabels;
                  chart.data=values;
                  chart.datalabel_override=datalabels;
                  chart.axisLables=axisLabels;
               
                  setState("javascript."+instance+"."+idChartData, JSON.stringify(chart));
               
              };
              
              
              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                theGrinch
                schrieb am zuletzt editiert von
                #57

                @mikerow tadaaaaa, angepasstes Skript.
                Du musst nur deine "home" reinkopieren in Zeile 6+7.

                Ich habe es jetzt für den tibberconnect angepasst, das war einfacher.

                var myName = "tibber.createchartdata";
                 
                var logOn           = false;     // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden immer ausgegeben.
                var forceCreation    = false;    // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
                 
                var tibberPricesToday = "tibberconnect.0.Homes.*****.PricesToday.";        // mit . am Ende!
                var tibberPricesTomorrow = "tibberconnect.0.Homes.*****.PricesTomorrow.";  // mit . am Ende!
                 
                var tibberStartsAt = "startsAt";
                var tibberTotal = "total";
                 
                 
                // Datenpunkte anlegen:
                // -----------------------------------------------------------------------------
                var idChartData = "tibber.prices.chartData";                      // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
                createState(idChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
                     name: 'Chart-Data Price Forecast',
                     desc: 'Chart-Data Price Forecast',
                     type: 'string',
                     role: 'value'
                });
                 
                // Datenpunkte anlegen:
                // -----------------------------------------------------------------------------
                var idBarChartData = "tibber.prices.barChartData";                      // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
                createState(idBarChartData, '[{"label":"15","value":"25.2","dataColor":"#ffffff"},{"label":"16","value":"28.8","dataColor":"#ffffff"},{"label":"17","value":3"5.2","dataColor":"#ffffff"},{"label":"18","value":"33.2","dataColor":"#ffffff"},{"label":"19","value":"20.2","dataColor":"#ffffff"}]', forceCreation, {
                     name: 'Bar Chart-Data Price Forecast',
                     desc: 'Bar Chart-Data Price Forecast',
                     type: 'string',
                     role: 'value'
                });
                 
                createBarChartData();
                 
                // Cron-Job, zum Stundenwechsel
                // Stundenwechsel, Ausführen immer um *:00:10
                schedule('10 0 * * * *', function () {createBarChartData()});
                 
                function createBarChartData () {    
                	if(logOn) console.log(myName + " Stundenwechsel");
                    
                    let barChart = [];
                 
                    var jetzt = new Date(Date.now());
                    var aktStunde = jetzt.getHours();
                    var unixTimestamp=new Date().getTime();
                 
                    // bis zu 18 Stunden in die Zukunft
                    const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
                 
                    for (let offset of offsets)
                    {
                        // Template Objekt für BarChart erzeugen
                        let itemData ={label:"", value:0.0, dataColor: "#c2c2c2", valueColor: "#dddddd"}; //, valueAppendix: "", valueColor: #ffffff"
                 
                        // Vorbereitung um Werte aus Tibber Adapter zu holen         
                        var prefix="";
                        aktStunde=jetzt.getHours()+offset;
                        if (aktStunde>23)
                        {
                            aktStunde=aktStunde-24;
                            prefix=tibberPricesTomorrow;
                        }
                        else
                        {
                            prefix=tibberPricesToday;
                        }
                 
                        var strStunde = (aktStunde.toString()).slice(-2); //("0" + aktStunde.toString()).slice(-2);
                        itemData['label']=strStunde;
                 
                        prefix=prefix+strStunde+'.';
                 
                        var aktPrice=getState(prefix+tibberTotal).val;
                 
                        // falls keine Daten vorliegen, weiter ohne diese ItemData an das Chart-Objekt anzuhängen
                        if (aktPrice==null && aktStunde>=0)
                            continue;
                 
                        // von 0.2345 € auf Cent mit einer Nachkomma-Stelle umrechnen
                        itemData['value']=Math.round(aktPrice*1000)/10.0;
                 
                        // Je nach Preis den Balken einfärben
                        if (aktPrice<0.30)
                            itemData['dataColor']="green";
                        else
                        if (aktPrice<0.40)
                            itemData['dataColor']="yellow";
                        else
                        if (aktPrice<0.50)
                            itemData['dataColor']="orange";
                        else
                        if (aktPrice<0.60)
                            itemData['dataColor']="red";
                        else
                            itemData['dataColor']="magenta";
                 
                        // Daten für diese Stunde dem Objekt zufügen
                        barChart.push(itemData);
                    }
                 
                    // fertiges Objekt in den Datenpunkt als JSON schreiben
                    setState("javascript."+instance+"."+idBarChartData, JSON.stringify(barChart), true);
                 
                };
                 
                function createChartData () {    
                	if(logOn) console.log(myName + " Stundenwechsel");
                    
                    let chart = {};
                    let axisLabels =[];
                    let values =[];
                    let datalabels =[];
                 
                    var jetzt = new Date(Date.now());
                    var aktStunde = jetzt.getHours();
                    var unixTimestamp=new Date().getTime();
                 
                    const offsets=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18];
                 
                    // Spaltenbeschriftungen
                 
                    //chart.graphs[0].axisLables=axisLabels;
                    chart.graphs=new Array();
                    chart.graphs.push({});
                    chart.graphs[0].color="green";
                    chart.graphs[0].type="bar";
                    chart.graphs[0].datalabel_rotation=-90;
                    chart.graphs[0].datalabel_color="lightgreen";
                    chart.graphs[0].datalabel_fontSize=10;
                    chart.graphs[0].yAxis_title_text="cent";
                    chart.graphs[0].yAxis_show=true;
                    chart.graphs[0].legendText="Uhrzeit";
                    chart.graphs[0].datalabel_show=true;
                    chart.graphs[0].yAxis_minimumDigits=1;
                    chart.graphs[0].yAxis_maximumDigits=1;
                 
                    for (let offset of offsets)
                    {
                        // Spaltenbeschriftungen
                        aktStunde=jetzt.getHours()+offset;
                        if (aktStunde>23)
                            aktStunde=aktStunde-24;
                        var strStunde = (aktStunde.toString()).slice(-2); //("0" + aktStunde.toString()).slice(-2);
                        axisLabels.push(strStunde)
                        //axisLabels.push(aktStunde);
                               
                        var prefix="";
                        aktStunde=jetzt.getHours()+offset;
                        if (aktStunde>23)
                        {
                            aktStunde=aktStunde-24;
                            prefix=tibberPricesTomorrow+".";
                        }
                        else
                        {
                            prefix=tibberPricesToday+".";
                        }
                 
                        strStunde = ("0" + aktStunde.toString()).slice(-2);
                        prefix=prefix+strStunde+'.';
                 
                        //if(logOn) console.log(myName + " Stundenwechsel, akt Stunde "+strStunde+", prefix "+prefix);
                        var aktPrice=getState(prefix+tibberTotal).val;
                        //var aktStartAt=getState(prefix+tibberStartsAt).val;
                        //if(logOn) console.log(myName + " aktPrice "+aktPrice+", aktStartAt "+aktStartAt);
                        //let itemData ={t:0, y:0.0};
                        //itemData['t']=unixTimestamp+3600*offset;
                        //itemData['y']=aktPrice;
                        values.push(Math.round(aktPrice*1000)/10.0);
                        var cents=(Math.round(aktPrice*1000)/10.0).toString();
                        datalabels.push(cents);
                 
                    }
                    chart.graphs[0].data=values;
                    chart.graphs[0].datalabel_override=datalabels;
                    chart.data=values;
                    chart.datalabel_override=datalabels;
                    chart.axisLables=axisLabels;
                 
                    setState("javascript."+instance+"."+idChartData, JSON.stringify(chart));
                 
                };
                

                1 Antwort Letzte Antwort
                0
                • T Offline
                  T Offline
                  theGrinch
                  schrieb am zuletzt editiert von
                  #58

                  Ich hätte da noch eine Idee zur Erweiterung der Ausgabe bei EPEX: Kosten.

                  Startzeitpunkt und Endzeitpunkt des Geräts werden ja ausgegeben, sind also bekannt.
                  Die Preise via Tibber auch.
                  Verbrauch sowieso.
                  Also könnte man entweder den Näherungswert (Kosten in den Stunden wo Gerät gelaufen ist mitteln * Verbrauch) oder spezifischer (Stunde 1 + Stunde 2 + (Stunde 3/60*Anzahl gelaufener Minuten) zum jeweiligen Preis) berechnen.
                  Näherungswert würde vermutlich reichen, da ja auch der Verbrauch nicht linear ist - den jetzt noch stündlich zu tracken ist etwas overkill denke ich.

                  Ich bin nicht so wirklich drin im Rechnen mit Zeiten im Blockly. Wenn das jemand aus dem Ärmel schüttelt: gerne. Sonst arbeite ich mich da bei Gelegenheit mal rein.

                  T 1 Antwort Letzte Antwort
                  0
                  • T theGrinch

                    Ich hätte da noch eine Idee zur Erweiterung der Ausgabe bei EPEX: Kosten.

                    Startzeitpunkt und Endzeitpunkt des Geräts werden ja ausgegeben, sind also bekannt.
                    Die Preise via Tibber auch.
                    Verbrauch sowieso.
                    Also könnte man entweder den Näherungswert (Kosten in den Stunden wo Gerät gelaufen ist mitteln * Verbrauch) oder spezifischer (Stunde 1 + Stunde 2 + (Stunde 3/60*Anzahl gelaufener Minuten) zum jeweiligen Preis) berechnen.
                    Näherungswert würde vermutlich reichen, da ja auch der Verbrauch nicht linear ist - den jetzt noch stündlich zu tracken ist etwas overkill denke ich.

                    Ich bin nicht so wirklich drin im Rechnen mit Zeiten im Blockly. Wenn das jemand aus dem Ärmel schüttelt: gerne. Sonst arbeite ich mich da bei Gelegenheit mal rein.

                    T Offline
                    T Offline
                    ThomKast
                    schrieb am zuletzt editiert von ThomKast
                    #59

                    @thegrinch

                    Magst Du mal aufzeigen, wozu die Kosten eines einzelnen Wasch-/Spülvorgang interessant sind? Der Verbrauch wird ja bereits ausgewiesen...
                    Betreibst Du einen Waschsalon?😂?

                    Was ich noch nicht beschrieben habe, ist eine Stunden-/Tages-/Monats-Abrechnung anhand der stündliche Preise. Also quasi als Kontrolle der Tibber-Abrechnung und um die Monatskosten während der Entstehung beurteilen zu können...
                    Wollte aber den ersten Abrechnungsmonat abwarten, um keinen Blödsinn zu veröffentlichen.

                    T 1 Antwort Letzte Antwort
                    0
                    • T ThomKast

                      @thegrinch

                      Magst Du mal aufzeigen, wozu die Kosten eines einzelnen Wasch-/Spülvorgang interessant sind? Der Verbrauch wird ja bereits ausgewiesen...
                      Betreibst Du einen Waschsalon?😂?

                      Was ich noch nicht beschrieben habe, ist eine Stunden-/Tages-/Monats-Abrechnung anhand der stündliche Preise. Also quasi als Kontrolle der Tibber-Abrechnung und um die Monatskosten während der Entstehung beurteilen zu können...
                      Wollte aber den ersten Abrechnungsmonat abwarten, um keinen Blödsinn zu veröffentlichen.

                      T Offline
                      T Offline
                      theGrinch
                      schrieb am zuletzt editiert von
                      #60

                      @thomkast Argumentationshilfe gegenüber der besseren Hälfte:

                      Schau mal Schatz, epex hat xy gekostet, dein 'muss unbedingt jetzt passieren' Waschgang 3x so viel.

                      Schau mal Schatz, der Gang zum Wäscheständer hätte diesen Monat xy Trocknerkosten gespart.

                      Und weil ich ein Spielkind bin und es geht!

                      tugsiT 1 Antwort Letzte Antwort
                      2
                      • T theGrinch

                        @thomkast Argumentationshilfe gegenüber der besseren Hälfte:

                        Schau mal Schatz, epex hat xy gekostet, dein 'muss unbedingt jetzt passieren' Waschgang 3x so viel.

                        Schau mal Schatz, der Gang zum Wäscheständer hätte diesen Monat xy Trocknerkosten gespart.

                        Und weil ich ein Spielkind bin und es geht!

                        tugsiT Offline
                        tugsiT Offline
                        tugsi
                        schrieb am zuletzt editiert von
                        #61

                        @thegrinch
                        Ich muss ein wenig schmunzeln gerade.
                        Ich verstehe Dich und bin auch bei Dir.
                        Das Thema hatte ich Ende letzten Jahres.
                        Wir haben durch zusammenziehen 2 Waschmaschinen und 2 Trockner.
                        99% der Wäsche landet im Trockner und ich habe vor 1,5 Jahren schon Sonoff Pow in den Zuleitungen zu den einzelnen Geräten angeschlossen, um den jeweiligen Verbrauch zu messen. (Bitte jetzt nichts über Messgenauigkeit etc., mir geht es hier nicht um den Euro genau).
                        Jetzt war es natürlich einfach, da ich bisher einen "festen" Strompreis hatte (Tibber ab 1.3.2023).
                        Und ich habe ihr auch immer gesagt, trockne doch mal an der Luft, das kostet zuviel Strom...

                        Was soll ich sagen, am Jahresende kam sie auf mich zu, fragte, was haben wir denn im Jahr verbraucht an kWh für die Trockner und was hat es gekostet... Ich war selber erstaunt, für beide Trockner hatten wir knapp über 150€ im Jahr an Stromkosten..
                        Da fing sie an zu lachen und sagte mir nur, dann gebe ich dir 10€ im Monat extra, dafür habe ich die Arbeit mit aufhängen etc nicht .. puff meine Argumentationskette war weg...
                        Um ehrlich zu sein, hatte ich auch mit mehr gerechnet, aber ich musste ihr Recht geben.

                        Was ich jetzt schon gemacht habe, ich habe eine Monitor im Flur hängen als Visualisierung, da sieht man sofort den stündlichen Strompreis von Tibber und ab März gehts los.
                        Sie hat es verstanden, dass sie etwas darauf achten wird, wann sie die Waschmaschinen und Co anschmeisst. Aber ich bin auch ehrlich, ich erwarte nicht, dass sie den Timer auf nachts stellt und morgens vor der Arbeit noch alles ausräumt, einsortiert etc.. dazu hätte ich auch keine Lust.
                        Man sollte da auch die Kirche im Dorf lassen. Für mich geht es nicht, immer den tiefsten Punkt zu treffen, dass kann ich nachts mit e-Auto laden machen, der Rest sollte zweckmäßig und im Alltag integrierbar sein.
                        Und wenn ich dann mal statt für unter 20Cent, mal für knapp über 30Cent wasche, bin ich trotzdem noch günstiger als die mindestens 40Cent woanders.
                        Interessant ist ja schon mal der Verbrauch wie @ThomKast schon schrieb.
                        Im Zweifel kann man in so einem Fall händisch ausrechnen.
                        Allerdings wenn jemand eine einfache Formel/Blockly/Script dafür hat, bin ich offen dafür ;)

                        Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

                        T 1 Antwort Letzte Antwort
                        1
                        • tugsiT tugsi

                          @thegrinch
                          Ich muss ein wenig schmunzeln gerade.
                          Ich verstehe Dich und bin auch bei Dir.
                          Das Thema hatte ich Ende letzten Jahres.
                          Wir haben durch zusammenziehen 2 Waschmaschinen und 2 Trockner.
                          99% der Wäsche landet im Trockner und ich habe vor 1,5 Jahren schon Sonoff Pow in den Zuleitungen zu den einzelnen Geräten angeschlossen, um den jeweiligen Verbrauch zu messen. (Bitte jetzt nichts über Messgenauigkeit etc., mir geht es hier nicht um den Euro genau).
                          Jetzt war es natürlich einfach, da ich bisher einen "festen" Strompreis hatte (Tibber ab 1.3.2023).
                          Und ich habe ihr auch immer gesagt, trockne doch mal an der Luft, das kostet zuviel Strom...

                          Was soll ich sagen, am Jahresende kam sie auf mich zu, fragte, was haben wir denn im Jahr verbraucht an kWh für die Trockner und was hat es gekostet... Ich war selber erstaunt, für beide Trockner hatten wir knapp über 150€ im Jahr an Stromkosten..
                          Da fing sie an zu lachen und sagte mir nur, dann gebe ich dir 10€ im Monat extra, dafür habe ich die Arbeit mit aufhängen etc nicht .. puff meine Argumentationskette war weg...
                          Um ehrlich zu sein, hatte ich auch mit mehr gerechnet, aber ich musste ihr Recht geben.

                          Was ich jetzt schon gemacht habe, ich habe eine Monitor im Flur hängen als Visualisierung, da sieht man sofort den stündlichen Strompreis von Tibber und ab März gehts los.
                          Sie hat es verstanden, dass sie etwas darauf achten wird, wann sie die Waschmaschinen und Co anschmeisst. Aber ich bin auch ehrlich, ich erwarte nicht, dass sie den Timer auf nachts stellt und morgens vor der Arbeit noch alles ausräumt, einsortiert etc.. dazu hätte ich auch keine Lust.
                          Man sollte da auch die Kirche im Dorf lassen. Für mich geht es nicht, immer den tiefsten Punkt zu treffen, dass kann ich nachts mit e-Auto laden machen, der Rest sollte zweckmäßig und im Alltag integrierbar sein.
                          Und wenn ich dann mal statt für unter 20Cent, mal für knapp über 30Cent wasche, bin ich trotzdem noch günstiger als die mindestens 40Cent woanders.
                          Interessant ist ja schon mal der Verbrauch wie @ThomKast schon schrieb.
                          Im Zweifel kann man in so einem Fall händisch ausrechnen.
                          Allerdings wenn jemand eine einfache Formel/Blockly/Script dafür hat, bin ich offen dafür ;)

                          T Offline
                          T Offline
                          theGrinch
                          schrieb am zuletzt editiert von
                          #62

                          @tugsi Touché würde ich sagen.

                          Ich hab das Skript aktuell für den Geschirrspüler im Einsatz und in den vis (Handy und Monitor) ein Dropdown für die einzelnen Nutzungsarten - sowie einen Shelly button1 der auch auf "sofort" schaltet. Damit lässt sich das echt gut nutzen.

                          WM kommt als nächstes, beim Trockner wird's bei uns scheitern weil die nasse Wäsche nicht so lange drin liegen soll.

                          tugsiT 1 Antwort Letzte Antwort
                          0
                          • T theGrinch

                            @tugsi Touché würde ich sagen.

                            Ich hab das Skript aktuell für den Geschirrspüler im Einsatz und in den vis (Handy und Monitor) ein Dropdown für die einzelnen Nutzungsarten - sowie einen Shelly button1 der auch auf "sofort" schaltet. Damit lässt sich das echt gut nutzen.

                            WM kommt als nächstes, beim Trockner wird's bei uns scheitern weil die nasse Wäsche nicht so lange drin liegen soll.

                            tugsiT Offline
                            tugsiT Offline
                            tugsi
                            schrieb am zuletzt editiert von
                            #63

                            @thegrinch Abgesehen von dem, was ich oben geschrieben habe, hat sie gesehen, was die PS4 verbraucht hat in dem Jahr... :D da sollte man(n) dann manchmal die Klappe halten *lach
                            Ich bin Elektriker und wir haben bei uns in der Industrieanlage quasi jeden Verbraucher erfasst und so ähnlich möchte ich auch, zumindestens so Verbrauchergruppen erfassen, einfach der Neugierde/Spieltrieb heraus, was fliesst wohin.
                            Ich denke nächste Woche hänge ich einen Shelly 3EM an den Durchlauferhitzer, meiner Meinung nach, der Hauptverbraucher, bei 2 Frauen im Hause, die gerne duschen und baden...

                            Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

                            1 Antwort Letzte Antwort
                            1
                            • T ThomKast

                              @shellyrulestheworld

                              Hallo, das freut mich. Vielen Dank :hugging_face:

                              Der neuere Artikel hat das aktuelle Script. Und da ich nur an dem aktuellen Script weiterarbeite, wäre es besser dieses zu verwenden.´
                              Wie @Schimi geschrieben hat, kommt kein Adapter zum Einsatz. Im Script ist es dafür nötig Dein Tibber-Token einzutragen.

                              Neidisch bin ich ja schon..., denn ich würde auch mal gerne wieder PV-Überschuss verwenden können. Bei uns regnet es gefühlt seit Wochen und Erträge von rund 8 kWh werden direkt verfrühstückt. Wann wird's mal wieder richtig Sommer... :man-shrugging: :blush:

                              S Offline
                              S Offline
                              shellyrulestheworld
                              schrieb am zuletzt editiert von
                              #64

                              @thomkast Ich habe jetzt das Blockly ein bisschen auf meine Bedürfnisse angepasst. Mit der Spümaschine kämpfe ich gerade noch ein bisschen wegen der Endeleistung und Dauer.

                              Das ist das Profil:
                              Screenshot 2023-01-23 151825.png Screenshot 2023-01-23 151750.png

                              das Ende zu bestimmen ist echt schwierig. Weil davor bleibt die Leistung ja öfters mal bei 0 und am Ende steht sie dann komplett auf 0. Und bei 0 wird halt nichts mehr aktualisiert und die Prüfung kommt dann nicht mehr rein.
                              Screenshot 2023-01-23 152258.png

                              Das hier waren meine ersten Versuchswerte:
                              Screenshot 2023-01-23 152326.png

                              tugsiT 1 Antwort Letzte Antwort
                              0
                              • S shellyrulestheworld

                                @thomkast Ich habe jetzt das Blockly ein bisschen auf meine Bedürfnisse angepasst. Mit der Spümaschine kämpfe ich gerade noch ein bisschen wegen der Endeleistung und Dauer.

                                Das ist das Profil:
                                Screenshot 2023-01-23 151825.png Screenshot 2023-01-23 151750.png

                                das Ende zu bestimmen ist echt schwierig. Weil davor bleibt die Leistung ja öfters mal bei 0 und am Ende steht sie dann komplett auf 0. Und bei 0 wird halt nichts mehr aktualisiert und die Prüfung kommt dann nicht mehr rein.
                                Screenshot 2023-01-23 152258.png

                                Das hier waren meine ersten Versuchswerte:
                                Screenshot 2023-01-23 152326.png

                                tugsiT Offline
                                tugsiT Offline
                                tugsi
                                schrieb am zuletzt editiert von
                                #65

                                @shellyrulestheworld said in Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben:

                                das Ende zu bestimmen ist echt schwierig. Weil davor bleibt die Leistung ja öfters mal bei 0 und am Ende steht sie dann komplett auf 0. Und bei 0 wird halt nichts mehr aktualisiert und die Prüfung kommt dann nicht mehr rein.

                                Ich hab ein Blockly hier mal im Forum gefunden, der setzt einen Zähler, der alle 10s um einen erhöht wird und wenn dann der Wert über eine bestimmte Wattzahl geht, wird der Zähler wieder zurückgesetzt.
                                Wenn der Wert des Zählers X erreicht hat (x mal 10s), dann kommt die Meldung, Maschine fertig.
                                Ich habe das bei der Waschmaschine und Trockner, klappt recht gut, ausser bei bestimmten Programmen, wo lange Leerlaufzeiten sind, aber selbst die kannst ja mit dem Zählerwert anpassen.
                                Hier mal das Beispiel mit der Spülmaschine, nicht wundern über die Wattzahl, meine Spülmaschine verbraucht 3-4W wenn das Display an ist und es geht erst dann aus, wenn sie fertig ist, also hier bräuchte ich noch nicht mal den Zähler.
                                Bildschirm­foto 2023-01-24 um 00.22.54.png

                                Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

                                1 Antwort Letzte Antwort
                                1
                                • H Offline
                                  H Offline
                                  homecineplexx
                                  schrieb am zuletzt editiert von
                                  #66

                                  Hallo
                                  da ich mit Blockly wirklich sehr wenig anfange, hab ich sie mir runtergeladen, importiert und in JavaScript konvertieren lassen.
                                  da gibs eine Funktion jsonataExpression, kann mir jemand kurz erklären was die so macht?

                                  T 1 Antwort Letzte Antwort
                                  0
                                  • H homecineplexx

                                    Hallo
                                    da ich mit Blockly wirklich sehr wenig anfange, hab ich sie mir runtergeladen, importiert und in JavaScript konvertieren lassen.
                                    da gibs eine Funktion jsonataExpression, kann mir jemand kurz erklären was die so macht?

                                    T Offline
                                    T Offline
                                    ThomKast
                                    schrieb am zuletzt editiert von
                                    #67

                                    @homecineplexx
                                    Wie wäre es mal mit Tante Google? Z. B. Jasonata.Org

                                    H 1 Antwort Letzte Antwort
                                    0
                                    • T ThomKast

                                      @homecineplexx
                                      Wie wäre es mal mit Tante Google? Z. B. Jasonata.Org

                                      H Offline
                                      H Offline
                                      homecineplexx
                                      schrieb am zuletzt editiert von
                                      #68

                                      @thomkast danke für diesen konstruktiven beitrag..hab ich gemacht

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • T Offline
                                        T Offline
                                        theGrinch
                                        schrieb am zuletzt editiert von
                                        #69

                                        Okay, neue Frage.
                                        Ich hatte es gerade zum 2. Mal, dass ich in einer günstigen Stunde (22 Uhr 06) den Geschirrspüler anstelle und er jetzt aber (mutmaßlich bis 23 Uhr) wartet um loszulegen.

                                        Ich habe das Skript nicht genug durchdrungen, aber prüft es evtl nicht ob JETZT grad günstig ist?

                                        Sonst funktioniert es übrigens so super, dass ich demnächst tibber die Steuerung mei er easee wallbox entziehen und das auch über das Skript lösen werde.

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • T theGrinch

                                          Okay, neue Frage.
                                          Ich hatte es gerade zum 2. Mal, dass ich in einer günstigen Stunde (22 Uhr 06) den Geschirrspüler anstelle und er jetzt aber (mutmaßlich bis 23 Uhr) wartet um loszulegen.

                                          Ich habe das Skript nicht genug durchdrungen, aber prüft es evtl nicht ob JETZT grad günstig ist?

                                          Sonst funktioniert es übrigens so super, dass ich demnächst tibber die Steuerung mei er easee wallbox entziehen und das auch über das Skript lösen werde.

                                          T Offline
                                          T Offline
                                          ThomKast
                                          schrieb am zuletzt editiert von ThomKast
                                          #70

                                          @thegrinch
                                          Moinsen :-) Und Du hast das Script schon richtig verstanden...

                                          Wenn die Betriebsart bereits auf "epex" steht und die SM eingeschaltet wird, wird beim Erkennen des Spülbeginns erstmal die TSD abgeschaltet. Da nur stündlich auf die "günstigen Stunden" geprüft wird, beginnt der Reinigungsvorgang erst zur nächsten vollen Stunde.

                                          Das ist unglücklich. Sehe ich auch so. Hat mich bislang nicht gestört, da die Spülmaschine meist gegen 2200 eingeräumt ist und gestartet wird und die günstigen Stunden meist erst ab 2300 oder in den ersten Morgenstunden auftreten. Aber Du hast Recht... je nachdem wie groß der %-tuale Aufschlag ausfällt oder wann die SM eingeschaltet wird, kann auch eine aktuelle Stunde eine "günstige Stunde" sein.

                                          Wenn Du möchtest kannst Du gerne folgende Script-Erweiterung an 2 Stellen einbringen:

                                          1. Beim Prüfen auf einen Betriebsartwechsel:
                                            1b0b5afc-4298-4c3e-b1ec-e25c55311c97-image.pngDas ist für den Fall nötig, dass die SM bereits angelaufen ist und die TSD abgeschaltet wurde und erst danach in die Betriebsart "epex" gewechselt wird.

                                          2. Beim prüfen der TSD-Abschaltung:
                                            278ce8f1-bff9-4dd5-8b2e-0a0a836060da-image.png Das ist für die Fälle, in denen bereits die Betriebsart "epex" gesetzt ist und die SM in einer "günstigen Stunde" eingeschaltet wird. Dadurch wird direkt auf die "günstigen Stunden" geprüft.

                                          Du kannst nun entweder die Ergänzungen selbst einbauen, oder im ersten Thread das angepasst Geräte-Script runterladen.

                                          Ein Sichern des alten Scripts kann evtl. nicht schaden :grin: bf0b67d0-2a91-4b85-b800-63424a5ad9ce-image.png

                                          Vielen Dank für Deine Anregung und beste Grüße, Thomas

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          653

                                          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