mirror of
https://github.com/excaliburpartners/OmniLinkBridge
synced 2025-05-07 09:23:11 +00:00
- Add detailed zone sensor and thermostat humidity sensor
This commit is contained in:
parent
b716b9ee35
commit
d65f920c7e
|
@ -99,6 +99,45 @@ namespace OmniLinkBridge.MQTT
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Sensor ToConfigSensor(this clsZone zone)
|
||||||
|
{
|
||||||
|
Sensor ret = new Sensor();
|
||||||
|
ret.name = zone.Name;
|
||||||
|
|
||||||
|
switch (zone.ZoneType)
|
||||||
|
{
|
||||||
|
case enuZoneType.EntryExit:
|
||||||
|
case enuZoneType.X2EntryDelay:
|
||||||
|
case enuZoneType.X4EntryDelay:
|
||||||
|
ret.icon = "mdi:door";
|
||||||
|
break;
|
||||||
|
case enuZoneType.Perimeter:
|
||||||
|
ret.icon = "mdi:window-closed";
|
||||||
|
break;
|
||||||
|
case enuZoneType.Tamper:
|
||||||
|
ret.icon = "mdi:shield";
|
||||||
|
break;
|
||||||
|
case enuZoneType.AwayInt:
|
||||||
|
case enuZoneType.NightInt:
|
||||||
|
ret.icon = "mdi:walk";
|
||||||
|
break;
|
||||||
|
case enuZoneType.Water:
|
||||||
|
ret.icon = "mdi:water";
|
||||||
|
break;
|
||||||
|
case enuZoneType.Fire:
|
||||||
|
ret.icon = "mdi:fire";
|
||||||
|
break;
|
||||||
|
case enuZoneType.Gas:
|
||||||
|
ret.icon = "mdi:gas-cylinder";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret.value_template = @"{{ value|replace(""_"", "" "")|title }}";
|
||||||
|
|
||||||
|
ret.state_topic = zone.ToTopic(Topic.state);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
public static BinarySensor ToConfig(this clsZone zone)
|
public static BinarySensor ToConfig(this clsZone zone)
|
||||||
{
|
{
|
||||||
BinarySensor ret = new BinarySensor();
|
BinarySensor ret = new BinarySensor();
|
||||||
|
@ -211,6 +250,16 @@ namespace OmniLinkBridge.MQTT
|
||||||
return $"{Global.mqtt_prefix}/thermostat{thermostat.Number.ToString()}/{topic.ToString()}";
|
return $"{Global.mqtt_prefix}/thermostat{thermostat.Number.ToString()}/{topic.ToString()}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Sensor ToConfigHumidity(this clsThermostat zone)
|
||||||
|
{
|
||||||
|
Sensor ret = new Sensor();
|
||||||
|
ret.name = zone.Name;
|
||||||
|
ret.device_class = Sensor.DeviceClass.humidity;
|
||||||
|
ret.state_topic = zone.ToTopic(Topic.current_humidity);
|
||||||
|
ret.unit_of_measurement = "%";
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
public static Climate ToConfig(this clsThermostat thermostat)
|
public static Climate ToConfig(this clsThermostat thermostat)
|
||||||
{
|
{
|
||||||
Climate ret = new Climate();
|
Climate ret = new Climate();
|
||||||
|
|
|
@ -20,7 +20,13 @@ namespace OmniLinkBridge.MQTT
|
||||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
public DeviceClass? device_class { get; set; }
|
public DeviceClass? device_class { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public string icon { get; set; }
|
||||||
|
|
||||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
public string unit_of_measurement { get; set; }
|
public string unit_of_measurement { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public string value_template { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,8 +299,10 @@ namespace OmniLinkBridge.Modules
|
||||||
|
|
||||||
if (zone.DefaultProperties == true || Global.mqtt_discovery_ignore_zones.Contains(zone.Number))
|
if (zone.DefaultProperties == true || Global.mqtt_discovery_ignore_zones.Contains(zone.Number))
|
||||||
{
|
{
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/binary_sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/binary_sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}temp/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}humidity/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,12 +310,14 @@ namespace OmniLinkBridge.Modules
|
||||||
|
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/binary_sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/binary_sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
||||||
JsonConvert.SerializeObject(zone.ToConfig()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
JsonConvert.SerializeObject(zone.ToConfig()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
||||||
|
JsonConvert.SerializeObject(zone.ToConfigSensor()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
|
||||||
if (zone.IsTemperatureZone())
|
if (zone.IsTemperatureZone())
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}temp/config",
|
||||||
JsonConvert.SerializeObject(zone.ToConfigTemp()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
JsonConvert.SerializeObject(zone.ToConfigTemp()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
else if (zone.IsHumidityZone())
|
else if (zone.IsHumidityZone())
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/zone{i.ToString()}humidity/config",
|
||||||
JsonConvert.SerializeObject(zone.ToConfigHumidity()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
JsonConvert.SerializeObject(zone.ToConfigHumidity()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -352,6 +356,7 @@ namespace OmniLinkBridge.Modules
|
||||||
if (thermostat.DefaultProperties == true)
|
if (thermostat.DefaultProperties == true)
|
||||||
{
|
{
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/climate/{Global.mqtt_prefix}/thermostat{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/climate/{Global.mqtt_prefix}/thermostat{i.ToString()}/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/thermostat{i.ToString()}humidity/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,6 +364,8 @@ namespace OmniLinkBridge.Modules
|
||||||
|
|
||||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/climate/{Global.mqtt_prefix}/thermostat{i.ToString()}/config",
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/climate/{Global.mqtt_prefix}/thermostat{i.ToString()}/config",
|
||||||
JsonConvert.SerializeObject(thermostat.ToConfig()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
JsonConvert.SerializeObject(thermostat.ToConfig()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
|
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/sensor/{Global.mqtt_prefix}/thermostat{i.ToString()}humidity/config",
|
||||||
|
JsonConvert.SerializeObject(thermostat.ToConfigHumidity()), MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue