/// <summary>
        /// Writes provided settings to the config file and invokes a reconfigure to the current mqqtClient
        /// </summary>
        /// <param name="settings"></param>
        public async void WriteMqttBrokerSettingsAsync(MqttSettings settings)
        {
            while (this._brokerSettingsFileLocked)
            {
                await Task.Delay(500);
            }
            this._brokerSettingsFileLocked = true;
            using (FileStream stream = new FileStream(Path.Combine(path, "mqttbroker.json"), FileMode.Open))
            {
                stream.SetLength(0);
                Log.Logger.Information($"writing configured mqttbroker to: {stream.Name}");

                ConfiguredMqttBroker configuredBroker = new ConfiguredMqttBroker()
                {
                    Host     = settings.Host,
                    Username = settings.Username,
                    Password = settings.Password
                };

                await JsonSerializer.SerializeAsync(stream, configuredBroker);

                stream.Close();
            }
            this._brokerSettingsFileLocked = false;
            this.MqqtConfigChangedHandler.Invoke(await this.GetMqttClientOptionsAsync());
        }
        public async Task <IManagedMqttClientOptions> GetMqttClientOptionsAsync()
        {
            ConfiguredMqttBroker configuredBroker = await ReadMqttSettingsAsync();

            if (configuredBroker != null && configuredBroker.Host != null)
            {
                var mqttClientOptions = new MqttClientOptionsBuilder()
                                        .WithTcpServer(configuredBroker.Host, configuredBroker.Port)
                                        .WithTls(new MqttClientOptionsBuilderTlsParameters()
                {
                    UseTls = configuredBroker.UseTLS,
                    AllowUntrustedCertificates = true
                })
                                        .WithCredentials(configuredBroker.Username, configuredBroker.Password.ToString())
                                        .WithKeepAlivePeriod(TimeSpan.FromSeconds(30))
                                        .WithWillMessage(new MqttApplicationMessageBuilder()
                                                         .WithRetainFlag()
                                                         .WithTopic($"homeassistant/sensor/{_deviceConfigModel.Name}/availability")
                                                         .WithPayload("offline")
                                                         .Build())
                                        .Build();
                return(new ManagedMqttClientOptionsBuilder().WithClientOptions(mqttClientOptions).Build());
            }
            else
            {
                Program.StartUI();
                return(null);
            }
        }
        public async Task <MqttSettings> GetMqttBrokerSettings()
        {
            ConfiguredMqttBroker broker = await ReadMqttSettingsAsync();

            return(new MqttSettings
            {
                Host = broker?.Host,
                Username = broker?.Username,
                Password = broker?.Password
            });
        }
        public async Task <IMqttClientOptions> GetMqttClientOptionsAsync()
        {
            ConfiguredMqttBroker configuredBroker = await ReadMqttSettingsAsync();

            if (configuredBroker != null && configuredBroker.Host != null)
            {
                var mqttClientOptions = new MqttClientOptionsBuilder()
                                        .WithTcpServer(configuredBroker.Host)
                                        // .WithTls()
                                        .WithCredentials(configuredBroker.Username, configuredBroker.Password.ToString())
                                        .Build();
                return(mqttClientOptions);
            }
            else
            {
                Program.StartUI();
                return(null);
            }
        }
        /// <summary>
        /// Gets the saved broker settings from configfile. Null if not found.
        /// </summary>
        /// <returns></returns>
        public async Task <ConfiguredMqttBroker> ReadMqttSettingsAsync()
        {
            while (this._brokerSettingsFileLocked)
            {
                await Task.Delay(500);
            }
            this._brokerSettingsFileLocked = true;
            ConfiguredMqttBroker configuredBroker = null;

            using (FileStream stream = new FileStream(Path.Combine(path, "mqttbroker.json"), FileMode.Open))
            {
                Log.Logger.Information($"reading configured mqttbroker from: {stream.Name}");
                if (stream.Length > 0)
                {
                    configuredBroker = await JsonSerializer.DeserializeAsync <ConfiguredMqttBroker>(stream);
                }
                stream.Close();
            }

            this._brokerSettingsFileLocked = false;
            return(configuredBroker);
        }
Example #6
0
        public async Task <IMqttClientOptions> GetMqttClientOptionsAsync()
        {
            ConfiguredMqttBroker configuredBroker = await ReadMqttSettingsAsync();

            if (configuredBroker != null && configuredBroker.Host != null)
            {
                var mqttClientOptions = new MqttClientOptionsBuilder()
                                        .WithTcpServer(configuredBroker.Host, configuredBroker.Port)
                                        .WithTls(new MqttClientOptionsBuilderTlsParameters()
                {
                    UseTls = configuredBroker.UseTLS,
                    AllowUntrustedCertificates = true
                })
                                        .WithCredentials(configuredBroker.Username, configuredBroker.Password.ToString())
                                        .Build();
                return(mqttClientOptions);
            }
            else
            {
                Program.StartUI();
                return(null);
            }
        }