#include <WiFi.h>
#include <Wire.h>
#include <HTTPClient.h>
//#include <WiFiClientSecure.h>
//#include <SPI.h>
#include <WiFi.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ArduinoJson.h>
const char * Hostname = "fortum.se";
String URI = "/api/v1/spot_prices";
const uint16_t port = 443;
float data_spotPrices_SE3_item_value[24];
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
display.clearDisplay();
display.display();
display.setTextSize(1); // Draw 1X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Hello, ESP32!");
display.display(); // Show initial text
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
display.setTextSize(1); // Draw 1X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 16);
display.println("Connetcted!");
display.display(); // Show initial text
Serial.println(" Connected!");
}
void loop() {
// Connect to HTTP server
WiFiClient client;
client.setTimeout(10000);
if (!client.connect(Hostname, port)) {
Serial.println(F("Connection failed"));
return;
}
Serial.println(F("Connected to server!"));
// Send HTTP request
client.println("GET " + URI + " HTTP/1.1");
client.println("Host: " + (String)Hostname);
client.println("Connection: close");
if (client.println() == 0) {
Serial.println("Failed to send request");
client.stop();
return;
}
// Check HTTP status
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
Serial.print(F("Unexpected response: "));
Serial.println(status);
client.stop();
return;
}
// Skip HTTP headers
char endOfHeaders[] = "\r\n\r\n";
if (!client.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
client.stop();
return;
}
while (client.available() && client.peek() != '{')
{
char c = 0;
client.readBytes(&c, 1);
Serial.print(c);
Serial.println("BAD");
}
//while (client.available()) {
// char c = 0;
// client.readBytes(&c, 1);
// Serial.print(c);
// }
// Stream& input;
// Stream& input;
StaticJsonDocument<48> filter;
JsonObject filter_data = filter.createNestedObject("data");
filter_data["resolution"] = "hourly";
filter_data["from"] = "2023-01-04T00:00:00";
filter_data["to"] = "2023-01-04T23:00:00";
filter_data["spotPrices"]["SE3"] = true;
filter["status_code"] = 200;
StaticJsonDocument<2048> doc;
DeserializationError error = deserializeJson(doc, client, DeserializationOption::Filter(filter));
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
for (JsonObject data_spotPrices_SE3_item : doc["data"]["spotPrices"]["SE3"].as<JsonArray>()) {
const char* data_spotPrices_SE3_item_dateTime = data_spotPrices_SE3_item["dateTime"];
float data_spotPrices_SE3_item_value = data_spotPrices_SE3_item["value"]; // 922.31, 877.35, 778.2, ...
}
//Serial.println(data_resolution);
Serial.println(data_spotPrices_SE3_item_value[0]);
// Disconnect
client.stop();
/***************************************************************************
FOR TIME
***************************************************************************/
//String Time = datetime.substring(11, 16);
//String Hour = datetime.substring(11, 13);
//24 hour to 12 hour conversion
/*int h = Hour.toInt();
if (h > 12)
h = h - 12;
else
h = h;
Serial.println(h);
Hour = (String)h;
Time = Time.substring(2);
if (h > 10)
Time = Hour + Time;
else
Time = "0" + Hour + Time;
Serial.print("time - "); Serial.println(Time);
*/
/***************************************************************************
FOR DATE
***************************************************************************/
/* String Date = datetime.substring(0, 10);
String Day_str = "";
if (Day == 0)
Day_str = "Sv.";
if (Day == 1)
Day_str = "Pirmd.";
if (Day == 2)
Day_str = "Otrd.";
if (Day == 3)
Day_str = "Tr.";
if (Day == 4)
Day_str = "Cet.";
if (Day == 5)
Day_str = "Piektd.";
if (Day == 6)
Day_str = "Sestd.";
Serial.print("date - "); Serial.println(Date);
Serial.print("day - "); Serial.println(Day_str);
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(40, 0);
display.println(Time);
display.setCursor(6, 20);
display.println(Date);
//display.print(",");
display.setCursor(56,40);
display.println(Day_str);
display.display();
*/
delay(10000);
}