Y peth olaf y gwna i cyn gadael y tŷ yn y bore yw gwirio a yw fy nhrên i’n rhedeg ar amser. Mae ond yn cymryd ychydig eiliadau i agor ap Trafnidiaeth Cymru ar y ffôn, ond gyda Raspberry Pi a sgrin 3.5" yn casglu llwch mewn cornel, ro’n i’n meddwl y byddai’n sbri creu bwrdd ymadawiadau bach y gallwn i daflu llygad arno cyn agor y drws ffrynt.

tl;dr
Creais i ap gwe syml sy’n edrych fel bwrdd ymadawiadau Trafnidiaeth Cymu, a’i redeg ar sgrin 3.5" Raspberry Pi. Gallwch ddod o hyd iddo yma a dewis eich gorsaf, iaith a thema eich hun.
API
Y peth cyntaf roedd angen arna i oedd ffynhonnell data. Defnyddiais i wasanaeth Realtime Trains (RTT) gan ei fod yn rhad ac am ddim, yn cynnwys y data perthnasol, ac yn rhwydd i’w ddefnyddio.
Ro’n i’n gallu cyrchu gwybodaeth ymadawiadau gorsaf Caerdydd Canolog gyda Python drwy ddefnyddio rhywbeth fel hyn:
import requests
from requests.auth import HTTPBasicAuth
basic_auth = HTTPBasicAuth('USER', 'PASS')
response = requests.get("https://api.rtt.io/api/v1/json/search/CDF", auth=basic_auth)
Mae’r ymateb JSON yn cynnwys manylion y 50 ymadawiad byw nesaf, gan gynnwys yr amser a amserlennir ac y disgwylir i’r trên ymadael, sydd fwy neu lai yr hyn ro’n i’n chwilio amdano.
Creu’r ap
Y cam nesaf oedd creu ap gwe i ddangos yr wybodaeth. Penderfynais i ddefnyddio Flask, gan ei fod yn weddol gyfarwydd i fi.
Mae gan yr ap ddau ddiweddbwynt, un ar gyfer yr hafan, sy’n creu’r index.html, a’r llall yn /data sy’n cyrchu, yn golygu ac yn dychwelyd data o API RTT. Mae hyn yn cynnwys dychwelyd ymadawiadau trenau go iawn yn unig (hynny yw, dim gwasanaethau bysus yn lle trenau) lle mae fy nghorsaf yn fan galw, a dychwelyd y deg gwasanaeth nesaf yn unig.
Y diweddbwynt /data sydd hefyd yn gyfrifol am rywfaint o leoleiddio. Ysgrifennais yr ap i ddangos yr wybodaeth yn Gymraeg, fel y cynigir gan Drafnidiaeth Cymru ar eu byrddau ymadawiadau, yn ogystal â’u ap. Does gen i ddim syniad sut maen nhw’n ei wneud e, neu a oes yna API sy’n cynnwys yr wybodaeth sydd angen arna i yn Gymraeg yn barod, felly mae’r ap hwn yn cymryd enwau’r cyrchfannau fel y cânt eu darparu gan RTT, yn chwilio amdanynt mewn rhestr (anghyflawn) o enwau y rhoddais at ei gilydd, ac yn dychwelyd y fersiynau Cymraeg, ble maen nhw’n bodoli. Rhag ofn yr hoffai pobl di-Gymraeg ddefnyddio’r ap, rwy di rhoi’r dewis o ddefnyddio rhyngwyneb Saesneg.
Y ffeil index.html yw lle mae’r ffurfweddu’n digwydd sy’n achosi i’r bwrdd ymadawiadau edrych fel y mae. Mae’r ffeil yn fach, felly cadwais i’r JavaScript a ddefnyddir o fewn yr un ffeil. Mae’r prif ffwythiant yn nôl y data o’r diweddbwynt /data ac yn ei roi i mewn i dabl. Yn wreiddiol, rhoddais i’r CSS o fewn yr un ffeil, ond symudais i e i ffeil ar wahân i hwyluso newid themâu.
Ro’n i am iddo edrych rhywbeth fel byrddau ymadawiadau Trafnidiaeth Cymru. Y prif wahaniaeth yw bod yr ap hwn yn uniaith Gymraeg (neu Saesneg) yn lle’n ddwyieithog. Dyma rai o’r ystyriaethau:
- lliwiau: cefndir du, llinell goch fain ar y brig, pennyn y tabl yn llwyd, a thestun gwyn
- statws: ‘Ar amser’ mewn lliw gwyrdd os yw’r gwasanaeth ar amser, fel arall yr amser hwyr mewn lliw melyn. Byddwn i’n dangos trenau a ganslwyd mewn coch pe tasai’r data ar gael o’r API
- troedyn: yr amser presennol ar y dde ar gefndir coch, a gwybodaeth arall ar y chwith ar gefndir gwyn, wedi eu gwahanu gan logo Trafnidiaeth Cymru
- ffont: rwy’n meddwl bod y byrddau’n defnyddio ffont Cymru Wales Sans (?) felly ffindiais i gopi o hwnna a’i ddefnyddio
I bobl eraill a hoffai ddefnyddio’r ap, yn enwedig pobl sy’n defnyddio gorsafoedd sydd ddim dan reolaeth Tranfidiaeth Cymru, creais i thema fwy cyffredinol.
Dangos yr ap
Roedd hi’n bosib rhedeg yr ap yn uniongyrchol o’r Raspberry Pi wrth gwrs, ond mae gen i weinydd bach gartre ar gyfer y math hwn o bethau, felly penderfynais i redeg yr ap o’r fan honno. Yr unig beth oedd angen i fi ei wneud oedd ychwanegu’r llinell python3 /llwybr/ir/app.py i sgript cychwyn sydd gen i.
Dyma’r sgrin sydd gen i ar gyfer y Raspberry Pi. Fel y mae’r dudalen honno’n awgrymu, mae’n rhwydd gosod y sgrin a’i rhoi ar waith drwy ddefnyddio’r gorchmynion hyn i redeg y sgriptiau sydd eu hangen o’r storfa GitHub LCD-show:
sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show
cd LCD-show/
sudo ./MHS35-show
Ychwanegais i’r pwt bach hwn i ffeil .proffil y defnyddiwr ar y Raspberry Pi er mwyn rhedeg yr ap gan ddefnyddio modd ciosg Chromium. Mae hefyd yn sicrhau ei fod ond yn rhedeg wrth fewngofnodi’n lleol, felly na fydd yn creu copïau dyblyg pan fydda i’n mewngofnodi drwy SSH.
if [ -z "$SSH_CONNECTION" ] ; then
DISPLAY=:0 chromium-browser -kiosk http://192.168.X.X:8443 &
fi
A dyna fwy neu lai bopeth. Yn ogystal â’r Pi, gan redeg yr ap ar fy ngweinydd gartre, galla i lwytho’r ap o unrhyw le, gan gynnwys o fewn tudalen flaen fy ap Home Assistant lle bynnag y bydda i.
Gwnaeth hyn i gyd ond cymryd ychydig o oriau i’w wneud, felly o ystyried y 10 eiliad rwy’n ei arbed bob dydd, bydd fy ymdrech yn wedi talu ffordd mewn llai na dwy flynedd! :-)