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