1 个不稳定版本

0.6.1 2022年11月2日

#5 in #client-key

AGPL-3.0-or-later

50KB
1K SLoC

部署

modio-mqttbridge 通过 modio-contain 从 clientconfig 仓库进行配置和部署

查看

在那里,您需要在设备上创建一个 client.contain.ini 条目,如下所示:https://gitlab.com/ModioAB/clientconfig/-/blob/master/examples/client.contain.ini

条目为 modio-mqttbridge = main

仅凭它本身将失败,因为它还需要设备的配置文件:示例 https://gitlab.com/ModioAB/clientconfig/-/blob/master/examples/modio-mqttbridge.ini

如果设备对某些特殊情况有 TLS 证书/密钥要求,则它们需要放在设备上的

00ffffffff:/modio/private/modio-mqttbridge/ca.crt
00ffffffff:/modio/private/modio-mqttbridge/client.crt
00ffffffff:/modio/private/modio-mqttbridge/client.key

这些文件需要具有允许 DynamicUser "modio-mqttbridge" 访问它们的权限。

输出

输出格式是 SenML 的有限版本 https://www.rfc-editor.org/rfc/rfc8428 ,包含以下数据

{ "bn": "urn:dev:mac:XXXXXXXXXX:" "n": "yyy.zzz.yyy", "vs": "abc1234", "t": 1636722945.0, "u": "unit" }

"bn" 包含设备的 mac 的 urn,并且应以冒号结尾。(有关 urn 的详细信息,请参阅 https://datatracker.ietf.org/doc/html/rfc8141

"n" 将是数据点的 modio API 风格键格式 "vs" | ("v" | "vb" | "vd") 将是值,请注意,2021 年大部分以字符串形式报告。 "u" 将是数据点的单位,如果有的话 "t" 将是时间戳,以 Unixtime 的形式。

主题

每个设备都有一个与配置关联的前缀,该前缀会预先添加到所有数据点。

prefix = "demo-demo/some/demo" key = "21.12345" 然后,度量会被添加到 "/metric/" 前缀,最后与分开的 modio 键连接

demo-demo/some/demo/metric/21/12345

事务

代理将订阅一个主题,并监听包含有效更改请求的传入消息。

主题的构建方式与上面类似:prefix = "demo-demo/some/demo" 将导致主题变为:demo-demo/some/demo/change/legacy

Legacy 是一个信号,表明它正在使用旧版数据格式,这种格式可能仅通过最小通知进行更改。数据应以以下形式接收

{ "n": "key.for.item", "expected": "0", "token":"6d27d3dda40943a499059951211d5058", "v":321 }

"n" 是 modio API 风格的键,"expected" 可以包含 (string|numeric|bool) 数据,并应理解为 "要更改的值"。

"token" 应该是一个 UUID,最好是未划线的十六进制形式。重复使用相同的 UUID 将导致事务失败。

许多记录器在写入之前会提示重新读取远程设备,如果精度、数据类型或事务年龄不匹配,则可能导致写入失败。例如,当远程设备期望“1”时,报告“1.0”导致失败,而无需进一步的原因。

在此数据格式中,根据SenML规则,系统将允许使用(v | vs | vb)之一。由于遗留系统期望数据的严格字符串相等,建议确保更改是有效的。例如,将存在精度问题的数值数据类型存储到期望定点小数缩放值的仪表中,将会出现不匹配,后端记录器可能会未经通知就拒绝它。

处理跨系统之间的数值精度留作读者练习。

验证写入的数据是否在远程单元的有效范围内,应在数据到达此设备之前完成。了解接受的范围是1、2、3或其他,以及验证它是否与设备期望相匹配,应在请求到达此设备之前完成。

写入被认为是只读的关键字可能会导致意外的后果。预期用户确切知道哪些关键字是只读的和可读写,并小心对待。

写入更改硬件配置的关键字可能会导致另一侧的设备损坏。请参阅上面的只读警告。

写入只写关键字可能会产生其他有趣的后果。假设任何使用此接口的用户都详细了解这些后果。

设备上未实现身份验证、授权和审计日志记录。假设用户已经在数据到达此设备之前完成了这些操作。

modio MQTT桥设计为仅在本地设备上运行,只有经过审查的代码与其通信。

将其暴露给其他设备的流量可能会产生有趣的副作用。

结果目前除了作为后续存储结果外,不再报告。

依赖关系

~24–38MB
~714K SLoC