DrCOM 非官方客户端,修改自 drcom-generic 以使其能够在 OpenWrt 软件源中的 micropython 软件包中运行。
另有 opkg 进行打包于 openwrt。
WIP & Testing needed
micropython 是一种 python 3.x 的实现,体积较小,相较 cpython 更适合在运行在一些存储空间非常有限的路由器上,但未实现 python 标准库中的全部功能。
在 OpenWrt 官方源中有两个包:
- micropython: micropython 解释器,x86 架构的
1.9.4-2
版安装后仅 365.1K - micropython-lib: 提供不完整实现的 python 标准库,
1.9.4-2
版安装后达 1.1M。micropython 文件夹中是被 drcom-generic 脚本依赖的部分,共 168K,将内容复制至/usr/lib/micropython
或与 latest-wired-micropython.py 置于同一目录来使用,以省下完整 micropython-lib 的其余部分所需的空间。
以下文件用于补齐 drcom-generic 需要但 micropython 未实现的 python 标准库中的部分内容
- md5_drcom.py:
hashlib.md5
的纯 python 实现,来自 pypy,为了与 python 3.x 兼容作了细微更改 - random_drcom.py:
random.randint
的实现 - socket_drcom.py: 提供了处理 socket 连接超时的 workaround
OpenWrt 官方软件源的部分或全部架构(未作考究)下的 micropython 的 socket 类中无settimeout
方法。此处 socket_drcom.py 使用了另外一种方法:通过设置 alarm
系统调用,在超时时用信号处理机制抛出 timeout
异常。
不再试图捕获超时的异常,因此超时后程序会退出。
清空 socket buffer 的方法从捕获超时异常改为使用非阻塞 socket。
(一定程度是为了便于打包成 ipk)latest-wired-micropython.py 启动时默认会读取 /etc/drcom_wired.conf
作为配置文件,亦可通过传入文件路径作为参数来指定其他位置的配置文件,从而更改登陆信息不需要更改脚本源码。兼容 drcom-generic 的 python2、python3 版以及 dogcom 的配置。
除了登陆信息,另有有以下配置项:
PID_ENABLE
:bool
,默认True
,是否启用 pid 文件PID_PATH
:str
,默认'/var/run/drcom.pid'
,pid 文件路径DEBUG
:bool
,默认False
,是否开启日志文件LOG_PATH
:str
,默认'/tmp/drcom_client.log'
,日志文件路径nic_name
:str
,默认为空(遵循系统路由),指定登陆拨号的网卡名
micropython 的报错没有 cpython 那么详细
感谢 drcom-generic 项目和 micropython 项目。