Experimenteren met de Raspberry Pi Zero – Weer plaatjes op de Display (deel – 9)

Hoe leuk is het om pictogrammen van het weer op de display te laten zien. Het idee is om 30 seconde de afbeelding van Radio Caroline te laten zien en de volgende 30 seconde een pictogram voor het weer. Ik heb de pictogrammen vast in een grafisch programma op mij computer gemaakt.

Daar komt de Zon

We gaan eerst een directory aanmaken waar we ze kunnen neerzetten.

cd

mkdir weerlive

cd weerlive

Nu halen we de pictogrammen op. Het zijn PNG bestanden van 128 x 128. Dit is het formaat van de display.

wget https://www.ph0dv.nl/ph0dv/weerlive/weerlive.zip

We gaan nu het programma zip installeren om de file te unzippen.

sudo apt-get install zip

Install ZIP

En we unzippen de file.

unzip weerlive.zip

We hebben nu een lijstje met alle pictogrammen.

ls -alh

De pictogrammen voor het weer

Omdat we maar 300x per dag op onze API key (gratis versie) het weer op mogen halen, haal ik ieder uur het actuele weerbericht op. De nauwkeurigheid van het weer is dus 1 uur. We gaan hiervoor een BASH file aanmaken.

sudo nano //etc/init.d/weerlive.sh

We maken de file leeg. Dit kun je doen door boven aan de file te gaan staan met de cursor en meerdere keren CTRL K in te geven totdat alle regels zijn gewist.

Onderstaande code plakken we in de file.

#!/bin/bash

curl -s “https://weerlive.nl/api/json-data-10min.php?key=XXXXXXXXXX&locatie=Huizen” | jq –raw-output .liveweer[].d0weer >/home/pi/weer.txt

exit 0

Let op, plaats je eigen key op de plek van de Xjes.

weerlive.sh

CTRL X en Y en file is opgeslagen.

Maak de file nu “executable” zodat hij kan worden uitgevoerd.

sudo chmod +x //etc/init.d/weerlive.sh

Met deze BASH file kunnen we het weerbericht ophalen en de informatie wordt opgeslagen in in de file weer.txt in de home directory. Je kunt dit testen.

Cat weer.txt

We gaan dit script elk uur laten uitvoeren. We doen dit met een Cron job. We hebben al eerder in deel x een “Cronjob” aangemaakt die wordt uitgevoerd bij het opstarten van een Raspberry Pi.

crontab -e -u pi

Met “crontab” kunnen we de “cronjobs” aanpassen. -e staat voor edit en -u, dit is de “cronjob” van de user pi. Dus de “cronjob” wordt uitgevoerd alsof het de user pi is.

We plaatsen de volgende regel als onderste regel.

0 * * * * sudo -u pi nohup //etc/init.d/weerlive.sh >/dev/null 2>&1

De 0**** betekend dat iedere 0ste minuut van het uur dit commando wordt uitgevoerd. Dat is dus op het hele uur. Op de “>/dev/null 2>&1” kom ik in een later aflevering terug als we het gaan hebben over log files.

Met CTRL X en Y sla je de “Cronjob” op.

We gaan er nu voor zorgen dat de informatie in weer.txt wordt omgezet naar een plaatje. Dit wordt een iets uitgebreider script.

sudo nano //etc/init.d/displayoutput.sh

We gaan de file displayoutput.sh aanmaken en copieeren het volgende script in de file.

!/bin/bash

b=$(</home/pi/weer.txt)
echo “$b”

if [ -z “$b” ]
then
b=$(</home/pi/smile.txt)
echo “$b”
fi

ffmpeg -v 0 -y -i /home/pi/weerlive/$b.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1
sleep 30
ffmpeg -v 0 -y -i /home/pi/caroline.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1

exit 0

CTRL X en Y voor het opslaan.

Wat staat hier precies?

b=$(</home/pi/weer.txt)
echo “$b”

Hiermee maak je een variabele aan en vul dit met de inhoud van weer.txt

if [ -z “$b” ]
then
b=$(</home/pi/smile.txt)
echo “$b”
fi

Een if statement, hier staat dat wanneer de variabele $b leeg is (-z) dan halen we de informatie uit de file smile.txt (b=$(</home/pi/smile.txt)
echo “$b”). Het kan nl voorkomen dat het script geen contact kan krijgen door een storing o.i.d. met weerlive.nl. I.p.v. een weer pictogram plaatsen we dan een smiley 🙂

Smiley

Met de ffmpeg comando’s en de sleep 30 wisselen we tussen de afbeelding van Radio Carloline en de weer pictogram in de variablele $b.

ffmpeg -v 0 -y -i /home/pi/weerlive/$b.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1

De $b.png zet de variabelle om naar de afbeelding in png formaat.

Dit script willen we elke minuut uitvoeren. We gaan dus weer de cronjob aanpassen.

crontab -e -u pi

en we voegen de display output regel toe welke we iedere minuut laten uitvoeren.

*/1 * * * * sudo -u pi nohup //etc/init.d/displayoutput.sh >/dev/null 2>&1

De cronjob ziet er nu ongeveer zo uit.

Cronjob

*/1 **** betekend dat de cronjob iedere minuut wordt uitgevoerd.

We kunnen nu de cronjob reloaden zonder de Raspberry Pi te herstarten.

sudo service cron reload

Nu moeten we nog wel de file smile.txt aan maken.

cd

sudo nano smile.txt

Voeg het woord smile in de file

CTRLX en Y

Tot zover voor deze keer.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *