I'm trying to connect with the Nest_api (https://developers.nest.com/)
Beside the difficult security issues I'm encountering, I'm also unable to even get data from the API
I've tried a couple of things and I always get an 'redirection' error. Meaning that I've no acces.
I'm starting to believe that I've some problems with the HTTPS requests. Did somebody had similar issues?
You can check my code here:
The part where I try to access the server is the last piece of code.
Basic Infos
The goal is to let a switch respond on the data received from my nest Thermostad. I'm using the Nest_API to get the result
Hardware
Hardware: ESP8266
Description
I'm trying to access the Nest API without any success. I always get some kind of redirection error.
Or I get the 307 error code (redirection) or an 400. With the first one, there's no redirection location.
What do i do wrong? Is it possible that the library doesn't support HTPPS? Is there a solution for it?
Settings in IDE
Module: Generic ESP8266 Module
Sketch
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#define USE_SERIAL Serial
String accessurl = "https://api.home.nest.com/oauth2/access_token";
MDNSResponder mdns;
// My Network cred.
const char* ssid = "Blanked out";
const char* password = "Blanked out";
int gpio13Led = 13;
int gpio12Relay = 12;
void setup(void){
// preparing GPIOs
pinMode(gpio13Led, OUTPUT);
digitalWrite(gpio13Led, HIGH);
pinMode(gpio12Relay, OUTPUT);
digitalWrite(gpio12Relay, HIGH);
Serial.begin(115200);
delay(5000);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
}
void loop(void){
Serial.println("Wifi Up - Test Start!");
delay(10000);
if((WiFi.status() != WL_CONNECTED)) {
Serial.println("wifi down");
return;
}
HTTPClient http;
//Here I gave the footprint along with the url. But I'm not sure if it works.
http.begin("https://developer-api.nest.com/", "87:CB:F2:E6:44:C0:AA:F2:4C:28:B2:97:85:70:18:92:45:1B:A4:57");
//http.addHeader("Cache-Control", "no-cache", true, true);
//http.addHeader("Postman-Token", "419da1fa-6070-3338-c215-8be740891136", true, true);
http.addHeader("Authorization", "Bearer c.blanked out", true, true);
http.addHeader("Host", "developer-api.nest.com", true, true);
http.addHeader("Content-Type", "application/json", false, true);
int httpCode = http.GET();
Serial.println("request sent: \n");
Serial.println(httpCode); //Doesn't seem to work? I never see any outprint.
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.printf("[HTTP] GET response: %s", payload.c_str());
} else {
String payload = http.getString();
String loc = http.header("Location");
Serial.printf("[HTTP] GE returned %d. kapot, error: %s; response: %s, new location: %s\n", httpCode, http.errorToString(httpCode).c_str(), payload.c_str(), loc.c_str());
}
http.end();
}
I would really appreciate some feedback.
For the people interested, I've also asked on github, but without any response so far...
https://github.com/esp8266/Arduino/issues/4300