博客:https://www.mintimate.cn
Mintimate’s Blog,只为与你分享
现在万物讲究互联,前段时间介绍了智能泡面板 Kindle越狱和树莓派安装Home Assistant。这次,我们就教大家怎么把两者有机结合,实现:
- Kindle的锁屏替换为Home Assistant的监控面板,并定期刷新(KPW4及以上,可能要按电源键或把智能盖板唤醒,否则会触发Kindle省电机制而断开Wi-Fi;不过,也可以Kindle一直接通电源,接通电源情况下,锁屏不会触发省电机制)。
- Home Assistant内可以查看到Kindle的剩余电量(KPW4及以上,同上)。
文章前提
前提很简单,正如上文所说,我们需要:
- 已经越狱的Kindle:越狱的Kindle,其实就是获得了root用户的Linux,因为Kindle被来就是嵌入式Linux设备。
- 已经有Home Assistant:如果你有树莓派,可以参考:详解树莓派上如何安装Home Assistant Supervised,让家里的智能设备更智能
注意⚠️:KPW4及其以上版本Kindle,因为锁屏后会自动断开Wi-Fi,且因为固件原因,无法重新开启直到用户按电源键;所以自动定期申报数据,在KPW4以后,需要用户手动点亮屏幕才会进行一次申报(主要是,我不知道Kindle的Wake Up指令是什么……),或者~你可以把Kindle一直接通电源进行通电~~这样就不会触发休眠断Wi-Fi的机制。
实现效果
使用效果很简单,举个例子:我们的Home Assistant的监控面板:
我们之后,把页面截图并锐度后,可以得到这样的黑白图片:
最后,把它推送到Kindle上,应用为锁屏壁纸即可:
注意:这个是锁屏壁纸,不是Kindle内置浏览器。
配合Home Assistant的内置Webhook钩子(类似于Git的hook),可以实现Kindle的电量追踪:
充电时Kindle不会出发睡眠断网,可以用于跟踪电量?:
芜湖,充电充电还是挺快的⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄
准备工具
准备的工具很简单,除去基础的Kindle越狱和Home Assistant需求外,我们还需要用到的插件:
- Kindle插件Kual:用于管理插件
- Kindle插件MR Package Installer:用于安装插件
- Kindle插件ScreenSavers Hack:用于更改Kindle壁纸
- Kindle插件Online Screensaver:用于加载并下载Web Kindle图片作为ScreenSavers Hack的 壁纸。
以上工具,下载地址:
- Kindle插件下载汇总
- Online Screensaver
另外的工具有:
- Docker容器hass-lovelace-kindle-screensaver:用于部署一个nodejs服务,定期把HA的控制面板转为灰度Kindle图片(用作壁纸)。
以上Docker容器地址:
- hass-lovelace-kindle-screensaver(Docker)
- hass-lovelace-kindle-screensaver(Github)
HA内设置
为了后续操作方便,我们先完成Home Assistant内的操作:
- 创建辅助实体类:我们需要创建辅助实体类,用于后期Webhook接收参数(Kindle电量和Kindle充电状态)
- 创建长期Token:我们创建一个长期Token(十年有效期),用于Docker容器免密、远程登录。
创建长期Token
我们进入Home Assistant图形化界面,即可创建一个Token令牌:
令牌应该是这样的:
需要注意⚠️:令牌内容只会显示一次,建议保存到记事本或者在忘记后,删除旧的并重新创建。
辅助类实体
之后,我们需要创建辅助类实体,很简单,在configuration.yaml
内追加配置文件,我这里为了方便管理,采用多文件模式:
分别创建一个input_boolean
和input_number
类型,方便后续接收参数:
input_boolean.yaml:
代码语言:yaml复制kindle_battery_charging:
name: Kindle Battery Charging
icon: mdi:book-check-outline
input_number.yaml:
代码语言:yaml复制kindle_battery_level:
icon: mdi:currency-usd
name: Kindle Battery Level
min: 1
max: 100
step: 0.1
之后,重启Home Assistant即可,这些辅助实体我们下文用到。
创建webhook
之后,为了用到我们上文创建的辅助实体类,并给后文提供一个webhook地址,我们添加一个自动化模版:一键添加自动化模版
之后,使用模版创建自动化:
这个时候,就可以选择上文的辅助实体了:
需要注意,这里我创建这个脚本(webhook)叫KindleAuto
,这个可以自定义,但是后文也要同步更改。
锁屏壁纸渲染
前文说了,我们需要安装ScreenSavers Hack
插件,安装方法相信大家都懂,如果还是不会……可以看看书伴上的教程。
在安装好后,我们需要注意,我们最好只放一张图片:
注意⚠️:这张图片内容后续会被
OnlineScreensaver
覆盖
这个章节,主要介绍Docker容器配置。
Docker容器
本来,我想自己写一个Kindle壁纸生成的,但是发现大佬已经写好了:
- https://github.com/sibbl/hass-lovelace-kindle-screensaver
我的树莓派上有Docker环境,所以我直接在树莓派上拉去Docker容器:
代码语言:shell复制docker pull sibbl/hass-lovelace-kindle-screensaver
容器启动参数
根据稳定介绍:https://github.com/sibbl/hass-lovelace-kindle-screensaver#usage
我们在启动Docker过程中需要设置环境变量,我推荐的环境变量参数:
HA_BASE_UR
L='http://192.168.2.153:8123'RENDERING_TIMEOUT
=30000RENDERING_DELAY
=5000HA_BATTERY_WEBHOOK
=KindleAutoRENDERING_SCREEN_WIDTH
=1150RENDERING_SCREEN_HEIGHT
=1450HA_SCREENSHOT_URL
='/lovelace/info?kiosk'HA_ACCESS_TOKEN
='eyJ0eXAi*O6JdOXtQe5co'LANGUAGE
="en"TZ
=Asia/Shanghai
其中,HA_BASE_URL
为Home Assistant地址;RENDERING_TIMEOUT
为Docker获取Home Assistant数据超时时间,这里设置30s;LANGUAGE
为设置语言为英文(不要设置为中文~没有中文字库);TZ
为时区;HA_BATTERY_WEBHOOK
为Webhook名,上文设置;RENDERING_SCREEN_WIDTH
设置图片宽度;RENDERING_SCREEN_HEIGHT
设置图片高度;HA_ACCESS_TOKEN
上文Home Assistant设置的Token。
HA_SCREENSHOT_URL
就是我们需要在Kindle锁屏显示的
面板,比如:
后续加上?kiosk
的get请求,其实是Home Assistant前端插件:https://github.com/maykar/kiosk-mode,可以凭借这个插件隐藏侧栏:
所以,最后我创建Docker容器:
代码语言:shell复制docker run -d -e HA_BASE_URL='http://192.168.2.153:8123' -e RENDERING_TIMEOUT=30000 -e LANGUAGE="en" -e LANG="zh_CN.UTF-8" -e TZ=Asia/Shanghai -e RENDERING_DELAY=5000 -e HA_BATTERY_WEBHOOK=KindleAuto -e RENDERING_SCREEN_WIDTH=1150 -e RENDERING_SCREEN_HEIGHT=1450 -e HA_SCREENSHOT_URL='/lovelace/info?kiosk' -e HA_ACCESS_TOKEN='eyJ******5co' -p:5000:5000 sibbl/hass-lovelace-kindle-screensaver
如果没什么问题,就可以浏览器访问到了:
接下来,我们可以回到Kindle上,继续后续配置。
如果小伙伴们不了解Docker容器,以后有机会专门出一次文章,给大家详解Docker(*☻-☻*)
OnlineScreensaver插件
前文已经说了,需要安装Online Screensaver扩展,最后结果应该是这样的:
这个插件已经很久没有更新了,在新的Kindle系统版本上,需要修复权限。
修补权限
修复权限很简单,在Online Screensaver
内:
我们需要修改enable.sh,、disable.sh、update.sh和schedule.sh文件内的:
代码语言:shell复制source config.sh
source utils.sh
为完整绝对路径:
代码语言:shell复制source /mnt/us/extensions/onlinescreensaver/bin/config.sh
source /mnt/us/extensions/onlinescreensaver/bin/utils.sh
并把utils.sh
内的:
wait_for ()
方法,整个改为:
代码语言:shell复制wait_for () {
ENDWAIT=$(( $(currentTime) $1 ))
REMAININGWAITTIME=$(( $ENDWAIT - $(currentTime) ))
logger "Starting to wait for timeout to expire: $1"
# wait for timeout to expire
while [ $REMAININGWAITTIME -gt 0 ]; do
EVENT=$(lipc-wait-event -s $1 com.lab126.powerd readyToSuspend,wakeupFromSuspend,resuming)
REMAININGWAITTIME=$(( $ENDWAIT - $(currentTime) ))
logger "Received event: $EVENT"
case "$EVENT" in
readyToSuspend*)
set_rtc_wakeup $REMAININGWAITTIME
;;
wakeupFromSuspend*|resuming*)
logger "Finishing the wait"
break
;;
*)
logger "Ignored event: $EVENT"
;;
esac
done
logger "Wait finished"
}
之后,就可以正常使用了。
配置服务
之后,打开config.sh
,我们根据提示进行配置,比如我的:
需要注意:
IMAGE_URI
:我们上文配置的Docker容器地址(5000端口)LOGFILE
:日志文件输出
成功运行
最后,重启Kindle:
即可应用所有配置。不出意外就可以看到效果了:
当然,你也可以在KUAL内手动更新:
当然,如果有问题,可以查看日志:
正如我前文说的,KPW4在睡眠后(不接通电源情况下)会自动关闭Wi-Fi。
也就是,我们需要把Kindle唤醒(按电源键),之后等Kindle连接上Wi-Fi后,壁纸才会更新。
其实Kindle本质是Linux,是可以手动写脚本定期打开Wi-Fi和我们Docker容器上的Web进行通信的,但是这个我不会写,就交给大家来了~~