为每个房间创建三个传感器:模式、扫地次数、完成时间
{
"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);
}
}