Exemplo n.º 1
0
        public static async Task RunAsync()
        {
            var services = new ServiceCollection()
                           .AddMqttClient()
                           .AddLogging()
                           .BuildServiceProvider();

            services.GetService <ILoggerFactory>()
            .AddConsole();

            var ms = new ClientRetainedMessageHandler();

            var options = new ManagedMqttClientOptions
            {
                ClientOptions = new MqttClientOptions
                {
                    ClientId       = "MQTTnetManagedClientTest",
                    Credentials    = new RandomPassword(),
                    ChannelOptions = new MqttClientTcpOptions
                    {
                        Server = "broker.hivemq.com"
                    }
                },

                AutoReconnectDelay = TimeSpan.FromSeconds(1),
                Storage            = ms
            };

            try
            {
                var managedClient = services.GetRequiredService <ManagedMqttClient>();
                managedClient.ApplicationMessageReceived += (s, e) =>
                {
                    Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
                };

                await managedClient.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("Step").WithPayload("1").Build());

                await managedClient.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("Step").WithPayload("2").WithAtLeastOnceQoS().Build());

                await managedClient.StartAsync(options);

                await managedClient.SubscribeAsync(new TopicFilter("xyz", MqttQualityOfServiceLevel.AtMostOnce));

                await managedClient.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("Step").WithPayload("3").Build());

                Console.WriteLine("Managed client started.");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 4
        /// </summary>
        /// <returns></returns>
        static async Task ManagedClientTest()
        {
            var ms = new ClientRetainedMessageHandler();

            var options = new MqttManagedClientOptions
            {
                ClientOptions = new MqttClientOptions
                {
                    ClientId    = "MQTTnetManagedClientTest",
                    Credentials = new MqttClientCredentials()
                    {
                        Username = "******",
                        Password = Guid.NewGuid().ToString()
                    },
                    ChannelOptions = new MqttClientTcpOptions
                    {
                        Server = "broker.hivemq.com"
                    }
                },

                AutoReconnectDelay = TimeSpan.FromSeconds(1),
                Storage            = ms
            };

            try
            {
                var managedClient = new MqttFactory().CreateManagedMqttClient();

                managedClient.ApplicationMessageReceived += (s, e) =>
                {
                    Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
                };

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("1"));

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("2").WithAtLeastOnceQoS());

                await managedClient.StartAsync(options);

                await managedClient.SubscribeAsync(new TopicFilter("xyz", MqttQualityOfServiceLevel.AtMostOnce));

                await managedClient.SubscribeAsync(new TopicFilter("abc", MqttQualityOfServiceLevel.AtMostOnce));

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("3"));

                Console.WriteLine("Managed client started.");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 3
0
        public static async Task RunAsync()
        {
            var ms = new ClientRetainedMessageHandler();

            var options = new ManagedMqttClientOptions
            {
                ClientOptions = new MqttClientOptions
                {
                    ClientId       = "MQTTnetManagedClientTest",
                    Credentials    = new RandomPassword(),
                    ChannelOptions = new MqttClientTcpOptions
                    {
                        Server = "broker.hivemq.com"
                    }
                },

                AutoReconnectDelay = TimeSpan.FromSeconds(1),
                Storage            = ms
            };

            try
            {
                var managedClient = new MqttFactory().CreateManagedMqttClient();
                managedClient.ApplicationMessageReceivedAsync += e =>
                {
                    Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
                    return(PlatformAbstractionLayer.CompletedTask);
                };

                await managedClient.StartAsync(options);

                await managedClient.EnqueueAsync(topic : "Step", payload : "1");

                await managedClient.EnqueueAsync(topic : "Step", payload : "2", MqttQualityOfServiceLevel.AtLeastOnce);

                await managedClient.SubscribeAsync(topic : "xyz", qualityOfServiceLevel : MqttQualityOfServiceLevel.AtMostOnce);

                await managedClient.SubscribeAsync(topic : "abc", qualityOfServiceLevel : MqttQualityOfServiceLevel.AtMostOnce);

                await managedClient.EnqueueAsync(topic : "Step", payload : "3");

                Console.WriteLine("Managed client started.");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 4
0
        public static async Task RunAsync()
        {
            var ms = new ClientRetainedMessageHandler();

            var options = new ManagedMqttClientOptions
            {
                ClientOptions = new MqttClientOptions
                {
                    ClientId       = "MQTTnetManagedClientTest",
                    Credentials    = new RandomPassword(),
                    ChannelOptions = new MqttClientTcpOptions
                    {
                        Server = "broker.hivemq.com"
                    }
                },

                AutoReconnectDelay = TimeSpan.FromSeconds(1),
                Storage            = ms
            };

            try
            {
                var managedClient = new MqttFactory().CreateManagedMqttClient();
                managedClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(e =>
                {
                    Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
                });

                await managedClient.StartAsync(options);

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("1"));

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("2").WithAtLeastOnceQoS());

                await managedClient.SubscribeAsync(new MqttTopicFilter { Topic = "xyz", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });

                await managedClient.SubscribeAsync(new MqttTopicFilter { Topic = "abc", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });

                await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("3"));

                Console.WriteLine("Managed client started.");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 5
0
 //MQTTClient connector (Throw in constructed client, brokerIP) [WebSocket]
 public static async Task ManagedMqttConnectWebSocket(IManagedMqttClient managedMqttClient, string brokerIP)
 {
     // Use WebSocket connection.
     string clientID = Guid.NewGuid().ToString();
     var    ms       = new ClientRetainedMessageHandler();
     var    options  = new ManagedMqttClientOptions
     {
         ClientOptions = new MqttClientOptions
         {
             ClientId       = "MQTTnetManagedClient " + clientID + " (WebSocket)",
             ChannelOptions = new MqttClientWebSocketOptions
             {
                 Uri = brokerIP
             }
         },
         AutoReconnectDelay = TimeSpan.FromSeconds(1),
         Storage            = ms
     };
     await managedMqttClient.StartAsync(options);
 }
Exemplo n.º 6
0
        public static async Task RunAsync(string type)
        {
            var ms = new ClientRetainedMessageHandler();

            var options = new ManagedMqttClientOptions
            {
                ClientOptions = new MqttClientOptions
                {
                    ClientId       = Settings.MQTT.MQTTClientId,
                    Credentials    = new RandomPassword(),
                    ChannelOptions = new MqttClientTcpOptions
                    {
                        Server = Settings.MQTT.Server,
                        Port   = Settings.MQTT.Port
                    }
                },

                AutoReconnectDelay = TimeSpan.FromSeconds(1),
                Storage            = ms
            };

            try
            {
                managedClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(e =>
                {
                    Logging.DebugWrite("Debug", ">> RECEIVED: " + e.ApplicationMessage.Topic);
                });

                await managedClient.StartAsync(options);

                if (type == "config")
                {
                    //these are for inverter values -32
                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_inverter_mode/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_inverter_mode\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_inverter_mode\",\"icon\": \"mdi:solar_power\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_grid_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_ac_grid_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_grid_voltage\",\"icon\": \"mdi:power-plug\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_grid_frequency/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_ac_grid_frequency\",\"unit_of_measurement\": \"Hz\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_grid_frequency\",\"icon\": \"mdi:current-ac\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_out_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_ac_out_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_out_voltage\",\"icon\": \"mdi:power-plug\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_out_frequency/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_ac_out_frequency\",\"unit_of_measurement\": \"Hz\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_out_frequency\",\"icon\": \"mdi:current-ac\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_pv_in_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_voltage\",\"icon\": \"mdi:solar-panel-large\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_current/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_pv_in_current\",\"unit_of_measurement\": \"A\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_current\",\"icon\": \"mdi:solar-panel-large\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_watts/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_pv_in_watts\",\"unit_of_measurement\": \"W\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_watts\",\"icon\": \"mdi:solar-panel-large\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_watthour/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_pv_in_watthour\",\"unit_of_measurement\": \"Wh\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_pv_in_watthour\",\"icon\": \"mdi:solar-panel-large\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_scc_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_scc_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_scc_voltage\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_pct/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_load_pct\",\"unit_of_measurement\": \"%\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_pct\",\"icon\": \"mdi:brightness-percent\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_watt/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_load_watt\",\"unit_of_measurement\": \"W\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_watt\",\"icon\": \"mdi:chart-bell-curve\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_watthour/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_load_watthour\",\"unit_of_measurement\": \"Wh\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_watthour\",\"icon\": \"mdi:chart-bell-curve\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_va/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_load_va\",\"unit_of_measurement\": \"VA\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_va\",\"icon\": \"mdi:chart-bell-curve\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_bus_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_bus_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_bus_voltage\",\"icon\": \"mdi:details\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_heatsink_temperature/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_heatsink_temperature\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_heatsink_temperature\",\"icon\": \"mdi:details\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_capacity/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_capacity\",\"unit_of_measurement\": \"%\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_capacity\",\"icon\": \"mdi:battery-outline\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_voltage\",\"icon\": \"mdi:battery-outline\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_charge_current/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_charge_current\",\"unit_of_measurement\": \"A\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_charge_current\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_discharge_current/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_discharge_current\",\"unit_of_measurement\": \"A\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_discharge_current\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_status_on/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_load_status_on\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_load_status_on\",\"icon\": \"mdi:power\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_scc_charge_on/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_scc_charge_on\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_scc_charge_on\",\"icon\": \"mdi:power\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_charge_on/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_ac_charge_on\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_ac_charge_on\",\"icon\": \"mdi:power\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_recharge_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_recharge_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_recharge_voltage\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_under_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_under_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_under_voltage\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_bulk_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_bulk_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_bulk_voltage\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_float_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_float_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_float_voltage\",\"icon\": \"mdi:current-dc\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_max_grid_charge_current/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_max_grid_charge_current\",\"unit_of_measurement\": \"A\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_max_grid_charge_current\",\"icon\": \"mdi:current-ac\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_max_charge_current/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_max_charge_current\",\"unit_of_measurement\": \"A\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_max_charge_current\",\"icon\": \"mdi:current-ac\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_out_source_priority/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_out_source_priority\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_out_source_priority\",\"icon\": \"mdi:grid\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_charger_source_priority/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_charger_source_priority\",\"unit_of_measurement\": \"\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_charger_source_priority\",\"icon\": \"mdi:solar-power\"}").WithRetainFlag(true));

                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_redischarge_voltage/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_battery_redischarge_voltage\",\"unit_of_measurement\": \"V\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_battery_redischarge_voltage\",\"icon\": \"mdi:battery-negative\"}").WithRetainFlag(true));

                    //this is for raw command
                    await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/voltronic/config").WithPayload("{\"name\": \"voltronic\",\"state_topic\": \"homeassistant/sensor/voltronic\"}").WithRetainFlag(true));

                    //await managedClient.PublishAsync(builder => builder.WithTopic("homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_$1/config").WithPayload("{\"name\": \"" + Settings.MQTT.MQTTClientId + "_$1\",\"unit_of_measurement\": \"$2\",\"state_topic\": \"homeassistant/sensor/" + Settings.MQTT.MQTTClientId + "_$1\",\"icon\": \"mdi:s$3\"}"));
                    //await managedClient.PublishAsync(builder => builder.WithTopic("PV_in_voltage").WithPayload("300").WithAtLeastOnceQoS());

                    //subscribe to raw command
                    await managedClient.SubscribeAsync(new MqttTopicFilter { Topic = "homeassistant/sensor/voltronic", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });

                    //await managedClient.SubscribeAsync(new MqttTopicFilter { Topic = "abc", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });

                    //await managedClient.PublishAsync(builder => builder.WithTopic("PV_in_current").WithPayload("3"));
                }


                Logging.DebugWrite("Debug", "Managed client started.");
                //Console.ReadLine();
            }
            catch (Exception e)
            {
                Logging.DebugWrite("Error", e.ToString());
            }
        }