edit: Hier ein WIKI Eintag mit einer Komplettlösung über VenusOS.
Moin zusammen.
Ich frage seit einiger Zeit die Tibber API nach Daten wie Strompreis etc mit einem Python Script ab. Klappt super, siehe ersten Teil meinem Codes.
Nun, da ich neben meinem Discovergy-Power-Up auch den Pulse laufen habe, möchte ich die Real Time Daten nicht nur über die Discovergy-API, sondern vorsichtshalber auch über die Tibber API abfragen. Das folgende Programmierbeispiel kommt mit den Strompreisdaten etc. prima klar, allerdings bekomme ich für den aktuellen Stromverbrauch keinen gültigen Wert (NONE).
Hat das von Euch schon jemand hinbekommen und kann mir sagen, was ich hier falsch mache?
Den Graph habe ich hierher:
https://developer.tibber.com/explorer
So wie ich das verstanden habe, loggt man sich dort mit dem Tibber Account ein, wählt dann rechts real time subscription und erhält den Graph, mit der entsprechenden Home-ID. Da kann ich mich aber auch irren. Allerings: auf den Play Button gedrückt erhalte ich auch die Realtime Daten. Ich wüsste aber nicht, woher man sonst seine Home-ID bekommen könnte, falls diese nicht stimmt.
Hin und wieder bekomm eich über den Explorer auch mal diese Fehlermeldung: "Your subscription data will appear here after server publication"
Das Ganze mag damit zusammenhängen, dass ich sowohl das Discovergy- als auch das Pulse-Power-Up im Home eingebunden habe. Ich habe schon bei Tibber nachgefragt, wie man die beiden Power-Ups getrennt voneinander auslesen kann. Noch hat's da niemand gelesen.
Falls Ihr den Code testen wollt, dann müsst Ihr natürlich noch Token und ggf. die Home-ID anpassen.
Ich hab's auch mal hiermit verucht:
https://github.com/Danielhiversen/pyTibber
Allerdings hagelt es da Fehlermeldungen dass es einem schwindelt. Vermutlich mal wieder ein Python-Versionsproblem. Ich habe 3.9.13 auf dem PC laufen.
Vielen Dank vorab.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Mar 25 14:25:03 2023 @author: nick """ import requests import json def mynin(liste,anzahl): output=[] if anzahl > len(liste): output.append("n/a") return(output) else: dummymax = max(liste) + 1 i = 1 while i <= anzahl: index_min = min(range(len(liste)), key=liste.__getitem__) output.append(index_min) liste[index_min] = dummymax i+=1 output = sorted(output) return(output) # Setzen Sie die Tibber-Token-ID als Umgebungsvariable oder geben Sie sie direkt ein. # Hier wird davon ausgegangen, dass sie als Umgebungsvariable gesetzt wurde. tibber_token = "Mein Tibber Token" # Die URL für den Strompreis-Endpunkt von Tibber tibber_url = "https://api.tibber.com/v1-beta/gql" # Die Abfrage, um den Strompreis zu erhalten tibber_query = """ { viewer { homes { currentSubscription { priceInfo { current { total energy level tax } } } } } } """ PQ = """ subscription{ liveMeasurement(homeId: "Meine Home ID"){ timestamp power accumulatedConsumption accumulatedCost currency minPower averagePower maxPower } } """ tibber_squery = """ { viewer { homes { id features { realTimeConsumptionEnabled } } } } """ # Fügen Sie den Authentifizierungsheader hinzu tibber_headers = {"Authorization": "Bearer {}".format(tibber_token)} # Führen Sie die Anfrage aus und geben Sie die Ergebnisse aus tibber_response = requests.post(tibber_url, json={"query": tibber_query}, headers=tibber_headers) if tibber_response.status_code== 200: data = json.loads(tibber_response.text) price_data = data["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["current"] sStrompreis = ("{:.2f}".format(price_data["total"] )) print(data) print(sStrompreis) print("-------------------------------------------------------------") tibber_headers = {"Authorization": "Bearer {}".format(tibber_token)} # Führen Sie die Abfrage aus tibber_response = requests.post(tibber_url, json={"query": tibber_squery}, headers=tibber_headers) if tibber_response.status_code == 200: data = tibber_response.json() print(data) else: print(f"Fehler beim Abrufen der Daten. Statuscode: {tibber_response.status_code}") print("++++++++++++++++++") # Fügen Sie den Authentifizierungsheader hinzu tibber_headers3 = {"Authorization": "Bearer {}".format(tibber_token)} # Führen Sie die Abfrage für liveMeasurement aus tibber_response3 = requests.post(tibber_url, json={"query": PQ}, headers=tibber_headers3) if tibber_response3.status_code == 200: data = json.loads(tibber_response3.text) print(data) print(tibber_response3) live_measurement = data.get("data", {}).get("subscription", {}).get("liveMeasurement") if live_measurement: power = live_measurement.get("power") spower = ("{:.2f}".format(power)) fpower = float(spower) print(data) print(spower) print(fpower) else: print("Keine Daten für liveMeasurement verfügbar.") else: print(f"Fehler beim Abrufen des Stromverbrauchs. Statuscode: {tibber_response3.status_code}")