NEWS
Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse
-
Hat noch ein wenig gedauert, bis es "rund" ist. Hier ist ein erster Release meines Tools, welches aktuell die Zäherstände über ein Shell-Script beziehen kann:
https://github.com/micw/tibber-meter-uploader
Läuft seit heute bei mir auf dem Server unter Docker und hat heute den ersten Wert hochgeladen. Fehlermeldungen, Feature-Requests und Diskussion ist willkommem
Viele Grüße,
Michael. -
Ich habe testweise mal averagePower hinzugefügt, und habe nun das Problem, dass im ioBroker Datapoint ein TimeStamp statt des Wertes ankommt??
Log:
State value to set for "0_userdata.0.Tibber-Node-Red.averagePower" has to be type "number" but received type "object"Weder ein ioBroker datapoint vom Typ 'Number' noch 'Object' funktioniert ???Habs gefunden: Wer schreiben kann ist klar im Vorteil!
-
@warp-it
Ah schön. Habe es gerade nachgestellt. Gut, dass es nun funktioniert.Du kennst die Möglichkeit den kompletten Pfad eines Datenpunktes aus ioB zu kopieren, statt diesen einzutippen? Mit Klick darauf...
-
@warp-it
Zu Deiner Frage... Nein - funzt 1a. Auch mit kleinen Werten
-
@michael-wyraz sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
Hat noch ein wenig gedauert, bis es "rund" ist. Hier ist ein erster Release meines Tools, welches aktuell die Zäherstände über ein Shell-Script beziehen kann:
https://github.com/micw/tibber-meter-uploader
Läuft seit heute bei mir auf dem Server unter Docker und hat heute den ersten Wert hochgeladen. Fehlermeldungen, Feature-Requests und Diskussion ist willkommem
Viele Grüße,
Michael.ne möglichkeit/Anleitung wie man das direkt im iobroker macht wäre super (falls es überhaupt geht)
im Docker, muss ich mal schauen wie das funzt.... sobald ich mal"Zeit" habe...
Finde das jedefalls mega das du es erstellt hast
-
@schimi Hab leider mit IOBroker gar nix zu tun und auch keine Ahnung, wie das rein geht. Technisch ist es am Ende recht einfach.
Zuerst sende ich einen HTTP-Request mit Username+Passwort und bekomme einen Login-Token.
Dann sende einen HTTP-Request mit einer GraphQL Query. Das ist ein JSON-Dokument, welches in einem Feld eine Query (das ist ein großer statischer Text) und in einem anderen Feld alle Variablen enthält. In einem Cookie-Header sende sich das Login-Token mit. Als Antwort bekomme ich eine Info über den Account, alle Zähler, deren "Register" (da ist nur das Register "1-0:1.8.0" interessant, das ist der Gesamtstromverbrauch über alle Phasen und Tarife) und alle "Homes", jeweils nochmal mit deren Zählern und den zuletzt gemeldeten Zählerständen.
Das JSON-Objekt zerlege ich, so dass ich weiß, welcher Zähler dort ist und welche Zählerstände gemeldet sind.
Mit diesen Infos befrage ich die "Quelle" - das könnte beispielweise auch IOBroker sein - nach neuen Zählerständen ab dem letzten gemeldeten. Ich übertrage hier tageweise, obwohl monatlich ausreichen würde, da ich gerne die Statistik in der Tibber-App sehen möchte (das kann ich aber auf Wunsch auch einstellbar machen).
Habe ich die Zählerstände, rufe ich eine GraphQL "Mutation" auf, um die zu übergeben. Funktioniert genau wie die GraphQL Query.
Mit diesen Infos und dem Code aus meinem Repo sollte es jemanden mit entsprechenden Kenntnissen sicher möglich sein, das auch direkt in IOBroker umzusetzen. Alternativ (wenn mir jemand sagt, wie ich das abfrage und es hinterher testet), kann ich auch direkt IOBroker als Quelle mit in mein Tool einbauen. Bei Bedarf bitte ein Ticket mit den nötigen Infos im Repo machen.
Viele Grüße,
Michael.Edit: ich würde mich mit diesem Post aus dem Thread ausklinken, da das hier nur so halb reinpasst und ich den Thread damit nicht kapern möchte. Wenn es einen Thread gibt, das Senden der Daten in IOBroker zu integrieren und Rückfragen sind, kann ich gerne angepingt werden.
-
@thomkast said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
@warp-it
Ah schön. Habe es gerade nachgestellt. Gut, dass es nun funktioniert.Du kennst die Möglichkeit den kompletten Pfad eines Datenpunktes aus ioB zu kopieren, statt diesen einzutippen? Mit Klick darauf...
Ja, das ist klar, aber man sollte das 'return' aus der Funktion auch mit dem gleichen Variablennamen machen, den man in der Zeile vorher definiert hat.
Danke trotzdem für die Hilfe. -
@thomkast said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
@warp-it
Zu Deiner Frage... Nein - funzt 1a. Auch mit kleinen WertenDu hast wahrscheinlich einen anderen Zähler ?!
In der PowerOpti Whitelist steht was, dass bei meinem Zähler die Werte teilweise mit falschem Vorzeichen kommen würden... Egal, laut Tibber Pulse Whitelist sollte dieser Zähler funktionieren... -
@schimi sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
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)
ich habe mich ebenfalls zwecks Stromkosten für tibber entschieden, allerdings habe ich gar keinen smarten Stromzähler, von daher wird eh monatlich abgerechnet. Allerdings bin ich nun auch an einer Lösung interessiert, die Zählerstände automatisiert hochzuladen.
Meinen Ferraris Zähler lese ich mit einem Sensor aus und habe den Zählerstand somit in iobroker.
Da ich nicht scripten kann, habe ich nun auch mal ChatGPT bemüht und folgendes Script erstellt.const axios = require('axios'); async function updateCounterData(counterValue) { try { const response = await axios.post('https://api.tibber.com/v1-beta/gql', { query: `mutation { updateDataPoint(input: { id: "your-data-point-id", value: ${counterValue} }) { dataPoint { id value } } }`, headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-api-token' } }); console.log(`Counter data successfully updated: ${response.data.data.updateDataPoint.dataPoint.value}`); } catch (error) { console.error(`Error updating counter data: ${error.message}`); } } // Schedule to send current value of state "your.iobroker.instance.state" to Tibber every day at 12:00 schedule('0 12 * * *', () => { const counterValue = getState('your.iobroker.instance.state').val; updateCounterData(counterValue); });
Achten Sie darauf, Ihre eigene Datenpunkt-ID, API-Token und den Pfad zum Zustand in iobroker anzugeben.
Achten Sie darauf, dass der Zeitplan entsprechend Ihren Bedürfnissen angepasst wird -
@crunchip Okay, diese KI-Sachen machen mir langsam Angst
Ist vielleicht eine blöde Frage, aber funktioniert das Skript tatsächlich?
Auf den ersten Blick sieht es nämlich durchaus schlüssig aus...Ich gehe mal davon aus, dass "your-api-token" der reguläre Tibber-Token ist. Was wäre denn "your-data-point-id"? Bekomme ich die aus den Sample Queries von Tibber heraus?
Übergibst Du den Zählerstand dann als kWh oder Wh? Nachkommastellen?
-
@oxident sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
aber funktioniert das Skript tatsächlich
das sehe ich um 0:02
@oxident sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
dass "your-api-token" der reguläre Tibber-Token ist. Was wäre denn "your-data-point-id"?
ja ist der token und die id steht ja in der Instanz
@oxident sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
Übergibst Du den Zählerstand dann als kWh oder Wh? Nachkommastellen?
original so wie er im DP steht, kWh mit Nachkomma
-
@crunchip Mega. Danke!
-
@crunchip said in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
das sehe ich um 0:02
Müsste der cronjob dann nicht "2 0 * * *" heißen? Jetzt würde er jeden Tag um 12 Uhr mittags starten...
-
@oxident ja, das war nur ein Beispiel oben, habe es bei mir auf 0:02 gestellt damit ich es dann gleich sehe ob es funktioniert
per App kann man ja nur einen pro Tag eintragen und das habe ich heute schon manuell -
@crunchip Okay, geht klar. Dann bin ich ja mal gespannt
-
@oxident mehr wie schief gehn kanns nicht
-
@crunchip ja, wenn er anstatt 200kWh 20000kWh einträgt... die abrechnung wird "lustig"
Aber mal im ernst, wäre super wenn das klappt.... "spiele" ich gleich auch mal mit rum
-
-
@crunchip ChatGPT generiert "syntaktisch korrekte Sätze", was auch für Programmiercode gilt - auch der ist nach dem Verständnis von ChatGPT Syntax und es generiert dort syntaktisch plausiblen Code.
ChatGPT generiert jedoch nicht zwingend inhaltlich/fachlich korrekte Dinge. In vielen Fällen fließt korrektes Wissen mit ein, so dass tatsächlich verblüffende Ergebnisse heraus kommen, an anderen Stellen werden aber auch einfach Fakten "erfunden", so dass wieder syntaktisch korrekte und schlüssige Aussagen herauskommen.
So auch in dem Beispiel. Ein Blick auf https://developer.tibber.com/docs/reference zeigt, dass es keine Funktion "updateDataPoint" gibt und dass "sendMeterRrading" nur für Norwegen freigeschaltet ist. Damit kann das Script nicht funktionieren.
Man kann die Monatswerte über die API übermitteln, welche auch die APP verwendet. Diese ist nicht offiziell, unter https://app.tibber.com/ bzw. https://app.tibber.com/v4/gql steht aber eine automatisch generierte Doku bereit. Wie man darüber Monatswerte einstellt, habe ich oben beschrieben und in meinem Tool implementiert. Ich denke, dass sich das auch verhältnismäßig einfach mit so einem JavaScript-Fragment in IOBroker umsetzen ließe.
Viele Grüße,
Michael. -
@michael-wyraz ich weiß das chatGPT nicht 100% liefert, jedoch war es mal ein Versuch wert (für jemanden der davon überhaupt keinen Plan hat ), ich habe inzwischen noch ein wenig herum probiert, das Script läuft zwar nun fehlerfrei, allerdings sehe ich keine ankommenden Daten.
@michael-wyraz sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
Wie man darüber Monatswerte einstellt, habe ich oben beschrieben und in meinem Tool implementiert. Ich denke, dass sich das auch verhältnismäßig einfach mit so einem JavaScript-Fragment in IOBroker umsetzen ließe.
eben...Tool....Docker, erst recht kein Plan von, mit docker noch nie auseinander gesetzt
@michael-wyraz sagte in Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse:
Ich denke, dass sich das auch verhältnismäßig einfach mit so einem JavaScript-Fragment in IOBroker umsetzen ließe
für jemanden der es kann, sicherlich