德斯曼门锁iOS版

搬家完之后,大门锁是一个德斯曼门锁,型号是T700,指纹识别特别拉胯,加上自己的手换季就有点脱皮,所以门锁一直用官方app开门,每次开门,都需要打开App,靠近门锁,点击一下一键开门。

用了几个月之后,突然想到为啥这个门锁不支持像Tesla一样,靠近自动解锁呢?于是,我就在app上提了一个意见反馈,希望可以像Tesla一样,只要手机靠近,拉一下门把手就开门的功能。可能这个锁太小众,或者开发人员是外包?提交了需求,三个月过去了,后台一直都是待回复。

于是,自己写一个吧,虽然,没做过iOS开发,不过也不用做界面,就做蓝牙调用就好了。

分析协议

网络请求

iOS使用stream抓包,获取网络Http请求,很容易就能找到2个关键请求。

/lock/command/secret 获取 command_secret ,这个值测试下来是固定的。

/lock/open/new 开锁

所有的请求使用 sessionId 进行用户验证,亲测一个sessionId基本可以用很久,几个月都不会过期。

蓝牙请求

使用 https://github.com/jnross/Bluetility 这个工具,即可扫描蓝牙设备,获取广播信息。可以找到锁的蓝牙特征值

1
central.scanForPeripherals(withServices: [CBUUID(string: "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"),], options: [CBCentralManagerScanOptionAllowDuplicatesKey:**true**])

做个App

拿到这些所有数据,就可以开始做个app了。步骤
1、蓝牙扫描周围设备,如果发现设备名称为 “LOCK_1234”的设备,即是自己的锁,1234为锁的蓝牙Mac地址后4位拼接。
2、连接这个设备。
3、处理 notifyService 和 writeService。
4、将Http请求获取到的 command_secret 使用 hexWrite 写入蓝牙锁,锁会返回一个 secret 值。
5、使用锁返回的secret值,调用 /lock/open/new 即可获取开锁的 command
6、使用 hexWrite 写入 command ,锁就开了。

通过上面的流程,就可以完成一次开锁了,如何像Tesla一样,靠近,拉门把手,就开锁呢?
处理 deviceDidDisconnect 方法就可以了。断联后,自动等待下次连接,这个指令有iOS调度,所以也不用担心App后台的问题。

最终效果,还挺好,每天开门都不用掏手机了。

阅读全文

qbittorrent配合passwall的一些网络配置

家里的网络一直是openwrt+passwall+unraid+qbittorrent做下载管理,在m-team和zmpt的网页上,每次看到接入ip有时候是本地网络,有时候又是代理,一直也没太关注,直到突然最近m-team判定为盒子,于是仔细设置一下网络。

问题在哪

1、 qbittorrent 的Host网络。unraid上通过docker安装的qbittorrent,容器开通的是host网络,因为host可以直接使用upnp,虽然网上对安全性差一点,不过Host有更好的网络效率。这就导致qbittorrent 的设置页面有很多的网络接口和Ip地址,服务端识别到很多的IP,可能某次调整网络的时候,直接走了代理,就判定盒子了。

阅读全文

PDF调整尺寸到A4大小裁剪白边

这是示例代码,主要处理PDF的去白边,再将尺寸调整为A4标准大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import fitz  # PyMuPDF

# 打开PDF文件
pdf_path = 'input.pdf'
pdf_document = fitz.open(pdf_path)

# 创建一个新的PDF文件
output_pdf_path = 'utput.pdf'
output_pdf_document = fitz.open()

# 白边裁剪尺寸
margin = 8

# 遍历每一页PDF并调整大小
for page_number in range(len(pdf_document)):
# 获取原始页面
page = pdf_document[page_number]

# 获取页面大小
page_width = page.rect.width
page_height = page.rect.height

# 计算裁剪后的页面大小
crop_width = page_width - 2 * margin
crop_height = page_height - 2 * margin

# 定义裁剪区域
crop_rect = fitz.Rect(margin, margin, margin + crop_width, margin + crop_height)

# 将页面转换为图像 (裁剪白边)
pix = page.get_pixmap(dpi=150, clip=crop_rect)
image = fitz.Pixmap(fitz.csRGB, pix)

# 计算调整后的页面大小
A4_width = 595 # A4纸的宽度
adjusted_height = int(crop_height * A4_width / crop_width)

# 创建新页面并插入调整后的图像
output_pdf_page = output_pdf_document.new_page(width=A4_width, height=adjusted_height)
output_pdf_page.insert_image(output_pdf_page.rect, pixmap=image)

# 保存新的PDF文件
output_pdf_document.save(output_pdf_path)

output_pdf_document.close()
pdf_document.close()

print("转换完成!")

阅读全文

iOS17修改虚拟定位地址

iOS 17虚拟定位似乎和以前iOS不太一样了,以前一直用 LocationSimulator,现在手机更新到iOS17后,就不能用了,找到一个新的项目。可以使用了。kinesis

注意事项:
1、下载 https://github.com/kkpan11/kinesis 这个pull request的项目,因为我也遇到同样的问题

1
# Fix the AttributeError: '_RSAPrivateKey' object has no attribute 'write'

2、python 使用 3.11.6,实测3.12.* 是不行的

1
2
3
4
conda create --name kinesis python=3.11.6
conda activate kinesis
pip install -r requirements.txt
sudo python3 main.py

3、如果提示 pymobiledevice3相关的错误,可以尝试更新依赖。

1
pymobiledevice3==2.18.1

阅读全文

清理Docker文件夹的大小

查询一下文件夹的大小 1du -h --max-depth=1 清理Docker没有使用的文件 1docker system prune -a -f

阅读全文

Git中忽略一个已经存在的文件夹

要忽略名为 RedisData 的文件夹,您可以在项目根目录下创建一个名为 .gitignore 的文件,并在其中添加以下内容:

1
RedisData/

这将告诉Git忽略名为 RedisData 的文件夹及其内容。确保每行一个忽略规则,并在规则后面添加斜杠 / 表示忽略整个文件夹。

阅读全文

拷贝ollama模型,从Mac到Debian

平常使用的电脑是一台Mac,使用的M1 max 64G的内存,下载了ollama的模型。拷贝到家里的Debian电脑上。

从Mac模型目录,复制整个 .ollama文件夹

1
/home/ron/.ollama/

到Debian的模型目录

1
/usr/share/ollama/.ollama

Debian上,修改目录权限

1
sudo chown -R ollama:ollama /usr/share/ollama/.ollama

这样就可以正常运行了。

阅读全文

修改Git为SSH访问

以前使用https拉取git记录,每次都要输入用户名和密码,今天调整为ssh授权,记录一下方式

查看本地Git账户信息

要查看本地Git账户信息,包括用户名和电子邮件地址,可以使用以下命令:

1
2
git config user.name
git config user.email

阅读全文

记录一次Unraid开心版升级

Unraid 之前用的6.12.2,最近感觉Docker有个镜像一直有问题,找不到原因,于是准备升级一下Unraid到目前最新的 6.12.9。 下载开心版文件下载文件在俄罗斯网站 unRAID Server Pro 6.12.9, ОС и ваши данные в безопасности, OS performance, VMs 下载安装包即可,文件...

阅读全文

小程序反编译

如果想提取一些软件的接口,最佳的方法应该就是获取到小程序源码,反编译,基本就能一比一复刻功能了。

微信Mac版本3.8.0 以后,小程序的文件就没有加密了,电脑提取到文件,直接反编译即可。

获取小程序

打开:

1
/Users/用户/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages

找到小程序的文件目录,wxcf62686dc9d61f90 文件名为小程序ID,可以在小程序的信息页找到。

阅读全文