Adjust for BOM weather

This commit is contained in:
Paul Warren 2019-11-26 23:42:01 +11:00
parent 738447212b
commit 589d99f723
2 changed files with 63 additions and 55 deletions

View file

@ -24,9 +24,11 @@
// openweathermap, api_key from credential.h
// const String owm_url = "http://api.openweathermap.org/data/2.5/weather?q=Belconnen,AU&units=metric&APPID=";
// DarkSky API key from credential.h
// substitute decimal latitude and longitude in ds_ll
const String ds_url = "http://pwarren.id.au/darksky/darksky.json";
// DarkSky see darksky.py
//const String ds_url = "http://pwarren.id.au/darksky/darksy.json";
// BOM, see bom_xml.py
const String ds_url = "http://pwarren.id.au/darksky/bom.json";
bool ds_done = false;
@ -78,7 +80,6 @@ void setup() {
Serial.println("\r\n\r\nSTARTING\r\n");
wifi();
printDateTime(0);
timeClient.begin();
ntpUpdate();
epd_clear();
@ -158,7 +159,7 @@ void disp_digit(int digit, int xpos){
epd_disp_bitmap("9.JPG", dpos, ypos);
break;
}
delay(500);
wait();
}
void disp_time(int hours, int minutes) {
@ -230,79 +231,76 @@ void printDateTime(int update_epd)
if (update_epd > 0) {
epd_set_en_font(ASCII64);
epd_disp_string(buf, 150, 225);
delay(500);
Serial.println("Screen Updated");
wait();
}
}
void weatherUpdate(void) {
const size_t capacity = 4*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + 150;
const size_t capacity = 4*JSON_OBJECT_SIZE(3) + 150;
DynamicJsonBuffer jsonBuffer(capacity);
time_t t;
char buf[96] = {};
const char* nstr = "Now";
const char* tstr = "Today";
const char* tmstr = "Tomorrow";
http.begin(ds_url);
int httpCode = http.GET();
if (httpCode > 0) {
JsonObject& root = jsonBuffer.parseObject(http.getString());
if (!root.success()) {
Serial.print(F("parseObject() failed: "));
return;
}
float current_temp = root["current"]["temp"];
const char* current_icon = root["current"]["icon"];
http.end();
float today_max = root["today"]["max"];
const char* today_icon = root["today"]["icon"];
JsonObject& today = root["today"];
const char* today_day = today["day"]; // "Wednesday"
const char* today_icon = today["icon"]; // "sunny.jpg"
const char* today_max = today["max"]; // "27"
float tomorrow_max = root["tomorrow"]["max"];
const char* tomorrow_icon = root["tomorrow"]["icon"];
JsonObject& tomorrow = root["tomorrow"];
const char* tomorrow_day = tomorrow["day"]; // "Thursday"
const char* tomorrow_icon = tomorrow["icon"]; // "sunny.jpg"
const char* tomorrow_max = tomorrow["max"]; // "31"
float day_after_max = root["day_after"]["max"];
const char* day_after_icon = root["day_after"]["icon"];
JsonObject& day_after = root["day_after"];
const char* day_after_day = day_after["day"]; // "Friday"
const char* day_after_icon = day_after["icon"]; // "pcloud.jpg"
const char* day_after_max = day_after["max"]; // "33"
Serial.println("Updating EPD");
epd_set_en_font(ASCII64);
//Today
t = ausET.toLocal(now());
epd_disp_string(dayStr(weekday(t)), 0, 536);
delay(500);
(String(today_max, 1)).toCharArray(buf,64);
epd_disp_string(buf, 0, 472);
delay(500);
epd_disp_string(today_day, 0, 536);
wait();
epd_disp_string(today_max, 20, 422);
wait();
epd_disp_bitmap(today_icon, 0, 318);
wait();
//Tomorrow
t = ausET.toLocal(now() + 86400, &tcr);
epd_disp_string(dayStr(weekday(t)), 267, 536);
delay(500);
(String(tomorrow_max, 1)).toCharArray(buf,64);
epd_disp_string(buf, 267, 472);
delay(500);
epd_disp_string(tomorrow_day, 267, 536);
wait();
epd_disp_string(tomorrow_max, 297, 422);
wait();
epd_disp_bitmap(tomorrow_icon, 267, 318);
wait();
//Day after Tomorrow
t = ausET.toLocal(now() + 86400 + 86400);
epd_disp_string(dayStr(weekday(t)), 533, 536);
delay(500);
(String(day_after_max, 1)).toCharArray(buf,64);
epd_disp_string(buf, 533, 472);
delay(500);
//Day After
epd_disp_string(day_after_day, 533, 536);
wait();
epd_disp_string(day_after_max, 563, 422);
wait();
epd_disp_bitmap(day_after_icon, 533, 318);
wait();
} else {
Serial.print("Error on HTTP Request: ");
Serial.println(httpCode);
}
http.end();
}
void loop() {
int wakeup_seconds = 43;
int sleep_seconds = 0;
Serial.println("Back from sleep!");
@ -313,21 +311,25 @@ void loop() {
ntpUpdate();
if (second(now()) >= 55) {
if (second(now()) >= wakeup_seconds) {
epd_wakeup();
while (second(now()) != 57) {
delay(500);
}
epd_clear();
weatherUpdate();
Serial.print("Weather details sent: ");
Serial.println(second(now()));
while (second(now()) != 0) {
delay(500);
}
printDateTime(1);
epd_update();
delay(5000);
delay(3000);
epd_enter_stopmode();
}
sleep_seconds = 55 - second(now());
sleep_seconds = wakeup_seconds - second(now());
Serial.print("Sleeping for: ");
Serial.println(sleep_seconds);

View file

@ -3,7 +3,9 @@
from PIL import Image, ImageDraw, ImageFont
fnt = ImageFont.truetype('/Library/Fonts/FreeMono.ttf', 336)
sfnt= ImageFont.truetype('/Library/Fonts/FreeMono.ttf', 168)
# Large numerals
for I in ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"):
img = Image.new('RGB', (185, 224), color = (255, 255, 255))
@ -11,6 +13,10 @@ for I in ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"):
d.text((0,-60), I, font=fnt, fill=(0,0,0))
img.save("%s.jpg" % (I))
imgs = Image.new("RGB", (92, 112), color = (255, 255, 255))
d = ImageDraw.Draw(imgs)
d.text((0,-30), I, font=sfnt, fill=(0,0,0))
imgs.save(I+"s.jpg")
img = Image.new('RGB', (60,224), color = (255, 255, 255))
d = ImageDraw.Draw(img)