Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

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

      Die nachfolgende Beschreibung führt die bisherige Lösung im alten Artikel fort und ermöglicht das automatische Einschalten der Waschmaschine (WM), Spülmaschine (SM) oder Geschirrspüler (GS) nicht nur bei PV-Überschuss sondern nun auch bei günstigen stündlichen Strompreisen.

      Soll heißen: Die bisherige Lösung wird nicht weiter beschrieben/aktualisiert.

      Das bisherige Konzept / die bisherigen Funktionen können im alten Beitrag eingesehen werden. Dafür fallen die nachfolgenden Ausführungen etwas 😝 kürzer aus. Neue Leser sollten also zuerst den alten Artikel lesen.

      Euer Feedback/Vorschläge/Verbesserungen sind wie immer gerne gesehen 👍.


      V0.93 vom 30.01.2023

      • Wenn die Betriebsart "epex" lautet und man sich zeitlich in den "günstigen Stunden" bewegte, erfolgt nun der direkte Start der Maschine.
        Vor dieser Änderung wurde die TSD erst freigeschaltet "bst", wenn die nächste "günstige Stunde" erreicht wurde.
        @theGrinch - vielen Dank für Deine Anregung.
        Geräte-Script zum Download wurde erneuert. Die Screenshots wurden nicht aktualisiert.

      V0.92 vom 29.12.2022 mit allen Änderungen des Postverlaufs bis zum 29.12.2022

      • Erneuerung des Screenshots zu den Tibber-Datenpunkten und der Download-Datei.
      • Erneuerung der Download-Datei des TIBBER-Scripts.
      • Erneuerung des Screenshots zu den Waschmaschine-Datenpunkten. Die Download-Datei vom 10.12.2022 kann unverändert verwendet werden.
      • Erneuerung der Download-Datei des Geräte-Scripts.

      V0.91 vom 13.12.2022

      • Änderung unter 3.5 "Steckdose einschalten". Es wird der "waschvorgang" nach Änderung neu geladen. Dies war nötig, weil eine händische Freigabe, also eintragen von "fgg" in den Datenpunkt "waschvorgang" nicht berücksichtigt wurde.
      • Die Erstelle-Text-Bausteine wurden gestrafft.
      • Aktualisiertes Geräte-Script wurde eingefügt.

      V0.9 vom 10.12.2022

      • Erste Version der EPEX-Steuerung, die bereits mehrere Tage erfolgreich läuft.
      • Mit dem TIBBER-DEMO-Token "5K4MVS-OjfWhK_4yrjOlFe1F6kJXPVf7eQYggo8ebAE" (ohne " ") können die NOK-Preise abgeholt werden, ohne dass ein persönlicher Vertrag vorliegen muss. Es existiert leider kein DEMO-Token mit dem Preise des deutschen Marktes abgeholt werden können.

      Vorbereitung / Voraussetzung
      Da wir zum 31.01.23 zu TIBBER wechseln und dann anhand stündlicher Strompreise abgerechnet werden, war es nötig Verbraucher möglichst automatisch zu den Stunden mit den günstigsten Preisen zu starten. In der Umsetzung bedeutet dies, dass die Freigabe "fgg" nicht nur im Fall von PV-Überschuss, sondern auch zu günstigen Stunden erteilt werden soll.
      Die Stundenpreise stehen bereits am Vortag ab 14:00 Uhr für den Folgetage zur Verfügung und können über die TIBBER-API abgeholt werden.


      Anforderung
      Um nicht nur auf "die eine" günstigste Stunde festgelegt zu sein, sollen die Stunden ermittelt werden, in denen der Preis noch einigermaßen günstig ist. Dazu soll es möglich sein einen prozentualen Aufschlag (Hysterese) auf den günstigsten Preis zu definieren.
      Die Stunden, an denen der Strompreis unterhalb des "geringster Preis" + "Hysterese" liegt, sollen ermittelt werden.
      Die Befüllung / Der Start der Verbraucher WM/SM/GS soll zu jeder Zeit erfolgen können. Allerdings soll der Waschvorgang erst zu den günstigen Stunden gestartet werden.
      Eine neue/weitere Betriebsart "EPEX" soll zur Auswahl zur Verfügung stehen.


      Umsetzung
      Die Umsetzung erfolgt in 2 getrennten Scripten.

      1. Das TIBBER-Script sorgt für das tägliche Abholen der Stundenpreise und Ermittlung des günstigsten Preises, sowie der Stunden, zu denen die Tasmota-Steckdosen (TSD) eingeschaltet werden sollen.
      2. Über das Geräte-Script werden die verschiedenen Betriebsarten abgedeckt und die TSD geschaltet.

      1. Umsetzung: TIBBERpreise abholen und günstige Stunden ermitteln

      Folgende Datenpunkte werden benötigt: (Download der JSON-Datei unterhalb des Bildes)
      0719fe0f-59a8-4abb-b0a8-1d40a2cc7257-image.png
      JSON Datei zum runterladen: 2022-12-29_0_userdata.0.Tibber.json

      • Abholzeit = Uhrzeit, zu der die Stundenpreise bei TIBBER heruntergeladen werden sollen
      • Geringster_Preis = der kleinste Stundenpreis des Tages
      • Geringster_Preis_Stunde = die Stunde zu der der Strompreis am geringsten ist
      • Preis_Hysterese = um wieviel % soll aufgeschlagen werden, um weiterhin als "günstig" zu gelten
      • Preis_Hysterese_Stunden = Stunden, zu denen der Strompreis noch "günstig" ist. Oder Stunden, zu denen die TSD eingeschaltet wird.
      • Stundenpreise_heute = JSON Daten aus der Tibber-API für den aktuellen Tag
      • Stundenpreise_morgen = JSON Daten aus der Tibber-API für den kommenden Tag

      Zugehöriges BLOCKLY-Script: (Download der JSON-Datei unterhalb des Bildes)

      020a59cb-646a-41dd-ae59-da7f228a0865-image.pngd1753b55-1f9b-4aec-a821-84e0596ae9e7-image.png43e01cca-8ec0-40d4-a4c8-5d497fd3bcef-image.png

      Script zum runterladen: 2022-12-29_TIBBER_script_BLOCKLY.json


      2. Umsetzung: Verbraucher bei günstigen Stunden einschalten

      Das Geräte-Script, in dem die TSD abhängig der Freigabe gesteuert wird, basiert grundlegend auf der vorherigen Lösung und wurde um die EPEX-Freigabe ergänzt. Zusätzlich wurde das Script der vorherigen Lösung ein wenig gestrafft. Nachfolgend wird nur auf die EPEX-Ergänzungen eingegangen.

      Die nötigen Datenpunkte wurden wie folgt überarbeitet: (download der JSON-Datei unterhalb des Bildes)
      6b6ca2b2-50a5-4fa7-9eca-38560b8cb036-image.png JSON-Datei zum runterladen: 2022-12-10_0_userdata.0.Waschmaschine.json


      Erweitert wurde die "Betriebsart". Es kann nun zwischen "Start sofort", "EPEX" und "PV-Überschuss" gewählt werden.

      Im Geräte-Script erfolgten diese Anpassungen: (Download unterhalb der Bilder)

      Angepasste Variablen und grundlegende Beschreibung:
      de19e584-2b36-4120-901a-8961821afb8f-image.png
      Die neue Betriebsart wird abgefragt und der Anfangsstatus gesetzt:
      Der Ablauf der EPEX-Freigabe ist beschrieben worden:
      aca27e6a-52d3-472c-90e3-1ba3f1d9dc1d-image.png

      Die EPEX-Prüfung und Freigabe wurde ergänzt:
      82bb9a95-6acc-41ee-b397-b94ed7e8a5d3-image.png
      f34755b0-4f77-4e18-a917-1e31fd6c2f29-image.png

      Geräte-Script zum Download: 2023-01-30_TIBBER_script_BLOCKLY.json


      Erfahrungen / Anpassungen / Ausblick

      • Wartende Maschine öffnen:
        Aktuell ist es nicht möglich eine auf Freigabe wartende Maschine zu öffnen, um z.B. weitere Wäsche oder Geschirr einzulegen. Da die TSD ausgeschaltet ist, kann auch die Maschine nicht geöffnet werden. Hierzu bedarf es einer Funktion, die die TSD kurzzeitig einschaltet und dann wieder abschaltet, um weiterhin auf die Freigabe zu warten.

      • Kombination EPEX mit PV-Überschuss
        Über eine weitere kombinierte Betriebsart sollte es möglich sein, den ioBroker entscheiden zu lassen, ob die Geräte mit PV-Überstrom oder nach EPEX in günstigen Stunden, gestartet werden sollen.

      M H C E 5 Replies Last reply Reply Quote 0
      • M
        MikeRow @ThomKast last edited by

        Hallo @ThomKast, wir wechseln zum 1.2.23 zu Tibber. Pulse habe ich schon installiert. Ich werde deine Lösung mal in den nächsten Tagen installieren und testen. Sieht sehr erfolgsversprechend aus!!

        Gruß Mikerow

        T 2 Replies Last reply Reply Quote 0
        • T
          ThomKast @MikeRow last edited by

          @mikerow Dann viel Erfolg Mike 👍.
          Habe über Deinen Verlauf gerade die Informationen zum neuen tibber/pulse Adapter gefunden. Das schaue ich mir mal genauer an. Da sind ja auch schon fertige Views realisiert. Gut zu wissen 😉.

          M 1 Reply Last reply Reply Quote 0
          • M
            MikeRow @ThomKast last edited by

            @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 1 Reply Last reply Reply Quote 0
            • T
              ThomKast @MikeRow last edited by

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

              Hallo @ThomKast, wir wechseln zum 1.2.23 zu Tibber. Pulse habe ich schon installiert. Ich werde deine Lösung mal in den nächsten Tagen installieren und testen. Sieht sehr erfolgsversprechend aus!!

              Gruß Mikerow

              Hallo @MikeRow, ich musste leider das Geräte-Script noch ein bisschen überarbeiten. Details finden sich oben in der Versionierung. Solltest Du also bereits angefangen haben, lade Dir bitte das aktuelle Script runter.
              Weiterhin viel Erfolg und beste Grüße, Thomas

              W 1 Reply Last reply Reply Quote 0
              • W
                Wesertaler @ThomKast last edited by

                @thomkast
                Danke für das spannende Script zur EPEX Nutzung über Tibber. Wir wechseln ab 01.01.2023 auch zu Tibber, den Token habe ich bereits. Leider kann ich das Script zum Abfragen der Tibber-Preise nicht in Gänze herunterladen. Die JSON Datei enthält nur den letzten Abschnitt (4.2), der Anfang fehlt leider. Kannst Du bitte das Script noch einmal komplett abstellen?

                Vielen Dank,
                Peter

                T 1 Reply Last reply Reply Quote 0
                • T
                  ThomKast @Wesertaler last edited by ThomKast

                  @wesertaler
                  Moin Peter, schön, dass es Dein Interesse trifft. Ich bin auch schon gespannt. In ein paar Tage geht es los. und wenn ich die aktuell günstigen Stundenpreise sehe, dann bin ich schon ziemlich sicher, dass der Umstieg die richtige Entscheidung ist. Genaues sehen wir am Jahresende ;-).

                  So ganz verstehe ich Deine Frage nicht. Vermutlich ist nicht die Download-Datei das Problem, sondern die unterschiedliche Art des Imports.
                  Die aktualisierte Datei 2022-12-26_TIBBER_scriptt.json kannst Du nun über "3-Punkte-Menu" --> "Skripte importieren" einbinden. Bitte daran denken die "*****" mit dem eigenen Token auszutauschen 😉
                  c02a026a-049a-4021-9aa1-4b9cb9c36f23-image.png
                  Es handelt sich um die aktuellste Version mit kleinen Ergänzungen, die ich noch nicht beschrieben habe. Hinweise findest Du in den zugeklappten "?"-Kommentaren der einzelnen Bausteine.

                  Der Export der alten Datei vom 10.12.2022 wäre mit copy-and-paste über die Funktion "Blöcke importieren" in ein leeres Script zu importieren. Aber die Version würde ich nicht mehr verwenden.
                  16a69435-9666-44fb-8577-c3c5cf45c5d4-image.png

                  Zur "manuellen Bedienung" in den Fällen, dass TIBBER die Daten nicht rechtzeitig bereitgestellt hat oder technische Probleme die Abholung nicht ermöglichen, kannst Du die Script-Teile auch manuell nutzen.

                  • Zur Abholung zu einer späteren Zeit einfach die "Abholzeit" ändern - z.B. auf aktuelle Zeit plus 2 Minuten, um die Werte "quasi jetzt" abzuholen. Nach dem Abholen, die "Abholzeit" dann wieder auf einen Wert nach "14:30" ändern.
                  • Um die Preise manuell zu splitten und günstigsten Preis/Stunde zu ermitteln, können die deaktivierten Blöcke unter "2." aktiviert werden. Details im Kommentar.

                  Zusätzlich wird in der aktuellen Version noch ein "ungewichteter Durchschnittspreis" ermittelt. Es werden also alle Stundenpreise addiert und durch 24 geteilt. Dazu sind 2 weitere Datenpunkte nötig:
                  "0_userdata.0.Tibber.EPEX_Spot_DE_heute.ESDE_heute_Mittel_ungewichtet"
                  "0_userdata.0.Tibber.EPEX_Spot_DE_morgen.ESDE_morgen_Mittel_ungewichtet"

                  Kannst ja noch mal Bescheid geben, ob es geklappt hat.

                  Beste Grüße und viel Erfolg, Thomas

                  PS: Die obige Beschreibung werde ich noch überarbeiten. Zur Zeit fehlt die Zeit 😉

                  1 Reply Last reply Reply Quote 1
                  • D
                    dieterh last edited by

                    ![0_1672069230056_Bildschirmfoto 2022-12-26 um 16.36.37.png](Uploading 100%) @thomkast said in Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben:

                    @wesertaler
                    Moin Peter, schön, dass es Dein Interesse trifft. Ich bin auch schon gespannt. In ein paar Tage geht es los. und wenn ich die aktuell günstigen Stundenpreise sehe, dann bin ich schon ziemlich sicher, dass der Umstieg die richtige Entscheidung ist. Genaues sehen wir am Jahresende ;-).

                    So ganz verstehe ich Deine Frage nicht. Vermutlich ist nicht die Download-Datei das Problem, sondern die unterschiedliche Art des Imports. Die aktualisierte Datei kannst Du nun über "3-Punkte-Menu" --> "Skripte importieren" einbinden.
                    c02a026a-049a-4021-9aa1-4b9cb9c36f23-image.png
                    Es handelt sich um die aktuellste Version mit kleinen Ergänzungen, die ich noch nicht beschrieben habe. Hinweise findest Du in den zugeklappten "?"-Kommentaren der einzelnen Bausteine.

                    Der Export der alten Datei vom 10.12.2022 wäre mit copy-and-paste über die Funktion "Blöcke importieren" in ein leeres Script zu importieren. Aber die Version würde ich nicht mehr verwenden.
                    16a69435-9666-44fb-8577-c3c5cf45c5d4-image.png

                    Zur "manuellen Bedienung" in den Fällen, dass TIBBER die Daten nicht rechtzeitig bereitgestellt hat oder technische Probleme die Abholung nicht ermöglichen, kannst Du die Script-Teile auch manuell nutzen.

                    • Zur Abholung zu einer späteren Zeit einfach die "Abholzeit" ändern - z.B. auf aktuelle Zeit plus 2 Minuten, um die Werte "quasi jetzt" abzuholen. Nach dem Abholen, die "Abholzeit" dann wieder auf einen Wert nach "14:30" ändern.
                    • Um die Preise manuell zu splitten und günstigsten Preis/Stunde zu ermitteln, können die deaktivierten Blöcke unter "2." aktiviert werden. Details im Kommentar.

                    Zusätzlich wird in der aktuellen Version noch ein "ungewichteter Durchschnittspreis" ermittelt. Es werden also alle Stundenpreise addiert und durch 24 geteilt. Dazu sind 2 weitere Datenpunkte nötig:
                    "0_userdata.0.Tibber.EPEX_Spot_DE_heute.ESDE_heute_Mittel_ungewichtet"
                    "0_userdata.0.Tibber.EPEX_Spot_DE_morgen.ESDE_morgen_Mittel_ungewichtet"

                    Kannst ja noch mal Bescheid geben, ob es geklappt hat.

                    Beste Grüße und viel Erfolg, Thomas

                    PS: Die obige Beschreibung werde ich noch überarbeiten. Zur Zeit fehlt die Zeit 😉

                    Hallo Thomas,

                    auch ich spiele schon eine Weile mit iobroker und Tibber herum und freue mich Deine Aktivitäten gefunden zu haben, da Du anscheinend schon ein bisschen weiter bist.
                    Leider kann ich Dein Script nicht importieren - ich bekomme die Fehlermeldung:
                    Fehler
                    Error: Can't find end of central directory : is this a zip file ?

                    1 Reply Last reply Reply Quote 0
                    • T
                      ThomKast last edited by

                      @dieterh
                      Entschuldige bitte, dass es so nicht funktioniert. Versuch mal bitte folgenden Weg mit der Datei zum downloaden.

                      2022-12-23_Tibber_Script_Blöcke_export_import.html

                      • Download der Datei
                      • Eröffne ein neues, leeres Blockly Script
                      • Öffne die Datei mit einem Editor OHNE JEGLICHE Zeichen einzufügen oder zu ändern
                      • Markiere den kompletten Inhalt und kopiere diesen in die Zwischenablage (STRG+A dann STRG+C)
                      • Im leeren Blockly Script über "Blöcke importieren" die leere Import-Seite öffnen und den Inhalt der Zwischenablage dort einfügen (STRG-V)
                      • Durch klick auf "IMPORT" wird alles importiert
                      • Script unbedingt speichern, bevor etwas anderes aufgerufen wird. Bei einem Refresh der Seite ist der importierte Inhalt sonst nämlich weg

                      Ich nutze es immer auf diesem Weg. Hoffe es klappt auch für Dich.
                      LG, Thomas

                      D W 2 Replies Last reply Reply Quote 1
                      • D
                        dieterh @ThomKast last edited by

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

                        2022-12-23_Tibber_Script_Blöcke_export_import.html

                        Moin Thomas - das hat jetzt prima geklappt - vielen Dank für Deine Unterstützung.
                        Ich werde das dann heute mal evaluieren.

                        1 Reply Last reply Reply Quote 1
                        • W
                          Wesertaler @ThomKast last edited by Wesertaler

                          @thomkast
                          Moin Thomas,
                          leider fehlte mir gestern die Zeit, weiter an dem Problem zu arbeiten. Ich habe aber heute noch ein wenig gebastelt, nachdem ich Dein neuen Export bei mir importiert habe und kann nur sagen super Arbeit!

                          Es läuft einwandfrei mit meinem Token. Ich habe einen guten Vergleich, weil wir als Wallboxen eine OpenWB mit zwei Ladepunkten haben, in der ich über Weihnachten ebenfalls den Token hinterlegt habe. Die abgeholten Preise sind identisch. Ein erster Test mit der OpenWB war gestern bereits erfolgreich 😉 Jetzt werde ich mir mal die Freigabe der Waschmaschine und des Geschirrspülers anschauen. Mal sehen, was mir noch so an gut steuerbaren Verbrauchern auffällt.

                          Nochmals vielen Dank für Deinen Support!
                          Peter

                          T 1 Reply Last reply Reply Quote 1
                          • T
                            ThomKast @Wesertaler last edited by

                            @wesertaler
                            @dieterh
                            Hallo zusammen, heute konnten die TIBBER-Daten nicht zu meiner Abholzeit um 15:05 abgeholt werden. Das kommt immer wieder mal vor Dabei fiel mir auf, dass bei einer späteren, manuell angestoßenen Abholung "günstigster_preis" und "günstige_stunden" nicht neu ermittelt werden. Aus diesem Grund fügt bitte die Aufrufe der beiden Funktionen am Ende der Funktion "preise_holen" ein.
                            f0d31662-a5b2-46b3-9ccf-06e41657a8b1-image.png
                            ... im Screenshot ganz unten in rot markiert.

                            Wenn die Daten nicht abgeholt werden können, liegt dies fast ausschließlich an TIBBER. Vielleicht schaffe ich es noch den/die Fehler abzufangen und eine Benachrichtigung abzusetzen, bzw. die Abholung zu einem späteren Zeitpunkt erneut durchzuführen.

                            Beste Grüße, Thomas

                            1 Reply Last reply Reply Quote 1
                            • T
                              ThomKast last edited by

                              Hallo Zusammen,

                              zu Eurer Info, TIBBER hat die Preise für Morgen noch nicht zur Verfügung gestellt.
                              Ich dachte erst mein Script würde Ärger bereiten... Aber nö. Wenn nix da ist, kann auch nix geholt werden.

                              Wie Ihr im Screenshot der TIBBER API erkennen könnt, liegen aktuelle Werte vor, aber der String für tomorrow ist leer.

                              24de8f44-9d81-489d-a541-b57efd01b25a-image.png

                              Als Lösung bietet sich an, die "abholzeit" auf einen späteren Zeitpunkt zu ändern, in der Hoffnung, dass dann die Daten bereitgestellt wurden.

                              Beste Grüße, Thomas

                              T 1 Reply Last reply Reply Quote 0
                              • T
                                ThomKast @ThomKast last edited by

                                Nun stehen auch die Daten zur Verfügung.
                                Habe TIBBER angeschrieben und mal um Erläuterung gebeten. Mal schauen, ob und was wir für eine Antwort erhalten.

                                6c7a4f86-6399-4309-aed1-a47ee374d0cb-image.png

                                W 1 Reply Last reply Reply Quote 0
                                • W
                                  Wesertaler @ThomKast last edited by

                                  @thomkast
                                  Moin Thomas,
                                  nutzt Du noch den Demo Token?

                                  Ich habe die Abholzeit auf 16:30 stehen und hatte seit der Inbetriebnahme am 27.12.2022 keine Probleme. An beiden Tagen waren nach 16:30 die EPEX Werte für "today" und "tomorrow" vorhanden. Um 0:02 wurde alles korrekt umgeschoben und die neuesten günstigen Zeiten berechnet.

                                  Grüße
                                  Peter

                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    ThomKast @Wesertaler last edited by

                                    @wesertaler
                                    Hi Peter,

                                    nee, nee, habe schon mein Token hinterlegt. Die Daten sollen ja eigentlich ab 1430 zur Verfügung stehen. Daher hatte ich meine "abholzeit" auf 1505. Das funktionierte auch bislang... Aber um 1600 ist auch ok. Es geht ja nix verloren.

                                    Beste Grüße, Thomas

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      dieterh last edited by

                                      Hallo Thomas,

                                      ich oute mich hier als betagter, absoluter iobroker-Anfänger, der sich immer wieder selbst fordert.
                                      Ich selbst beziehe meinen Strom schon länger von Tibber und musste vor kurzem einen 2. Acoount bei denen aufmachen, da wir Strom (mit eigenem Zähler) in unsere Garagen gelegt bekommen haben.

                                      Wie gesagt, ich bin begeistert was du hier machst und versuche das zu verstehen und auf meine Bedürfnisse anzupassen.

                                      Gleich zu Beginn deines neuen Scriptes lädst Du verschiedene Variablen von den Datenpunkten in 0_userdate.0.Tibber aber der Datenpunkt '0_userdate.0.Tibber.Abholzeit' ist nicht in in deinem Datenpunkte-Download enthalten.

                                      Bildschirmfoto 2022-12-29 um 17.03.39.png

                                      Wurde das vergessen oder stehe ich gerade auf dem Schlauch 😊 ?

                                      Ich kann den gerne noch anlegen, aber wie muss der formatiert sein, bzw. welcher Wert soll da rein?

                                      T 1 Reply Last reply Reply Quote 0
                                      • T
                                        ThomKast @dieterh last edited by ThomKast

                                        @dieterh
                                        Hallo Dieter,

                                        über "betagt" könnten wir uns vielleicht überbieten 😉 und bis vor 1nem Jahr hatte ich mit ioBroker und SmartHome auch noch keinen größeren Kontakt. Allerdings hatte ich die komfortable Situation mich 1 Jahr lang fast den ganzen Tag damit beschäftigen zu können. Da kommt dann einiges an Informationen zusammen.

                                        Du bist doch auf einem guten weg und hast richtig festgestellt, dass ich da geschludert habe... Lege den Datenpunkt am besten manuell an, als STRING und verknüpfe ihn dann im Script.
                                        Als Wert trägt er die Uhrzeit, im Format "hh:mm" - also z.B. 16:00, zu der die Preisdaten von Tibber abgeholt werden sollen.

                                        Hinweis: Wenn Du in der Darstellung den kompletten Pfad, wie z.B. "0_userdata_0.Tibber und so weiter" siehst, dann konnte der Datenpunkt nicht gefunden und als Name aufgelöst werden. Zusätzlich findet sich im Log ein Eintrag darauf, dass der Datenpunkt fehlt.

                                        Vielen Dank nochmal für Deinen Hinweis. Wenn ich die Tage den Artikel ganz oben überarbeite, werde ich den Export der Datenpunkte erweitern.

                                        Beste Grüße, Thomas

                                        D 1 Reply Last reply Reply Quote 0
                                        • D
                                          dieterh @ThomKast last edited by

                                          @thomkast
                                          Danke für die schnelle Antwort - aber bist Du sicher das als NUMBER anzulegen?
                                          Da dürfte es schwierig sein, z.B. ein "16:00" einzutragen.

                                          T 1 Reply Last reply Reply Quote 0
                                          • T
                                            ThomKast @dieterh last edited by

                                            @dieterh Nicht mein Tag heute. Natürlich als STRING. 😕

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            723
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            awattar billig börse epex günstig strompreis stündlich tibber
                                            24
                                            156
                                            21999
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo