From 084dce621c2efe2acd8e114dd834a5d68850b614 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sun, 14 Aug 2022 15:19:51 +0200 Subject: [PATCH] Add module RATP Weather --- .gitignore | 1 + fonts/Parisine-Bold.ttf | Bin 0 -> 28508 bytes fonts/Parisine-Regular.ttf | Bin 0 -> 27728 bytes icons/buses.png | Bin 0 -> 3289 bytes icons/metros.png | Bin 0 -> 2914 bytes icons/rers.png | Bin 0 -> 3153 bytes icons/tramways.png | Bin 0 -> 2338 bytes main.py | 5 +++ modules/ratp.py | 87 +++++++++++++++++++++++++++++++++++++ 9 files changed, 93 insertions(+) create mode 100644 fonts/Parisine-Bold.ttf create mode 100644 fonts/Parisine-Regular.ttf create mode 100644 icons/buses.png create mode 100644 icons/metros.png create mode 100644 icons/rers.png create mode 100644 icons/tramways.png create mode 100644 modules/ratp.py diff --git a/.gitignore b/.gitignore index 961886a..9ddc8eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ __pycache__ .darksky-*.cache +.ratp-*.cache screen.png \ No newline at end of file diff --git a/fonts/Parisine-Bold.ttf b/fonts/Parisine-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..721b6091d6b5974780a575ac4096c414b6d1883c GIT binary patch literal 28508 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�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 XU?LmmD&8_~00000NkvXXu0mjfLhK=K literal 0 HcmV?d00001 diff --git a/icons/metros.png b/icons/metros.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac87852e7bd5a23ec39b75d2d505d7e3a201f3d GIT binary patch literal 2914 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 M07*qoM6N<$g3BvsGXMYp literal 0 HcmV?d00001 diff --git a/icons/rers.png b/icons/rers.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5ba0544975a3f2bdf865b6d07105fc76b8dc05 GIT binary patch literal 3153 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 literal 0 HcmV?d00001 diff --git a/icons/tramways.png b/icons/tramways.png new file mode 100644 index 0000000000000000000000000000000000000000..917cdf4be10d7739b277b9f0cfe6f984ddf60557 GIT binary patch literal 2338 zcmV+-3ElRIP)p<5vV{rowbdcet-Oz*`D08k}u$?7x@F%Wg^*fI-+pJ24A@ zIl$*jWw$qSNYP&>ah?LZy(AVd)IfyB5e}UXf!r_YuXGT61hRGjsdcT`trueG0s_z! z3UhRUpbezo=YmjZ6F3PP2WeF>0)qu=6vhBmML2Ov;NdvY-+*Y*U7(Kvs3tbaLAHQi zn@9CL=zfr0g6wgSx05XUS9W#VR1q3$V3ML!1*QSl04CQ>1ootm+76=c72B7h0}vrL zM_~hCk8jF=1a&*!sMKmhEjFy?uI>3;W8Se?YF2fHJ`t`IZoJTYv35K$2xA1ZF6-xtfNA(9NKp z2kr@gg_(!%d_EBoSj;Z&qL=sW?olS|8@VH4}}CSusYKHsV4yE2+aqExRm!Li2ktv zhdx_?PN}&fpF)!Q?Vx{kiHC*h=ouq=0^p!?eQc~M%olyBFul^Dkacq7()08|U~b0$ zU=h0>c-^JfoFF>6uvOLSh(+=-((Ctu1^6`v*Z7n6mAvbDflh_Jl~gW1!y_N(zm-au zhPU0hNx_*C$39q*{-86}H762yrtmDw!|??8j3543#Qq74b%~P+mX{%yC@RFZkTLK9 zILIvEpaD?K*IZYn9L%=TJM+n)I9o|)n0t_}KAURn;h>XT*SwKCb#-x(#6AwZ*;}et z*Rbj`lR|FBH6c=XIXL%%K~Z;>%A`1dlM%%I^bvG-Kz;>=z$;#0sjfz&V$Af&nhiln5Npx6rsa`CdxA5B73{Yu&HtSuRl& zapwtY3{dS-D#@l}e?(B<0Jzt$ecEHY7;w_H2$>iI^m^jr`bJzz29q9(nZUe+!kSlJ7av&V6kF`&rkZ9N>ab<{?HSEHtf@aZgLw@ zg1QrND+zA8P)dFr3`Cvcu}>-#QyBgCdCyoRfCTi}@B+|-VJ%I~`3SQD0n;Pzi|5Z2^_z{u!jOtU#lY)i5(y}`ZPMg&k_uY!GrEy zmoj5lTbM_I1z8k!CK&RKe0~*}`?D*l!x&a6Tz*o#Ph zZmhKU&nD8R!hBJ9DTFq*Q(uPdbrp-1Gr*|>xgndDz~gb8hYH=^D?0mY5t|1*4uo^4 z9Z=X3qGEeHOaEK!Ju(Snk1>R1EBbxl3prHJDmpJo{qKsg->39&XQjo3kszgcb@K!~d{CHsT5= zCA}l{u|i1F*AFILY*|Q^SvRKyT@q*c(}5nF%OrhpGPPLXeuCRpYXNy;0I9W~;K9k> z)UfKZ6rBr!THte~vfCRur0C`(&Zd5Ibk%-I8 z`2X>FohX>`ijF7!zJH4JE8~zJ56*y|R^%N)jwnuZ5Xa~L2fJa!4Fl2^SpWb407*qo IM6N<$f};X&s{jB1 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 0a7e5ed..e79b487 100644 --- a/main.py +++ b/main.py @@ -73,6 +73,11 @@ def main(): mod = WeatherAlertsModule().draw_module(config, 480, 200) image.paste(mod, (0, 580-mod.height-5), mod) + # RATP weather + from modules.ratp import RATPWeatherModule + ratp = RATPWeatherModule().draw_module(config, int(480/1.6), 94) + image.paste(ratp, (480-int(480/1.6), 205)) + # températures from modules.weather import WeatherTemperatureModule image.paste(WeatherTemperatureModule().draw_module(config, 480, 200), (0, 580)) diff --git a/modules/ratp.py b/modules/ratp.py new file mode 100644 index 0000000..4bc8ddd --- /dev/null +++ b/modules/ratp.py @@ -0,0 +1,87 @@ +from datetime import datetime, timedelta, timezone +import json +import os +import urllib.parse +import urllib.request + +from PIL import Image, ImageDraw, ImageFont + +class RATPAPI: + + fnt_R_path = "./fonts/Parisine-Regular.ttf" + fnt_RB_path = "./fonts/Parisine-Bold.ttf" + + def __init__(self): + self.baseurl = "https://ratp.p0m.fr/api" + + self._cached_file = ".ratp-%s.cache" + + def get_weather(self): + # Read the mod time + statinfo = None + try: + statinfo = os.stat(self._cached_file % "traffic") + except: + pass + + if statinfo is None or datetime.fromtimestamp(statinfo.st_mtime, tz=timezone.utc) + timedelta(minutes=5) < datetime.now(tz=timezone.utc): + # Do the request and save it + with urllib.request.urlopen(self.baseurl + "/traffic") as f: + with open(self._cached_file % "traffic", 'wb') as fd: + fd.write(f.read()) + + # Retrieve cached data + res = {} + with open(self._cached_file % "traffic") as f: + res = json.load(f) + + return res["result"] + + +class RATPWeatherModule: + + def draw_module(self, config, width, height, line_height=19): + image = Image.new('RGB', (width, height), '#fff') + draw = ImageDraw.Draw(image) + + fnt_icon = ImageFont.truetype(RATPAPI.fnt_RB_path, line_height-1) + + weather = RATPAPI().get_weather() + + align_x = 0 + align_y = 0 + for mode in weather: + if mode != "rers": + align_x = 0 + + + # display mode icon + icon = Image.open("icons/" + mode + ".png").resize((line_height, line_height)) + image.paste(icon, (align_x,align_y), icon) + + align_x += line_height + 10 + + for line in weather[mode]: + if align_x + line_height >= width: + align_x = line_height + 10 + align_y += line_height + 6 + + fill = "gray" if line["slug"] == "normal" else "black" + + if mode == "metros": + draw.ellipse((align_x - 1, align_y - 1, align_x + line_height + 1, align_y + line_height + 1), fill=fill) + elif mode == "tramways": + draw.rectangle((align_x - 2, align_y - 2, align_x + line_height, align_y), fill=fill) + draw.rectangle((align_x - 1, align_y + line_height - 1, align_x + line_height + 1, align_y + line_height + 1), fill=fill) + else: + draw.rectangle((align_x - 1, align_y - 1, align_x + line_height + 1, align_y + line_height + 1), fill=fill) + draw.text((align_x + 1 + line_height / 2, align_y + line_height / 2), line["line"], fill="white" if mode != "tramways" else "black", anchor="mm", font=fnt_icon) + + align_x += line_height + 5 + + if mode != "metros": + align_y += line_height + 10 + else: + align_y += 10 + + return image