对于IoT,我的观点一向是:速度是决胜关键。所以凡是接口一律标准化,减少定制工作量。IoT网关和边缘计算也是如此,可以将原有的私有协议、行业标准直接对接到IT通用标准。
物理层标准化
把ZWave/Zigbee/LoRaWAN/Sigfox/CAN等都封装成USB Dongle/mPCIe Card就好了。和3G/4G/WiFi/BLE采用同样方式接入,很难么?
设备测USB现在已经非常成熟了,有STM32/NXP等厂家提供参考设计,难度大大降低。只是网关测需要解决驱动、自动检测、后台服务。
设备驱动和自动检测
在没有使用专用驱动之前,采用libusb实现“无驱驱动”。通过VID/PID检测,也可以通过固件初始化应答来检测是否是正确的设备。
相对来说,自动检测的难度稍大一些。有以下几种方式:
- glib/udev (pyudev)
- HAL/DBus (dbus)
- pyinotify 文件系统监控模块
- 轮询
/dev/ttyUSBx
或/dev/ttyACMx
设备文件 - 轮询
/var/log/messages
系统文件 - 轮询
/dev/tty*
,使用 pyserial 模块
以上方式仅限于Linux,Windows下需要使用ctypes方式来访问win32api。
后台运行和开机自动运行
在Linux中,可以使用nohup实现后台运行,最新的systemd还是有些许限制。
将nohup脚本放置到/etc/rc.local
即可以实现开机自动运行。
总结
当Linux主机运行后,会有一个Dongle Monitor监控程序开始后台运行,当检测到有USB Dongle插入后,可以调用Gateway Daemon实现私有网络到云计算服务器的对接转发。同样道理,当检测到USB Dongle拔出,可以暂停Gateway Daemon的运行。甚至可以实现多路转发。
Dongle Monitor和Gateway Daemon之间可以通过zeroMQ/socket/redis进行通讯。DM/GD可以使用Docker进行封装。