in edge-modules/SimulatedTemperatureSensor/src/Program.cs [190:269]
static async Task SendEvents(
ModuleClient moduleClient,
int messageCount,
SimulatorParameters sim,
CancellationTokenSource cts)
{
int count = 1;
double currentTemp = sim.MachineTempMin;
double normal = (sim.MachinePressureMax - sim.MachinePressureMin) / (sim.MachineTempMax - sim.MachineTempMin);
while (!cts.Token.IsCancellationRequested && (SendUnlimitedMessages(messageCount) || messageCount >= count))
{
if (Reset)
{
currentTemp = sim.MachineTempMin;
Reset.Set(false);
}
if (currentTemp > sim.MachineTempMax)
{
currentTemp += Rnd.NextDouble() - 0.5; // add value between [-0.5..0.5]
}
else
{
currentTemp += -0.25 + (Rnd.NextDouble() * 1.5); // add value between [-0.25..1.25] - average +0.5
}
if (sendData)
{
var tempData = new MessageBody
{
Machine = new Machine
{
Temperature = currentTemp,
Pressure = sim.MachinePressureMin + ((currentTemp - sim.MachineTempMin) * normal),
},
Ambient = new Ambient
{
Temperature = sim.AmbientTemp + Rnd.NextDouble() - 0.5,
Humidity = Rnd.Next(24, 27)
},
TimeCreated = DateTime.UtcNow
};
string dataBuffer = JsonConvert.SerializeObject(tempData);
var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer));
eventMessage.ContentEncoding = "utf-8";
eventMessage.ContentType = "application/json";
eventMessage.Properties.Add("sequenceNumber", count.ToString());
eventMessage.Properties.Add("batchId", BatchId.ToString());
logger.LogInformation($"Sending message: {count}, Body: [{dataBuffer}]");
try
{
await moduleClient.SendEventAsync("temperatureOutput", eventMessage, cts.Token);
}
catch (OperationCanceledException)
{
logger.LogError($"SendEvents has been canceled, sent {count - 1} messages.");
return;
}
count++;
}
try
{
await Task.Delay(messageDelay, cts.Token);
}
catch (TaskCanceledException)
{
logger.LogError($"SendEvents has been canceled, sent {count - 1} messages.");
return;
}
}
if (messageCount < count)
{
logger.LogInformation($"Done sending {messageCount} messages");
}
}