Exemple #1
0
        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);
                }
            }
        }