public static void Setup(Cumulus cumulus) { MqttPublisher.cumulus = cumulus; var mqttFactory = new MqttFactory(); mqttClient = (MqttClient)mqttFactory.CreateMqttClient(); var clientId = Guid.NewGuid().ToString(); var mqttTcpOptions = new MQTTnet.Client.MqttClientTcpOptions { Server = cumulus.MQTT.Server, Port = cumulus.MQTT.Port, TlsOptions = new MQTTnet.Client.MqttClientTlsOptions { UseTls = cumulus.MQTT.UseTLS } }; switch (cumulus.MQTT.IpVersion) { case 4: mqttTcpOptions.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork; break; case 6: mqttTcpOptions.AddressFamily = System.Net.Sockets.AddressFamily.InterNetworkV6; break; default: mqttTcpOptions.AddressFamily = System.Net.Sockets.AddressFamily.Unspecified; break; } var mqttOptions = new MQTTnet.Client.MqttClientOptions { ChannelOptions = mqttTcpOptions, ClientId = clientId, Credentials = string.IsNullOrEmpty(cumulus.MQTT.Password) ? null : new MQTTnet.Client.MqttClientCredentials(cumulus.MQTT.Username, System.Text.Encoding.UTF8.GetBytes(cumulus.MQTT.Password)), CleanSession = true }; Connect(mqttOptions); mqttClient.DisconnectedAsync += (async e => { cumulus.LogMessage("Error: MQTT disconnected from the server"); await Task.Delay(TimeSpan.FromSeconds(5)); cumulus.LogDebugMessage("MQTT attempting to reconnect with server"); try { Connect(mqttOptions); cumulus.LogDebugMessage("MQTT reconnected OK"); } catch { cumulus.LogMessage("Error: MQTT reconnection to server failed"); } }); configured = true; }