Giter Site home page Giter Site logo

databot's Introduction

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?

databot's People

Contributors

jjsanderson avatar

Watchers

 avatar

databot's Issues

Rewrite completely

I should rewrite this completely:

  • Class which holds key: value dictionary of messages to display, with access methods to set/get messages associated with a key and to add new keys. Also things like display cycle time, and an update method.
  • Helper tools then grab the relevant data and update the object as necessary
  • main then registers the timer updates, and calls update() on the main object.

Would make it much simpler to reuse parts of the package.

Doesn't catch the Pi dropping offline

If WiFi plain packs in, the script continues without displaying a visible error on the dot display, beyond a POLLEN ERROR (which is common enough to have other causes assumed). Since the time continues to update, I've just spent 36 hours thinking it didn't seem as warm as the databot suggested.

Should probably check the thing's online, and display an 'OFFLINE' message if not. Some useful approaches to that here: https://stackoverflow.com/questions/3764291/how-can-i-see-if-theres-an-available-and-active-network-connection-in-python

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.