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

news2024/11/29 8:42:40

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

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

调整kindle不锁屏

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

cd /Volumes/Kindle

touch 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1804500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MathType7.8永久破解版下载 让数学学习变得简单有趣!

大家好&#xff0c;我是科技评论家。今天给大家推荐一款非常实用的数学公式编辑器——MathType 7.8&#xff01;&#x1f4f1;&#x1f4b0; 在数字化时代&#xff0c;学术研究、教学和科研领域中的数学公式编辑需求越来越高。而MathType 7.8作为一个广受欢迎的数学公式编辑器&…

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题的解决方式

问题描述 客户端root用户连接数据库出现出现Public Key Retrieval is not allowed 原因分析&#xff1a; 加上allowPublicKeyRetrievalfalse&#xff1a; 解决方案&#xff1a; allowPublicKeyRetrievaltrue&#xff1a;

【面试干货】 Hash 索引和 B+树索引的区别

【面试干货】 Hash 索引和 B树索引的区别 1、Hash 索引2、B 树索引3、区别和适用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库中&#xff0c;索引是一种重要的数据结构&#xff0c;用于加速查询操作。常见的索引包括 Hash 索…

tkinter颜色选择器

tkinter颜色选择器 颜色选择器效果代码 颜色选择器 Tkinter 提供了一个简单易用的颜色选择器模块 colorchooser&#xff0c;通过调用 colorchooser.askcolor() 方法&#xff0c;我们可以轻松实现颜色选择功能。 效果 代码 import tkinter as tk from tkinter import colorch…

智慧社区整体解决方案

1.智慧社区整体建设方案内容 2.整体功能介绍

【NOI-题解】1468. 小鱼的航程1074 - 小青蛙回来了1261. 韩信点兵1254. 求车速1265. 爱因斯坦的数学题

文章目录 一、前言二、问题问题&#xff1a;1468. 小鱼的航程问题&#xff1a;1074 - 小青蛙回来了问题&#xff1a;1261. 韩信点兵问题&#xff1a;1254. 求车速问题&#xff1a;1265. 爱因斯坦的数学题 三、感谢 一、前言 本节主要对循环中需要流程控制的题目进行讲解&#…

Numba 的 CUDA 示例(4/4):原子和互斥

本教程为 Numba CUDA 示例 第 4 部分。 本系列第 4 部分总结了使用 Python 从头开始学习 CUDA 编程的旅程 介绍 在本系列的前三部分&#xff08;第 1 部分&#xff0c;第 2 部分&#xff0c;第 3 部分&#xff09;中&#xff0c;我们介绍了 CUDA 开发的大部分基础知识&#xf…

C语言王国——数据的内存管理

目录 一、引言 二、整形在内存中的存储 2.1 进制之间的转换 2.1.1 整形的二进制 2.1.2 十进制和二进制 2.1.3 十进制和八进制的转换 2.1.4 十六进制和十进制的转换 2.2 原码&#xff0c;反码&#xff0c;和补码 三、大、小端字节序 3.1 大小端的定义 3.2 为什么会有大…

LabVIEW FPGA开发NI sbRIO-9607高精度数字滤波器

使用NI sbRIO-9607硬件平台&#xff0c;通过LabVIEW FPGA模块实现一个高精度数字滤波器。该应用不需要额外的实时操作系统 (RT)&#xff0c;所有控制与数据处理均在sbRIO-9607的FPGA上完成&#xff0c;充分利用其并行处理能力&#xff0c;实现低延迟、高性能的数据滤波。这种滤…

【Git】Git 的基本操作 -- 详解

一、创建 Git 本地仓库 要提前说的是&#xff0c;仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制&#xff0c;就必须先创建一个仓库出来。 创建⼀个 Git 本地仓库对应的命令为 git init &#xff0c;注意命令要在文件目录下执行&#xff0c;例如&#xff1a;…

IT闲谈-IMD是什么,有什么优势

目录 一、引言二、IDM是什么&#xff1f;三、IDM的优势1. 高速下载2. 稳定性强3. 强大的任务管理4. 视频下载5. 浏览器整合 四、应用场景1. 商务办公2. 教育学习3. 娱乐休闲 总结 一、引言 在数字化时代&#xff0c;下载管理器已成为我们日常工作和生活中不可或缺的工具。而在…

Rethinking overlooked aspects in vision-language models

探讨多模态视觉语言模型的一些有趣结论欢迎关注 CVHub!https://mp.weixin.qq.com/s/zouNu-g-33_7JoX3Uscxtw1.Introduction 多模态模型架构上的变化不大,数据的差距比较大,输入分辨率和输入llm的视觉token大小是比较关键的,适配器,VIT和语言模型则不是那么关键。InternVL-…

SpringCloud-远程调用OpenFeign-基本使用

目录 1 直接使用RestTemplate发起Http请求 1.1 将RestTemplate注册为SpringBean 1.2 在service实现类中注入RestTemplate 1.3 使用注入的RestTemplate 传入参数后发起http请求 2 引入Nacos后使用RestTemplate发起Http请求 2.1 基础知识 2.2 Nacos的使用 2.2.1 引入nac…

pytorch 自定义学习率更新 Poly

Poly 学习率调整策略需要继承_LRScheduler类&#xff0c;该类包含三个重要属性和两个重要方法 学习率与batch-size的关系 一般来说&#xff0c;batch-size的大小一般与学习率的大小成正比。batch-size越大一般意味着算法收敛方向的置信度越大&#xff0c;也可以选择较大的学…

四川赤橙宏海商务信息咨询有限公司引领抖音电商新纪元

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度蓬勃发展。作为电商领域的一匹黑马&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专业的服务理念和创新的运营策略&#xff0c;在抖音电商领域崭露头角&#xff0c;成为行业内的佼佼者。 赤橙宏海商务…

coap:安装libcoap

# 称最新版的openssl 安装依赖东东 yum install -y libtool doxygen asciidoc perl-IPC-Cmd下载解压 cd /chz/install/openssl wget https://www.openssl.org/source/openssl-3.3.1.tar.gz tar zxvf openssl-3.3.1.tar.gz编译安装 cd /chz/install/openssl/openssl-3.3.1 .…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现一、引言二、焊点检测功能的实现方法&#xff08;1&#xff09; 输入接口&#x…

服务部署:Linux系统部署C# .NET项目

1. 安装 .NET SDK 首先&#xff0c;你需要在你的 Linux 系统上安装 .NET SDK。 Ubuntu系统&#xff1a; 下载 Microsoft 包配置文件 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb 这个命令使用 wge…

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出

目录 1 OpenFeign连接池 1.1 常见连接类型 1.2 连接池使用方法 1.2.1 引入依赖 1.2.2 开启连接池功能 1.2.3 配置完成&#xff0c;重启实例即可&#xff0c;底层将更改设置。 2 OpenFeign最佳使用方法 2.1 每个微服务都是单独的project&#xff0c;内部有三个独立模块 …

go语言内置预编译 //go:embed xxx 使用详解

在go语言里面&#xff0c;我们可以使用一个“类注释”的语法来来让编译器帮助我们在编译的时候将一些文件或者目录读取到指定的变量中来供我们使用。 go:embed语法&#xff1a; //go:embed 文件或者目录路径 var 变量名 变量类型 说明&#xff1a; 文件或者目录路径 可以…