受欢迎的博客标签

Mqttnet vacuum

Published

为每个房间创建三个传感器:模式、扫地次数、完成时间

{
"name": "Living Room Vacuum Mode",
"unique_id": "living_room_vacuum_mode",
"state_topic": "home/vacuum/living_room/mode/state",
"device": {
"identifiers": ["vacuum_living_room"],
"name": "Living Room Vacuum",
"manufacturer": "My Company"
}
}

 

topic

var AutoDiscoverTopic = $"homeassistant/vacuum/{roomId}/config"

 

 

 private async Task PublishAutoDiscoveryConfigsAsync()
    {
        foreach (var room in _vacuumManager.GetAllRooms())
        {
            var config = new
            {
                name = $"{room.RoomName} Vacuum",
                unique_id = $"vacuum_{room.RoomId}",
                command_topic = $"homeassistant/vacuum/{room.RoomId}/set",
                state_topic = $"homeassistant/vacuum/{room.RoomId}/state",
                schema = "json",
                supported_features = ["start", "pause", "stop", "return_home", "battery", "status", "locate", "clean_spot", "fan_speed", "send_command"],
                fan_speed_list = Enum.GetNames<CleaningMode>().Select(n => n.ToLower()).ToArray(),
                payload_start = "start",
                payload_pause = "pause",
                payload_stop = "stop",
                payload_return_to_base = "return_home",
                payload_clean_spot = "clean_spot",
                battery_level_topic = $"homeassistant/vacuum/{room.RoomId}/state",
                battery_level_template = "{{ value_json.battery_level }}",
                device = new
                {
                    identifiers = new[] { $"vacuum_{room.RoomId}" },
                    name = $"{room.RoomName} Vacuum",
                    manufacturer = "Vacuum System",
                    model = "Smart Vacuum V2"
                }
            };

            var configTopic = $"homeassistant/vacuum/{room.RoomId}/config";
            var jsonPayload = JsonSerializer.Serialize(config, new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            });

            var message = new MqttApplicationMessageBuilder()
                .WithTopic(configTopic)
                .WithPayload(jsonPayload)
                .WithRetainFlag()
                .Build();

            await _mqttClient.PublishAsync(message);
        }
    }