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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
BinarySensor ret = new BinarySensor();
|
||||
|
@ -211,6 +250,16 @@ namespace OmniLinkBridge.MQTT
|
|||
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)
|
||||
{
|
||||
Climate ret = new Climate();
|
||||
|
|
|
@ -20,7 +20,13 @@ namespace OmniLinkBridge.MQTT
|
|||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
public DeviceClass? device_class { get; set; }
|
||||
|
||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string icon { get; set; }
|
||||
|
||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
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))
|
||||
{
|
||||
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}/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;
|
||||
}
|
||||
|
||||
|
@ -308,12 +310,14 @@ namespace OmniLinkBridge.Modules
|
|||
|
||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/binary_sensor/{Global.mqtt_prefix}/zone{i.ToString()}/config",
|
||||
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())
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -352,6 +356,7 @@ namespace OmniLinkBridge.Modules
|
|||
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}/sensor/{Global.mqtt_prefix}/thermostat{i.ToString()}humidity/config", null, MqttQualityOfServiceLevel.AtMostOnce, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -359,6 +364,8 @@ namespace OmniLinkBridge.Modules
|
|||
|
||||
MqttClient.PublishAsync($"{Global.mqtt_discovery_prefix}/climate/{Global.mqtt_prefix}/thermostat{i.ToString()}/config",
|
||||
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