0

在 IoT Edge 网关的新预览版中,一个模块可以通过 InvokeDeviceMethodAsync 调用另一个模块上的方法。这需要一个设备 ID 和一个模块 ID 作为参数,大概是为了告诉 Edge 如何路由呼叫。在同一网关内调用时,设备 ID 参数应为 IoT Edge 中心网关实例的设备 ID。模块 id 应该是从 IoT Edge 下推到网关的模块实例的模块 id。对这些 id 进行硬编码很容易,但显然是不可取的。您可以将硬编码值放在模块加载时读取的配置文件中,这样问题较少但仍然不理想。有没有办法以编程方式发现/填充所需的值?部署 json 配置是否在部署时支持变量替换或类似的填充实例 ID?

4

2 回答 2

1

我认为目前没有首选方式。你基本上有三个选择,我提到其中两个。

  1. EnvcreateOptions模块的部署清单部分中使用
  2. 您可以通过 Module Twin 作为属性推送到模块

我个人会选择选项 1,因为您在创建部署清单期间定义模块 ID,并且您还可以将环境变量注入清单中的特定模块创建选项。

我会选择方法 2,以防模块通信会根据某些域规则而改变,但在我的项目中找不到任何符合这种情况的用例。

顺便说一句,我会作为评论回答,但缺少声誉。

于 2017-12-19T06:26:29.563 回答
0

IoT Edge 设备上的模块调用方法的典型场景是,模块从同一设备上的其他模块或连接到该 IoT Edge 网关设备的下游设备接收遥测消息,并根据消息的内容决定调用发送器模块或设备上的方法来指示某些更改(例如,如果消息表明设备运行过热,则模块可以调用降低风扇速度的方法等)。

在这种情况下,模块可以从消息本身中获取发送者模块的设备Id和模块Id。消息对象具有以下提供此信息的属性 - ConnectionDeviceId ConnectionModuleId

于 2017-12-19T02:08:08.090 回答