Teletekst 101

      Reacties uitgeschakeld voor Teletekst 101

Teletekst is oeroud, maar nog springlevend. Vooral pagina 101 is een vast onderdeel van mijn dagelijkse routine.

Teletekst is al decennia lang een begrip voor een kort overzicht van het laatste nieuws, sport, weer en verkeer etc. Eerst was het alleen beschikbaar op de televisie, maar later ook op internet  via de browser of een mobiele app.  Op Teletekst pagina 101 krijg je in één oogopslag en in 9 regels het laatste binnen- en buitenlandse nieuws te zien.

Teletekstmachine

Ik wilde het laatste nieuws nog sneller zien, zonder zelfs een browser of app te starten, of Google Assistent lastig te vallen. Een onlangs aangeschaft e-paper display van Waveshare bracht mij daarom op het idee van een klein schermpje dat gekoppeld aan een Pi Zero W aan de rand van de monitor wordt bevestigd. Je kunt er natuurlijk ook voor kiezen om het aan de spiegel in de badkamer te monteren. De e-paper heeft geen backlight en straalt dus geen hinderlijk licht uit. Bovendien is hij erg zuinig,  want hij verbruikt alleen stroom voor het verversen van de scherminhoud.

Teletekst_101_epaper

Met een Pi Zero W, een Waveshare e-ink display en wat simpele code blijf je altijd op de hoogte van het laatste nieuws.

Wat je leert

  • Plan van aanpak maken
  • Tekst uit een website extraheren
  • E-paper display aansturen 

Dit heb je nodig

  • Waveshare 2.13″ E-Ink display HAT for RaspberryPi
  • Raspberry Pi Zero W met GPIO-pinheader gesoldeerd), of een andere Pi
  • Raspbian Stretch

Plan van aanpak

Zoals bij ieder project beginnen we met een plan van aanpak. Wat zijn de benodigde stappen? Dat zijn er vijf.

  • Stap één: de bron van de webpagina downloaden en in een bestand opslaan.
  • Stap twee: de negen regels met nieuwsberichten als kale tekst uit de code van de website vissen en in een bestand opslaan.
  • Stap drie: de inhoud van dit laatste bestand in Python inlezen en in een lijst zetten.
  • Stap vier: de negen regels met de juiste opmaak voor het kleine scherm naar de controller van de e-paper display sturen.
  • Stap vijf: hoe vaak de inhoud van het scherm ververst wordt, bepalen we met de taakplanner cron. Bijvoorbeeld ieder half uur en dan alleen overdag van 0:700 uur tot 23:00 uur.
testopstelling

Het e-paper scherm van Waveshare is met het meegeleverde kabelsetje ook handig naast de Pi te gebruiken.

Aan de slag

Het e-paper scherm van Waveshare is direct op de GPIO-pinnen van een Pi te drukken. Maar je kunt ook het handige meegeleverde kabelsetje gebruiken om het scherm aan te sluiten. Daarmee blijven de ongebruikte GPIO-pinnen vrij voor andere aansluitingen. In dit artikel vind je een tabel met de aansluitingen voor het kabelsetje.

Voor het overzicht en om de code makkelijker te testen, gebruiken we drie aparte scripts. Voor stap een en twee ieder een bash-script (teletekstdownload.sh en teletekstextractie.sh) . Stap drie en vier combineren we in een Python 2-script (teletekst2epaper.py) en voor de rest is er een regeltje in crontab nodig.
De scripts zijn hier te vinden.

Teletekst_app

De Teletekst-app is een van de meest gebruikte apps op mijn telefoon.

Als je de bron van de website van Teletekst pagina 101 bekijkt, staat die vol html en JavaScript-code. Nergens zijn de berichtregels te vinden. Gelukkig bestaat er een andere pagina waar dat wel het geval is, https://teletekst-data.nos.nl/webplus?p=101. Met wget -O is de webpagina snel gedownload naar een bestand (“teletekst.download”).

Het opzoeken en kopiëren van de betreffende nieuwsregels naar het bestand “teletekst.txt” doen we met het programma sed. We hoeven sed alleen maar te laten zoeken  naar de tag <span class=”cyan “> waar iedere nieuwsregel mee begint en de bijbehorende sluittag </span>.

De laatste stappen doen we met Python

Teletekst.txt bevat precies de negen regels kale tekst die we nodig hebben. In het eerste deel van het Python-script teletekst2epaper.py zetten we die regels in een lijst om ze in het tweede deel regel voor regel op te maken voor de display. Het tweede deel is gebaseerd op de demo (main.py) van Waveshare om tekstregels regel op het scherm te zetten.

Omdat de regels te lang zijn voor de korte kant van de display hebben we het beeld een kwart slag gedraaid. Dat doen we door bij het initialiseren van het nieuwe image vertikaal en horizontaal (epd2in13.EPD_HEIGHT, epd2in13.EPD_WIDTH) om te wisselen.

Zoals altijd geldt dat je vrij kunt experimenteren, bijvoorbeeld met een ander font of fontgrootte. Je vind de fonts in /usr/share/fonts/truetype/ .

Tot slot: automatiseren met cron

Als alle scripts naar behoren werken, kun je bijvoorbeeld met de job scheduler cron de boel automatiseren. Maar eerst zetten we de commando’s om de drie scripts te starten bij elkaar in een extra bash-script. We noemen het teletekststart.sh. Vergeet niet om dit net als de andere bash-scripts uitvoerbaar te maken met

sudo chmod +x teletekststart.sh

De bedoeling is dat vanaf 7 uur ’s morgens tot 11 uur ’s avonds op elk heel en op elk half uur de  scherminhoud ververst wordt. Dat kan met twee regels in crontab. Start de editor met crontab -e en voeg onderaan de volgende regels toe:

0 7-23 * * * /home/pi/teletekst/teletekststart.sh
30 7-22 * * * /home/pi/teletekst/teletekststart.sh

Iedere wijziging in crontab wordt na het opslaan meteen actief.

Opmerking: bijzondere tekens gaan de mist in

Accenten op letters in de nieuwsregels, zoals trema’s, verschijnen op de display met hun html-code. Bijvoorbeeld “Californië” verschijnt als “Californi&euml;”. Met wat extra code is dat natuurlijk recht te zetten.

Tip 1: test de afzonderlijke scripts eerst apart

Probeer de afzonderlijke scripts eerst in de juiste volgorde apart uit, je kunt dan aan de output van de commando’s zien of en wat er misging.

Tip 2: Maak een apart cronlog voor dit project aan

Standaard zet cron zijn logmeldingen in het systeemlog  /var/log/syslog. Het is handiger om voor dit project een apart cronlog aan te maken. Zet dat bijvoorbeeld in de directory van het project en noem het teletekst.log. Voeg achter elke regel in crontab die met dit project te maken heeft de volgende instructie toe:

> /home/pi/teletekst/teletekst.log 2>&1

Hiermee wordt alleen de laatste melding in het log bewaard. Wil je alle meldingen bewaren, gebruik dan >> in plaats van > aan het begin van de bovenstaande instructie.

Vervolgens kun je met de handige tool tail de meldingen in het log live volgen. Open een terminal en voer daarin het onderstaande commando uit:

tail -f /home/pi/teletekst/teletekst.log