The Greek is playing around with Tibber.
Store, update and visualize your own Tibber data from your own sqlite
database.
Click here to get your own Tibber invite from your fellow Greek μαλάκα!
I really wanted to store some of my Tibber data in a database I control to achieve the following goals:
- Keep a copy of my long-term history of hourly consumption handy
- Allow me to perform all sorts of neat analytical SQL queries on it
- Allow me to visualize it in my own tools of preference e.g. Grafana
- Use it in my own application e.g. e-paper display that shows a graph of today's (and tomorrow, once available) spot prices
First setup your environment using: poetry install
Note: For ARM devices (e.g. Raspberry Pi) pip install -r requirements_arm.txt
.
After the introduction of the kaleido
Python package we've had some issues setting up the Python environment for ARM devices due to them having split up the support into a new version 0.2.1.post1
for some reason. π€·ββοΈ
Maybe we'll get something from this GitHub issue.
In the future we will have to move away from plotly
since it can only use the kaleido
engine for exporting plots to static files and it looks under-maintained.
We haven't tested orca
but it looks outdated.
It is recommended that you use a virtual environment for the best results.
poetry install
will already create one for you which you can activate with poetry shell
.
If you're going the pip
way then you can:
python3 -m venv .venv
source .venv/bin/activate
pip install -r the_requirements_file_that_fits_you.txt
You need the following config.json
file in your project root:
{
"TIBBER_API_KEY": "some_gsdgri_strange_r3f4ww_looking_f43erke_key_from_tibber_dev",
"DATABASE_PATH": "/some/path/tibber.db",
}
Get your Tibber API key.
(Hopefully) you will find all you need in the attached Python help:
If you installed with poetry
, activate the virtual environment for tibberios
and run:
tibberios --help
Else, if you installed with pip
then you can use the provided run
script:
./run --help
The following will get you the latest 1000 hours of your data:
tibberios --config-path config.json --resolution HOURLY --records 1000
I recommend you run with a lot of records the first time, in order to populate your past data. Then you can run every hour and update the last ~48 records, or less if you have a live electricity meter. In my case (not live) the consumption data appears with 1-2 days of delay, thus I need to re-fetch the past data in order to keep everything updated.
Currently the deployment is managed manually:
git clone
this repository into your remote machine- Create a cronjob in
crontab -e
by adding your own modified version the following command combo:
# Tibber update data
*/10 * * * * ( . /home/pi/.cache/pypoetry/virtualenvs/tibberios-someRandomThingsHere-py3.10/bin/activate && tibberios --records 100 --verbose --config-path /home/pi/tibberios/config.json >> /home/pi/tibberios/run.log 2>&1 )
In my case, I have setup Grafana to be able to read local files in the /opt/grafana/
path in my Raspberry Pi.
Thus, I store and run my sqlite
databases there and Grafana operates them from there using this Grafana plugin.
By trial and error I found --records 100
to work great for backfilling consumption and cost data, if you don't have access to real-time Tibber data.
SQLite + self-hosted Grafana = β€οΈ
I'm hosting a Grafana instance in my Raspberry Pi to monitor a bunch of things, which is great because by running Tibberios
on the same machine allows us to query the resulting tables in Tibberios
's SQLite database.
For more read the Tibberios
docs on Grafana and check out the Grafana dashboard JSON models.
As much as I enjoy these electricity management apps, I have noticed that they introduce some new limitations to my life:
- I am the only person in the family with access to the current and future electricity price
- I have to check my phone every time
As such, I came up with a fun project idea: Hook-up an e-Paper Display to my Raspberry Pi and show the current and future prices for all in an accessible location at home! π€―
So after a bunch of research I ordered the Waveshare 7.5 Inch E-Paper Display which comes with a HAT for Raspberry Pi. The reasons being:
- It seems quite popular on Amazon and the price was fine.
- There is a few GitHub repositories with support for it, and from Waveshare themselves
- The size is just right, not too large not too small (lagom as they say in swedish πΈπͺ)
Run something like the following:
tibberios --config-path config.json vis electricity_prices.png
You can run something like the following:
tibberios --config-path config.json display electricity_prices.png
Note 1: Currently only the epd7in5_V2
is supported.
Unsure if it would make sense to support smaller display sizes at the moment, since the text won't be legible.
Maybe the way forward is to have an API to allow folks to setup Tibberios for their own displays.
Raise a GitHub Issue or create a Pull Request if you have some good ideas. β€οΈ
Note 2: Yes, it is a bit against intuition to have to run a Tibber API update in order to visualize future data or update your display.
It will be solved when we implement something like subcommands with click
.
Here you can see a sample of the graph rendered by plotly
:
And here you can see how the same picture looks like when printed on the e-paper display:
Don't worry about it being so naked, I have ordered a case for it from Waveshare as a development enclosure and will likely move to a nice looking frame for the production environment. π‘
Note 1: This project is currently in progress, come back for updates. πΊ
Note 2: The "cost of a shower" price analogy was copied from duscha.nu. π
- Tibber Dev Docs
- pyTibber
- Grafana
- Grafana SQLite data source plugin
- Waveshare eShop
- Waveshare on GitHub
Hey! π€ Hereβs a tip! You can save money, save the environment, and avoid unnecessary energy consumption at the same time. How? With Tibberβs hourly energy prices, I can easily move my consumption to the cheapest hours, and avoid expensive hours. Try it out, and weβll both get 500 kr as a bonus to use in the Tibber Store. β‘ Read more here