コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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...");
                }
            }
        }
コード例 #3
0
        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());
        }