public async Task RunAsync(string connectionString, ILogger logger, CancellationToken quitSignal)
    {
    
      this.logger = logger;
      
      deviceClient = DeviceClient.CreateFromConnectionString(connectionString, TransportType.Mqtt,
        new ClientOptions { ModelId = modelId });

      var refrigerator = new PnPComponent(deviceClient, logger);

      await refrigerator.SetPnPCommandHandlerAsync("Reset", async (MethodRequest req, object ctx) =>
      {
        logger.LogWarning("============> Processing Reset");
        MemoryLeak.FreeMemory();
        await refrigerator.ReportPropertyAsync("LastInitDateTime", DateTime.Now.ToUniversalTime());
        return await Task.FromResult(new MethodResponse(200));
      }, null);

      await refrigerator.SetPnPDesiredPropertyHandlerAsync<int>("RefreshInterval", (int newValue) =>
      {
        if (int.TryParse(newValue.ToString(), out int refreshInterval))
        {
          logger.LogWarning("=====================> RefreshInterval: " + refreshInterval);
          RefreshInterval = refreshInterval;
        }
      }, this);

      await Task.Run(async () =>
      {
        RefreshInterval = await refrigerator.ReadDesiredPropertyAsync<int>("RefreshInterval");
        if (RefreshInterval == default(int)) RefreshInterval = defaultRefreshInterval;

        await refrigerator.ReportPropertyAsync("SerialNumber", "1235435");
        await refrigerator.ReportPropertyAsync("LastInitDateTime", DateTime.Now.ToUniversalTime());

        int avg = 21;
        var rnd = new Random(Environment.TickCount);
        while (!quitSignal.IsCancellationRequested)
        {
          var payload = new
          {
            temp = avg + rnd.Next(10)
          };
          await refrigerator.SendTelemetryValueAsync(JsonConvert.SerializeObject(payload));
          logger.LogInformation("Sending CurrentTemperature: " + payload.temp);
          await Task.Delay(RefreshInterval * 1000);
          MemoryLeak.FillMemory();
        }
      });
    }
示例#2
0
        public async Task ComponentReportProperty()
        {
            await comp.ReportPropertyAsync("prop1", "val1");

            var compTwinValue = mockClient.ReportedCollection.GetPropertyValue <string>("c1", "prop1");

            Assert.Equal("val1", compTwinValue);
        }
        private async Task ProcessTempUpdateAsync(double targetTemp)
        {
            logger.LogWarning($"Ajusting temp from {CurrentTemperature} to {targetTemp}");
            // gradually increase current temp to target temp
            double step = (targetTemp - CurrentTemperature) / 10d;

            for (int i = 9; i >= 0; i--)
            {
                CurrentTemperature = targetTemp - step * (double)i;
                await tempSensor.SendTelemetryValueAsync(JsonConvert.SerializeObject(new { temperature = CurrentTemperature }));

                await tempSensor.ReportPropertyAsync("currentTemperature", CurrentTemperature);

                await Task.Delay(1000);
            }
            logger.LogWarning($"Adjustment complete");
        }
示例#4
0
        private async Task ProcessTempUpdateAsync(double targetTemp)
        {
            logger.LogWarning($"Ajusting temp from {CurrentTemperature} to {targetTemp}");
            // gradually increase current temp to target temp
            double step = (targetTemp - CurrentTemperature) / 10d;

            for (int i = 9; i >= 0; i--)
            {
                CurrentTemperature = targetTemp - step * i;
                await component.SendTelemetryValueAsync("{temperature:" + CurrentTemperature + "}");

                await component.ReportPropertyAsync("currentTemperature", CurrentTemperature);

                await Task.Delay(1000);
            }
            logger.LogWarning($"Adjustment complete");
        }
示例#5
0
        public async Task NoComponentReportProperty()
        {
            await nocomp.ReportPropertyAsync("prop1", "val1");

            Assert.Equal("val1", mockClient.ReportedCollection["prop1"].Value);
        }