protected BaseReadingService(IMqttFactory factory, IMqttClientOptions options, ILogger logger, IHostApplicationLifetime lifetime)
 {
     Factory    = factory;
     Options    = options;
     Logger     = logger;
     Lifetime   = lifetime;
     SensorName = options.ClientId;
 }
Exemplo n.º 2
0
        /// <summary>
        /// Crate a <see cref="IRxMqttClient"/> from the factory.
        /// </summary>
        /// <param name="factory">The factory to use.</param>
        /// <returns>The <see cref="IRxMqttClient"/>.</returns>
        public static IRxMqttClient CreateRxMqttClient(this IMqttFactory factory)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            return(new RxMqttClient(factory.CreateManagedMqttClient(), factory.DefaultLogger));
        }
Exemplo n.º 3
0
        public static IMqttFactory UseWebSocket4Net(this IMqttFactory mqttFactory)
        {
            if (mqttFactory == null)
            {
                throw new ArgumentNullException(nameof(mqttFactory));
            }

            return(mqttFactory.UseClientAdapterFactory(new WebSocket4NetMqttClientAdapterFactory()));
        }
 public MqttReceiverService(ILogger <MqttReceiverService> logger, IMqttFactory mqttFactory, IOptions <MqttConfiguration> configurationOptions, IHostApplicationLifetime hostApplicationLifetime, ChannelWriter <MqttApplicationMessage> channelWriter) :
     base(logger, mqttFactory, configurationOptions.Value, hostApplicationLifetime)
 {
     ChannelWriter       = channelWriter;
     SubscriptionOptions = new MqttClientSubscribeOptionsBuilder()
                           .WithTopicFilter(
         new MqttTopicFilterBuilder()
         .WithTopic("#")
         .Build()
         ).Build();
 }
Exemplo n.º 5
0
        /// <summary>
        /// Crate a <see cref="IRxMqttClient"/> from the factory.
        /// </summary>
        /// <param name="factory">The factory to use.</param>
        /// <param name="logger">The mqtt net logger to use.</param>
        /// <returns>The <see cref="IRxMqttClient"/>.</returns>
        public static IRxMqttClient CreateRxMqttClient(this IMqttFactory factory, IMqttNetLogger logger)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            return(new RxMqttClient(factory.CreateManagedMqttClient(logger), logger));
        }
Exemplo n.º 6
0
        public MQTTPublisher(IMqttFactory factory, MQTTOptions options)
        {
            _mqttClient = factory.CreateMqttClient();
            _options    = options;

            var builder = new MqttClientOptionsBuilder().WithTcpServer(_options.Host, _options.Port);

            if (!string.IsNullOrEmpty(_options.Username) ||
                !string.IsNullOrEmpty(_options.Password.ToString()))
            {
                builder.WithCredentials(_options.Username, _options.Password.ToString());
            }

            _mqttClientOptions = builder.Build();
        }
Exemplo n.º 7
0
        protected ReliableMqttClient(ILogger logger, IMqttFactory factory, TConfiguration configuration, IHostApplicationLifetime applicationLifetime)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            _foreverJitter = new ForeverJitter(TimeSpan.FromSeconds(1), 10, TimeSpan.FromSeconds(60));
            _jitterBackoff = new JitterBackoff(_foreverJitter);

            Logger = logger;
            ApplicationLifetime = applicationLifetime;
            Client        = factory.CreateMqttClient();
            Options       = configuration.GetOptions();
            Configuration = configuration;

            _policy = Policy.Handle <MqttCommunicationException>()
                      .WaitAndRetryAsync(_foreverJitter);
        }
Exemplo n.º 8
0
        public static IServiceCollection AddAndConfigureMqtt(this IServiceCollection services, string applicationName,
                                                             Action <HassMqttManagerConfiguration> hassMqttManagerConfiguration = null,
                                                             Action <ManagedMqttClientOptionsBuilder> mqttOptionsBuilder        = null)
        {
            // MQTT setup
            // This client will be configured to use MqttEvents to distribute connect/disconnect events
            services
            .AddMqttClientFactoryWithLogging()
            .AddSingleton <IManagedMqttClientOptions>(provider =>
            {
                CommonMqttConfiguration mqttConfig = provider.GetRequiredService <IOptions <CommonMqttConfiguration> >().Value;

                // Prepare options
                ManagedMqttClientOptionsBuilder optionsBuilder = new ManagedMqttClientOptionsBuilder()
                                                                 .WithClientOptions(builder =>
                {
                    builder
                    .WithTcpServer(mqttConfig.Server, mqttConfig.Port)
                    .WithCleanSession(false)
                    .WithClientId(mqttConfig.ClientId);

                    // Configure HASS LWT for alive services
                    builder.ConfigureHassConnectedEntityServiceLastWill(provider);

                    if (!string.IsNullOrEmpty(mqttConfig.Username))
                    {
                        builder.WithCredentials(mqttConfig.Username, mqttConfig.Password);
                    }

                    if (mqttConfig.KeepAlivePeriod.HasValue)
                    {
                        builder.WithKeepAlivePeriod(mqttConfig.KeepAlivePeriod.Value);
                    }
                });

                optionsBuilder.WithAutoReconnect()
                .WithAutoReconnectDelay(mqttConfig.ReconnectInterval)
                .WithMaxPendingMessages(10000)
                .WithPendingMessagesOverflowStrategy(MqttPendingMessagesOverflowStrategy.DropNewMessage);

                // Additional config
                mqttOptionsBuilder?.Invoke(optionsBuilder);

                return(optionsBuilder.Build());
            })
            .AddSingleton(provider =>
            {
                // TODO: Support TLS & client certs
                IHostApplicationLifetime appLifetime = provider.GetRequiredService <IHostApplicationLifetime>();
                CancellationToken stoppingtoken      = appLifetime.ApplicationStopping;

                IMqttFactory factory          = provider.GetRequiredService <IMqttFactory>();
                IManagedMqttClient mqttClient = factory.CreateManagedMqttClient();

                // Hook up event handlers
                mqttClient.ConfigureMqttEvents(provider, stoppingtoken);

                return(mqttClient);
            });

            // Add MQTT events manager to help us distribute connected/disconnected events
            services.AddMqttEvents();

            // Add MQTT events manager to help us distribute subscribed messages
            services.AddMqttMessageReceiverService();

            // Add HASS service that indicates if we're alive or not (uses LWT feature of MQTT)
            services.AddHassConnectedEntityService(applicationName);

            // Add HASS MQTT Manager
            services.AddHassMqttManager(hassMqttManagerConfiguration);

            // Add connecter
            services.AddMqttLifetimeService();

            return(services);
        }
Exemplo n.º 9
0
 public Shelly1PM(IMqttFactory factory, string broker, string controlTopic)
 {
     _factory      = factory;
     _broker       = broker;
     _controlTopic = controlTopic;
 }
Exemplo n.º 10
0
 public MqttNetAdapter(IMqttFactory mqttFactory, IOptions <MqttConfig> mqttConfig)
 {
     _mqtt       = mqttFactory.CreateMqttClient();
     _mqttConfig = mqttConfig.Value;
 }
Exemplo n.º 11
0
 public ManagedMqttClientFactory(IMqttFactory mqttFactory)
 {
     _mqttFactory = mqttFactory;
 }
Exemplo n.º 12
0
 public ReadingService(IMqttFactory factory, IMqttClientOptions options, ILogger <ReadingService> logger, IHostApplicationLifetime lifetime)
     : base(factory, options, logger, lifetime)
 {
 }
Exemplo n.º 13
0
 public TasmotaSwitch(IMqttFactory factory, string broker, string controlTopic)
 {
     _factory      = factory;
     _broker       = broker;
     _controlTopic = controlTopic;
 }
Exemplo n.º 14
0
 /// <summary>
 /// Standard functionality - set the IMqttFactory that will return a client
 /// </summary>
 /// <param name="mqttFactory"></param>
 public MqttFactoryWrapper(IMqttFactory mqttFactory)
 {
     _mqttFactory = mqttFactory;
 }
Exemplo n.º 15
0
 public ReadingService(IMqttFactory factory, IMqttClientOptions options, ILogger <ReadingService> logger, IHostApplicationLifetime lifetime, IOptions <ReadingServiceOptions> serviceOptions)
     : base(factory, options, logger, lifetime)
 {
     _serviceOptions = serviceOptions.Value;
 }