Пример #1
0
        // Send device serial number over property update.
        private async Task SendDeviceSerialNumberAsync(CancellationToken cancellationToken)
        {
            string propertyName       = "serialNumber";
            string propertyPatch      = PnpHelper.CreatePropertyPatch(propertyName, JsonConvert.SerializeObject(SerialNumber));
            var    reportedProperties = new TwinCollection(propertyPatch);

            await _deviceClient.UpdateReportedPropertiesAsync(reportedProperties, cancellationToken);

            _logger.LogDebug($"Property: Update - {{ \"{propertyName}\": \"{SerialNumber}\" }} is {StatusCode.Completed}.");
        }
Пример #2
0
        private async Task UpdateMaxTemperatureSinceLastRebootAsync(string componentName, CancellationToken cancellationToken)
        {
            string propertyName       = "maxTempSinceLastReboot";
            double maxTemp            = _maxTemp[componentName];
            string propertyPatch      = PnpHelper.CreatePropertyPatch(propertyName, JsonConvert.SerializeObject(maxTemp), componentName);
            var    reportedProperties = new TwinCollection(propertyPatch);

            await _deviceClient.UpdateReportedPropertiesAsync(reportedProperties, cancellationToken);

            _logger.LogDebug($"Property: Update - component=\"{componentName}\", {{ \"{propertyName}\": {maxTemp}°C }} is {StatusCode.Completed}.");
        }
Пример #3
0
        // Send working set of device memory over telemetry.
        private async Task SendDeviceMemoryAsync(CancellationToken cancellationToken)
        {
            string telemetryName = "workingSet";
            long   workingSet    = Process.GetCurrentProcess().PrivateMemorySize64 / 1024;

            using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(workingSet));

            await _deviceClient.SendEventAsync(msg, cancellationToken);

            _logger.LogDebug($"Telemetry: Sent - {{ \"{telemetryName}\": {workingSet}KiB }}.");
        }
Пример #4
0
        // Send working set of device memory over telemetry.
        private static async Task SendDeviceMemoryAsync()
        {
            string telemetryName = "workingSet";
            long   workingSet    = Environment.WorkingSet / 1024;

            Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(workingSet));

            await s_deviceClient.SendEventAsync(msg);

            s_logger.LogDebug($"Telemetry: Sent - {{ \"{telemetryName}\": {workingSet}KiB }}.");
        }
Пример #5
0
        // Provision a device via DPS, by sending the PnP model Id as DPS payload.
        private static async Task <DeviceRegistrationResult> ProvisionDeviceAsync(Parameters parameters, CancellationToken cancellationToken)
        {
            SecurityProvider             symmetricKeyProvider = new SecurityProviderSymmetricKey(parameters.DeviceId, parameters.DeviceSymmetricKey, null);
            ProvisioningTransportHandler mqttTransportHandler = new ProvisioningTransportHandlerMqtt();
            var pdc = ProvisioningDeviceClient.Create(parameters.DpsEndpoint, parameters.DpsIdScope, symmetricKeyProvider, mqttTransportHandler);

            var pnpPayload = new ProvisioningRegistrationAdditionalData
            {
                JsonData = PnpHelper.CreateDpsPayload(ModelId),
            };

            return(await pdc.RegisterAsync(pnpPayload, cancellationToken));
        }
Пример #6
0
        // The desired property update callback, which receives the target temperature as a desired property update,
        // and updates the current temperature value over telemetry and property update.
        private async Task TargetTemperatureUpdateCallbackAsync(TwinCollection desiredProperties, object userContext)
        {
            string componentName = (string)userContext;
            string propertyName  = "targetTemperature";

            (bool targetTempUpdateReceived, double targetTemperature) = PnpHelper.GetPropertyFromTwin <double>(desiredProperties, propertyName, componentName);
            if (targetTempUpdateReceived)
            {
                _logger.LogDebug($"Property: Received - component=\"{componentName}\", {{ \"{propertyName}\": {targetTemperature}°C }}.");

                string pendingPropertyPatch = PnpHelper.CreatePropertyEmbeddedValuePatch(
                    propertyName,
                    JsonConvert.SerializeObject(targetTemperature),
                    ackCode: (int)StatusCode.InProgress,
                    ackVersion: desiredProperties.Version,
                    componentName: componentName);

                var pendingReportedProperty = new TwinCollection(pendingPropertyPatch);
                await _deviceClient.UpdateReportedPropertiesAsync(pendingReportedProperty);

                _logger.LogDebug($"Property: Update - component=\"{componentName}\", {{\"{propertyName}\": {targetTemperature}°C }} is {StatusCode.InProgress}");

                // Update Temperature in 2 steps
                double step = (targetTemperature - _temperature[componentName]) / 2d;
                for (int i = 1; i <= 2; i++)
                {
                    _temperature[componentName] = Math.Round(_temperature[componentName] + step, 1);
                    await Task.Delay(6 * 1000);
                }

                string completedPropertyPatch = PnpHelper.CreatePropertyEmbeddedValuePatch(
                    propertyName,
                    JsonConvert.SerializeObject(_temperature[componentName]),
                    ackCode: (int)StatusCode.Completed,
                    ackVersion: desiredProperties.Version,
                    serializedAckDescription: JsonConvert.SerializeObject("Successfully updated target temperature"),
                    componentName: componentName);

                var completedReportedProperty = new TwinCollection(completedPropertyPatch);
                await _deviceClient.UpdateReportedPropertiesAsync(completedReportedProperty);

                _logger.LogDebug($"Property: Update - component=\"{componentName}\", {{\"{propertyName}\": {_temperature[componentName]}°C }} is {StatusCode.Completed}");
            }
            else
            {
                _logger.LogDebug($"Property: Update - component=\"{componentName}\", received an update which is not associated with a valid property.");
            }
        }
Пример #7
0
        private static async Task SendTemperatureTelemetryAsync(string componentName)
        {
            string  telemetryName      = "temperature";
            double  currentTemperature = s_temperature[componentName];
            Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);

            await s_deviceClient.SendEventAsync(msg);

            s_logger.LogDebug($"Telemetry: Sent - component=\"{componentName}\", {{ \"{telemetryName}\": {currentTemperature}°C }}.");

            if (s_temperatureReadings.ContainsKey(componentName))
            {
                s_temperatureReadings[componentName].TryAdd(DateTimeOffset.Now, currentTemperature);
            }
            else
            {
                s_temperatureReadings.TryAdd(componentName, new Dictionary <DateTimeOffset, double>()
                {
                    { DateTimeOffset.Now, currentTemperature }
                });
            }
        }