Kindles hebben fantastische e-inkschermen. Als we erin slagen Python op zo’n toestel te installeren, kunnen we een oude Kindle in een energiezuinig dashboard veranderen! Een oude Kindle is ook aanzienlijk goedkoper dan een nieuwe e-inkmodule die je op een Raspberry Pi kunt aansluiten. Het is dus heel logisch om mijn oude Kindle, die problemen heeft, te hergebruiken. Zelfs nadat ik de batterij verving, gaat hij bij matig gebruik maar 2 à 3 dagen mee. Dat is lang niet genoeg voor reizen waarop hij niet dagelijks kan worden opgeladen. Vroeg of laat koop ik wel een nieuwe e-bookreader, maar ik gooi een verder prima toestel echt niet graag weg. Zeker niet eentje met een geweldig scherm dat nog perfect werkt. Gelukkig vond ik een manier om hem te hergebruiken en dit toestel nieuw leven in te blazen.
Python op de Kindle installeren
Omdat je geen extra software op een standaard-Kindle kunt installeren, moet je hem eerst jailbreaken. Daardoor vervalt je garantie, dus als je dit wilt proberen, doe je dat op eigen risico. Er zijn twee belangrijke manieren:
- Upgrade naar specifieke firmware die gekraakt kan worden en gebruik een softwarematige jailbreak (je huidige versie moet ouder zijn dan de firmware die kan worden gekraakt). Details vind je hier en hier.
- Open de Kindle, soldeer draden aan de seriële poort, maak er via een computer verbinding mee en meld je op het toestel aan om een jailbreak toe te passen. Gebruik deze handleiding als je deze methode wilt proberen.
Voor de jailbreak via de seriële poort heb je naast een soldeerbout en enkele draden ook een USB-naar-serieeladapter nodig. Op Amazon, eBay enzovoort vind je er genoeg, maar zorg dat je model 1,8 V ondersteunt, want dat heeft de Kindle nodig.
Omdat mijn firmwareversie te nieuw was voor de softwarematige jailbreak, begon ik met de jailbreak via de seriële poort/hardware. Nadat ik de Kindle met mijn computer had verbonden, aanvaardde hij het rootwachtwoord niet (mogelijk omdat ik eerder de softwarematige jailbreak had uitgevoerd en die verloor toen ik naar de nieuwste versie bijwerkte in een poging het batterijprobleem op te lossen). Daardoor kon ik mijn toestel ook niet op die manier jailbreaken. Als je echter via de seriële poort met de Kindle verbonden bent en ook een USB-kabel aansluit, kun je hem in herstelmodus opstarten (druk op het juiste moment tijdens het opstarten op Enter) en van daaruit de partitietabel exporteren. De Kindle verschijnt dan als USB-opslagapparaat op je computer. Je kunt eender welk firmwarebestand naar de hoofdmap van de Kindle kopiëren en de installatie vanaf de opdrachtregel forceren, waardoor je de Kindle feitelijk naar een oudere versie terugbrengt. (Je kunt de oude firmware niet vooraf kopiëren, want bij het herstarten van het toestel wordt die verwijderd.) Daarna kun je de softwarematige jailbreak gebruiken.
Zodra je de Kindle met succes hebt gejailbreakt, installeer je KUAL. Dat is een startprogramma waarmee je andere pakketten vanuit een menu kunt openen. Installeer vervolgens de MobileRead Package Installer, ook wel MRPI, die de volgende stap vereenvoudigt. Ten slotte hebben we Python 3.8 nodig, dat je hier vindt. Plaats de binaire bestanden in de juiste map en start MRPI vanuit KUAL om ze te installeren.
Een KUAL-extensie maken
Python is geïnstalleerd en KUAL geeft ons een manier om ons script te starten. Laten we een KUAL-extensie bouwen. Hier
bespreken we alleen de standaardcode; het Python-script voor het dashboard komt in de volgende post aan bod. Hieronder
zie je de bestandsstructuur van onze extensie. De map dashboard moet naar de map extensions op de Kindle worden
gekopieerd.
│ .gitignore
│ README.md
│
└───dashboard
│ config.xml
│ menu.json
│
├───bin
│ run.py
│ start.sh
│ start_once.sh
│
└───cache
Twee bestanden zijn essentieel voor de KUAL-extensie: config.xml en menu.json. Je ziet ze hieronder. Ze spreken
grotendeels voor zich, maar zorg dat de ID in het configuratiebestand overeenkomt met de naam van de map van je
extensie (in dit geval dashboard). In menu.json kun je bepalen waar in het KUAL-menu knoppen komen om je script te
starten (hier staan ze in het hoofdmenu). Omdat het dashboardscript (start.sh) in een oneindige lus terechtkomt en de
Kindle opnieuw moet worden opgestart om het te stoppen, is er voor foutopsporing en tests ook een versie toegevoegd die
maar één lus uitvoert om te testen of alles in orde is (start_once.sh).
run.py is een tijdelijk bestand dat in de volgende post wordt besproken. Dat Python-script haalt online gegevens op
en zet ze om in iets wat we op de Kindle kunnen tonen.
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<extension>
<information>
<name>Dashboard 4DCu.be</name>
<version>0.1</version>
<author>4DCu.be - Sebastian Proost</author>
<id>dashboard</id>
</information>
<menus>
<menu type="json" dynamic="true">menu.json</menu>
</menus>
</extension>
menu.json
{
"items": [
{
"name": "Dashboard 4DCu.be",
"priority": -999,
"exitmenu": false,
"refresh": false,
"status": false,
"action": "./bin/start.sh"
}, {
"name": "Dashboard 4DCu.be (Debug)",
"priority": -998,
"exitmenu": false,
"refresh": false,
"status": false,
"action": "./bin/start_once.sh"
}
]
}
Voor het eigenlijke dashboard staan alle bestanden in de map bin. Daar staat een shellscript, start.sh, dat het
Python-script uitvoert, het systeem in diepe slaap zet en dat herhaalt zodra het weer ontwaakt. Dit script blijft voor
altijd draaien en je moet de Kindle opnieuw opstarten om het te beëindigen. Voor een dashboard is dat prima, maar bij
foutopsporing en tests is het wat vervelend. Daarom is ook start_once.sh toegevoegd, dat het script één keer uitvoert
en vervolgens stopt.
bin/start.sh
#!/bin/sh
cd "$(dirname "$0")"
/usr/sbin/eips -c
/usr/sbin/eips 15 4 'Starting 4DCu.be Dashboard'
while true
do
# Make sure there is enough time to reconnect to the wifi
sleep 30
# Refresh Dashboard
python3 /mnt/base-us/extensions/dashboard/bin/run.py
sleep 5
echo "" > /sys/class/rtc/rtc1/wakealarm
# Following line contains the sleep time in seconds
echo "+3600" > /sys/class/rtc/rtc1/wakealarm
# Following line will put device into deep sleep until the alarm above is triggered
echo mem > /sys/power/state
done
Met deze scripts is alles klaar om aan de Python-code te beginnen die gegevens ophaalt en ze op het scherm toont. Die komt echter in de volgende post aan bod. Voorlopig kun je naar de onderstaande foto kijken, waarop KUAL onze eigen gloednieuwe knoppen toont. Binnenkort zullen die Python-code uitvoeren om voor ons aan de slag te gaan.
Conclusie
Ondanks enkele problemen was het mogelijk om de Kindle Paperwhite 3 te jailbreaken, Python te installeren en er eigen code op uit te voeren. Alles is dus klaar om enkele scripts in elkaar te knutselen die de Kindle echt in een dashboard veranderen. Binnenkort lees je daarover in de volgende post.
Vond je dit artikel interessant? Trakteer me op een koffie