Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Brauche Hilfe bei Tibber Blockly

NEWS

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

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

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

Brauche Hilfe bei Tibber Blockly

Scheduled Pinned Locked Moved Blockly
23 Posts 6 Posters 1.9k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • icebearI 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.

    M Offline
    M Offline
    Maas-Meister
    wrote on last edited by Maas-Meister
    #13

    @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
    0
    • paul53P 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.

      icebearI Online
      icebearI Online
      icebear
      wrote on last edited by
      #14

      @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
      0
      • icebearI icebear

        @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 Offline
        K Offline
        Karl
        wrote on last edited by Karl
        #15

        @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

        HomoranH paul53P 2 Replies Last reply
        0
        • K 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

          HomoranH Do not disturb
          HomoranH Do not disturb
          Homoran
          Global Moderator Administrators
          wrote on last edited by
          #16

          @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.

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Reply Last reply
          0
          • K 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

            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #17

            @karl sagte: scripte (erfolglos) nachgebaut

            Passt dieses Blockly nicht?

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Reply Last reply
            0
            • icebearI Online
              icebearI Online
              icebear
              wrote on last edited by icebear
              #18

              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

              paul53P 2 Replies Last reply
              0
              • icebearI 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

                paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by paul53
                #19

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

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                icebearI 1 Reply Last reply
                0
                • icebearI 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

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #20

                  @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

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Reply Last reply
                  0
                  • paul53P paul53

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

                    icebearI Online
                    icebearI Online
                    icebear
                    wrote on last edited by
                    #21

                    @paul53 said in Brauche Hilfe bei Tibber Blockly:

                    Welcher Adapter? Tibberlink oder Awattar?

                    Ich nutze Tiiberlink.

                    Das meinte ich aber nicht, das hab ich alles schon ermittelt usw.

                    Mir ging es darum wie ich das jetzt in meine Schaltung/Prüfung einbauen kann.

                    Ich Lege zuerst mit der Betriebsart fest ob mit PV oder EPEX das Warmwasser gemacht werden soll. Wenn keine PV-Leistung dann EPEX. Da ist es ja egal um wieviel UHR die WP läuft soll halt günstig sein.

                    So jetzt war ich an dem Punkt (wie oben in dem Blockly) wenn WWLow und Betriebsart EPEX

                    dann soll er prüfen, ist der Strompreis bis 23:59 "Heute" günstiger als "Morgen" bis 05:00 Uhr > dann Schalter WWSchnell auf 'WAHR' wenn die Stunde z.B 23:00 erreicht ist (und der Rest ist erstmal hinfällig da ich dann WW um 07:00 habe)

                    Was ist aber wenn der Strompreis bis 23:59 teurer ist als der bis 05:00Uhr , wie baue ich jetzt ein das er dann bei heute den Schalter WWSchnell auf 'FALSE' setzt und dann am nächsten Tag z.B. 'Aktuelle Zeit = 04:00 Uhr > Schalter WWSchnell auf 'WAHR'

                    paul53P 1 Reply Last reply
                    0
                    • icebearI icebear

                      @paul53 said in Brauche Hilfe bei Tibber Blockly:

                      Welcher Adapter? Tibberlink oder Awattar?

                      Ich nutze Tiiberlink.

                      Das meinte ich aber nicht, das hab ich alles schon ermittelt usw.

                      Mir ging es darum wie ich das jetzt in meine Schaltung/Prüfung einbauen kann.

                      Ich Lege zuerst mit der Betriebsart fest ob mit PV oder EPEX das Warmwasser gemacht werden soll. Wenn keine PV-Leistung dann EPEX. Da ist es ja egal um wieviel UHR die WP läuft soll halt günstig sein.

                      So jetzt war ich an dem Punkt (wie oben in dem Blockly) wenn WWLow und Betriebsart EPEX

                      dann soll er prüfen, ist der Strompreis bis 23:59 "Heute" günstiger als "Morgen" bis 05:00 Uhr > dann Schalter WWSchnell auf 'WAHR' wenn die Stunde z.B 23:00 erreicht ist (und der Rest ist erstmal hinfällig da ich dann WW um 07:00 habe)

                      Was ist aber wenn der Strompreis bis 23:59 teurer ist als der bis 05:00Uhr , wie baue ich jetzt ein das er dann bei heute den Schalter WWSchnell auf 'FALSE' setzt und dann am nächsten Tag z.B. 'Aktuelle Zeit = 04:00 Uhr > Schalter WWSchnell auf 'WAHR'

                      paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by paul53
                      #22

                      @icebear sagte: am nächsten Tag z.B. 'Aktuelle Zeit = 04:00 Uhr > Schalter WWSchnell auf 'WAHR'

                      Das macht der rechte Trigger zu jeder vollen Stunde: Wenn die günstigste Startzeit 4:00 Uhr ist, wird um 4:00 Uhr eingeschaltet.

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      icebearI 1 Reply Last reply
                      0
                      • paul53P paul53

                        @icebear sagte: am nächsten Tag z.B. 'Aktuelle Zeit = 04:00 Uhr > Schalter WWSchnell auf 'WAHR'

                        Das macht der rechte Trigger zu jeder vollen Stunde: Wenn die günstigste Startzeit 4:00 Uhr ist, wird um 4:00 Uhr eingeschaltet.

                        icebearI Online
                        icebearI Online
                        icebear
                        wrote on last edited by
                        #23

                        @paul53

                        Ah, ok ich baue es ein und werde testen.

                        Vielen Dank

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


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        639

                        Online

                        32.4k

                        Users

                        81.4k

                        Topics

                        1.3m

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

                        • Don't have an account? Register

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