Skip to content

CQU-drcom/micropython-drcom

Repository files navigation

micropython-drcom

DrCOM 非官方客户端,修改自 drcom-generic 以使其能够在 OpenWrt 软件源中的 micropython 软件包中运行。

另有 opkg 进行打包于 openwrt

WIP & Testing needed

关于 micropython

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

与原版 drcom-generic 脚本的差别

socket 传输超时处理

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 项目。