Mike Lenart
Mike Lenart

Reputation: 939

How to create a TwinCollection with IDictionary<string, object> for GeoPoint property for Azure IoT Hub?

I have an IoT Device with a property that is a Geopoint.

I am using the Azure IoT C# sdk using the following GitHub examples: azure-iot-samples-csharp

I have code calling the public static TwinCollection CreatePropertyPatch(IDictionary<string, object> propertyPairs) method.

I know the format of the JSON needs to be:

{
  "DeviceLocation": {
    "lat": 47.64263,
    "lon": -122.13035,
    "alt": 0
  }
}

Is there a way to do this with IDictionary<string, object>??

If so what would the c# sample code look like?

Upvotes: 0

Views: 534

Answers (1)

Matthijs van der Veer
Matthijs van der Veer

Reputation: 4085

The PnpConvention class that you're referring to doesn't do a lot more than serialize the object you give it. So here's a few things you can do to update the device twin.

You can do it through an anonymous object:

var location = new { lat = 47.64263, lon = -122.13035, alt = 0 };
TwinCollection twinCollection = PnpConvention.CreatePropertyPatch("DeviceLocation", location);
await client.UpdateReportedPropertiesAsync(twinCollection);

Or create a class for this object:

public class DeviceLocation
{
    [JsonProperty("lat")]
    public double Latitude { get; set; }

    [JsonProperty("lon")]
    public double Longitude { get; set; }

    [JsonProperty("alt")]
    public double Altitude { get; set; }
}
var location = new DeviceLocation { Latitude = 47.64263, Longitude = -122.13035, Altitude = 0 };
TwinCollection twinCollection = PnpConvention.CreatePropertyPatch("DeviceLocation", location);
await client.UpdateReportedPropertiesAsync(twinCollection);

Or, my favourite, because the PnpConvention class doesn't do much for device twin updates:

TwinCollection twinCollection = new TwinCollection();
twinCollection["DeviceLocation"] = new { lat = 47.64263, lon = -122.13035, alt = 0 };
await client.UpdateReportedPropertiesAsync(twinCollection);

Upvotes: 1

Related Questions