我解决了我的问题,请参阅此问题的结尾以获取我的解决方案。
我是 Mosquitto|MQTT 菜鸟,所以我为接下来的一切道歉。
在例如 Ubuntu 上安装了 mosquitto 并且一切正常,我可以随心所欲地做到这一点:
mosquitto_pub \
--host mqtt.googleapis.com \
--port 8883 \
--id ${LONG_REGISTRY}/devices/${DEVICE} \
--username unused \
--pw ${PASSWORD} \
--cafile /roots.pem \
--tls-version tlsv1.2 \
--protocol-version mqttv311 \
--debug \
--qos 1 \
--topic /devices/${DEVICE}/events \
--message "$(date --rfc-3339=seconds) Hello Henry!"
我想从 Onion Omega2 设备执行等效操作,并使用一个容器openwrt-x86-generic-rootfs
作为它的开发代理运行(可能是问题 #1)
docker run -i -t openwrt-x86-generic-rootfs /bin/ash
mkdir -p /var/lock
opkg update
opkg install mosquitto mosquitto-client libmosquitto
然后,我拥有mosquitto_pub
与mosquitto_sub
上面的 Ubuntu 版本不同的版本,形式的标志-f
并且--flag
不受支持。这些工具似乎没有提供任何版本信息。
我认为这些版本已经过时,但我不知道是否可以更新到比opkg install
上述版本更新的版本(问题 #2)。
与 Unix 示例一样,我想连接的 Google Cloud IoT 代理需要 TLS(不是相互的),但 OpenWRT Mosquitto 客户端似乎不包含允许 TLS 的选项。没有等价于--cafile
。没有这个,我想我被封锁了。(问题#3)。
问题:
- Onion Omega2 设备上的 Mosquitto 是否支持 TLS?
- OpenWRT Mosquitto 客户端过时了吗?我可以升级吗?
- 有没有办法让我使用 TLS 将 Onion 连接到 Google 的 MTQQ?
谢谢!!
在 Onion Omega2 设备上,Mosquitto 安装为我提供了不同/当前版本的工具,其中包括一个cafile
标志,这对我有用。奇怪的是,这个版本的工具提供了帮助,例如-u
,但该工具将接受--username
因此,我可以在 Omega2 上运行以下命令,并且都对我有用:
mosquitto_pub \
--host mqtt.googleapis.com \
--port 8883 \
--id ${LONG_REGISTRY}/devices/${DEVICE} \
--username unused \
--pw ${PASSWORD} \
--cafile /roots.pem \
--tls-version tlsv1.2 \
--protocol-version mqttv311 \
--debug \
--qos 1 \
--topic /devices/${DEVICE}/events \
--message "Hello Henry!"
和:
mosquitto_sub \
--host mqtt.googleapis.com \
--port 8883 \
--id ${LONG_REGISTRY}/devices/${DEVICE} \
--username unused \
--pw ${PASSWORD} \
--cafile /roots.pem \
--tls-version tlsv1.2 \
--protocol-version mqttv311 \
--debug \
--qos 1 \
--topic /devices/${DEVICE}/config
在哪里:
LONG_REGISTRY=projects/${PROJECT}/locations/${REGION}/registries/${REGISTRY}
并且,回答我的问题:
- Onion Omega2 上安装的 Mosquitto 工具支持 TLS
- 我(假设)OpenWRT Mosquitto 客户端已过时;这不一样
- 是的,上面的示例演示了使用 Cloud IoT 发布和订阅
我是不在 Cloud IoT 领域的 Google 员工,我认为我最需要 Mosquitto 的帮助。