Kindle Weather Display

前回は古いキンドル3を洒落た時計にしました。今回は天気情報にチャレンジしてみます。参考したサイトではDarkSkyを使っていたのですが、調べたらどうも終了らしい、ということでOpenWeatherMapを使うことにしました。やってみると意外と大変で、特に摺り合わせ作業が多く検証にとまどりましたが、どうにかできました。次はサーバからどうやって送り込むかという課題のみです。

ホストサーバーはOpenWrtとArmbian(TV-Box)で試してみました。OpenWrtのフラッシュROMは16GB以上必要です。16MBのフラッシュで収まるか難しいところで、パッケージを整理すればなんとか収まりそうです。USBのある32MBの古いルーターがあったのでそれを使いました。OpenWrtの問題はSVG処理ができないため、Kindle側ですることになります。Kindle側では画像処理のプログラムがないので、ChrootのDebian Wheezyを使います。これ以降のバージョンはKindleのカーネルが古いため使えません。Armbianは最新のDebianが動くのでそちらの方がおすすめです。

この天気アプリは先日セットアップした時計プログラムと交互に表示するように調整します。

0,10,15,20,25,30,40,45,50,55 * * * * sh /mnt/us/timelit/timelit.sh
5,35 * * * * sh /mnt/us/weather-kindle/weather-script.sh
56 0,8,16 * * * sh /mnt/us/weather-kindle/update_time.sh

ホスト側のcron設定例

/etc/cron.d/weather-kindle
0,15,30,45 * * * * root sh -c "/var/lib/weather-kindle-host/weather-kindle.sh"

Kindleとホスト間はP2PのUSBnetで繋げてセキュリティ上問題がある古いキンドルのパケットが外に流れないようにファイヤーウォールを導入します。その際、時間の調整が必要になるのでホスト側にntpサーバをインストールしてKindleからアクセスできるようにしてntpdateで時間を定期的にアップデートします。Kindleのntpdateはどうも相性が悪いらしくアップデートしてくれないので、Debianのntpdateを使っています。

Source

参考

  • https://gitlab.com/iero/Kindle-weather-station/-/tree/master/

KINDLE 3: 時計、Timelitをインストールする

Timelitというプログラムがなかなか良さそうなのでインストールしました。最初起動に失敗したので、ファームウェアのアップデートを行ったところ、以前のkindle 3 hackの非公式のプログラムは起動できなくなったようです。代わりにこのtimelitプログラムが起動できるようになりました。ショートカットはShift+cです。

古いキンドルを引っ張り出してきたのはE-inkを何かに使えないか調べてみるためでした。オープンソースでGPUにアクセスできないため、これは無理だという結論になったのですが、有効利用できるか調べたところ、Tlimelitというプログラムに出会ったというわけです。

このプログラムはimagesのフォルダーにある画像を1分刻みで更新するプログラムなので、応用すれば使えそうだなという気がしますが、なかなか粋なプログラムなのでしばらく使ってみることにしました。

日本時間のタイムゾーンの変更は参考サイトを参照して、TZ=GMT-9に変更します。/etc/rtcrontab/rootを変更して1分刻みで更新するように設定します。

サイトでは1分おきになってますが、好みで1分おきだと気になってしょうがないので5分おきに変えて使っています。cronは起動スクリプトに難ありで起動はできるが止めることができません。killコマンドでプロセスと止めます。

*/5 * * * * sh /mnt/us/timelit/timelit.sh

ちなみにspiインターフェースのE-inkがアマゾンで売られており、これならばルーターやOPiにつなげて使えそうですが、小さい画面でも値段が高いですね。これは今後どうするか検討してみたいと思います。

時間が数分ずれているので調整してみました。相性の関係かwifiは切れるので古いルーター、おそらく802.11bなのかも知れません。それなのでwifi は諦めてusbnetで接続します。

ホスト側 (IP: 192.168.2.1/24)

sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward
iptables -P FORWARD ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.2.0/24

KIndle 3 (IP: 192.168.2.2/24)

ip route add default via 192.168.2.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
ntpdate ntp.nict.jp
19 Aug 07:23:36 ntpdate[12585]: step time server 133.243.238.164 offset 165.691015 sec

参考

  • Literary Clock Made From E-reader : https://www.instructables.com/id/Literary-Clock-Made-From-E-reader/