public Task ConfigureService(IHwSettings settings, CancellationToken ct) { _hwSettings = (RelayHwSettings)settings; try { _relayDevice.Configure(_hwSettings); switch (_hwSettings.ActivateOn) { case Activators.Sunset: _sunsetService.Sunset += OnSunsetActivateEventHandler; break; case Activators.TimeOn: break; default: _logger.LogError("Relay {Name} activation not configured.", _hwSettings.Name); break; } _logger.LogDebug("Relay {Name} activating configured for {Event}.", _hwSettings.Name, _hwSettings.ActivateOn); return(Task.CompletedTask); } catch (Exception e) { return(Task.FromException(e)); } }
public async Task StartAsync(CancellationToken cancellationToken) { _hwSettings = _gsmService.GetSettings(); try { if (_hwSettings.Attach) { await _gsmService.ConfigureService(cancellationToken); _readModemTimer = new Timer( ReadModem, null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromSeconds(_hwSettings.ReadInterval)); _logger.LogInformation("Configured with modem read period: {ModemReadPeriod} sec.", _hwSettings.ReadInterval); } else { _logger.LogDebug("Service not initialized. Device not configured."); } } catch (OperationCanceledException) { _logger.LogDebug("Cancelled."); } catch (Exception e) { _logger.LogCritical(e, "Starting service failed."); } }
public async Task StartAsync(CancellationToken cancellationToken) { _sunsetHwSettings = _sunsetService.GetSettings(); if (_sunsetHwSettings.Attach) { await _sunsetService.ConfigureService(cancellationToken); _readApiTimer = new Timer( FetchAndStoreSunsetTime, null, TimeSpan.FromMilliseconds(200), TimeSpan.FromHours(_sunsetHwSettings.ReadInterval)); _logger.LogInformation("Sunset API configured with read&save period: {WeatherReadPeriod} hours.", _sunsetHwSettings.ReadInterval); } else { _logger.LogDebug("Sunset API not initialized."); } IEnumerable <IHwSettings> relaysSettingsList; using (var scope = _serviceProvider.CreateScope()) { var relayService = scope.ServiceProvider.GetRequiredService <IRelayService>(); relaysSettingsList = relayService.GetSettings(); } foreach (var settings in relaysSettingsList) { if (settings.Attach) { using var scope = _serviceProvider.CreateScope(); var relayService = scope.ServiceProvider.GetRequiredService <IRelayService>(); await relayService.ConfigureService(settings, cancellationToken); _logger.LogInformation("Relay {Name} configured with read period: {RelayReadPeriod} sec.", settings.Name, settings.ReadInterval); _ = relayService.Run(cancellationToken); // temporary solution var relayTimer = new Timer( Relay, null, TimeSpan.FromMilliseconds(80), TimeSpan.FromSeconds(settings.ReadInterval)); _relays.Add(Tuple.Create(relayService, settings, relayTimer)); } else { _logger.LogTrace("Relay {Name} not initialized.", settings.Name); } } }