bump devcontainer to bookworm, add documentation
This commit is contained in:
parent
a7c3edc60e
commit
b885105147
@ -1,4 +1,4 @@
|
||||
FROM python:3.9-slim-bullseye as development
|
||||
FROM python:3.11-slim-bookworm as development
|
||||
WORKDIR /app
|
||||
RUN apt-get -y update && apt-get install -yqq dos2unix chromium chromium-driver \
|
||||
libxi6 libgconf-2-4 python3-selenium \
|
||||
|
@ -1,17 +1,16 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json.
|
||||
{
|
||||
"name": "Inkycal-dev",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"target": "development"
|
||||
},
|
||||
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"target": "development"
|
||||
},
|
||||
|
||||
// This is the settings.json mount
|
||||
"mounts": ["source=/c/temp/settings_test.json,target=/boot/settings.json,type=bind,consistency=cached"],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
"postCreateCommand": "chmod +x ./.devcontainer/postCreate.sh && ./.devcontainer/postCreate.sh",
|
||||
"postCreateCommand": "dos2unix ./.devcontainer/postCreate.sh && chmod +x ./.devcontainer/postCreate.sh && ./.devcontainer/postCreate.sh",
|
||||
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
|
290
README.md
290
README.md
@ -1,287 +1,9 @@
|
||||
# Welcome to inkycal v2.0.3!
|
||||
# Inkycal-based full screen weather display (scraper solution)
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/aceisace/Inkycal/assets/Repo/logo.png" width="900" alt="aceinnolab logo">
|
||||
</p>
|
||||
<p align="center">
|
||||
<img src="https://github.com/aceinnolab/Inkycal/blob/c1c274878ba81ddaee6186561e6ea892da54cd6a/Repo/inkycal-featured-gif.gif" width="900" alt="featured-image">
|
||||
</p>
|
||||
This fork of <https://github.com/aceinnolab/Inkycal/> was used to try out a webscraper approach for a openweathermap-based full screen weather display on a 7in5 waveshare v2 colour epd.
|
||||
It didn't prove particularly robust, so I've decided to not further develop it.
|
||||
I'll leave it here in case someone wants to try and play around with it a little.
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/aceinnolab/Inkycal/actions/workflows/test-on-rpi.yml"><img src="https://github.com/aceinnolab/Inkycal/actions/workflows/test-on-rpi.yml/badge.svg"></a>
|
||||
<a href="https://github.com/aceinnolab/Inkycal/actions/workflows/update-docs.yml"><img src="https://github.com/aceinnolab/Inkycal/actions/workflows/update-docs.yml/badge.svg"></a>
|
||||
<a href="https://github.com/aceinnolab/Inkycal/releases"><img alt="Version" src="https://img.shields.io/github/release/aceisace/Inkycal.svg"/></a>
|
||||
<a href="https://github.com/aceinnolab/Inkycal/blob/main/LICENSE"><img alt="Licence" src="https://img.shields.io/github/license/aceisace/Inkycal.svg" /></a>
|
||||
<a href="https://github.com/aceinnolab/Inkycal/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/aceisace/Inkycal?color=yellow"></a>
|
||||
<a href="https://github.com/aceinnolab/Inkycal"><img alt="python" src="https://img.shields.io/badge/python-3.11-lightorange"></a>
|
||||
</p>
|
||||
Since Selenium doesn't run on Pi Zero, I had to run the scraper part as a cron job on my Pi 4 and scp the resulting image to the Pi Zero that's connected to the e-paper display.
|
||||
|
||||
Inkycal is a software written in python for selected E-Paper displays. It converts these displays into useful
|
||||
information dashboards. It's open-source, free for personal use, fully modular and user-friendly. Despite all this,
|
||||
Inkycal can run well even on the Raspberry Pi Zero. Oh, and it's open for third-party modules! Hooray!
|
||||
|
||||
## ⚠️ Warning: long installation time expected!
|
||||
|
||||
Starting october 2023, Raspberry Pi OS is now based on Debian bookworm and uses python 3.11 instead of 3.9 as the
|
||||
default version. Inkycal has been updated to work with python3.11, but the installation of numpy can take a very long
|
||||
time, in some cases even hours. If you do not want to wait this long to install Inkycal, you can also get a
|
||||
ready-to-flash version of Inkycal called InkycalOS-Lite with everything pre-installed for you by sponsoring
|
||||
via [Github Sponsors](https://github.com/sponsors/aceisace). This helps keep up maintenance costs, implement new
|
||||
features and fixing bugs. Please choose the one-time sponsor option and select the one with the plug-and-play version of
|
||||
Inkycal. Then, send your email-address to which InkycalOS-Lite should be sent.
|
||||
|
||||
## Main features
|
||||
|
||||
Inkycal is fully modular, you can mix and match any modules you like and configure them on the web-ui. For now, these
|
||||
following built-in modules are supported:
|
||||
|
||||
* Calendar - Monthly Calendar with option to sync events from iCalendars, e.g. Google.
|
||||
* Agenda - Agenda showing upcoming events from given iCalendar URLs.
|
||||
* Image - Display an Image from URL or local file path.
|
||||
* Slideshow - Cycle through images in a given folder and show them on the E-Paper.
|
||||
* Feeds - Synchronise RSS/ATOM feeds from your favorite providers.
|
||||
* Stocks - Display stocks using Tickers from Yahoo! Finance.
|
||||
* Weather - Show current weather, daily or hourly weather forecasts from openweathermap.
|
||||
* Todoist - Synchronise with Todoist app or website to show todos.
|
||||
* iCanHazDad - Display a random joke from [iCanHazDad.com](iCanhazdad.com).
|
||||
|
||||
## Quickstart
|
||||
|
||||
Watch the one-minute video on getting started with Inkycal:
|
||||
|
||||
[](https://www.youtube.com/watch?v=IiIv_nWE5KI)
|
||||
|
||||
## Hardware guide
|
||||
|
||||
Before you can start, please ensure you have one of the supported displays and of the supported Raspberry
|
||||
Pi: `|4|3A|3B|3B+|2B|0W|0WH|02W|`. We personally recommend the Raspberry Pi Zero W as this is relatively cheaper, uses
|
||||
less power and is perfect to fit in a small photo frame once you have assembled everything.
|
||||
|
||||
**Serial** displays are usually cheaper, but slower. Their main advantage is ease of use, like being able to communicate
|
||||
via SPI. A single update will cause flickering (fully normal on e-paper displays) ranging from a few seconds to half an
|
||||
minute. We recommend these for users who want to get started quickly and for more compact setups, e.g. fitting inside a
|
||||
photo frame. The resolution of these displays ranges from low to medium. Usually, these displays support 2-3 colours,
|
||||
but no colours in between, e.g. fully black, fully red/yellow and fully-white.
|
||||
|
||||
**Parallel** displays on the other hand do not understand SPI and require their own dedicated driver boards individually
|
||||
configured for these displays. Flickering also takes place here, but an update only takes about one to a few seconds.
|
||||
The resolution is much better than serial e-paper displays, but the cost is also higher. These also have 16 different
|
||||
grayscale levels, which does not compare to the 256 grayscales of LCDs, but far better than serial displays.
|
||||
|
||||
**❗️Important note: e-paper displays cannot be simply connected to the Raspberry Pi, but require a driver board. The
|
||||
links below may or may not contain the required driver board. Please ensure you get the correct driver board for the
|
||||
display!**
|
||||
|
||||
| type | vendor | affiliate links to product |
|
||||
|-------------------------------------------|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| 7.5" Inkycal (plug-and-play) | Author of Inkycal | [Buy on Tindie](https://www.tindie.com/products/aceisace4444/inkycal-build-v1/) Pre-configured version of Inkycal with custom frame and a web-ui. You do not need to buy anything extra. Includes Raspberry Pi Zero W, 7.5" e-paper, microSD card, driver board, custom packaging and 1m of cable. Comes pre-assembled for plug-and-play. |
|
||||
| Inkycal frame | Author of Inkycal | coming soon (ultraslim frame with custom-made front and backcover inkl. ultraslim driver board). You will need a Raspberry Pi and a 7.5" e-paper display |
|
||||
| `[serial]` 12.48" (1304×984px) display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=7e08c6110a1a5b3511ead10db2fd909a&camp=1638&creative=6742&index=computers&keywords=Waveshare 12.48 Inch E-Paper">Waveshare 12.48 Inch E-Paper</a> |
|
||||
| `[serial]` 7.5" (640x384px) -> v1 display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=1bf1a6338786c0a4e7b877335afa0683&camp=1638&creative=6742&index=computers&keywords=Waveshare 7.5 Inch E-Paper">Waveshare 7.5 Inch E-Paper</a> |
|
||||
| `[serial]` 7.5" (800x400px) -> v2 display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=1bf1a6338786c0a4e7b877335afa0683&camp=1638&creative=6742&index=computers&keywords=Waveshare 7.5 Inch E-Paper">Waveshare 7.5 Inch E-Paper</a> |
|
||||
| `[serial]` 7.5" (880x528px) -> v3 display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=1bf1a6338786c0a4e7b877335afa0683&camp=1638&creative=6742&index=computers&keywords=Waveshare 7.5 Inch E-Paper">Waveshare 7.5 Inch E-Paper</a> |
|
||||
| `[serial]` 5.83" (400x300px) display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=a4239753343f5fbbdb8f5be2f6b5e2b1&camp=1638&creative=6742&index=computers&keywords=Waveshare 5.83 Inch E-Paper">Waveshare 5.83 Inch E-Paper</a> |
|
||||
| `[serial]` 4.2" (400x300px)display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=7575de79f1728ab9f2bfb6a46d2238ee&camp=1638&creative=6742&index=computers&keywords=Waveshare 4.2 Inch E-Paper">Waveshare 4.2 Inch E-Paper</a> |
|
||||
| `[parallel]` 10.3" (1872×1404px) display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=b453e16c373b0d86e4828b22edecc206&camp=1638&creative=6742&index=computers&keywords=Waveshare 10.3 Inch E-Paper">Waveshare 10.3 Inch E-Paper</a> |
|
||||
| `[parallel]` 9.7" (1200×825px) display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=eef2be91cc3f850943109276a63a7162&camp=1638&creative=6742&index=computers&keywords=Waveshare 9.7 Inch E-Paper">Waveshare 9.7 Inch E-Paper</a> |
|
||||
| `[parallel]` 7.8" (1872×1404px) display | waveshare / gooddisplay | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=f1863f9686b0eeeb04ce147791ba3789&camp=1638&creative=6742&index=computers&keywords=Waveshare 7.8 Inch E-Paper">Waveshare 7.8" E-Paper</a> |
|
||||
| Raspberry Pi Zero W | Raspberry Pi | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=8f9c223197e1ab91b0372b1fe56ed508&camp=1638&creative=6742&index=computers&keywords=Raspberry Pi Zero W">Raspberry Pi Zero W</a> |
|
||||
| MicroSD card | Sandisk | <a target="_blank" href="https://www.amazon.de/gp/search?ie=UTF8&tag=aceisace-21&linkCode=ur2&linkId=530a2b371c40bfeca48e875fb735a4a1&camp=1638&creative=6742&index=computers&keywords=Sandisk microSD 16GB U1 A1">MicroSD card (8GB)</a> |
|
||||
|
||||
## Configuring the Raspberry Pi
|
||||
|
||||
Flash Raspberry Pi OS on your microSD card (min. 4GB) with [Raspberry Pi Imager](https://rptl.io/imager). Use the
|
||||
following settings:
|
||||
|
||||
| option | value |
|
||||
|:--------------------------|:---------------------------:|
|
||||
| hostname | inkycal |
|
||||
| enable ssh | yes |
|
||||
| set username and password | yes |
|
||||
| username | a username you like |
|
||||
| password | a password you can remember |
|
||||
| set Wi-Fi | yes |
|
||||
| Wi-Fi SSID | your Wi-Fi name |
|
||||
| Wi-Fi password | your Wi-Fi password |
|
||||
| set timezone | your local timezone |
|
||||
|
||||
1. Create and download `settings.json` file for Inkycal from
|
||||
the [WEB-UI](https://aceinnolab.com/inkycal/ui). Add the modules you want with the add
|
||||
module button.
|
||||
2. Copy the `settings.json` to the flashed microSD card in the `/boot` folder of microSD card. On Windows, this is the
|
||||
only visible directory on the SD card. On Linux, copy these files to `/boot` of the microSD card.
|
||||
3. Eject the microSD card from your computer now, insert it in the Raspberry Pi and power the Raspberry Pi.
|
||||
4. Once the green LED has stopped blinking after ~3 minutes, you can connect to your Raspberry Pi via SSH using a SSH
|
||||
Client. We suggest [Termius](https://termius.com/download/windows)
|
||||
on your smartphone. Use the address: `inkycal.local` with the username and password you set earlier. For more
|
||||
detailed instructions, check out the page from
|
||||
the [Raspberry Pi website](https://www.raspberrypi.org/documentation/remote-access/ssh/)
|
||||
5. After connecting via SSH, run the following commands, line by line:
|
||||
|
||||
```bash
|
||||
sudo raspi-config --expand-rootfs
|
||||
sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/config.txt
|
||||
sudo dpkg-reconfigure tzdata
|
||||
|
||||
# If you have the 12.48" display, these steps are also required:
|
||||
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
|
||||
tar zxvf bcm2835-1.71.tar.gz
|
||||
cd bcm2835-1.71/
|
||||
sudo ./configure && sudo make && sudo make check && sudo make install
|
||||
wget https://project-downloads.drogon.net/wiringpi-latest.deb
|
||||
sudo dpkg -i wiringpi-latest.deb
|
||||
|
||||
# If you are using the Raspberry Pi Zero models, you may need to increase the swapfile size to be able to install Inkycal:
|
||||
sudo dphys-swapfile swapoff
|
||||
sudo sed -i -E '/^CONF_SWAPSIZE=/s/=.*/=256/' /etc/dphys-swapfile
|
||||
sudo dphys-swapfile setup
|
||||
sudo dphys-swapfile swapon
|
||||
```
|
||||
|
||||
These commands expand the filesystem, enable SPI and set up the correct timezone on the Raspberry Pi. When running the
|
||||
last command, please select the continent you live in, press enter and then select the capital of the country you live
|
||||
in. Lastly, press enter.
|
||||
|
||||
7. Follow the steps in `Installation` (see below) on how to install Inkycal.
|
||||
|
||||
## Installing Inkycal
|
||||
|
||||
⚠️ Please note that although the developers try to keep the installation as simple as possible, the full installation
|
||||
can sometimes take hours on the Raspberry Pi Zero W and is not guaranteed to go smoothly each time. This is because
|
||||
installing dependencies on the zero w takes a long time and is prone to copy-paste-, permission- and configuration
|
||||
errors.
|
||||
|
||||
ℹ️ **Looking for a shortcut to safe a few hours?** We know about this problem and have spent a signifcant amount of time
|
||||
to prepare a pre-configured image with the latest version of Inkycal for the Raspberry Pi Zero. It comes with the latest
|
||||
version of Inkycal, is fully tested and uses the Raspberry Pi OS Lite as it's base image. You only need to copy your
|
||||
settings.json file, we already took care of the rest, including auto-start at boot, enabling spi and installing all
|
||||
dependencies in advance. Pretty neat right? Check the [sponsor button](https://github.com/sponsors/aceisace) at the very
|
||||
top of the repo to get access to Inkycal-OS-Lite. This will help keep this project growing and cover the ongoing
|
||||
expenses too! Win-win for everyone! 🎊
|
||||
|
||||
### Manual installation
|
||||
|
||||
Run the following steps to install Inkycal. Do **not** use sudo for this, except where explicitly specified.
|
||||
|
||||
```bash
|
||||
# the next line is for the Raspberry Pi only
|
||||
sudo apt-get install zlib1g libjpeg-dev libatlas-base-dev rustc libopenjp2-7 python3-dev scons libssl-dev python3-venv python3-pip git libfreetype6-dev wkhtmltopdf
|
||||
cd $HOME
|
||||
git clone --branch main --single-branch https://github.com/aceinnolab/Inkycal
|
||||
cd Inkycal
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
pip install wheel
|
||||
pip install -e ./
|
||||
|
||||
# If you are running on the Raspberry Pi, please install the following too to allow rendering on the display
|
||||
pip install RPi.GPIO==0.7.1 spidev==3.5
|
||||
```
|
||||
|
||||
## Running Inkycal
|
||||
|
||||
To run Inkycal, type in the following command in the terminal:
|
||||
|
||||
```bash
|
||||
cd $HOME/Inkycal
|
||||
source venv/bin/activate
|
||||
python3 inky_run.py
|
||||
```
|
||||
|
||||
## Running on each boot
|
||||
|
||||
To make inkycal run on each boot automatically, you can use crontab. Do not use sudo for this
|
||||
|
||||
```bash
|
||||
(crontab -l ; echo "@reboot sleep 60 && cd $HOME/Inkycal && venv/bin/python inky_run.py &")| crontab -
|
||||
```
|
||||
|
||||
## Updating Inkycal
|
||||
|
||||
To update Inkycal to the latest version, navigate to the Inkycal folder, then run:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
```
|
||||
|
||||
Yep. It's actually that simple!
|
||||
But, if you have made changes to Inkycal, those will be overwritten.
|
||||
If that is the case, backup your modified files somewhere else if you need them. Then run:
|
||||
|
||||
```bash
|
||||
git reset --hard
|
||||
git pull
|
||||
```
|
||||
|
||||
## Uninstalling Inkycal
|
||||
|
||||
We'll miss you, but we don't want to make it hard for you to leave.
|
||||
Just delete the Inkycal folder, and you're good to go!
|
||||
|
||||
Additionally, if you want to reset your crontab file, which runs inkycal at boot, run:
|
||||
|
||||
```bash
|
||||
crontab -r
|
||||
```
|
||||
|
||||
## Modifying Inkycal
|
||||
|
||||
Inkycal now runs in a virtual environment to support more devices than just the Raspberry Pi. Therefore, to make changes
|
||||
to Inkycal, navigate to Inkycal, then run:
|
||||
|
||||
```bash
|
||||
cd $HOME/Inkycal && source venv/bin/activate
|
||||
```
|
||||
|
||||
Then modify the files as needed and experiment with Inkycal.
|
||||
To deactivate the virtual environment, simply run:
|
||||
|
||||
```bash
|
||||
deactivate
|
||||
```
|
||||
|
||||
## 3D printed frames
|
||||
|
||||
With your setup being complete at this stage, you may want to 3d-print a case. The following files were shared by our
|
||||
friendly community:
|
||||
[3D-printable case](https://github.com/aceinnolab/Inkycal/wiki/3D-printable-files)
|
||||
|
||||
## Contributing
|
||||
|
||||
All sorts of contributions are most welcome and appreciated. To start contributing, please follow
|
||||
the [Contribution Guidelines](https://github.com/aceisace/Inkycal/blob/main/.github/CONTRIBUTING.md)
|
||||
|
||||
The average response time for issues, PRs and emails is usually 24 hours. In some cases, it might be longer. If you want
|
||||
to have some faster responses, please use Discord (link below)
|
||||
|
||||
**P.S:** Don't forget to star and/or watch the repo. For those who have done so already, thank you very much!
|
||||
|
||||
## Join us on Discord!
|
||||
|
||||
We're happy to help, to beginners and developers alike. In fact, you are more likely to get faster support on Discord
|
||||
than on Github.
|
||||
|
||||
<a href="https://discord.gg/sHYKeSM">
|
||||
<img src="https://github.com/aceisace/Inkycal/blob/assets/Repo/discord-logo.png?raw=true" alt="Inkycal chatroom Discord" width=200>
|
||||
</a>
|
||||
|
||||
## Sponsoring
|
||||
|
||||
Inkycal relies on sponsors to keep up maintainance, development and bug-fixing. Please consider sponsoring Inkycal via
|
||||
the sponsor button if you are happy with Inkycal.
|
||||
|
||||
We now offer perks depending on the amount contributed for sponsoring, ranging from pre-configured OS images for
|
||||
plug-and-play to development of user-suggested modules. Check out the sponsor page to find out more.
|
||||
If you have been a previous sponsor, please let us know on our Dicord server or by sending an email. We'll send you the
|
||||
perks after confirming 💯
|
||||
|
||||
## As featured on
|
||||
|
||||
* [makeuseof - fantastic projects using an eink display](http://makeuseof.com/fantastic-projects-using-an-e-ink-display/)
|
||||
* [magpi.de](https://www.magpi.de/news/maginkcal-ein-kalender-mit-epaper-display-und-raspberry-pi)
|
||||
* [reddit - Inkycal](https://www.reddit.com/r/InkyCal/)
|
||||
* [schuemann.it](https://schuemann.it/2019/09/11/e-ink-calendar-with-a-raspberry-pi/)
|
||||
* [huernerfuerst.de](https://www.huenerfuerst.de/archives/e-ink-kalender-mit-einem-raspberry-pi-zero-teil-1-was-wird-benoetigt)
|
||||
* [raspberrypi.com](https://www.raspberrypi.com/news/ashleys-top-five-projects-for-raspberry-pi-first-timers/)
|
||||
* [canox.net](https://canox.net/2019/06/raspberry-pi-als-e-ink-kalender/)
|
||||
For further information see the official Inkycal repo.
|
||||
|
@ -1,29 +1,32 @@
|
||||
import sys
|
||||
import time
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageEnhance
|
||||
from selenium import webdriver
|
||||
from selenium.common.exceptions import ElementClickInterceptedException, TimeoutException, NoSuchElementException
|
||||
from selenium.common.exceptions import ElementClickInterceptedException
|
||||
from selenium.common.exceptions import NoSuchElementException
|
||||
from selenium.common.exceptions import TimeoutException
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.support.wait import WebDriverWait
|
||||
|
||||
import sys
|
||||
import time
|
||||
|
||||
def get_scraped_weatherforecast_image() -> Image:
|
||||
# Set the desired viewport size (width, height)
|
||||
my_width = 480
|
||||
my_height = 850
|
||||
mobile_emulation = {
|
||||
"deviceMetrics": { "width": my_width, "height": my_height, "pixelRatio": 1.0 },
|
||||
"userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"
|
||||
"deviceMetrics": {"width": my_width, "height": my_height, "pixelRatio": 1.0},
|
||||
"userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
||||
}
|
||||
|
||||
# Create an instance of the webdriver with some pre-configured options
|
||||
options = Options()
|
||||
options.add_argument("--no-sandbox")
|
||||
options.add_argument("--headless=new")
|
||||
#options.add_argument("--disable-gpu")
|
||||
# options.add_argument("--disable-gpu")
|
||||
options.add_argument("--disable-dev-shm-usage")
|
||||
options.add_experimental_option("mobileEmulation", mobile_emulation)
|
||||
service = Service("/usr/bin/chromedriver")
|
||||
@ -38,7 +41,7 @@ def get_scraped_weatherforecast_image() -> Image:
|
||||
driver.execute_script("return arguments[0].scrollIntoView();", login_button)
|
||||
# Click the button
|
||||
button_clicked = False
|
||||
while(button_clicked == False):
|
||||
while button_clicked == False:
|
||||
try:
|
||||
login_button.click()
|
||||
button_clicked = True
|
||||
@ -49,9 +52,12 @@ def get_scraped_weatherforecast_image() -> Image:
|
||||
|
||||
# hacky wait statement for all the page elements to load
|
||||
page_loaded = False
|
||||
while(page_loaded == False):
|
||||
while page_loaded == False:
|
||||
try:
|
||||
WebDriverWait(driver, timeout=45).until(lambda d: d.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[1]/div[1]/div[1]/h2').text != "")
|
||||
WebDriverWait(driver, timeout=45).until(
|
||||
lambda d: d.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[1]/div[1]/div[1]/h2').text
|
||||
!= ""
|
||||
)
|
||||
page_loaded = True
|
||||
except TimeoutException:
|
||||
print("Couldn't get the page to load, retrying...")
|
||||
@ -66,11 +72,11 @@ def get_scraped_weatherforecast_image() -> Image:
|
||||
driver.execute_script("arguments[0].remove();", map_element)
|
||||
|
||||
# remove the hourly forecast
|
||||
#map_element = driver.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[2]/div[1]')
|
||||
#driver.execute_script("arguments[0].remove();", map_element)
|
||||
# map_element = driver.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[2]/div[1]')
|
||||
# driver.execute_script("arguments[0].remove();", map_element)
|
||||
|
||||
# zoom in a little - not now
|
||||
driver.execute_script("document.body.style.zoom='110%'");
|
||||
driver.execute_script("document.body.style.zoom='110%'")
|
||||
|
||||
html_element = driver.find_element(By.TAG_NAME, "html")
|
||||
driver.execute_script("arguments[0].style.fontSize = '16px';", html_element)
|
||||
@ -83,18 +89,20 @@ def get_scraped_weatherforecast_image() -> Image:
|
||||
driver.quit()
|
||||
|
||||
# crop, resize, enhance & rotate the image for inky display
|
||||
im = Image.open(image_filename, mode='r', formats=None)
|
||||
im = im.crop((0, 100, (my_width-50), (my_height-50)))
|
||||
im = Image.open(image_filename, mode="r", formats=None)
|
||||
im = im.crop((0, 100, (my_width - 50), (my_height - 50)))
|
||||
im = im.resize((480, 800), resample=Image.LANCZOS)
|
||||
#im = im.rotate(90, Image.NEAREST, expand = 1)
|
||||
# im = im.rotate(90, Image.NEAREST, expand = 1)
|
||||
im = ImageEnhance.Contrast(im).enhance(1.0)
|
||||
im.save(image_filename)
|
||||
return im, im
|
||||
|
||||
|
||||
def main():
|
||||
_, _ = get_scraped_weatherforecast_image()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if __name__ == "__main__":
|
||||
now = time.asctime()
|
||||
print(f"It's {now} - running {__name__} in standalone/debug mode")
|
||||
main()
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/bin/sh
|
||||
python3 /home/ubuntu/Inkycal/inkycal/modules/inkycal_openweather_scrape.py
|
||||
python3 /home/ubuntu/Inkycal/inkycal/modules/inkycal_openweather_scrape.py
|
||||
scp -i /home/ubuntu/.ssh/id_rsa /tmp/openweather_scraped.png inky@10.10.9.10:~/Inkycal/
|
||||
|
Loading…
Reference in New Issue
Block a user