从环境中获取设备连接字符串

时间:2018-07-25 16:19:44

标签: azure-iot-edge

可以使用以下环境从环境中创建

IoT模块:

 ModuleClient.CreateFromEnvironmentAsync(settings)

但是,似乎没有一种等效的设备方法。现在,我正在程序中设置设备连接字符串以对其进行测试,但是对于在那里部署的所有边缘设备,是否有更好的方法从iotedge/config.yaml中读取连接字符串?

.NET和python这样做的方法将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用yaml解析库反序列化文档,例如YamlDotNet。实际上,您可以在物联网边缘引用YamlDocument。但是在类中,它没有提供获取键值的方法。请参考以下代码。

public class YamlDocument
{
    readonly Dictionary<object, object> root;

    public YamlDocument(string input)
    {
        var reader = new StringReader(input);
        var deserializer = new Deserializer();
        this.root = (Dictionary<object, object>)deserializer.Deserialize(reader);
    }

    public object GetKeyValue(string key)
    {
        if(this.root.ContainsKey(key))
        {
            return this.root[key];
        }

        foreach(var item in this.root)
        {
            var subItem = item.Value as Dictionary<object, object>;
            if(subItem != null && subItem.ContainsKey(key))
            {
                return subItem[key];
            }
        }

        return null;            
    }
}

然后您可以从config.yaml获取设备连接字符串。如果使用python,则可以导入yaml库来分析文件。

        StreamReader sr = new StreamReader(@"C:\ProgramData\iotedge\config.yaml");
        var yamlString = sr.ReadToEnd();

        var yamlDoc = new YamlDocument(yamlString);
        var connectionString = yamlDoc.GetKeyValue("device_connection_string");
        Console.WriteLine("{0}", connectionString);

答案 1 :(得分:0)

要从主机获取配置文件,请将以下内容添加到docker部署文件中。请注意,源文件是config1.yaml,该文件与config.yaml相同,只是源文件对所有人(不仅仅是root)具有读取权限。

“ createOptions”:“ {\” HostConfig \“:{\” Binds \“:[\” / etc / iotedge / config1.yaml:/app/copiedConfig.yaml \“]}}”“

在上面的行中,可以在容器中使用copyedConfig.yaml文件,以及@Michael Xu的解析代码来导出连接字符串。

从长远来看,人们可能仍想使用设备供应服务,但希望这对出于某种原因使用设备连接字符串的人们有所帮助。