Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      oxident @Michael Wyraz last edited by

      @michael-wyraz Mal eine blöde Frage: Warum braucht man das? Überträgt die Bridge den Zählerstand nicht automatisch?

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

        @oxident ich würde denken wenn du deinen Zähler anders als mit dem Pulse ausliest.

        O 1 Reply Last reply Reply Quote 0
        • O
          oxident @theGrinch last edited by

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

          @oxident ich würde denken wenn du deinen Zähler anders als mit dem Pulse ausliest.

          Ach, das ist möglich/erlaubt? Zumindest theoretisch...

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

            @oxident so wie ich das auf tibber.de gelesen habe, machen die stündliche Abrechnung nur mit dem Pulse. Hätte also nur einen Effekt für die monatliche Übermittlung, wenn es denn akzeptiert wird.

            Michael Wyraz 1 Reply Last reply Reply Quote 1
            • Michael Wyraz
              Michael Wyraz @theGrinch last edited by

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

              @oxident so wie ich das auf tibber.de gelesen habe, machen die stündliche Abrechnung nur mit dem Pulse. Hätte also nur einen Effekt für die monatliche Übermittlung, wenn es denn akzeptiert wird.

              Exakt. Die ursprüngliche Frage war ja, ob/wie man Werte hochladen kann, anstatt sie monatlich selbst in die App einzugeben, wenn man keinen Pulse hat. Da ich vor dem selben Problem stehe, bis mein Pulse ankommt und bis ich weiß, dass er mit meinem Zähler kompatibel ist, habe ich mich damit mal beschäftigt.

              Mit einem funktionierenden Pulse erledigt sich das Thema natürlich komplett.

              1 Reply Last reply Reply Quote 2
              • S
                Schimi @Michael Wyraz last edited by

                @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 Wyraz 1 Reply Last reply Reply Quote 0
                • Michael Wyraz
                  Michael Wyraz @Schimi last edited by

                  @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 Reply Quote 0
                  • S
                    Schimi @Michael Wyraz last edited by

                    @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 Wyraz O crunchip 3 Replies Last reply Reply Quote 0
                    • Michael Wyraz
                      Michael Wyraz @Schimi last edited by

                      @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 Reply Quote 0
                      • S
                        Schimi @Michael Wyraz last edited by

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

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

                        Michael Wyraz 1 Reply Last reply Reply Quote 0
                        • Michael Wyraz
                          Michael Wyraz @Schimi last edited by

                          @schimi

                          Welche Möglichkeit gibt es denn, die abzurufen?

                          S 1 Reply Last reply Reply Quote 0
                          • S
                            Schimi @Michael Wyraz last edited by

                            @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 Reply Quote 0
                            • O
                              oxident @theGrinch last edited by

                              @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 Reply Quote 0
                              • J
                                JoAu84 @MikeRow last edited by

                                @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 Reply Quote 0
                                • M
                                  MikeRow @JoAu84 last edited by

                                  @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 Reply Quote 0
                                  • T
                                    ThomKast @JoAu84 last edited by ThomKast

                                    @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 Reply Quote 0
                                    • L
                                      Leviathan09 last edited by

                                      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 Reply Quote 0
                                      • L
                                        Leviathan09 @Leviathan09 last edited by

                                        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 Reply Quote 0
                                        • O
                                          oxident @Schimi last edited by

                                          @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 Reply Quote 0
                                          • S
                                            Schimi @oxident last edited by

                                            @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 Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            864
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            49
                                            360
                                            62817
                                            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