Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Brauche Hilfe bei Tibber Blockly

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Brauche Hilfe bei Tibber Blockly

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

      Erst einmal, Ja ich habe die 'Suche-Funktion' bemüht. Ja ich hab gefühlt 1000 Threads mit 2000 Blockly's durch die ich mehr oder weniger versucht habe bei mir umzusetzten, kann aber nicht das richtige finden bzw fehlt mir die Kenne um das vernüftig zu implementieren.

      Was suche ich?

      Ich such einfach ein Blockly welches mir die ZEIT des günstigsten Tibber Preises in einen DP schreibt. Und hier jeweils für 'Today' von 13:00 - 23:00 Uhr und für 'Tomorrow' von 00:00 - 23:00. Dabei ist es mir egal ob die Daten vom Tibberlink Adapter ausgewertet werden oder ich Tibber direkt abfrage. Das ganze sollte dann als Zeit in einen DP für 'Today' und einen für 'Tomorrow' geschrieben werden.

      Falls jemand einen Link zu solch einem Script oder ein fertiges Script hat wäre ich dankbar:

      Was suche ich NICHT !!!

      Ich suche kein Script welches mir den günstigsten Preis in DP schreibt oder eine Liste erzeugt die ein Array beinhaltet oder ähnliches.
      Das hab ich alles schon.

      Wie gesagt ich möchte einfach nur zwei Zeiten erhalten die ich dann weiter verarbeiten oder vergleichen kann.

      MartinP Homoran paul53 M 4 Replies Last reply Reply Quote 0
      • MartinP
        MartinP @icebear last edited by

        @icebear sagte in Verzweifelter braucht Hilfe bei Blockly:

        Ich suche kein Script welches mir den günstigsten Preis in DP schreibt oder eine Liste erzeugt die ein Array beinhaltet oder ähnliches.
        Das hab ich alles schon.

        Zeigen... vielleicht ist es einfacher, diese zu ergänzen, als das Rad neu zu erfinden...

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @icebear last edited by

          @icebear bitte Threadtitel sinnvoll anpassen!

          @icebear sagte in Verzweifelter braucht Hilfe bei Blockly:

          Ich suche kein Script welches mir den günstigsten Preis in DP schreibt

          so etwas scheinst du gefunden zu haben, oder?
          und dieses Skript gibt nicht die Zeit des günstigsten Preises mit an?
          Da würde es doch reichen, nur den Preis wegzulassen

          1 Reply Last reply Reply Quote 0
          • icebear
            icebear last edited by

            @martinp

            Ich nutze im Moment das Script von @ThomKast

            hier der Teil den es macht:

            tibber_guenstig.png

            dabei kommen diese DP raus:

            DPTibber.png

            Das nützt mir aber nix. Bei Stunde steht einfach nur eine Zahl als 'Number für Stunde und das auch nur für den heutigen Tag und nicht für 'Morgen'

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @icebear last edited by

              @icebear sagte in Verzweifelter braucht Hilfe bei Blockly:

              Bei Stunde steht einfach nur eine Zahl als 'Number für Stunde

              die 4 steht für 4:00-4:59

              @icebear sagte in Verzweifelter braucht Hilfe bei Blockly:

              Das nützt mir aber nix.

              Aha!

              icebear 1 Reply Last reply Reply Quote 0
              • icebear
                icebear @Homoran last edited by

                @homoran said in Verzweifelter braucht Hilfe bei Blockly:

                die 4 steht für 4:00-4:59

                Ja genau. Und wie gesagt das ganze ist aber auch nur für 'Heute' und nicht für 'Morgen'

                Ich hätte das gerne in einem Script, was z.B. um 13:30 die Preise bei Tibber abholt und dann hab ich zwei DP, in einem steht dann die günstigste Zeit für Heute (Zeitraum 13:00-23:00) als Hour z,B, 22:30 oder 23:00 und einen zweiten DP für Morgen, da steht dann die günstigste Zeit von 00:00 bis 23:00 als Hour drin, der Preis ist mir egal

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @icebear last edited by Homoran

                  @icebear bitte Threadtitel sinnvoll anpassen!

                  @icebear sagte in Verzweifelter braucht Hilfe bei Blockly:

                  das ganze ist aber auch nur für 'Heute' und nicht für 'Morgen'

                  ich arbeite nicht mit Tibber.
                  ich weiss auch nicht wann Tibber die Preise für Morgen bereitstellt, und schon gar nicht ob das 48h vorher passiert um heute und morgen rechtzeitig abholen zu können.

                  Aber wenn, dann gibt es auch dafür mindestens ein Skript hier im Forum

                  icebear 1 Reply Last reply Reply Quote 0
                  • icebear
                    icebear @Homoran last edited by

                    @homoran said in Verzweifelter braucht Hilfe bei Blockly:

                    und schon gar nicht ob das 48h vorher passiert um heute und morgen

                    das muß es ja garnicht , da ja die "tommorrow" Preise (von 00:00 - 23:00) die Preise für den nächsten Tag ja beinhalten, da muß ja nur rausgefiltert werden die Zeit von 13-23 Uhr

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @icebear last edited by

                      @icebear jetzt irritierst du mich aber.

                      Du schreibst doch

                      @icebear sagte in Brauche Hilfe bei Tibber Blockly:

                      das ganze ist aber auch nur für 'Heute' und nicht für 'Morgen'

                      Hast du jetzt Daten für Morgen dabei oder nicht?

                      icebear 1 Reply Last reply Reply Quote 0
                      • icebear
                        icebear @Homoran last edited by

                        @homoran

                        Also Tibber holt ja immer für einen Tag die Daten um 13:00 Uhr für den nächsten Tag.

                        Wenn jetzt z.B. der Tibberlink Adapter (oder ein andres Script) die Daten für Heute und Morgen holt, dann sind ja die Daten für Morgen ja am nächsten Tag "Heute" dann seh ich in den DP nur Daten für "Heute" .
                        Um 13:00 kommen wieder die Daten für Morgen (die ja dann wiederum am nächsten Tag "Heute" sind) und ich sehe Daten für Heute und Morgen.

                        Homoran 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @icebear last edited by paul53

                          @icebear sagte: 'Today' von 13:00 - 23:00 Uhr und für 'Tomorrow' von 00:00 - 23:00.

                          Also ein Datenpunkt mit der Startzeit "hh:mm" der günstigsten Stunde für heute ab 13:00 Uhr und ein DP mit der Startzeit für morgen?
                          Versuche es mal so:

                          Blockly_temp.JPG

                          EDIT: Wenn die günstigste Startzeit heute um 13:00 Uhr ist, kommt die Abfrage um 13:30 Uhr etwas zu spät.

                          icebear 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @icebear last edited by Homoran

                            @icebear sagte in Brauche Hilfe bei Tibber Blockly:

                            Also Tibber holt ja immer für einen Tag die Daten um 13:00 Uhr für den nächsten Tag.

                            was nutzt dir dann "heute" wenn wie im ersten Beispiel die Zeit um 04:00 war.
                            Dann reicht es doch immer nur morgen auszuwerten und ggf. den überbleibenden Wert beim nächsten Abruf in einen anderen Datenpunkt übernehmen.

                            1 Reply Last reply Reply Quote 0
                            • M
                              Maas-Meister @icebear last edited by Maas-Meister

                              @icebear

                              ich nutze dafür das script von @MCU
                              Dieses hat er auf seiner Blog-Seite erklärt, leider finde ich diesen gerade nicht.
                              Falls ich ihn finden sollte, reiche ich diesen nach.
                              //Edit:
                              hier die Quelle:
                              https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/tibber/tibbernext2cheapest

                              Das Script sollte dennoch selbsterklärend sein:

                              // ******************************
                              // tibberNext2Cheapest v1.0.1
                              // ******************************
                              // Copyright ©MCU
                              // v1.0.1 - numHours - Anzahl der zusammenhängenden Stunden eingeführt
                              
                              let tibberdataDP            = '0_userdata.0.tibber.data'
                              let cheapestNext2HoursDP    = tibberdataDP + '.cheapestNext2Hours';
                              let cheapestNext2StartTSDP  = tibberdataDP + '.cheapestNext2StartTS';
                              let cheapestNext2StartDP    = tibberdataDP + '.cheapestNext2Start';
                              let cheapestSearchAreaDP    = tibberdataDP + '.cheapestArea';
                              let startDP                 = tibberdataDP + '.startCalc';
                              let numHoursDP              = tibberdataDP + '.numHours';
                              
                              createStateAsync(cheapestNext2HoursDP,     {read: true, write: false, name: "Günstigsten 2 Stunden im gewählten Bereich", desc:"Günstige-Stunden-DP", type: "string", role: "", def: "[]" });
                              createStateAsync(cheapestNext2StartTSDP,   {read: true, write: false, name: "Start [TS] der nächsten günstigen 2 Stunden", desc:"Start-DP", type: "number", role: "", def: 0 });
                              createStateAsync(cheapestNext2StartDP,     {read: true, write: false, name: "Start [Text] der nächsten günstigen 2 Stunden", desc:"Start-DP", type: "string", role: "", def: 0 });
                              createStateAsync(cheapestSearchAreaDP,     {read: true, write: true, name: "Bereich für Suche in [h]", desc:"Bereich-DP", type: "number", role: "",unit:"Std.", def: 10 });
                              createStateAsync(startDP,                  {read: true, write: true, name: "Berechnung starten", desc:"Start-DP", type: "boolean", role: "button", def: false });
                              createStateAsync(numHoursDP,               {read: true, write: true, name: "Anzahl der zusammenhängenden Stunde [h]", desc:"Anzahl Stunden-DP", type: "number", role: "",unit:"Std.", def: 2 });
                              
                              let nowHour = new Date().getHours();
                              let tibberInst = '0';
                              
                              
                              let scheduleId ;
                              if(getState(startDP).val){
                                  scheduleId = schedule('00 * * * *', () => {
                                      getCheapest();
                                  })
                              }
                              
                              on({id: cheapestSearchAreaDP, change: "any"}, function (obj) {
                                  getCheapest();
                              });
                              on({id: numHoursDP, change: "any"}, function (obj) {
                                  getCheapest();
                              });
                              on({id: startDP, change: "any"}, function (obj) {
                                  let value = obj.state.val;
                                  if(value){
                                      getCheapest();
                                      setState(startDP,false)
                                  }
                              });
                              
                              function getCheapest(){
                                  let priceArr = ['PricesToday','PricesTomorrow'];
                                  let tibberData = [];
                                  let searchHours = getState(cheapestSearchAreaDP).val;
                              
                                  for(let x=0;x< priceArr.length;x++){
                                      
                                      let tibberLink = $('tibberlink.'+tibberInst+'.Homes.*.'+priceArr[x]+'.json')
                                      if(tibberLink[0] != undefined){
                                          let tblLevel = levelObject(tibberLink[0]);
                                          let dpLeveltbl = getDPLevel(tblLevel,4);
                                          let tibberJSON = JSON.parse(getState(dpLeveltbl+'.json').val);
                                          // tibberJSON
                                          for(let i=0;i<tibberJSON.length;i++){
                                              let obj = {};
                                              obj.hour     = parseInt(tibberJSON[i].startsAt.substring(11,13));
                                              obj.start   = tibberJSON[i].startsAt
                                              obj.startTS = new Date(obj.start).getTime();
                                              obj.value   = tibberJSON[i].total;
                                              tibberData.push(obj);
                                          }
                                      }
                                  }
                                  // log(tibberData)
                                  let cheapest = findCheapestHoursChange(tibberData.slice(nowHour+1,nowHour+1+searchHours),getState(numHoursDP).val);
                                  // log(cheapest)
                                  setState(cheapestNext2HoursDP,JSON.stringify(cheapest));
                                  setState(cheapestNext2StartTSDP,cheapest[0].startTS);
                                  setState(cheapestNext2StartDP,formatDate(cheapest[0].startTS,'DD.MM.YYYY hh:mm:ss'));
                              }
                              
                              function findCheapestHoursChange(data, numHours) {
                                if (numHours < 1 || numHours > data.length) {
                                  console.error("Invalid number of hours");
                                  return [];
                                }
                              
                                let minPrice = Infinity;
                                let result = [];
                              
                                for (let i = 0; i < data.length - numHours + 1; i++) {
                                  let priceSum = 0;
                                  const currentHours = data.slice(i, i + numHours);
                              
                                  for (const hour of currentHours) {
                                    priceSum += hour.value;
                                  }
                              
                                  if (priceSum < minPrice) {
                                    minPrice = priceSum;
                                    result = currentHours;
                                  }
                                }
                              
                                return result;
                              }
                              
                              function findCheapestHours(data) {
                                let minPrice = Infinity;
                                let result = [];
                              
                                for (let i = 0; i < data.length - 1; i++) {
                                  const priceSum = data[i].value + data[i + 1].value;
                              
                                  if (priceSum < minPrice) {
                                    minPrice = priceSum;
                                    result = [data[i], data[i + 1]];
                                  }
                                }
                              
                                return result;
                              }
                              
                              
                              function levelObject(id){
                                  // 0_userdata.0.jarvis.system.tabWidgetStateEffects.0.Desktop.0.Bad.0b5dd758-8d7d-4259-8945-821b1c942960.states.0.displayOff
                                  let idArr=id.split('.');
                                  return idArr; //log(idArr[10]);
                              }
                              
                              // log(getDPLevel(levelObject('0_userdata.0.jarvis.system.tabWidgetStateEffects.0.Desktop.0.Bad.0b5dd758-8d7d-4259-8945-821b1c942960.states.0.displayOff'),9));
                              function getDPLevel(idArr,level){
                                  let id ='';
                                  for (let i=0;i<=level;i++){
                                      id += idArr[i] +'.'
                                  }
                                  id = id.substr(0,id.length-1); // letzten Punkt wegnehmen
                                  return id;
                              }
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • icebear
                                icebear @paul53 last edited by

                                @paul53 said in Brauche Hilfe bei Tibber Blockly:

                                Versuche es mal so:

                                Habs grad nachgebaut und ausprobiert, so funktioniert das !!

                                Vielen Dank für deine schnelle Hilfe, ich werds mal beobachten , aber ich denke das ist genau das was ich haben wollte. Klein, schlank und nich soviel gedöns drum herum was man nicht braucht.

                                K 1 Reply Last reply Reply Quote 0
                                • K
                                  Karl @icebear last edited by Karl

                                  @icebear
                                  Hallo und fein dass du in diesem Forum Hilfe bekommen hattest.
                                  Ich habe das grundlegende Problem, dass ich mit einem einfachen script für den günstigsten Strompreis (per awattar - dürfte daselbe sein) keinen Schalter (schalte beim niedrigsten Strompreis die Steckdose X) hinbekomme, weil die Zeiten (Datum und Zeitpunkt) wohl anders als z.B. TT.MM.JJJJ oder SS:mm:ss in awattar formatiert sind. Ich habe viele der hier im forum angebotenen scripte (erfolglos) nachgebaut; zuletzt die Ursprungsdaten in Text und dann in Strings konvertiert - alles ohne Erfolg.
                                  Script (mit den Hinweisen) macht nun, was es soll. Danke

                                  Homoran paul53 2 Replies Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @Karl last edited by

                                    @karl sagte in Brauche Hilfe bei Tibber Blockly:

                                    fein dass du in diesem Forum Hilfe bekommen hattest.

                                    das klingt fast so, als ob du mit

                                    @karl sagte in Brauche Hilfe bei Tibber Blockly:

                                    Ich habe viele der hier im forum angebotenen scripte (erfolglos) nachgebaut;

                                    keine Hilfe bekommen hättest.

                                    Hast du denn dein Skript und die Logausgaben gezeigt?
                                    Um helfen zu können brauchen die Helfenden auch die notwendigen Informationen!

                                    Mach bitte einen eigenen Thread dazu mit diesen Informationen auf, dann wird sicher auch dir geholfen.

                                    1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @Karl last edited by

                                      @karl sagte: scripte (erfolglos) nachgebaut

                                      Passt dieses Blockly nicht?

                                      1 Reply Last reply Reply Quote 0
                                      • icebear
                                        icebear last edited by icebear

                                        Ich hätte noch eine kleine Nachfrage,

                                        Wie bekomm ich es hin das ich im Blockly prüfe Falls der Strompreis heute (13-23:59) guenstiger ist als der Strompreis 'Morgen' (00:00 -13:00) dann soll etwas passieren (also z.B schalten) und wenn der Strompreis nicht günstiger ist, dann soll Morgen um die Zeit wo er günstiger ist ewas schalten.

                                        Also Heute 23:00 Strompreis 0,25 aber Morgen 04:00 0,21> dann warten bis 04:00 und dann soll erst das WWSchnell auf wahr gesetzt werden und das von Heute auf falsch.

                                        Hier noch der Blockly Ansatz

                                        epex.png

                                        Ich hoffe ich hab mich verständlich ausgedrückt

                                        paul53 2 Replies Last reply Reply Quote 0
                                        • paul53
                                          paul53 @icebear last edited by paul53

                                          @icebear
                                          Welcher Adapter? Tibberlink oder Awattar? Du hast die Frage bei beiden Adaptern gestellt, die sich erheblich unterscheiden.

                                          icebear 1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 @icebear last edited by paul53

                                            @icebear sagte: Heute 23:00 Strompreis 0,25 aber Morgen 04:00 0,21> dann warten bis 04:00

                                            Da am frühen Abend die Preise hoch sind, kann man kurz vor 20:00 Uhr die Stunde mit dem niedrigsten Preis in den nächsten 24 Stunden ermitteln. Prinzip:

                                            Blockly_temp.JPG

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            413
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            23
                                            882
                                            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