折腾日记:废物利用改造kindle为天气预报日历

2024-06-10 05:12

本文主要是介绍折腾日记:废物利用改造kindle为天气预报日历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人博客地址
很早之前购买了kindle用来看电纸书,后面也逐渐吃灰了,尤其当去年kndle电子书店停止服务后,就一直没充过电了,中途有段时间想着,当时买的时候还挺贵,不能这么浪费了,给它充满电后,用数据线接上电脑,发现它竟然无法连接电脑了,哎,真的是鸡肋了,吐槽归吐,一直考虑怎么利用这块墨水屏,于是,想到了用kindle做个天气预报日历。也算是废物利用了
大致思路就是在内网服务器上部署一个静态网页,定时刷新网页上的时间和天气,然后通过kindle内置浏览器访问,需要完成以下几个步骤进行改造

  1. 调整kindle不锁屏
  2. 部署内网服务器静态页面
  3. 调整nginx代理,可以访问到静态页面

调整kindle不锁屏

在百度都是使用~ds指令进行操作,但是在kindle更新系统之后,这个指令已经作废了,
目前,可以成功的方法,只能在kindle接上电脑后,在目录中添加一个TESTD_PREVENT_SCREENSAVER文件,这里就遇到了一个问题,kindle的比较认数据线,家里所有microusb只能充电,无法连接电脑,只能PDD购买一根"原厂数据线"
连上电脑以后,以Mac为例,终端访问到kindle的根目录,新建文件

cd /Volumes/Kindletouch TESTD_PREVENT_SCREENSAVER

重启kindle后,就实现了默认不锁屏的效果

部署服务

然后要在服务器部署静态页面了,这里是使用了网上的开源方案
https://github.com/0111/Kindle_WeatherCN
他的实现效果是这样的

Pasted image 20240512230140

但是,在部署到服务器之前,需要调整几个地方,一个是config.js 文件

var api_locParams = "Hangzhou";var api_appId = "******";

api_locParams设置为自己所在城市的拼音,或者设置配置界面的经纬度,同时,调整config.html中默认显示城市

<label>输入城市: <br /><input type="text" name="city" id="city" value="Hangzhou" /></label>

api_appId可以调整为自己申请的openweathermapappId

OpenWeatherMap是一个提供天气数据的开放式API服务。

Pasted image 20240512231000
当然,也可以使用这个作者提供的,但是免费有调用限制,建议还是自己申请一个
除此之外,还有点细节需要调整,比如,我调整index.html的城市名称

city.innerHTML ="Hangzhou" === data.name ?"杭州" : data.name;

当然这些调整都可以在部署服务器后,在/config.html自己设置,这里只是个人习惯,默认设置还是改为自己需要的

Pasted image 20240512232113

然后部署到服务器后,处理好代理后,我尝试访问页面时,电脑可以正常显示,但是kindle浏览器报错,奔溃掉,于是解决一下冲突问题。这个原因应该是我的kindle比较老了,字体不支持
Pasted image 20240512231555

于是删除掉了css/font/DS-DIGIB.ttf目录下的字体,然后,就访问正常了

Pasted image 20240512231714

样式调整

除了字体外,样式也是有点不太对,不同的设备因为分辨率的问题,需要自己进行微调,贴上自己的kindle的样式,在css/kindle.css,进行调整

/* @font-face {font-family: electronicFont;src: url(./font/DS-DIGIB.ttf)
}*/html,
body {height: 100%;margin: 0;padding: 0;font-family: Arial, Helvetica, sans-serif;font-size: 0;
}a {color: #000000;background: #ffffff;
}.night a {color: #ffffff;background: #000000;
}html.night {color: #ffffff;background: #000000;
}#cleaner {position: absolute;top: 0;right: 0;bottom: 0;left: 0;display: none;
}#page {position: relative;height: 100%;overflow: hidden;
}#city {font-size: 50px;font-size: 7rem;position: absolute;top: 1.5%;right: 3%;text-decoration: none;text-align: right;
}#temp {font-size: 200px;font-size: 15rem;display: inline-block;font-weight: bolder;text-align: center;font-family: electronicFont;
}.tempWrapper {position: absolute;right: 3%;top: 10%;
}#lastUpdate {position: relative;top: 25%;left: 0%;font-size: 50px;font-size: 30rem;font-weight: bolder;text-align: center;font-family: electronicFont;
}#description {position: absolute;left: 32%;top: 2%;font-size: 50px;font-size: 7rem;font-weight: bolder;text-align: left;
}#icon {font-size: 100px;font-size: 20rem;
}#iconWrapper {position: absolute;left: 3%;top: 3%;
}.forecast {position: absolute;width: 100%;bottom: 10%;left: 0;border-top: 5px solid black;border-bottom: 1px solid black;height: 39%;
}.night .forecast {border-color: #ffffff;
}.col {width: 24.5%;border-right: 1px solid black;float: left;text-align: center;height: 100%;overflow: hidden;
}.night .col {border-color: #ffffff;
}.col:last-child {border-right: none;
}#date {position: absolute;bottom: 46%;left: 3.3%;font-size: 50px;font-size: 7rem;}#sun {position: absolute;bottom: 3%;left: 3%;font-size: 30px;font-size: 4.9rem;font-weight: bolder;
}.forecastIconWrapper {position: relative;top: 5%;left: 5%;font-size: 100px;font-size: 14.2rem;
}.colTemp {position: relative;top: 8%;font-size: 50px;font-size: 8rem;font-weight: bolder;
}.colTime {position: relative;font-size: 35px;font-size: 5rem;margin-top: 5%;top: 1%;
}.colDesc {font-size: 20px;font-size: 4rem;position: relative;bottom: -10%;
}.portrait .col:nth-last-child(2) {border-right: none;
}.portrait .col5 {display: none;
}.landscape #city {font-size: 35.4px;font-size: 7rem;
}.landscape #temp {font-size: 141.7px;font-size: 28rem;font-weight: bolder;text-align: center;
}.landscape #lastUpdate {font-size: 141.7px;font-size: 24rem;
}.landscape #description {font-size: 35.4px;font-size: 6rem;
}.landscape #icon {font-size: 100px;font-size: 25rem;
}.landscape #date {font-size: 35.4px;font-size: 7rem;
}.landscape #sun {font-size: 24px;font-size: 4rem;
}.landscape .forecastIconWrapper {font-size: 71.9px;font-size: 14.2rem;
}.landscape .colTemp {font-size: 35.9px;font-size: 7.1rem;
}.landscape .colTime {font-size: 25.3px;font-size: 5rem;
}.landscape .colDesc {font-size: 14.2px;font-size: 2.8rem;
}.landscape .col {width: 19.5%;
}

调整nginx代理

这个步骤应该在上传静态文件到服务器后就可以操作了,由于在家是自己建的dns服务器,可以在内网使用二级域名进行访问内网服务器,配置文件中使用了域名代理代替了ip地址,

server{listen 80;server_name weather.home.kura.ren;location /{ root    /usr/share/nginx/html/weather;index  index.html index.htm;} }

后续就可以在浏览器进行访问,这里提一下,docker部署的nginx需要把静态html目录映射到容器,才能正常访问到,不然就会404

Pasted image 20240512233324

后续更新

当这些都处理好,以后,就可以在kindle上查看天气了,电量还是一个问题,目前看需要三天冲一次电,为了一劳永逸,最后在网上购买的无线充电,贴kindle后面,配合无线充电底座充当支架,就既可以解决电量的问题,也可以解决摆放问题
最后贴一张效果图
Pasted image 20240515233703

这篇关于折腾日记:废物利用改造kindle为天气预报日历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047303

相关文章

研1日记5

x = torch.tensor(x),numpy 转tensor 三维矩阵相加 screen -S pid 进入之前创建好的screen transpose()只能一次操作两个维度;permute()可以一次操作多维数据,且必须传入所有维度数, transpose()中的dim没有数的大小区分;permute()中的dim有数的大小区分 PyTorch 两大转置函数 trans

python网络爬虫(五)——爬取天气预报

1.注册高德天气key   点击高德天气,然后按照开发者文档完成key注册;作为爬虫练习项目之一。从高德地图json数据接口获取天气,可以获取某省的所有城市天气,高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://restapi.amap.com/v3/weather/weatherInfo?parameters,若要获取某城市的天气推荐 2.安装MongoDB

【项目日记】高并发内存池---细节优化及性能测试

终此一生,只有两种办法: 要么梦见生活,要么落实生活。 --- 勒内・夏尔 --- 高并发内存池---细节优化及性能测试 1 细节优化1.1 大块内存的申请处理1.2 配合定长池脱离使用new1.3 释放对象无需内存大小 2 调试Debug3 性能测试4 项目总结 1 细节优化 在前面的文章中我们已经实现了高并发内存池的申请内存逻辑和释放内存逻辑:

git svn 日记

1. git log -p -1 --name-only 该命令用于查看最新的一次提交记录的详细信息,包括文件更改情况。 git log:显示 Git 仓库的提交历史。-p:显示每次提交的差异 (diff),也就是文件内容的修改部分。-1:表示只显示最近的一次提交。--name-only:只显示被修改的文件名,而不显示详细的差异内容。 总结:该命令会输出最近一次提交的日志,显示提交的差异内容

改造了一个流量阈值自动关机的脚本

改造后的脚本地址:https://raw.githubusercontent.com/BiuBIu-Ka/traffic_monitor/main/main.sh 优化的问题: 优化脚本运行多次会一直叠加流量的问题优化服务器重启后流量记录值清空的问题增加一个小日志系统 wget https://raw.githubusercontent.com/BiuBIu-Ka/traffic_monit

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc

今麦郎「日记薪·1号发」 即时反馈,激活10000+名基层员工

本文内容整理自红海云CEO孙伟对今麦郎集团人力资源总经理王高峰、IT管理中心副总经理邹大勇的访谈。 坚持创新求变的品牌基因 过去30年,中国食品工业蓬勃发展,孕育出一批批在国际舞台上熠熠生辉的民族品牌。今麦郎作为民族品牌代表,自1994年创立以来,始终紧跟消费者需求变迁,从满足基础温饱的初心出发,逐步迈向品牌塑造、健康倡导及高端化探索的新征程,从家喻户晓的“今麦

【Godot4.3】CanvasShape资源化改造

概述 通过把之前自定义的CanvasShape类变成资源类型,将可以同时用于CanvasItem绘图和创建扩展的Node2D和Polygon2D节点等。 本篇就完成CanvasShape类的资源化改造,并记录改造过程和思路。 CanvasShape资源类型体系 CanvasShape仍然为图形基类,提供共有的属性和方法,只不过改为继承自Resource,成为自定义资源类型CanvasX

JS学习日记———字符串

浏览器执行JS : 渲染引擎 (html + css) ,JS引擎 JS组成:ECMAScript语法,DOM(页面文档),BOM(浏览器对象) API:BOM + DOM DOM:通过接口对页面上各种元素进行(大小,位置,颜色等)操作 BOM:浏览器对象模型,通过BOM操作浏览器窗口(弹出框,控制转跳,获取分辨率) 字符拼接 字符串+任何类型=生成新字符(会将任何类型先转换为

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。 项目搭建地址 项目开源地址:yihecode-server 本项目基于ai场景而开发,提供算法模型管理、摄像头管