Kindle čtvrtý

Kindle čtvrtý


Čt 14 září 2023
kindle, jailbreak, kalendar, rozvrh, pocasi, eink

Eink displeje se mi líbí. Moc. Dobře se z nich čte a co se na ně vykreslí, zůstane zobrazené navěky. I bez baterky. Jenom ta cena...

A pak mi to došlo -- proč pořizovat další krám, když se mi někde ve skříňce povaluje heblo, které má všechno co potřebuju: displej, procesor, wifi, baterku, vyřešené nabíjení. Jen přijít na to jak si ho ochočit.

Mňo, a i to se nakonec po několika dnech pokusů a omylů povedlo:

Kindle nám teď slouží jako takový lepší kalendář

Kindle čtvrtý, kterému jsme profoukli střeva a naučili ho zobrazovat datum, předpověď počasí, rozvrh, kroužky, obědy...

A dokázal by i víc. Poď, ukážem si jak.

Co budete potřebovat

  1. Kindle, přesněji jailbreaknutý Kindle. Zjistěte si jaký model čtečky a firmware máte, a začněte Googlit. V mém případě (Kindle 4, firmware někde mezi 4.0.0 a 4.1.4) fungoval postup ze stránky Kindle4NTHacking.
  2. SSH přístup dovnitř čtečky (klíčové slovo je USBNet). Díky tomu pak jde do Kindlu nahrát extra software a ovládat jej alternativním způsobem, jako třeba...
  3. ...jako třeba krz kindle-dash. Ten v pravidelných intervalech stahuje obrázek ze zadané URL, zobrazí ho na displeji a zas usne. Izy-pizy, dalšího třeba nic.
  4. Onen obrázek. Tutok záleží co se chystáte s Kindlem podniknout. Můžete si klidně vystačit s pár statickýma souborama, ale jestli plánujete zobrazovat informace které se často mění (datum, počasí), budete muset obrázek generovat dynamicky...
  5. ...například s pomocí webové aplikace! Není to sice úplně přímočaré řešení, ale funguje skvěle. Tedy: vygeneruje HTML stránku s požadovanými informacemi a tu pak s pomocí nástroje Playwright převedete na Onen obrázek z bodu (4).
  6. Playwright je framework pro testování webových aplikací, který se ale dá krásně využít pro náš záměr: dokáže spustit headless prohlížeč (tedy prohlížeč který jede někde bokem, schovaný tak, že ho nikdy neuvidíte), navštívit s ním URL (třeba tu s vaší webovou aplikací) a udělat z ní screenshot onen obrázek.

A kruh se uzavřel.

Stejně si to ale pro jistotu prosfištíme ještě jednou:

  1. Sežeňte si Kindla, jailbreakněte ho a prdněte dovnitř kindle-dash.
  2. Vyrobte si obrázek, který chcete na čtečce vídat a vystavte ho na na server.

No a teď je čas rozebrat ty malé ďáblíky...

Jailbreak

Opravdu stačí pročíst informace o jailbreaku a postupovat přesně podle návodu. Zasekl jsem se pouze v momentě, kdy se musí aktivovat SSH přístup:

  1. Neznal jsem IP adresu Kindla
    V Settings menu Kindla je uvedena MAC adresa, podle ní jsem pak IP dohledal v routeru
  2. Špatně jsem pochopil aktivaci SSH
    Je třeba zmáčknout fyzické tlačítko s ikonou klávesnice nalevo od kurzorových tlačítek a napsat ;debugOn (nezapomeňte to potvrdit symbolem ⮐), a hned potom druhé heslo ~usbNetwork (a zase potvrdit ⮐).
  3. HESLO!? Po přihlášení ssh root@<ip-adresa> na vás vybafne obligátní prompt pro zadání hesla. Mňo, a to může být všelijaké. Naštěstí i tohle je zdokumentováno. Fungoval mi Amazon Kindle root password tool, zadáte seriové číslo a dostanete heslo.

kindle-dash

Ze začátku mi to přišlo trochu voodoo. Možná i kvůli tomu, že se mi v této fázi povedlo Kindle bricknout (aka pokazit, bo jsem nepostupoval přesně podle návodu, neasi).

Po rozkoukání ale zjistíte, že je to krásně přímočaré řešení:

Hotovo.

Divné, že?

Pořád jsem žil s představou, že bude třeba vložit do Kindlu (či ESP-32 v případě že realizujete vlastní e-ink DIY projekt) mnohem víc processingu, ale tohle fakt stačí. Obrázek, stáhnout, vykreslit, usnout. A furt dokola...

Webová aplikace

V tomto bodě se přímočarost začne vytrácet. Hodně záleží na tom jak chcete Kindle využívat a co umíte.

Pokud si například na displeji chcete zobrazit rodinnou fotku, stačí ji převést do odstínů šedi v rozlišení 800×600 pixelů, vystavit na internet a nasměrovat na něj skript fetch-dashboard.sh.

Pokud byste chtěli zobrazovat něco dynamičtějšího, například školní rozvrh, připravte si pět souborů: co obrázek, to pracovní den týdne. Ty vystavíte na server a s pomocí skriptu na cronu (aparát pro pravidelné spouštění skriptu v definovaný čas) budete kopírovat, přejmenovávat či symlinkovat na ten z nich, který reprezentuje rozvrh pro daný den (a skript fetch-dashboard.sh uvnitř Kindlu o tom ani nebude vědět, z jeho pohledu jde stále o stejný soubor).

Varianta, kterou jsem použil ve své realizaci používá jednoduchou webovou aplikaci. Tj. program, který si zjistí aktuální den a podle něj vykreslí do HTML stránky potřebné informace. Část z nich má v sobě zadefinované staticky (rozvrh, svátky), část získává z jiných zdrojů na internetu (počasí, obědy). Výhodou je, tedy alespoň pro mě, že realizovat podobný výstup je poměrně přímočará činnost, která se dá do poslední chvíle vyvíjet na běžném počítači s prohlížečem. Tj. žádné kompilace kódu, nahrávání do zařízení, složité tunění interpretace na displeji. Pokud se rozhodnete pro tuto cestu, mám zde pár tipů:

  • Generujete HTML stránku pro konkrétní displej se známým rozlišením. Není třeba se trápit responzibilitou, čistotou HTML kódu, apod. Má verze je naprasená v tabulce (tak jak se to dělalo před 20 lety) a atributy style jsem rozdával po hrstech.
  • Můžete narazit na to, že headless browsery v Playwright nebudou mít u sebe stejné fonty jako váš počítač. Je proto lepší vložit explicitně do stránky link na některé volně dostupné webové písmo.
  • Do pravého horního rohu jsem doplnil informaci o čase, ve kterém se obrázek vygeneroval. Hodí se to pro debugování, protože z obrázku je někdy složité poznat, jestli se aktualizoval nebo ne.

Existuje také možnost, že vlastní webovou aplikaci potřebovat nebudete, protože už nějakou hotovou používáte. Tohle byl ostatně i můj původní plán -- chtěl jsem na Kindle dostat otisky obrazovek z Home Assistenta (aplikace pro ovládání chytrých domácností, do které si ale můžete zakomponovat podobné údaje jaké jsou na obrázcích okolo, tj. rozvrh, obědy, datum, počasí..). Problém s HA byl ale v tom, že se velmi špatně ladí vizuální podoba. Jednotlivé widgety nevyužívají prostor efektivně. Buď se toho na obrazovku vleze málo, anebo to nejde přečíst. Navíc eink se pro některý typ informací vůbec nehodí (typicky okamžitý výkon fotovoltaických panelů).

Do rozlišení 800x600 (vlevo) px se toho moc nevleze. Dvojnásobné a následně zmenšené má zas problém s čitelností, všecko je až moc prťavé.

Zkrátka -- dobře si rozmyslete, co na displeji chcete vidět a jestli to v kontextu "pomalého" displeje vůbec dává smysl.

Logika aplikace

Pár slov o tom co a proč na displeji zobrazujem.

  • Tak především datum, že jo, přes to nejede vlak. Přičemž za nejdůležitější část zde považujem den týdne, vše ostatní je šum.
  • Počasí. Každodenní rituál. Vzít si deštník? Mikinu? Čepicu? Seniornější část rodiny spíš než vizáž řeší, jestli napojit bečky s vodou na svod, nebo jestli se dneska stihne ohřát voda slunkem.
  • Rozvrh. Hodí se jak děckům tak i nám. A jelikož jsme šikovní, poradili jsme si i zákeřnostmi českého školství v podobě různých předmětů pro konkrétní den v závislosti na tom, jestli je sudý nebo lichý týden. Proboha, KDO si může pamatovat jaký je týden?!
  • Týdení rytmus ale školou nekončí, odpoledne probíhají kroužky. Nám doma trvá vždycky minimálně 2 měsíce, než si na nové rozložení zvyknem. Díky kalendáři se nám už nikdy nestane, že odešlem dítě s kytarou na hodinu pozounu. Nikdy!
    Bo na Kindlu už moc místa nezbývá, zobrazujem kroužky do stejné tabulky jako rozvrh. Ono to má i podobnou skladbu, od-do a co.
  • Oběd, nejzářnější část dne. Byla by škoda tuhle informaci na displeji nemít. Dvojnásob, pokud má vaše ratolest dietu a můžete se na podrážděné a vyhladovělé božátko předem připravit.
  • No a zbývají nám už jen povinnosti. Je jednoduché se domluvit co se který den má dít, složitější je si to zapamatovat. A oni nám to nepřipomenou, to je zichr.

Stav displeje v podvečer, sloupce s rozvrhem a obědem už informují o zítřku.

O víkendech a svátcích vše od počasí níž nahrazujem náhodným stripem z XKCD, bo i ty jazyky a intelekt je třeba šlechtit.

Ještě drobná poznámka k rozvrhu a obědům -- po 19 hodině vykreslujem zítřejší údaje.

Playwright

Posledním dílkem skládačky je Playwright, tedy aparát pro vytvoření otisku obrazovky z prohlížeče.

Spouštím ho přes Docker:

docker run --rm -v $DIR:/app -w /app \
  mcr.microsoft.com/playwright:v1.37.1-jammy \
  npx playwright test kalendar.spec.ts

Přičemž ve stejném adresáři musí být uložen soubor kalendar.spec.ts:

import { test, expect } from '@playwright/test';

test.use({
  viewport: { width: 600, height: 800 },
  locale: 'cs-CZ',
});

test('otisk', async ({ page }) => {
  await page.goto('http://<adresa-vasi-webove-aplikace>');
  await page.waitForTimeout(3000);
  await page.screenshot({ path: '/app/dash.png'});
});

Krátce po spuštění se v adresáři objeví obrázek dash.png s otiskem webové stránky, který ale ještě budete muset převést do odstínů šedi (třeba s pomocí pngcrush):

pngcrush -c 0 dash.png dash-grayscale.png

Kód výše asi není třeba moc komentovat, snad jen proč je tam to třísekundové čekání. No, to je proto, aby se stránka stihla vykreslit fontem, na který je reference v HTML hlavičce. Konkrétní hodnotu je třeba sofistikovaně doladit metodou pokus-omyl.

Je to krásné, ale...

Vždycky je nějaké ale.

Takto upravený Kindle už k ničemu jinému nevyužijete (třeba na, éééééé, čtení knížek?). Když ho zapnete power tlačítkem, chvilku to bude vypadat že se nic neděje a pak zas usne. Tj. bude dělat přesně to, co jsme ho naučili.

Pokud byste se rádi z nekonečného cyklu probouzení, aktualizace obrázku a usínání chtěli vymanit, postupujte následovně:

  • Zapněte Kindle tlačítkem
  • Okamžitě se na něj přihlaste přes ssh root@<ip-adresa-kindlu>
  • Spusťte /mnt/us/dashboard/stop.sh

Je to trošku Mission Impossible (máte na to 10 sekund, přesně), ale po krátkém tréninku a salvě vulgarit se to zvládnout dá. V tuhle chvíli Kindle přestane usínat a máte čas vevnitř překutat co potřebujete. Zpět do smyčky jej vrátíte spuštěním /mnt/us/dashboard/start.sh.

Může se vám stát, že Kindle úplně "umrtvíte" (nebude reagovat na tlačítka, SSHčkem se dovnitř nedostanete). Mě se to povedlo špatným uploadem souborů z kindle-dash. Naštěstí stačilo dlouho podržet power tlačítko (minutu, možná trochu dýl).

Poslední tip: v issues je popsán postup, jak Kindle vrátit úplně zpět, do role čtečky.

A to je vše

Nezapomeňte se pochlubit, pokud se vám povede starší Kindle nějak kreativně využít. Na Twitteru (X) vás za to budou mít rádi.

Tkalci na webu

Tkalci jsou skupinou lidí z okolí Valašského Meziříčí, kteří se od roku 2013 pravidelně schází v prostorech Schlattauerovy kavárny. Během schůzek se prostřednictvím přednášek dozvídáme o novinkách a postupech z prostředí webových technologií.

Sponzoři

Pokud nás chcete podpořit, ozvěte se.

Děkujeme!

Zůstaňme v kontaktu