From 548bd4db3ef7149bfb33c73144446c7ebd6fea28 Mon Sep 17 00:00:00 2001 From: Gal Date: Fri, 5 Apr 2024 22:36:29 +0200 Subject: [PATCH] Add render folder with dummy data, add rpi folder --- render/app.py | 4 ++ render/render.py | 40 ++++++++++++++ render/styles.css | 98 +++++++++++++++++++++++++++++++++++ render/weather.html | 80 ++++++++++++++++++++++++++++ render/weather.png | Bin 0 -> 35269 bytes display.py => rpi/display.py | 0 rpi/fetch_image.py | 21 ++++++++ 7 files changed, 243 insertions(+) create mode 100644 render/app.py create mode 100644 render/render.py create mode 100644 render/styles.css create mode 100644 render/weather.html create mode 100644 render/weather.png rename display.py => rpi/display.py (100%) create mode 100644 rpi/fetch_image.py diff --git a/render/app.py b/render/app.py new file mode 100644 index 0000000..6af3f1b --- /dev/null +++ b/render/app.py @@ -0,0 +1,4 @@ +from render import app + +if __name__ == "__main__": + app.run() \ No newline at end of file diff --git a/render/render.py b/render/render.py new file mode 100644 index 0000000..8ebf3d5 --- /dev/null +++ b/render/render.py @@ -0,0 +1,40 @@ +import asyncio +from pyppeteer import launch +import os +from PIL import Image +from flask import Flask, send_file +import io + +app = Flask(__name__) + +async def render_html_to_png(html_file_name, css_file_name, output_file_name): + browser = await launch() + page = await browser.newPage() + await page.setViewport({'width': 800, 'height': 480}) + + current_dir = os.path.dirname(__file__) + html_file_path = os.path.join(current_dir, html_file_name) + css_file_path = os.path.join(current_dir, css_file_name) + output_file_path = os.path.join(current_dir, output_file_name) + + await page.goto(f'file://{html_file_path}') + await page.addStyleTag({'path': css_file_path}) + + screenshot = await page.screenshot() + image = Image.open(io.BytesIO(screenshot)) + image.save(output_file_path) + + await browser.close() + +@app.route('/weather', methods=['GET']) +def generate_weather_image(): + html_file_path = 'weather.html' + css_file_path = 'styles.css' + output_file_path = 'weather.png' + + asyncio.get_event_loop().run_until_complete(render_html_to_png(html_file_path, css_file_path, output_file_path)) + + return send_file(output_file_path, mimetype='image/png') + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5233) diff --git a/render/styles.css b/render/styles.css new file mode 100644 index 0000000..55b705e --- /dev/null +++ b/render/styles.css @@ -0,0 +1,98 @@ +body { + font-family: Arial, sans-serif; + background-color: #f0f0f0; +} + +.weather-container { + width: 700px; + margin: 0 auto; + padding: 20px; + background-color: #fff; + border-radius: 10px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); +} + +h1 { + text-align: center; + color: #333; +} + +.additional-info { + display: flex; + justify-content: space-between; + margin-bottom: 20px; +} + +.info-item { + flex: 0 1 calc(50% - 10px); + padding: 10px; + background-color: #f9f9f9; + border-radius: 5px; +} + +.info-label { + font-size: 14px; + color: #666; +} + +.info-value { + font-size: 16px; + color: #333; +} + +.current-weather { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} + +.weather-icon { + width: 100px; + height: 100px; + background-color: #ccc; + border-radius: 50%; +} + +.temperature { + font-size: 24px; + color: #333; +} + +h2 { + margin-top: 20px; + color: #666; +} + +.forecast { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.forecast-item { + flex-basis: calc(10% - 10px); + text-align: center; + padding: 10px; + background-color: #f9f9f9; + border-radius: 5px; + margin-bottom: 10px; +} + +.forecast-time { + font-size: 14px; + color: #666; +} + +.forecast-icon { + width: 50px; + height: 50px; + background-color: #ccc; + border-radius: 50%; + margin-bottom: 5px; +} + +.forecast-temperature { + font-size: 16px; + color: #333; +} diff --git a/render/weather.html b/render/weather.html new file mode 100644 index 0000000..26c8d02 --- /dev/null +++ b/render/weather.html @@ -0,0 +1,80 @@ + + + + + + Weather Dashboard + + + +
+

Berlin ˙ 13.12.2024 ˙ 09:00

+
+
+ +
+
+ 23°C +
+
+
+
+
Wind Gust
+
10 km/h
+
+
+
Sunrise
+
06:30 AM
+
+
+
Sunset
+
04:30 PM
+
+
+
Precipitation Rate
+
20%
+
+
+

Today's Forecast

+
+
+
09:00
+
+ +
+
20°C
+
+
+
11:00
+
+
+
18°C
+
+
+
13:00
+
+
+
18°C
+
+
+
15:00
+
+
+
18°C
+
+
+
17:00
+
+
+
18°C
+
+
+
19:00
+
+
+
18°C
+
+
+
+ + diff --git a/render/weather.png b/render/weather.png new file mode 100644 index 0000000000000000000000000000000000000000..d6862f9cbcb644d119a4989b958162fc4fd08e07 GIT binary patch literal 35269 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