在IoT Edge网关的新预览版中,一个模块可以通过InvokeDeviceMethodAsync调用另一个模块上的方法。这会将设备ID和模块ID作为参数,可能会告诉Edge如何路由呼叫。在同一网关内呼叫时,device id参数应为IoT Edge hub中网关实例的设备ID。模块ID应该是从IoT边缘下推到网关的模块实例的模块ID。很容易对这些id进行硬编码,但显然不可取。您可以将硬编码值放在配置文件中,这些配置文件可以在加载时由模块读取,这样可以解决问题,但仍然不理想。有没有办法以编程方式发现/填充所需的值?部署json configs是否支持变量替换或类似部署以填充实例ID?
答案 0 :(得分:1)
我认为目前没有一种首选方式。你基本上有三种选择,我提到其中两种。
Env
部分中使用createOptions
我个人会在创建部署清单期间定义模块ID时选择选项1,并且您还可以将环境变量注入清单中的特定模块创建选项。
如果模块通信会根据某些域规则发生变化,我会选择方法2,但在我的项目中找不到任何用例,这是真的。
BTW我会回答评论,但缺少声誉。
答案 1 :(得分:0)
IoT Edge设备上模块进行方法调用的典型方案是,模块从同一设备上的其他模块或连接到该IoT Edge网关设备的下游设备接收遥测消息,并根据消息内容,决定在发送方模块或设备上调用方法以指示某些更改(例如,如果消息指示设备运行过热,则模块可以调用方法来降低风扇速度等)。
在这种情况下,模块可以从消息本身获取发送方模块的设备ID和模块ID。消息对象具有以下属性,提供此信息 - ConnectionDeviceId ConnectionModuleId