MoreRSS

site iconHeYSH | 贺叶霜修改

博客名:林中阴影。分享一些智能设备的使用体验。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

HeYSH | 贺叶霜的 RSS 预览

旧手机做RDP客户端的一些尝试

2024-08-28 22:06:45

这样的话旧手机就可以作为瘦客户机用了,而且自带4G模块。

不要问为什么,工作造就人呀。

  • 首先,为了连接显示器,旧手机的USB口需要支持DP-alt模式,至少USB2.0是没戏了。我用的是一加7T,并且血亏200大洋修好了虚焊。

  • 然后,如果显示器没有type-c一线通,还需要搞一个扩展坞。 dock

    • 这种(盛惠25元)有各种贴牌,在充电时USB口是用不了的。建议另找一套蓝牙鼠标。
  • 把系统升级到Lineage OS 21,或者其他Android 14版本。每次更新,日志都说升级了桌面模式,每次都是一样的难用。

    • 如果是高贵的三星用户,就请当我没说过这句话。
    • 另外,别用Oxygen OS,桌面模式布局一团乱麻;也别用Pixel Experience,直接把手机干成Qualcomm CrashDump MODE,我还以为200块白修了。
  • 插显示器的时候,不要用SecondScreen APP,那个是给旧版本Android用的,挖孔屏使用的时候,显示器上会有黑边。

  • 只需要在开发者选项里勾选“强制执行桌面模式”就可以了,其他的状态栏对我来说没有必要。 开发者模式选项

  • 之后,连上显示器以后的Android桌面长这样。 桌面

  • 关于RDP客户端,建议不要用微软出品的APP。据我测试,只有Remote Desktop ManageraRDP Free支持鼠标中键。后面那个是开源的。

  • 按理说Moonlight也可以,不过还是RDP协议对4G友好点。

一些矿渣的耗电量

2023-08-10 20:35:54

最近在小黄鱼上淘到一个支持电量统计的插排(这个),卖家还贴心地刷好了ESPHome固件。

数据就不标了,有兴趣的可以自行使用Engauge Digitizer

于是我用Excel算好了:

功率/W 年功耗/kWh
插座 3.8 33.288
我家云 5.4 47.304
锐角云 4.7 41.172
蜗牛星际 40.8 357.408
  • 首先是这个插排,本身待机就有3.8W,离谱。
  • 锐角云开启之后总电量为8.9W,本身耗电4.7W。锐角云的配置是N3450、8GB内存,上面插了一块256G的SATA SSD,运行PVE、Home Assistant和另外2个虚拟机,直插12V电源适配器把待机功耗控制在极低的水平。
  • 9.6W的部分是我家云的贡献。孱弱的RK3328核心,捉襟见肘的2G内存,即使再加上一块500G的2.5寸机械硬盘,耗电量也仅为5.4W,作为小型文件服务器可以直接忘掉电费问题。
  • 蜗牛星际就可以算上电老虎了。1块老旧SSD,两块老旧2.5寸和一块8T海淘盘带来了高达40.8W的耗电,如果24小时开机的话每年会带来高达一百多块的账单。

顺便一提,我家今年的耗电量长这样。这才仅仅是8月而已……

OK,当我今天没有更新过。

穷人的IP-KVM远程访问

2023-05-20 16:06:47

说起DIY的IP-KVM,当然是PiKVM以及一系列衍生项目,可是对于那些把钱投入庞氏骗局的穷人来说,RPI4已经远不能称为inexpensive。近几天,我从垃圾堆里翻出了同样昂贵的Phicomm N1和一张30块的视频采集卡,发现正好也能用。

有较强的自我管理意识.png

有较强的自我管理意识.png

把远程控制取名叫作IP-KVM,这对于SEO来说过于不友好了。每当搜索Google的时候,总会看到有人试图在N1上跑虚拟化(aka KVM),可能是对2G内存有些什么不切实际的幻想。最后,在GitHub上找到了在N1上安装PiKVM的脚本:toss-a/pikvm-armbian。不过这里的说明也稍微有些简略,我会努力稍微详细一点点,尽量。

那么,需要准备下面这些东西:

  1. N1一台;

    我的N1是从垃圾堆里捡回来的,如果是新购的话,应该会有一些更新、更好的选择。注意,这些选择需要能够OTG。

  2. USB公对公数据线一条;

    因为N1的USB口有OTG功能,直接连接被控电脑就可以模拟鼠标和键盘。

  3. 视频采集卡一张,配HDMI线一条;

    因为N1没有USB3.0接口,MS2109芯片就足够了,可以跑1080p@30Hz。 大概长这样:

  4. U盘一块;
  5. Linux知识一些;
  6. 可能会需要:
    1. USB键盘一个;
    2. USB延长线一条;
    3. 理想的上网环境。

      根据相关法律法规和政策(下略)

不需要准备Arduino、BadUSB、USB Rubber Ducky,或者其他的单片机,虽然我的垃圾堆里也有不少。

安装系统:Armbian(Ubuntu口味的)

这部分已经有很多人写过了,大概步骤是降级—BalenaEcther镜像写入U盘—Armbian写入EMMC。可以参考GitHub说明其他人的博客或者B站。要注意,在盒子的原始系统尚未关机时不要插入U盘,Android系统会破坏U盘文件的权限。

Armbian镜像我使用的是Armbian_23.05.0_amlogic_s905d_jammy_6.1.27_server_2023.05.13.img.gz,其中,S905d是N1所用的芯片,Jammy是Ubuntu的版本号,6.1.27代表使用的是最新版本的Linux内核。如果安装PiKVM,Debian系列(bullseye)的软件包有些太老了。

修改dtb文件

好,到这里时,我会假设:N1已经刷成了Ubuntu风味的Armbian系统;连接好网络,有线无线都可以;能够输入命令——不管是直接插键盘显示器,或是通过SSH,还是直接从电路板上引出导线。

在上述的Armbian引导文件中,默认的USB模式是Host,为了模拟鼠标、键盘等设备,需要将dr_modehost更改为peripheral1。那么,我们需要重新编译dtb文件:

# 将dtb编译为dts文件
dtc -I dtb -O dts -o test.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
# 用你喜欢的编辑器打开这个文件
vim test.dts

test.dts中搜索dr_mode,寻找首个dr_mode = "host";,改为dr_mode = "peripheral";。 这里的上下文大概是这样: 注意红字位置 后面的dr_mode不必修改。不要问我为什么,这部分超出了我的能力。之后重新把dts编译回去,移动到/boot/dtb/amlogic/,并且修改启动项:

dtc -I dts -O dtb -o n1-test.dtb test.dts
sudo mv n1-test.dtb /boot/dtb/amlogic/
sudo vim /boot/uEnv.txt

FDT一行改为FDT=/dtb/amlogic/n1-test.dtb最近觉得carbon.now.sh还挺棒哒

然后重启系统。

安装脚本

此时,假设你能够透明地访问github和其他网站,curl google.com返回302或者200。如果不行的话,可以尝试在N1上安装zfl9/ss-tproxy,让N1同时承担旁路网关的功能。

git clone https://github.com/toss-a/pikvm-armbian.git
cd pikvm-armbian
./install.sh

在提示"Do you want to apply custom patches? [y/n] "时,选择N。

接下来,重启系统,再次运行install.sh,然后关机。

连线和启动

N1靠近HDMI接口的USB口已经改为OTG从机模式,把双公头USB线插在这里,另一头插到被控计算机上。这时候,如果视频采集卡插不上的话,拿出提前准备好的延长线。下面的照片来自这里,照相技术牛逼疯了。

牛逼疯了!

重新插入电源,用随便的浏览器访问N1的IP地址,并忽略证书错误提示。初始用户名和密码都是admin,别忘了修改登录密码,用sudo kvmd-htpasswd set admin

另外,感谢pikvm项目,有钱的话就去支持他们的硬件吧!


  1. Ref:README,这个写的其实挺清楚的,比我的好。 ↩︎

内网访问第三季:在运营商的CGNAT网络下

2023-05-10 21:05:13

是的,在这次这次之后,在酒店里百无聊赖的现在,我又开始折腾起VPN来了。

是的,在酒店里仍然没有IPv6地址。

为什么

正如前文所述,无论是Tailscale/Headscale、Nebula或Netmaker,原理均大同小异,都是在Wireguard基础上,用类STUN协议来穿越NAT,或利用TURN(DERP)服务器进行转发。在国内家庭宽带网络环境下,一般存在路由器、光猫、运营商三重NAT防火墙,STUN需要跨越多重阻碍,自动穿越希望渺茫;另一方面,公开转发服务多在国外,延迟高居不下,而国内私有云价格亦是高不可攀,自建服务并非经济的选择。

然而,三重NAT也并非坚不可摧。光猫一级,只要改为桥接,便可迎刃而解;路由一级,可以通过端口映射来绕过;而运营商级多为NAT1,通过Natternatmap,可以获得近似公网的效果。这样,使用纯粹的Wireguard,也能够直接回到家庭网络内部,免去国外中转的烦恼。

从广东联通到北京联通。

从广东联通到北京联通。

从广东联通经北京联通到甘肃移动。个人觉得,在这种延迟下追求Full Mesh也不再重要了。

从广东联通经北京联通到甘肃移动。个人觉得,在这种延迟下追求Full Mesh也不再重要了。

怎么做

在开始之前,首先检查是否满足以下要求:

  1. 一台长期开启的设备。

    既然有远程访问的要求,远处有一台服务器是很自然的吧。

  2. 光猫处于桥接状态。
  3. 主路由是OpenWRT,或者内网里有DMZ主机。

    或者,你是端口转发专家,可以从光猫外侧一路转发到最内部。

  4. 没有公网IPv4,但在路由器处测试NAT类型为NAT1。

    这里可以用Natter自带的功能来测试。如果你有公网IPv4的话,直接打开端口就好,而且我会很羡慕你。

  5. 一个自己的域名,最好是在Cloudflare上托管的。

    需要DDNS功能实时更新域名。如果没有域名的话,可能需要一些别的手段来实时得到端口。

具体配置部分已经有人写的很详细了。首先按照WireGuard Point to Site Configuration设置点到站点的连接,然后按照natmap Wiki设置NATMap即可。注意,在路由器上操作的时候,一定要记得在防火墙中打开对应端口

完成以上步骤之后,应该已经可以从移动网络访问内网的Wireguard Peer了。

一点问题

由于运营商网关不受我们控制,外网的IP和端口号都是随机分配的,每当地址变化时,NATMap将执行自定义脚本。在上面的Wiki中,利用DDNS,把IPv4地址和端口编码进IPv6的AAAA记录中。这并不是一种标准的技术,不过既然2001::就是给teredo使用的,在这里随便用用也无所谓。

对于Windows下的Wireguard客户端,我(和ChatGPT一起)写了一个PowerShell脚本,能够自动修改配置文件的Endpoint并调用wireguard.exe进行连接。

使用方法:

  1. 安装wireguard-windows,用客户端连接测试成功。
  2. 在文件夹C:\example下建立wg.ps1nat.conf,粘贴Gist内容。
  3. 按照实际情况修改nat.conf,以及wg.ps1$Hostname部分。Endpoint不必修改。
  4. 以管理员身份运行PowerShell
  5. 设置ps1脚本运行权限:Set-ExecutionPolicy RemoteSigned(或Unrestricted)
  6. 启动、重启Wireguard:C:\example\wg.ps1 -up
  7. 停止Wireguard:C:\example\wg.ps1 -down

在Windows 11, Powershell 5.1.22621.963测试通过,也可以配合Windows下的sudo使用。

另外,在Android下,也可以用termux运行nm-echo.sh来获得IP地址,手动修改Wireguard官方客户端中的IP。甚至,可以使用你喜欢的代理客户端(比如NB4A),配置好Wireguard Outbond和路由就可以了~

我这里最近一次分配的端口坚持了18天,所以应该不必时常刷新。

我这里最近一次分配的端口坚持了18天,所以应该不必时常刷新。

如果需要更为稳定的访问,可以参考reresolve-dns.ps1,这个脚本可以在上一次握手时间过久时刷新DNS,但是因为要添加计划任务,有一点过于复杂了。

Bonus

Natmap的另一种用法是映射BT客户端,从而使外来连接能够主动发起连接,获得所谓的High ID。见wits-fe/bittorrent-NAT-hole-punching。在PT站做种的时候应该会很有用。

附:性能测试

随便找了一个公共WiFi,用手机(一加7T)上Termux中的iperf3测速。

由于多层NAT的限制,Nebula类组网工具必须部署在路由器位置。可以看出,对路由器(万元级,K3)带来的压力还是比较大的。

WireGuard for Android

WireGuard for Android

NB4A提供的Wireguard Outbound

NB4A提供的Wireguard Outbound

Nebula,对端部署在路由器上

Nebula,对端部署在路由器上

很难想象,对于访问内网这样一个简单的需求,我居然花费了如此多的精力。不过,这次应该算是当前比较满意的方案,应该能坚持到下次水逆开始。

“智能”家居笔记,其之二

2023-03-08 21:32:06

书接上文。说起来,智能家居的可复制性在软件领域里是比较差的,在完成基础的环境搭建之后,功能需求要根据自己的实际情况来决定,以下的所有内容仅供抛砖引玉之用。

前端显示

隆重推荐Dwains dashboard,这是在HA生态系统下仅有的不怎么需要折腾的部分。只需要把每个设备的区域选好,就可以得到一组还不错的面板:

Dwains dashboard

Floorplan是另一个极端,这个组件需要很久——非常久——才能够完成,而完成之后也只有无尽的空虚。为了缓解这空虚我也姑且把截图放在这里。

Floorplan

手机消息提醒

作为没有统一推送服务的安卓用户,加入新的后台程序无异于火上浇油,所以最经济的方法是投靠大流氓微信。之前互联网上常见的方法是企业微信发送应用消息,不过到了2023年,这种方式需要绑定固定IP和域名,所以我换成了企业微信机器人。这种方法需要有一个微信群(两人以上),对单身贵族不是十分友好。

在获得Webhook地址之后,在HA配置文件中添加以下行:

# configuration.yaml
rest_command:
 wechat_message:
 url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=略"
 method: post
 content_type: 'application/json'
 payload: '{"msgtype":"text","text":{"content":"{{ message }}"}}'

就可以在自动化中Call a service,调用wechat_message了。

另外,可以试试showdoc推送服务。我没用过,不对这个负责。

或者直接想办法给微信绑定的QQ邮箱发信,反正他们信用卡诈骗邮件都是这么干的。

推送的非常及时

或者直接用Home Assistant自带的HTML5 Push Notifications;或者TG机器人;或者自建ntfy.sh——反正都很复杂。

开关其他计算机

当前,因为不想和国家电网签约,我在平时保持台式机和NAS处于关闭状态,只在需要时通过HA所在的矿渣来Wake on LAN

开机问题解决了,关闭需要另外的解决方式。对于Windows系统,可以使用IOT Link;而对于更常用的Linux系统,可以使用SSH来运行shutdown。仍然是HA配置文件:

#configuration.yaml
switch:
 - platform: wake_on_lan
 name: Trashbin
 mac: 00:00:00:00:00:00
 host: 192.168.8.88 #用ping来检测是否已开机
 turn_off:
 service: shell_command.turn_off_trashbin
shell_command:
 turn_off_trashbin: "ssh -i /config/ssh_keys/id_rsa_homeassistant -o 'StrictHostKeyChecking=no' [email protected] 'sudo /usr/bin/systemctl poweroff'"

别忘了把私钥放在/config/ssh_keys/id_rsa_homeassistant,并上传公钥。在authorized_keys中动些手脚,可以限制SSH允许执行的命令。另外,需要设置sudo在运行poweroff时不需要密码。

## sudo visudo
%sudo ALL=(ALL) NOPASSWD: /usr/bin/systemctl poweroff

远程访问

之前这篇文章就是为了这个。

在家检测

又名device tracker,与路由器有关,我用了OpenWrt (luci)集成。独居的话,BLE门锁也能完成类似的工作。控制欲更强的朋友可以尝试ESPresense,应该是能到房间级别。

零冷水

如果你像我家一样,燃气热水器/壁挂炉离浴室太远,需要一套零冷水系统,那么首先需要把回水管留好。然后……最好能搞点成品系统,不要像我一样用屏蔽泵和智能开关解决,毕竟这玩意还是有一定难度的。

设计水路和买接头全要靠自己了。

设计水路和买接头全要靠自己了。

弄完之后,把水泵插在智能插座上,在卫生间安装人体传感器,每当卫生间有人经过的时候就运行半小时。

没有预留回水管的话可以参考这里

自适应照明

……感觉很高级,没了。

监控摄像

为了照料人类幼崽,我买了3个摄像头,是广受好评的TP-link系列1,ONVIF协议除了端口是:2020之外和标准一模一样,也自然支持HA的ONVIF集成。

因为正好有一台杂牌NAS,硬盘录像机的钱可以省掉了。NVR软件方面,我尝试了Shinobi.video2motioneye3,最后选了iSpy公司的Agent DVR,设置最简单,也具有最完善的HA集成,抱歉啦开源社区。

附:当前用到的自动化

  • 按下开关 -> 关掉对应的灯

    每个灯都要做一次,很无聊。但是设置完之后,每个灯都能缓缓熄灭,就……挺高级的。

  • 开关窗帘
    • 在每天晚上8:00自动关闭所有窗帘
    • 我在家的情况下,当我的下一个闹钟响起时,打开主卧窗帘
    • 早上8:30打开所有窗帘
  • 浴室门
    • 浴室门关闭 -> 打开照明、打开循环泵
    • 浴室门开启 -> 关闭照明、关闭浴霸制热、等待十分钟 -> 关闭浴霸通风
  • 防盗门
    • 门从外部被打开 -> 打开门厅灯、打开循环水,如果在8:00-22:00间,小爱播报“欢迎回家”。

      就……挺高级的……吧……

  • 循环泵
    • 每天午夜关闭循环泵
    • 开启30分钟后关闭循环泵
  • 在电费余额不足时,向企业微信发送信息

暂时我还没搞懂NodeRED是干什么用的,看起来pyscript还更有趣一些。


  1. 型号是TL-IPC44AW Pro,那个Pro让它多了5G wifi支持。 ↩︎

  2. 不太支持H.265格式的录制,实时播放老有问题,而且没搞懂HA集成怎么用。 ↩︎

  3. 这个我没仔细试,祝你成功! ↩︎

“智能”家居笔记,其之一

2023-02-10 20:44:06

而RK3328的算力与草履虫大约能打成平手。所以,本文中的“智能”指的都是 不用按电钮就能控制™ 级别,当然,如果能够有一点点自动就更好了。

前期的准备

考虑一下

其实当个mi boy也不错——全屋小米设备是智能家居方案里面最不坏的选择,做完就可以成为合格的家居up主了1。不过,如果不想被锁定在米系势力范围内,可以尝试一下Home Assistant,尝试成本也不高:几十块钱的魔百盒或者玩客云,或者直接虚拟机都可以。另外,最好能有一个简单的设备来控制,我觉得带红外遥控的小爱音箱 Pro就挺好的。

装修时

当然是老生常谈的那些:在开关里面留零线、不要做双控(贵)、多做网线口、窗帘盒旁边做插座之类的,剩下的事情只能等到装完以后再后悔了。

就我来说,我比较后悔没有给拖地机器人留上下水的位置,没有把净水器的纯水管引到客厅,也没有留两个给摄像头和人体存在传感器的插座。

新手的采购清单

最好能够遵循 Graceful degradation 原则:保证有东西坏掉的时候至少还是个mi boy,然后就可以把所有问题推到米家服务器身上了。另一方面,如果要在熟练后彻底摆脱米家的控制,需要寻找那些离线仍然可以通过HA控制的设备,也就是说,最好不要选择米家臭名昭著的最新的BLE Mesh系列。那么,在2022年,我的选择是大量的Zigbee设备、少量的Wifi设备和更少的蓝牙设备。Nothing Matter.

下面是米系智能设备的列表,截至2022年。盛惠5527元。

设备 数量
墙壁开关E1(零火双键) 10
Aqara双色温LED灯泡T1 6
Aqara智能墙壁插座Zigbee 1
Aqara水浸传感器 2
Aqara人体传感器 2
Aqara门窗传感器 1
Aqara温湿度传感器 1
yeelight m3筒灯(BLE) 1
米家第三方壁灯(BLE) 2
米家客厅吸顶灯 1
米家卧室吸顶灯450 1
米家卧室吸顶灯350 2
杜亚M2米家款电机(Aqara的买不起) 3
门锁1s(BLE) 1
小米多模网关 1

Aqara在闲鱼买会显得不那么冤大头,杜亚牌电机也比杜亚代工的Aqara电机便宜很多。家电方面,美的和其副牌(小天鹅、华凌、colmo之类)一般自带网络功能,通过插件midea_ac_lan和HA配合的很不错。

美的营销号矩阵

美的营销号矩阵

对了,还需要一台能够24小时开机的设备,比如NAS啊、矿渣啊什么的。

安装和设置

安装HA的部分在此不再赘述。通过米家APP配置以上的所有设备,并使用hass-xiaomi-miotXiaomiGateway3导入HA。这里需要注意的是,hass-xiaomi-miot集成只能对WiFi设备进行本地控制,对Zigbee和BLE设备需要通过米家服务器。所以最好由gateway3控制这些设备,在hass-xiaomi-miot集成中禁用。

考虑到安装非智能灯的可能性,我采用了智能开关+智能灯的组合,这种组合更为保守,凌动开关+支持凌动的智能灯效果大概会更好。在把所有智能灯配置完成后,在米家APP上把链接智能灯的开关转为无线开关,然后在HA中设置自动化,感觉比米家自动化的反应更灵敏一些。不过,为了防止在HA断掉时挨骂,我也在米家APP上添加了备份:在同时按下开关左右键的时候关闭智能灯。

HA和米家设置自动化

HA和米家设置自动化

这样,在关闭智能灯的时候不会断电,可以实现灯光缓灭、自适应照明等高级功能。

窗帘的部分就更简单了,只要定时开关就行。通过HA的手机APP,可以将下一个闹钟时间导入自动化,实现闹铃响起时打开窗帘。

附加题部分

在基本框架(aka灯和窗帘)搭好之后,就可以放飞自我搞一些新花样,这里举两个例子。

智能面板

Sonoff NSPanel应该是最便宜的智能面板了,而且可以刷第三方固件lovelace-uiNSPanel_HA_Blueprint,可玩性非常高。

NSPanel Lovelace UI

如果需要更大的屏幕,甚至可以在仓库里找一些淘汰的设备,比如说还能亮的山寨平板、二手安卓手机、闲鱼低价带屏开发板之类。通过WallPanelHA的kiosk-mode插件,可以让这些设备直接成为HA的前端显示2

一个二手安卓触摸屏

一个二手安卓触摸屏

作为一个直男,还有一件事情要嘱咐:不要搞得太丑了,正常人不会喜欢满墙飞线的,至少拿个相框遮一下。这部分我也不会,所以我从网上找了一张图。

reddit:surface_pro_3_wall_tablet_install,这张图也挺丑的

ESPHome

传感器是从遥控家居走向智能的关键一步,在需要更多种类的传感器时,ESPHome能够派上用场。只需要一块ESP32,加上AHT20就是温湿度计,加上SGP30是TVOC检测仪3,加上PZEM-004T就是智能电流表,加上LD2410就是人体感应雷达,而且都可以与HA控制的所有设备联动。唯一的问题是,ESP32系列一般是通过Wifi联网,可能会对路由器造成一点点压力,如果是一万块钱的高级路由器K3就无所谓了。

另外,如果完全不想和小米打交道,易微联、涂鸦或小燕科技的设备也可以试试。没准过几年Matter设备也会上市?


那么关于智能家居的第一部分在此告一段落,之后会记录一些更为个性化的部分,而今天又是一个思念192.168.1.1的日子。虽然心已随着VPN回到家乡,但身体仍在公网上漂泊。

参考


  1. 那么你可以直接跳过这篇文章,不会有什么损失。 ↩︎

  2. HA前端对浏览器版本有一定要求。如果设备过于古老的话,可能需要手动更新Webview,见此处。 ↩︎

  3. 这个不要用,长期开机读数会暴涨。 ↩︎