public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { string requestBody = new StreamReader(req.Body).ReadToEnd(); dynamic source = JsonConvert.DeserializeObject(requestBody); if (source == null) { log.LogError("Request Body cannot be empty"); return(new BadRequestObjectResult("Request Body cannot be empty")); } string meterNumber = source.MeterNumber; int? id = source.Id; if (string.IsNullOrWhiteSpace(meterNumber)) { log.LogError("Meter Number cannot be empty"); return(new BadRequestObjectResult("Meter Number cannot be empty")); } if (!id.HasValue) { log.LogError("Id cannot be empty"); return(new BadRequestObjectResult("Id cannot be empty")); } try { registryManager = RegistryManager.CreateFromConnectionString(connString); log.LogInformation("Creating device"); var primaryKey = await CreateDeviceIdentity(meterNumber, log); var patchDocument = new JsonPatchDocument(); patchDocument.Add("/clientData/IoT Hub Info/Security/Primary Key", primaryKey); log.LogInformation("Patching Source"); await OpisenseClient.PatchOpisenseSource(id.Value, patchDocument); return(new OkObjectResult($"Device {meterNumber} created.")); } catch (Exception e) { log.LogError(e.Message, e); return(new ExceptionResult(e, true)); } }
public static async Task RunCreateDeleteDevice([EventHubTrigger("createdelete", Connection = "EventHub")] EventData[] messages, ILogger log) { foreach (var message in messages.Deserialize <dynamic>()) { if (message.eventType == "Microsoft.Devices.DeviceCreated") { log.LogInformation("Received DeviceCreated message. Will create source and variables"); var sourceId = await OpisenseClient.CreateOpisenseSource(new { siteId = DefaultSiteIdForNewSources, serialNumber = message.data.twin.deviceId, energyTypeId = 17, name = message.data.twin.deviceId, sourceTypeId = 72, timeZoneId = "UTC" }, new List <object> { new { name = "Temperature", unitId = 28, // Celsius Degrees granularity = 15, granularityTimeBase = "Minute", quantityType = "Instantaneous", mappingConfig = "temperature" }, new { name = "Humidity", unitId = 31, // Percentages granularity = 15, granularityTimeBase = "Minute", quantityType = "Instantaneous", mappingConfig = "humidity" } }); log.LogInformation($"Successfully created source<{sourceId}>"); } else { log.LogInformation($"Received <{message.eventType}> message. Ignoring..."); } } }
public static async Task RunDataStream([EventHubTrigger("datahub", Connection = "EventHub")] EventData[] messages, ILogger log) { var data = new List <OpisenseData>(); foreach (var eventData in messages) { var message = JsonConvert.DeserializeObject <SimulatorMessage>(Encoding.UTF8.GetString(eventData.Body.Array)); data.Add(new OpisenseData { MeterNumber = message.DeviceId, MappingConfig = "Temperature", Data = new List <OpisenseDataPoint> { new OpisenseDataPoint { Date = eventData.SystemProperties.EnqueuedTimeUtc, Value = message.Temperature } } }); data.Add(new OpisenseData { MeterNumber = message.DeviceId, MappingConfig = "Humidity", Data = new List <OpisenseDataPoint> { new OpisenseDataPoint { Date = eventData.SystemProperties.EnqueuedTimeUtc, Value = message.Humidity } } }); } await OpisenseClient.SendData(data.Merge()); }