jjsanderson / DataBot

Display pressure and pollen data on a Pimoroni Scrollbot pHAT

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DataBot

Simple hack to display a rotation of current time, current atmospheric pressure, and today's pollen forecast, on a Pimoroni ScrollpHAT HD display, attached to a Pi Zero W.

As of 2019-05-17 there's minimal handling on API update requests, so this won't necessarily be very roboust. But it mostly works in my testing – though see below for pollen count issue.

Totals about 10% CPU on a Pi Zero W, with just this script running on a no-GUI Raspbian install. Initial RAM usage is about 50Mb for the whole system.

Installation

pip3 install required for:

pyowm
pyquery

apt install required for:

sudo apt-get install libxslt-dev

(lxml install with pyquery is partly broken on Raspbian Stretch, misses this library.)

Sign up for an OpenWeatherMap API key, add to clientsecrets.py file in project root:

owmkey = '<key here>'

Also using the Benadryl Social Pollen Count(!), which builds on the Met. Office's pollen forecast with arm-waving something something. However, the API is drop-dead simple using the pypollen module.

Download to ~/DataBot (assuming using pi user).

Systemctl

See Raspberry Pi docs for systemctl instructions; .service file provided, needs copying into /etc/systemd/system/ and enabling (test with start first).

Issues

As of 2019-05-17 updates using the PyPollen library to query the Benadryl site is flaky. I'm seeing some API errors, some slow updates, and some silent failures. From 2019-08-11 a revised UpdatePollen method scrapes the Met Office website directly and parses it using PyQuery.

2020-06-23: Updated to allow for 'Very High' pollen reports, which somehow I'd missed last year.

Worth doing at some point

  • Refactor this code to be a bit less ridiculous with global variables. That is: actually return variables sensibly. This is a bit tricky with the update jobs running as background threads, though, and that seems neater than hard-coding updates into the main loop. Maybe the main loop should handle API calls and the background thread should cycle the display? Or mumble mumble classes and objects mumble?

About

Display pressure and pollen data on a Pimoroni Scrollbot pHAT

License:MIT License


Languages

Language:HTML 93.8%Language:Python 6.2%