Skip to content

Commit 035ee37

Browse files
authored
MQTT: Use default_entity_id instead of object_id (#1351)
* MQTT: Use default_entity_id instead of object_id * Resolve copilot suggestion
1 parent 51f839f commit 035ee37

3 files changed

Lines changed: 12 additions & 11 deletions

File tree

src/Client/NetDaemon.HassClient.Tests/ExtensionsTest/MqttEntityManagerTests/MqttEntityManagerTester.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public async Task CreateWithNoOptionsSetsBaseConfig()
2727
payload?.Count.Should().Be(6);
2828
payload?["name"].ToString().Should().Be("sensor");
2929
payload?["unique_id"].ToString().Should().Be("homeassistant_domain_sensor_config");
30-
payload?["object_id"].ToString().Should().Be("sensor");
30+
payload?["default_entity_id"].ToString().Should().Be("domain.sensor");
3131
payload?["command_topic"].ToString().Should().Be("homeassistant/domain/sensor/set");
3232
payload?["state_topic"].ToString().Should().Be("homeassistant/domain/sensor/state");
3333
payload?["json_attributes_topic"].ToString().Should().Be("homeassistant/domain/sensor/attributes");
@@ -45,7 +45,7 @@ public async Task CreateWithDefaultOptionsSetsBaseConfig()
4545
payload?.Count.Should().Be(6);
4646
payload?["name"].ToString().Should().Be("sensor");
4747
payload?["unique_id"].ToString().Should().Be("homeassistant_domain_sensor_config");
48-
payload?["object_id"].ToString().Should().Be("sensor");
48+
payload?["default_entity_id"].ToString().Should().Be("domain.sensor");
4949
payload?["command_topic"].ToString().Should().Be("homeassistant/domain/sensor/set");
5050
payload?["state_topic"].ToString().Should().Be("homeassistant/domain/sensor/state");
5151
payload?["json_attributes_topic"].ToString().Should().Be("homeassistant/domain/sensor/attributes");
@@ -64,15 +64,15 @@ public async Task CreateCanSetUniqueId()
6464
}
6565

6666
[Fact]
67-
public async Task CreateSetsObjectId()
67+
public async Task CreateSetsDefaultEntityId()
6868
{
6969
var mqttSetup = new MockMqttMessageSenderSetup();
7070
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
7171

7272
await entityManager.CreateAsync("domain.the_id");
7373
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? []);
7474

75-
payload?["object_id"].ToString().Should().Be("the_id");
75+
payload?["default_entity_id"].ToString().Should().Be("domain.the_id");
7676
}
7777

7878
[Fact]

src/Extensions/NetDaemon.Extensions.MqttEntityManager/Models/EntityCreationPayload.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ internal class EntityCreationPayload
1818
[JsonPropertyName("unique_id")]
1919
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
2020
public string? UniqueId { get; set; }
21-
22-
[JsonPropertyName("object_id")]
23-
public string? ObjectId { get; set; }
21+
22+
[JsonPropertyName("default_entity_id")]
23+
public string? DefaultEntityId { get; set; }
2424

2525
[JsonPropertyName("command_topic")]
2626
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
2727
public string? CommandTopic { get; set; }
28-
28+
2929
[JsonPropertyName("state_topic")]
3030
public string? StateTopic { get; set; }
3131

@@ -35,7 +35,7 @@ internal class EntityCreationPayload
3535
[JsonPropertyName("availability_topic")]
3636
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
3737
public string? AvailabilityTopic { get; set; }
38-
38+
3939
[JsonPropertyName("payload_available")]
4040
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
4141
public string? PayloadAvailable { get; set; }
@@ -52,4 +52,4 @@ internal class EntityCreationPayload
5252
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
5353
public string? PayloadOff { get; set; }
5454

55-
}
55+
}

src/Extensions/NetDaemon.Extensions.MqttEntityManager/MqttEntityManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ private string BuildCreationPayload(string domain, string identifier, string con
138138
Name = options?.Name ?? identifier,
139139
DeviceClass = options?.DeviceClass,
140140
UniqueId = options?.UniqueId ?? configPath.Replace('/', '_'),
141-
ObjectId = identifier,
141+
DefaultEntityId = DefaultEntityId(domain, identifier),
142142
CommandTopic = CommandPath(domain, identifier),
143143
StateTopic = StatePath(domain, identifier),
144144
PayloadAvailable = options?.PayloadAvailable,
@@ -158,6 +158,7 @@ private static bool IsAvailabilityTopicRequired(EntityCreationOptions? options)
158158
!string.IsNullOrWhiteSpace(options.PayloadNotAvailable));
159159
}
160160

161+
private static string DefaultEntityId(string domain, string identifier) => $"{domain}.{identifier}";
161162
private string AttrsPath(string domain, string identifier) => $"{RootPath(domain, identifier)}/attributes";
162163

163164
private string ConfigPath(string domain, string identifier) => $"{RootPath(domain, identifier)}/config";

0 commit comments

Comments
 (0)