#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiMulti.h>
int incomingByte = 0;
struct tm *timeinfo;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
WiFi.begin("Wokwi-GUEST", "");
Serial.print("Connecting to WiFi ");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
setTime ();
runonce ();
} // setup
void setTime () {
time_t now;
struct tm t_info;
configTime(28800, 0, "pool.ntp.org");
while ((now = time(nullptr)) < 8 * 3600 * 2) {
delay(500);
Serial.print(".");
}
Serial.println ();
timeinfo = localtime(&now);
Serial.println ("Today is " + String (timeinfo->tm_year + 1900) + "-" +
((timeinfo->tm_mon + 1 < 10) ? "0" : "") + String (timeinfo->tm_mon + 1) + "-" +
((timeinfo->tm_mday < 10) ? "0" : "") + String (timeinfo->tm_mday));
Serial.println ("Time now is " + String ((timeinfo->tm_hour < 10) ? "0" : "") + String (timeinfo->tm_hour) + ":" +
((timeinfo->tm_min < 10) ? "0" : "") + String (timeinfo->tm_min));
Serial.println ();
} // setTime
void initializeWifi (int ip) {
WiFiMulti wifiMulti;
int i;
Serial.println (WiFi.macAddress());
wifiMulti.addAP ("British", "edwin.george");
for (i = 0; wifiMulti.run() != WL_CONNECTED; i++) {
Serial.print (".");
if (i == 10) ESP.restart ();
else delay (1000);
}
Serial.println ("");
Serial.println ("SSID: " + WiFi.SSID ());
Serial.println ("IP: " + WiFi.localIP ().toString ());
} // initializeWifi
String getDateFromEpoch (long epoch) {
struct tm *t_info;
time_t timestamp = (time_t) epoch;
t_info = localtime (×tamp);
return String (t_info->tm_year + 1900) + "-" +
((t_info->tm_mon + 1) < 10 ? "0" : "") + String (t_info->tm_mon + 1) + "-" +
((t_info->tm_mday) < 10 ? "0" : "") + String (t_info->tm_mday);
}
long getEpochFromDate (String date) { // date format ="2023-09-01 03:00:01"
struct tm t_info;
time_t timestamp;
timestamp = 0;
if (strptime(date.c_str (), "%Y-%m-%d %H:%M:%S", &t_info) != NULL) timestamp = mktime(&t_info);
return (long) timestamp;
}
int getTokens (String s, String delimiter) {
int i, count;
String s1;
count = 0;
for (i = 0; i < s.length (); i++) if ((String (s.charAt (i)) == delimiter)) count++;
return count;
}
void runonce () {
String s, s1, date;
int i, count;
long epoch;
epoch = mktime(timeinfo);
s = curl ("http://chenlim.com/fuel/get_price.php", "action=getByBrand&pric_brand=SPC&dStart=" + getDateFromEpoch (epoch - 604800) + "&dEnd=" + getDateFromEpoch (epoch));
String arr[getTokens (s, "|")];
count = 0;
for (i = 0; i < s.length (); i++)
if ((String (s.charAt (i)) == "|")) {
s1 = s.substring (0, i);
//Serial.println (s1);
arr[count] = s1;
count++;
s = s.substring (i + 1, s.length ());
i = 0;
}
i = 0;
date = arr[i].substring (0, arr[i].indexOf (" "));
s = arr[i].substring (arr[i].indexOf (",") + 1, arr[i].length ());
Serial.println (date + " " + s);
for (i = i; i < count; i++) {
if (arr[i].substring (arr[i].indexOf (",") + 1, arr[i].length ()) != s) {
s1 = arr[i].substring (arr[i].indexOf (",") + 1, arr[i].length ());
Serial.println ("Date: " + arr[i].substring (0, arr[i].indexOf (",")) + " === " +
"Old Price: " + s + " === "
"New Price: " + arr[i].substring (arr[i].indexOf (",") + 1, arr[i].length ()) + " === " +
"Difference: " + String (s1.toFloat () - s.toFloat ()));
s = s1;
}
}
}
String curl (String url, String post) {
HTTPClient http;
String s;
http.begin (url);
http.addHeader ("Content-Type", "application/x-www-form-urlencoded");
http.POST (post);
s = http.getString ();
return s.substring (s.indexOf ("LEVO 95||") + String ("LEVO 95||").length (), s.indexOf ("LEVO 92||") - 2);
}
void loop() {
delay(100); // this speeds up the simulation
}