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

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
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() {
}