예제 #1
0
 public SingleBlueRiiotPoolUpdaterFactory(ILoggerFactory loggerFactory, HassMqttManager hassMqttManager, FeatureUpdateManager updateManager, BlueClient blueClient, IOptions <BlueRiiotConfiguration> config)
 {
     _loggerFactory   = loggerFactory;
     _hassMqttManager = hassMqttManager;
     _updateManager   = updateManager;
     _blueClient      = blueClient;
     _config          = config.Value;
 }
        public SingleBlueRiiotPoolUpdater(ILogger logger, HassMqttManager hassMqttManager, FeatureUpdateManager updateManager, BlueClient blueClient, BlueRiiotConfiguration config, SwimmingPool pool)
        {
            _logger          = logger;
            _hassMqttManager = hassMqttManager;
            _pool            = pool;
            _updateManager   = updateManager;
            _blueClient      = blueClient;
            _config          = config;
            _delayCalculator = new DelayCalculator(_logger, config, pool.Name);

            _backgroundTask = new Task(async() => await Run(), _stoppingToken.Token);
        }
 public BlueRiiotMqttService(
     ILogger <BlueRiiotMqttService> logger,
     IOptions <BlueRiiotConfiguration> config,
     BlueClient blueClient,
     HassMqttManager hassMqttManager,
     SingleBlueRiiotPoolUpdaterFactory updaterFactory)
 {
     _logger          = logger;
     _blueClient      = blueClient;
     _hassMqttManager = hassMqttManager;
     _updaterFactory  = updaterFactory;
     _config          = config.Value;
 }
예제 #4
0
        private static void ConfigureServices(HostBuilderContext context, IServiceCollection services)
        {
            services
            .AddAndConfigureMqtt("BlueRiiot2MQTT", configuration =>
            {
                BlueRiiotHassConfiguration blueRiiotConfig = context.Configuration.GetSection("HASS").Get <BlueRiiotHassConfiguration>();
                configuration.SendDiscoveryDocuments       = blueRiiotConfig.EnableHASSDiscovery;
            })
            .Configure <CommonMqttConfiguration>(x => x.ClientId = "blueriiot2mqtt")
            .Configure <CommonMqttConfiguration>(context.Configuration.GetSection("MQTT"));

            // Commands
            services
            .AddMqttCommandService()
            .AddMqttCommandHandler <ForceSyncCommand>()
            .AddMqttCommandHandler <ReleaseLastUnprocessedCommand>()
            .AddMqttCommandHandler <SetPumpScheduleCommand>();

            services
            .Configure <BlueRiiotHassConfiguration>(context.Configuration.GetSection("HASS"))
            .Configure <HassConfiguration>(context.Configuration.GetSection("HASS"))
            .Configure <BlueRiiotConfiguration>(context.Configuration.GetSection("BlueRiiot"))
            .Configure <ProxyConfiguration>(context.Configuration.GetSection("Proxy"))
            .AddSingleton(x => new HassMqttTopicBuilder(x.GetOptions <HassConfiguration>()))
            .AddHttpClient("blueriiot")
            .AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(new[]
            {
                TimeSpan.FromSeconds(30),
                TimeSpan.FromSeconds(60)
            }))
            .ConfigurePrimaryHttpMessageHandler(provider =>
            {
                ProxyConfiguration proxyConfig = provider.GetOptions <ProxyConfiguration>();

                SocketsHttpHandler handler = new SocketsHttpHandler();

                if (proxyConfig.Uri != null)
                {
                    handler.Proxy = new WebProxy(proxyConfig.Uri);
                }

                return(handler);
            })
            .Services
            .AddBlueRiiotClient((provider, builder) =>
            {
                IHttpClientFactory httpFactory = provider.GetRequiredService <IHttpClientFactory>();
                BlueRiiotConfiguration config  = provider.GetOptions <BlueRiiotConfiguration>();

                builder
                .UseUsernamePassword(config.Username, config.Password)
                .UseHttpClientFactory(httpFactory, "blueriiot", settings =>
                {
                    if (config.ServerUrl != null)
                    {
                        settings.ServerUri = config.ServerUrl;
                    }
                });
            });

            services
            .AddAllFeatureUpdaters()
            .AddSingleton <FeatureUpdateManager>()
            .AddSingleton <SingleBlueRiiotPoolUpdaterFactory>()
            .AddSingleton <BlueRiiotMqttService>()
            .AddHostedService(x => x.GetRequiredService <BlueRiiotMqttService>());
        }
예제 #5
0
 public DelayCalculator(ILogger logger, BlueRiiotConfiguration config, string poolName)
 {
     _logger   = logger;
     _config   = config;
     _poolName = poolName;
 }