Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    949

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

Scheduled Pinned Locked Moved Tester
360 Posts 49 Posters 96.7k Views 53 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.
  • Michael WyrazM Michael Wyraz

    @pavelcoast said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:

    Soll zwar nur für Norweger sein, aber vielleicht funktioniert es auch hier, dann könnte man täglich den Zählerstand automatisiert senden, statt über die App.

    Leider nicht:

    ebec0252-0f27-4e8b-bf59-9492e997b8a0-grafik.png

    Dazu müsste man sich die App mal anschauen und die private API herausfinden.

    Edit: Hab mir die App mal angeschaut und die private API herausgefunden ^^

    https://app.tibber.com/v4/gql

    Beispiele:

    Auth-Info:

    {
      me {
        id
        firstName
        homes {
          id
        }
      }
    }
    

    Aktueller Zähler:

    {
      me {
        home(id:"xxxxxx-xxxxxx-xxxxxx-xxxxx") {
          currentMeter {
            id
            meterNo
            isUserRead
          }
        }
      }
    }
    

    Zähler und Register anzeigen:

    {
      me {
        meters {
          items {
            type
            title
            meter {
              id
              readingDateScreen {
                title
                nextButtonText
              }
              registers {
                id
                title
                description
                expectedMin
                expectedMax
              }
            }
          }
        }
      }
    }
    

    Zählerstand eintragen

    mutation {
      me {
        addMeterReadings(meterId: "xxxxx-xxxxx-xxxxx-xxxx-xxxxxxxx",readingDate: "2023-01-16", readings: [{id:"1-0:1.8.0",value:26529}])
        {
          success {
            inputTitle
            inputValue
            title
            descriptionHtml
            doneButtonText
          }
          error {
            statusCode
            title
            message
          }
        }
      }
    }
    

    Viel Spaß damit ;-)

    S Online
    S Online
    Schimi
    wrote on last edited by
    #161

    @michael-wyraz

    Wenn da jemand nen blocklyoder JavaScript machen könnte, wäre super... ich weiss gar nicht wie ich anfangen soll..

    Nen Automatismus der z.B. am 01 jedes Monats um 0:10Uhr) den Zählerstand überträgt würde reichen..

    Michael WyrazM 1 Reply Last reply
    0
    • S Schimi

      @michael-wyraz

      Wenn da jemand nen blocklyoder JavaScript machen könnte, wäre super... ich weiss gar nicht wie ich anfangen soll..

      Nen Automatismus der z.B. am 01 jedes Monats um 0:10Uhr) den Zählerstand überträgt würde reichen..

      Michael WyrazM Offline
      Michael WyrazM Offline
      Michael Wyraz
      wrote on last edited by
      #162

      @schimi

      Ich baue mir gerade eine kleine Anwendung dazu. Wird allerdings in Java, weil mir das locker aus der Hand fließt.

      • Konfigurierbare Quelle, erstmal generische REST-Api oder ne Zeitreihendatenbank
      • Angabe des Ziels (Login zu Tibber)

      Das Tool soll täglich nach neuen Zählerständen schauen und die fehlenden bis maximal 30 Tage zurück nachtragen (die API erlaubt maximal Tageswerte und maximal 30 Tage zurück).

      Welche Datenquelle hast Du?

      S 1 Reply Last reply
      0
      • Michael WyrazM Michael Wyraz

        @schimi

        Ich baue mir gerade eine kleine Anwendung dazu. Wird allerdings in Java, weil mir das locker aus der Hand fließt.

        • Konfigurierbare Quelle, erstmal generische REST-Api oder ne Zeitreihendatenbank
        • Angabe des Ziels (Login zu Tibber)

        Das Tool soll täglich nach neuen Zählerständen schauen und die fehlenden bis maximal 30 Tage zurück nachtragen (die API erlaubt maximal Tageswerte und maximal 30 Tage zurück).

        Welche Datenquelle hast Du?

        S Online
        S Online
        Schimi
        wrote on last edited by
        #163

        @michael-wyraz

        ich nutze einen IR Lesekopf mit dem "smartmeter"-Adapter...
        gibt dann so eine ausgabe:
        460b24ab-dd3c-4bc6-b767-33a4a608bd25-image.png

        Vielleicht kannst du das ja über ne variable lösen, wo man im config bereich den Datenpunkt angibt.....

        mir würde es im grunde reichen wenn ich einmal im Monat (lösbar über Cronjob, dann könnte man flexibel auch jeden Tag oder so, wählen) den Zählerstand übertrage.... (In meinem fall, macht der Pulse wenig sinn und ich habe mehr vom Durchschnittspreis)

        Michael WyrazM O crunchipC 3 Replies Last reply
        0
        • S Schimi

          @michael-wyraz

          ich nutze einen IR Lesekopf mit dem "smartmeter"-Adapter...
          gibt dann so eine ausgabe:
          460b24ab-dd3c-4bc6-b767-33a4a608bd25-image.png

          Vielleicht kannst du das ja über ne variable lösen, wo man im config bereich den Datenpunkt angibt.....

          mir würde es im grunde reichen wenn ich einmal im Monat (lösbar über Cronjob, dann könnte man flexibel auch jeden Tag oder so, wählen) den Zählerstand übertrage.... (In meinem fall, macht der Pulse wenig sinn und ich habe mehr vom Durchschnittspreis)

          Michael WyrazM Offline
          Michael WyrazM Offline
          Michael Wyraz
          wrote on last edited by
          #164

          @schimi
          Ich denke, du möchtest die 1_8_0 melden. Woher kommt die Ausgabe, ist das von ioBroker? (ich kenne ioBroker nicht, hab nur hier gepostet, weil ich hier einige Infos gefunden habe und mich mit meinen Infos revanchieren wollte).

          S 1 Reply Last reply
          0
          • Michael WyrazM Michael Wyraz

            @schimi
            Ich denke, du möchtest die 1_8_0 melden. Woher kommt die Ausgabe, ist das von ioBroker? (ich kenne ioBroker nicht, hab nur hier gepostet, weil ich hier einige Infos gefunden habe und mich mit meinen Infos revanchieren wollte).

            S Online
            S Online
            Schimi
            wrote on last edited by
            #165

            @michael-wyraz sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:

            ...
            (ich kenne ioBroker nicht, hab nur hier gepostet, weil ich hier einige Infos gefunden habe und mich mit meinen Infos revanchieren wollte)...

            Ahso..... ok... das ist aber auch mega cool von dir :+1:

            ja genau, die 1_8_0.... und kommt von iobroker... wird alle par sek aktualisiert :-)

            Michael WyrazM 1 Reply Last reply
            0
            • S Schimi

              @michael-wyraz sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:

              ...
              (ich kenne ioBroker nicht, hab nur hier gepostet, weil ich hier einige Infos gefunden habe und mich mit meinen Infos revanchieren wollte)...

              Ahso..... ok... das ist aber auch mega cool von dir :+1:

              ja genau, die 1_8_0.... und kommt von iobroker... wird alle par sek aktualisiert :-)

              Michael WyrazM Offline
              Michael WyrazM Offline
              Michael Wyraz
              wrote on last edited by
              #166

              @schimi

              Welche Möglichkeit gibt es denn, die abzurufen?

              S 1 Reply Last reply
              0
              • Michael WyrazM Michael Wyraz

                @schimi

                Welche Möglichkeit gibt es denn, die abzurufen?

                S Online
                S Online
                Schimi
                wrote on last edited by
                #167

                @michael-wyraz

                den Datenpunkt auslesen würde reichen....

                Leider weiß ich nicht wie ich es anders beschreiben soll....

                hier habe ich mal nen Script was einen andern Datenpunkt ausließt und an eine Wallbox sendet...
                Ich nutze es zwar nicht (habe es nur in der Sammlung, falls ich sowas mal "brauche") aber es funktioniert (getestet)

                vielleicht erklärt es einiges.

                on({id: 'smartmeter.0.1-0:16_7_0__255.value', change: 'any'}, function (obj) {
                var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
                 
                Arbeit = getState("smartmeter.0.1-0:1_8_0__255.value").val;
                Arbeit = Arbeit * 1000
                Leistung  = getState("smartmeter.0.1-0:16_7_0__255.value").val;
                Strom = Leistung / 0.690
                 
                var url = "http://192.168.20.148/cnf?cmd=set_ajax_meter&dev_id=M5";
                 
                var xhr = new XMLHttpRequest();
                xhr.open("POST", url);
                 
                xhr.setRequestHeader("Authorization", "Basic YWRtaW46MTIzNGFiY2Q=");
                xhr.setRequestHeader("Content-Type", "application/json");
                 
                xhr.onreadystatechange = function () {
                   if (xhr.readyState === 4) {
                      console.log(xhr.status);
                      console.log(xhr.responseText);
                   }};
                var data = `{
                   "import_vah": ${Arbeit},
                   "power_va": ${Leistung},
                   "current": [${Strom}, ${Strom}, ${Strom}]
                }`;
                xhr.send(data);
                });
                
                1 Reply Last reply
                0
                • T theGrinch

                  Auf Anregung von @MikeRow habe ich mal die BarChart von @Familienvater auf diesen Adapter angepasst.

                  Einfach das "home" reinkopieren in Zeile 6+7.

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

                  /edit: Originalpost mit allen Infos: https://forum.iobroker.net/topic/47195/diagramm-mit-festen-werten-in-vis-nur-wie/12

                  O Offline
                  O Offline
                  oxident
                  wrote on last edited by
                  #168

                  @thegrinch said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:

                  Auf Anregung von @MikeRow habe ich mal die BarChart von @Familienvater auf diesen Adapter angepasst.

                  Einfach das "home" reinkopieren in Zeile 6+7.

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

                  /edit: Originalpost mit allen Infos: https://forum.iobroker.net/topic/47195/diagramm-mit-festen-werten-in-vis-nur-wie/12

                  Danke dafür!

                  Wichtig ist jedoch zu wissen, dass der Adapter derzeit den Folgetag nicht zurücksetzt. Daher sind bis mittags noch die Daten vom aktuellen und Folgetag gleich.

                  Das betrifft auch das Diagramm.

                  1 Reply Last reply
                  0
                  • M MikeRow

                    @joau8 Bei mir läuft es, gerade mal getestet
                    06550d02-a9c2-4c27-9ea6-9c64bfc05cdd-image.png

                    Nur im Tibberconnect Adapter kommt seit gestern das LiveMeasurement nicht mehr rüber

                    J Offline
                    J Offline
                    JoAu84
                    wrote on last edited by
                    #169

                    @mikerow @ThomKast
                    sorry für die sehr späte Antwort; das Skript lief bei mir auch, aber das Livemeasurement nicht mehr. Geht übrigens immer noch nicht - weiß jemand, wann das im Adapter geändert werden könnte (gab ja wohl ne Änderung der Api-Adresse...
                    Vielen Dank!

                    M T 2 Replies Last reply
                    0
                    • J JoAu84

                      @mikerow @ThomKast
                      sorry für die sehr späte Antwort; das Skript lief bei mir auch, aber das Livemeasurement nicht mehr. Geht übrigens immer noch nicht - weiß jemand, wann das im Adapter geändert werden könnte (gab ja wohl ne Änderung der Api-Adresse...
                      Vielen Dank!

                      M Online
                      M Online
                      MikeRow
                      wrote on last edited by
                      #170

                      @joau84 Leider nein, ich denke dass muss sich @Codibris ansehen. Ich nutze für den Übergang eine Home Assistant Instanz mit Tibber Adapter. Diese Daten lese ich dann mit IOB ein.

                      1 Reply Last reply
                      0
                      • J JoAu84

                        @mikerow @ThomKast
                        sorry für die sehr späte Antwort; das Skript lief bei mir auch, aber das Livemeasurement nicht mehr. Geht übrigens immer noch nicht - weiß jemand, wann das im Adapter geändert werden könnte (gab ja wohl ne Änderung der Api-Adresse...
                        Vielen Dank!

                        T Offline
                        T Offline
                        ThomKast
                        wrote on last edited by ThomKast
                        #171

                        @joau84 wie @MikeRow schon schreibt...
                        Such mal auf dieser Seite nach NOTERED, denn weiter oben habe ich 2 Einträge erstellt, wie die Daten mit NODERED abgeholt werden können. Funktioniert 1a

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          Leviathan09
                          wrote on last edited by
                          #172

                          Hi, hat noch wer das Problem das nach einer gewissen Zeit keine Preis-Updates mehr kommen?
                          Ich hatte es jetzt schon ein paar mal die Tage das ich den Adapter neustarten musste damit ich wieder die aktuellen Preise bekomme.

                          Kann das damit zusammenliegen das mein Vertrag erst im Februar aktiv ist und daher meine Abrfragen per API eingeschränkt werden.
                          Oder könnte es an einem Problem mit dem Adapter liegen?

                          Ich habe jetzt mal einen Neustart immer Nachts um 00:15 eingeplant um zu schauen ob es etwas bringt und dem Problem eventuell entgegen zu wirken.

                          L 1 Reply Last reply
                          0
                          • L Leviathan09

                            Hi, hat noch wer das Problem das nach einer gewissen Zeit keine Preis-Updates mehr kommen?
                            Ich hatte es jetzt schon ein paar mal die Tage das ich den Adapter neustarten musste damit ich wieder die aktuellen Preise bekomme.

                            Kann das damit zusammenliegen das mein Vertrag erst im Februar aktiv ist und daher meine Abrfragen per API eingeschränkt werden.
                            Oder könnte es an einem Problem mit dem Adapter liegen?

                            Ich habe jetzt mal einen Neustart immer Nachts um 00:15 eingeplant um zu schauen ob es etwas bringt und dem Problem eventuell entgegen zu wirken.

                            L Offline
                            L Offline
                            Leviathan09
                            wrote on last edited by
                            #173

                            Habe mal in den Logs geschaut was heute so los war. Folgendes taucht auf:

                            host.iobroker
                            	2023-01-23 10:55:09.733	error	instance system.adapter.tibberconnect.0 terminated with code 6 (UNCAUGHT_EXCEPTION)
                            tibberconnect.0
                            	2023-01-23 10:55:09.183	error	undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.183	error	unhandled promise rejection: undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.182	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                            tibberconnect.0
                            	2023-01-23 10:55:09.174	warn	Terminated (UNCAUGHT_EXCEPTION): Without reason
                            tibberconnect.0
                            	2023-01-23 10:55:09.173	info	terminating
                            tibberconnect.0
                            	2023-01-23 10:55:09.171	error	undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.171	error	unhandled promise rejection: undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.170	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                            tibberconnect.0
                            	2023-01-23 10:55:09.168	error	undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.168	error	unhandled promise rejection: undefined
                            tibberconnect.0
                            	2023-01-23 10:55:09.167	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                            
                            1 Reply Last reply
                            0
                            • S Schimi

                              @michael-wyraz

                              ich nutze einen IR Lesekopf mit dem "smartmeter"-Adapter...
                              gibt dann so eine ausgabe:
                              460b24ab-dd3c-4bc6-b767-33a4a608bd25-image.png

                              Vielleicht kannst du das ja über ne variable lösen, wo man im config bereich den Datenpunkt angibt.....

                              mir würde es im grunde reichen wenn ich einmal im Monat (lösbar über Cronjob, dann könnte man flexibel auch jeden Tag oder so, wählen) den Zählerstand übertrage.... (In meinem fall, macht der Pulse wenig sinn und ich habe mehr vom Durchschnittspreis)

                              O Offline
                              O Offline
                              oxident
                              wrote on last edited by
                              #174

                              @schimi Kannst Du erläutern, wieso bei Dir der Durchschnittspreis mehr Sinn macht?

                              Ich überlege mir das nämlich auch gerade...

                              S 1 Reply Last reply
                              0
                              • O oxident

                                @schimi Kannst Du erläutern, wieso bei Dir der Durchschnittspreis mehr Sinn macht?

                                Ich überlege mir das nämlich auch gerade...

                                S Online
                                S Online
                                Schimi
                                wrote on last edited by
                                #175

                                @oxident

                                da wir den hauptverbrauch am Tag haben... so das wir in der günstigen Zeit nicht genug verbauchen um auf den Tag gesehen günstiger zu sein....

                                Hoffe das ist verständlich geschrieben :-)

                                Sobald das E-Auto öfters als (aktuell) einmal alle 2-3 Monate zuhause geladen wird, sieht die rechnung wieder bestimmt anderes aus

                                O 1 Reply Last reply
                                1
                                • S Schimi

                                  @oxident

                                  da wir den hauptverbrauch am Tag haben... so das wir in der günstigen Zeit nicht genug verbauchen um auf den Tag gesehen günstiger zu sein....

                                  Hoffe das ist verständlich geschrieben :-)

                                  Sobald das E-Auto öfters als (aktuell) einmal alle 2-3 Monate zuhause geladen wird, sieht die rechnung wieder bestimmt anderes aus

                                  O Offline
                                  O Offline
                                  oxident
                                  wrote on last edited by
                                  #176

                                  @schimi Ja, das leuchtet ein. Respekt, dass Du das für Dich so ausrechnen konntest ;-)

                                  S 1 Reply Last reply
                                  0
                                  • O oxident

                                    @schimi Ja, das leuchtet ein. Respekt, dass Du das für Dich so ausrechnen konntest ;-)

                                    S Online
                                    S Online
                                    Schimi
                                    wrote on last edited by
                                    #177

                                    @oxident sehe dir einfach deinen Tagesverbrauch an und was du davon Nachts verbrauchst....
                                    Damit kann man schon recht viel abschätzen....

                                    Als Berufstätiger (Ohne Schichtdienst) ist man ja meistens zu den spitzenzeiten zuhause (deswegen entstehen die ja überhaupt)... Mit Family potenziert sich das sogar....
                                    Nachts (quasi wenns günstig ist)läuft nur die Wärmepumpe (die braucht nicht viel) und die Grundlast...
                                    Am We ist es ja sogar manchmal am Tag günstig... dann profitiert man beim Durchschnittspreis auch davon....

                                    Obs nachher richtig ist... sieht man wenns zu spät ist :-) aber bei 2 Wochen Kündigungsfrist kann man gut reagieren... oder mit dem Pulse auf Std. abrechnung umstellen

                                    1 Reply Last reply
                                    1
                                    • M Offline
                                      M Offline
                                      Michaelnorge
                                      wrote on last edited by
                                      #178

                                      Mal ganz dumm ChatGPT gefragt, verstehe halt nix :-)

                                      const request = require('request');
                                      
                                      // Replace YOUR_API_KEY with your actual Tibber API key
                                      const API_KEY = 'YOUR_API_KEY';
                                      
                                      // Replace YOUR_PULSE_ID with the id of your Pulse device in ioBroker
                                      const PULSE_ID = 'YOUR_PULSE_ID';
                                      
                                      // Endpoint for Tibber API to retrieve current power consumption
                                      const API_ENDPOINT = `https://api.tibber.com/v1-beta/gql`;
                                      
                                      // Function to retrieve current power consumption from Tibber API
                                      function getCurrentPowerConsumption() {
                                          const query = `
                                              query {
                                                  viewer {
                                                      homes {
                                                          liveMeasurement {
                                                              power
                                                          }
                                                      }
                                                  }
                                              }
                                          `;
                                      
                                          const options = {
                                              method: 'POST',
                                              headers: {
                                                  'Content-Type': 'application/json',
                                                  'Authorization': `Bearer ${API_KEY}`
                                              },
                                              body: JSON.stringify({query: query})
                                          };
                                      
                                          request(API_ENDPOINT, options, (error, response, body) => {
                                              if (!error && response.statusCode === 200) {
                                                  const data = JSON.parse(body);
                                                  const power = data.data.viewer.homes[0].liveMeasurement.power;
                                                  setPowerConsumptionInPulse(power);
                                              } else {
                                                  console.error(`Error retrieving power consumption: ${error}`);
                                              }
                                          });
                                      }
                                      
                                      // Function to set current power consumption in ioBroker's Pulse device
                                      function setPowerConsumptionInPulse(power) {
                                          const options = {
                                              method: 'POST',
                                              url: `http://localhost:8087/setState?id=${PULSE_ID}.power&value=${power}`
                                          };
                                      
                                          request(options, (error, response, body) => {
                                              if (!error && response.statusCode === 200) {
                                                  console.log(`Successfully set power consumption in Pulse: ${power} W`);
                                              } else {
                                                  console.error(`Error setting power consumption in Pulse: ${error}`);
                                              }
                                          });
                                      }
                                      
                                      // Retrieve current power consumption every 10 minutes
                                      setInterval(getCurrentPowerConsumption, 600000);
                                      
                                      

                                      –--------------------------------------------------------------------------------------

                                      • Smart mit: Rasp 4B / ioBroker / Conbee2 / Trådfri / Xiaomi / HUE / Logitech Harmony / Aqara / Easee Wallbox / Hyundai Ioniq / Alexa / Google Home / Fully Kiosk / VIS
                                      1 Reply Last reply
                                      0
                                      • Michael WyrazM Michael Wyraz

                                        @pavelcoast said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:

                                        Soll zwar nur für Norweger sein, aber vielleicht funktioniert es auch hier, dann könnte man täglich den Zählerstand automatisiert senden, statt über die App.

                                        Leider nicht:

                                        ebec0252-0f27-4e8b-bf59-9492e997b8a0-grafik.png

                                        Dazu müsste man sich die App mal anschauen und die private API herausfinden.

                                        Edit: Hab mir die App mal angeschaut und die private API herausgefunden ^^

                                        https://app.tibber.com/v4/gql

                                        Beispiele:

                                        Auth-Info:

                                        {
                                          me {
                                            id
                                            firstName
                                            homes {
                                              id
                                            }
                                          }
                                        }
                                        

                                        Aktueller Zähler:

                                        {
                                          me {
                                            home(id:"xxxxxx-xxxxxx-xxxxxx-xxxxx") {
                                              currentMeter {
                                                id
                                                meterNo
                                                isUserRead
                                              }
                                            }
                                          }
                                        }
                                        

                                        Zähler und Register anzeigen:

                                        {
                                          me {
                                            meters {
                                              items {
                                                type
                                                title
                                                meter {
                                                  id
                                                  readingDateScreen {
                                                    title
                                                    nextButtonText
                                                  }
                                                  registers {
                                                    id
                                                    title
                                                    description
                                                    expectedMin
                                                    expectedMax
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                        

                                        Zählerstand eintragen

                                        mutation {
                                          me {
                                            addMeterReadings(meterId: "xxxxx-xxxxx-xxxxx-xxxx-xxxxxxxx",readingDate: "2023-01-16", readings: [{id:"1-0:1.8.0",value:26529}])
                                            {
                                              success {
                                                inputTitle
                                                inputValue
                                                title
                                                descriptionHtml
                                                doneButtonText
                                              }
                                              error {
                                                statusCode
                                                title
                                                message
                                              }
                                            }
                                          }
                                        }
                                        

                                        Viel Spaß damit ;-)

                                        O Offline
                                        O Offline
                                        oxident
                                        wrote on last edited by
                                        #179

                                        @michael-wyraz
                                        Jetzt bin ich spontan auch daran interessiert, meinen Zählerstand automatisiert hochzuladen ;-)
                                        Wie ich das sehe müsste man sich aber dennoch vor Nutzung der privaten API authentifizieren ... gibt's da dann'nen Cookie oder kann man es auch direkt via Token nutzen?

                                        1 Reply Last reply
                                        1
                                        • M Online
                                          M Online
                                          MikeRow
                                          wrote on last edited by
                                          #180

                                          Moin, mal eine Frage in die Runde. Das bei diesem Adapter die Pulse Funktion derzeit nicht funktioniert ist bekannt. Seit ein paar Tagen sehe ich auf folgendes Problem.

                                          Die Tagespreise passen, aber die Preise von morgen werden um Mitternacht nicht mehr gelöscht und aktualisiert. Jetzt gerade 08:10 Uhr sehe ich, dass die Preise von morgen noch gefüllt sind mit den gestrigen werden. Sonst waren die ab Mitternacht immer leer bis zur Aktualisierung am Nachmittag ab ca 13:00Uhr.

                                          Habt ihr auch das Problem?
                                          @Codibris bist du noch aktiv an dem Adapter? Hast dich lange nicht mehr gemeldet?

                                          O 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

                                          620

                                          Online

                                          32.6k

                                          Users

                                          82.2k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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