Tibber API + ESP32 Arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Fagge
Inlägg: 3930
Blev medlem: 27 maj 2003, 13:59:51
Ort: Blekinge

Tibber API + ESP32 Arduino

Inlägg av Fagge »

Hej.
Såhär ligger det till .
Jag har Tibber som el-leverantör & en ESP32 liggandes framförmig.
Målet är att få ESP32an att logga in hos tibber & hämta hem nuvarande elpris & husets effektförbrukning.
Effekten levereras till tibber i realtid via Pulse grunkan kopplad till elmätarens HAN-port.
I slutändan vill jag presentera dessa värden på en display. Men koden nedan printar direkt till serieporten.

Ska sägas att att jag har 20års erfarenhet av asm programmering i bakfickan, men aldrig rört ett högnivå språk. Så jag har ärligt talat ingen aning om vad jag håller på med nu :D , men jag har googlat & klippt & klistrat som en galning och lyckats halvvägs ser det ut som.

Kör man koden nedan så får jag elpriset tillbaka på serieporten
doc["query"] = ("{viewer {homes {currentSubscription {priceInfo {current {total}}}}}}"); // Funkar


Men sen när jag vill hämta effekten från tibber & byter ut doc raden, så får jag svaret null tillbaka?.
doc["query"] = ("subscription{liveMeasurement(homeId:\"8ec0ea59-ddc9-4d4e-8c0f-698b85ba12eb\"){power}}"); // Ger null
null.JPG
Frågan är om någon kan klura ut varför.
Det ser ju ut att fungera om jag simulerar raden i Tibbers API explorer.
https://developer.tibber.com/explorer

Kod: Markera allt

#include <WiFiClientSecure.h>
#include <ArduinoJson.h>

const char*  server = "api.tibber.com";  // Server URL

const char* root_ca = \ 
"-----BEGIN CERTIFICATE-----\n" \ 
"MIIEkjCCA3qgAwIBAgITBn+USionzfP6wq4rAfkI7rnExjANBgkqhkiG9w0BAQsF\n" \
"ADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj\n" \
"b3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4x\n" \
"OzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1\n" \
"dGhvcml0eSAtIEcyMB4XDTE1MDUyNTEyMDAwMFoXDTM3MTIzMTAxMDAwMFowOTEL\n" \
"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n" \
"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n" \
"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n" \
"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n" \
"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n" \
"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n" \
"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n" \
"jgSubJrIqg0CAwEAAaOCATEwggEtMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/\n" \
"BAQDAgGGMB0GA1UdDgQWBBSEGMyFNOy8DJSULghZnMeyEE4KCDAfBgNVHSMEGDAW\n" \
"gBScXwDfqgHXMCs4iKK4bUqc8hGRgzB4BggrBgEFBQcBAQRsMGowLgYIKwYBBQUH\n" \
"MAGGImh0dHA6Ly9vY3NwLnJvb3RnMi5hbWF6b250cnVzdC5jb20wOAYIKwYBBQUH\n" \
"MAKGLGh0dHA6Ly9jcnQucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY2Vy\n" \
"MD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jcmwucm9vdGcyLmFtYXpvbnRydXN0\n" \
"LmNvbS9yb290ZzIuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsF\n" \
"AAOCAQEAYjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSW\n" \
"MiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/ma\n" \
"eyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBK\n" \
"bRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN\n" \
"0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4U\n" \
"akcjMS9cmvqtmg5iUaQqqcT5NJ0hGA==\n" \
"-----END CERTIFICATE-----\n" ;

const char* ssid     = "ssid";
const char* password = "password";


WiFiClientSecure client;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(115200);
  StaticJsonDocument<400> doc;
  delay(100);

  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  // attempt to connect to Wifi network:
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    // wait 1 second for re-trying

    delay(1000);
  }

  Serial.print("Connected to ");
  Serial.println(ssid);

  client.setCACert(root_ca);
  
  doc["query"] = ("{viewer {homes {currentSubscription {priceInfo {current {total}}}}}}");  // Funkar
  //doc["query"] = ("subscription{liveMeasurement(homeId:\"8ec0ea59-ddc9-4d4e-8c0f-698b85ba12eb\"){power}}");  // Ger Null
  
  
  
  Serial.println("\nStarting connection to server...");
  if (!client.connect(server, 443)) {
    Serial.println("Connection failed!");
  }
  else {
    Serial.println("Connected to server!");
    client.println("POST /v1-beta/gql HTTP/1.1");
    client.println("Host: api.tibber.com");
    client.println("Authorization: Bearer 1rXk-3IE5Ik_3_VEwNvs3-vVvBnl47BcBU1wwY3D2jQ");
    client.println("Content-Type: application/json");
    client.print("Content-Length: ");

    client.println(measureJson(doc));
    client.println();
    serializeJson(doc, client);
    client.println();
   
   //delay (5000);

    while (client.connected()) {
      String line = client.readStringUntil('\n');
      if (line == "\r") {   // if (line == "\r") {
        Serial.println("headers received");
        break;
      }
    }
     //if there are incoming bytes available
     //from the server, read them and print them:
    while (client.available()) {
      char c = client.read();
      Serial.write(c);
    }

    client.stop();
  }
}

void loop() {
  
  }
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
metric
Inlägg: 766
Blev medlem: 16 maj 2010, 11:04:52

Re: Tibber API + ESP32 Arduino

Inlägg av metric »

Tibber vet inte hur mycket du förbrukar just nu, dom får uppgifterna i efterhand av din nätägare.
Användarvisningsbild
AndLi
Inlägg: 17100
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tibber API + ESP32 Arduino

Inlägg av AndLi »

Metric: det är väl det de får via pulse grunkan i Han porten, eller vad används den datan till?

Hade han porten varit ledig hade du kunnat hämta förbrukningen där och elpriset via nordpols api...
Användarvisningsbild
Hobbyisten
Gått bort
Inlägg: 2531
Blev medlem: 3 december 2017, 22:55:25

Re: Tibber API + ESP32 Arduino

Inlägg av Hobbyisten »

I Tibbers app får man både reda på elpriset innevarande timme samt dagsförbrukning, djupare än så ser jag ingen anledning att gå. Jag kan dock se förbrukningen i realtid på min nya elmätare.
metric
Inlägg: 766
Blev medlem: 16 maj 2010, 11:04:52

Re: Tibber API + ESP32 Arduino

Inlägg av metric »

Det framgår inte om TS har pulse. Jag har det och jag kan se effekten i realtid.
Men dom som inte har det påstår att statistiken är lite sisådär i i närtid men rättar till sig efter ett tag.

Det har han visst det, jag läste nog för fort. :)
metric
Inlägg: 766
Blev medlem: 16 maj 2010, 11:04:52

Re: Tibber API + ESP32 Arduino

Inlägg av metric »

Fagge skrev: 8 februari 2023, 19:09:43 Hej.
Såhär ligger det till .
Jag har Tibber som el-leverantör & en ESP32 liggandes framförmig.
Målet är att få ESP32an att logga in hos tibber & hämta hem nuvarande elpris & husets effektförbrukning.
Effekten levereras till tibber i realtid via Pulse grunkan kopplad till elmätarens HAN-port.
I slutändan vill jag presentera dessa värden på en display. Men koden nedan printar direkt till serieporten.

Ska sägas att att jag har 20års erfarenhet av asm programmering i bakfickan, men aldrig rört ett högnivå språk. Så jag har ärligt talat ingen aning om vad jag håller på med nu :D , men jag har googlat & klippt & klistrat som en galning och lyckats halvvägs ser det ut som.

Kör man koden nedan så får jag elpriset tillbaka på serieporten
doc["query"] = ("{viewer {homes {currentSubscription {priceInfo {current {total}}}}}}"); // Funkar


Men sen när jag vill hämta effekten från tibber & byter ut doc raden, så får jag svaret null tillbaka?.
doc["query"] = ("subscription{liveMeasurement(homeId:\"8ec0ea59-ddc9-4d4e-8c0f-698b85ba12eb\"){power}}"); // Ger null

null.JPG

Frågan är om någon kan klura ut varför.
Det ser ju ut att fungera om jag simulerar raden i Tibbers API explorer.
https://developer.tibber.com/explorer

Jag hämtar med hjälp av homeassistant och den raden som visar min effekt heter "sensor_power_***********"
Stjärnorna är min adress, men det blir väl vad man själv döpt det till när man registrerade sig.
Skriv svar