Uruchomienie aplikacji.
Jest to typowa aplikacja Net , Blazor . Same uruchomienie nie różni się od innych tego typu aplikacji . Dodano tylko serwis który realizuje logikę sterowania urządzeniami .
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseSystemd()
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
config.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
Działanie serwisu .
Po starcie pobierane są dane z poszczególnych urządzeń oraz zapisywane do bazy danych
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int savetask = 0;
while (!stoppingToken.IsCancellationRequested)
{
var temp = await GetGetBakeTemperature();
var tempf = await GetGetFrozeTemperature();
var termatemp = await GetGetTermaTemperature();
await GetPressureMeasurement();
await GetOutside();
List<string> text = new List<string>();
text.Add("P:"+ HomeService.Data.SensorReandings.CentralHeatingStove.Temperature.ToString());
text.Add("Z:" + HomeService.Data.SensorReandings.OutSide.Temperature.ToString());
await SendToLCD(text);
if (savetask == 0)
{
await SaveDatabase();
}
savetask++;
//milisecood 600 000= 10 min, /10000 =60
if ( savetask==60)
{
savetask = 0;
}
await Task.Delay(10000, stoppingToken);
}
}
Przykład obsługi jednego urządzenia wraz
