mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
Add configuration for climate topics (#2473)
This commit is contained in:
parent
a1f9b0d7f2
commit
42739f0b22
3 changed files with 174 additions and 3 deletions
|
@ -4,22 +4,38 @@ from esphome.cpp_helpers import setup_entity
|
|||
from esphome import automation
|
||||
from esphome.components import mqtt
|
||||
from esphome.const import (
|
||||
CONF_ACTION_STATE_TOPIC,
|
||||
CONF_AWAY,
|
||||
CONF_AWAY_COMMAND_TOPIC,
|
||||
CONF_AWAY_STATE_TOPIC,
|
||||
CONF_CURRENT_TEMPERATURE_STATE_TOPIC,
|
||||
CONF_CUSTOM_FAN_MODE,
|
||||
CONF_CUSTOM_PRESET,
|
||||
CONF_FAN_MODE,
|
||||
CONF_FAN_MODE_COMMAND_TOPIC,
|
||||
CONF_FAN_MODE_STATE_TOPIC,
|
||||
CONF_ID,
|
||||
CONF_MAX_TEMPERATURE,
|
||||
CONF_MIN_TEMPERATURE,
|
||||
CONF_MODE,
|
||||
CONF_MODE_COMMAND_TOPIC,
|
||||
CONF_MODE_STATE_TOPIC,
|
||||
CONF_PRESET,
|
||||
CONF_SWING_MODE,
|
||||
CONF_SWING_MODE_COMMAND_TOPIC,
|
||||
CONF_SWING_MODE_STATE_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE,
|
||||
CONF_TARGET_TEMPERATURE_COMMAND_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE_STATE_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE_HIGH,
|
||||
CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE_LOW,
|
||||
CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC,
|
||||
CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC,
|
||||
CONF_TEMPERATURE_STEP,
|
||||
CONF_VISUAL,
|
||||
CONF_MQTT_ID,
|
||||
CONF_FAN_MODE,
|
||||
CONF_SWING_MODE,
|
||||
)
|
||||
from esphome.core import CORE, coroutine_with_priority
|
||||
|
||||
|
@ -97,7 +113,54 @@ CLIMATE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).
|
|||
cv.Optional(CONF_TEMPERATURE_STEP): cv.temperature,
|
||||
}
|
||||
),
|
||||
# TODO: MQTT topic options
|
||||
cv.Optional(CONF_ACTION_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_AWAY_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_AWAY_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_CURRENT_TEMPERATURE_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_FAN_MODE_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_FAN_MODE_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_MODE_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_MODE_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_SWING_MODE_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_SWING_MODE_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
cv.Optional(CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC): cv.All(
|
||||
cv.requires_component("mqtt"), cv.publish_topic
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -117,6 +180,82 @@ async def setup_climate_core_(var, config):
|
|||
mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var)
|
||||
await mqtt.register_mqtt_component(mqtt_, config)
|
||||
|
||||
if CONF_ACTION_STATE_TOPIC in config:
|
||||
cg.add(mqtt_.set_custom_action_state_topic(config[CONF_ACTION_STATE_TOPIC]))
|
||||
if CONF_AWAY_COMMAND_TOPIC in config:
|
||||
cg.add(mqtt_.set_custom_away_command_topic(config[CONF_AWAY_COMMAND_TOPIC]))
|
||||
if CONF_AWAY_STATE_TOPIC in config:
|
||||
cg.add(mqtt_.set_custom_away_state_topic(config[CONF_AWAY_STATE_TOPIC]))
|
||||
if CONF_CURRENT_TEMPERATURE_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_current_temperature_state_topic(
|
||||
config[CONF_CURRENT_TEMPERATURE_STATE_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_FAN_MODE_COMMAND_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_fan_mode_command_topic(
|
||||
config[CONF_FAN_MODE_COMMAND_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_FAN_MODE_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_fan_mode_state_topic(config[CONF_FAN_MODE_STATE_TOPIC])
|
||||
)
|
||||
if CONF_MODE_COMMAND_TOPIC in config:
|
||||
cg.add(mqtt_.set_custom_mode_command_topic(config[CONF_MODE_COMMAND_TOPIC]))
|
||||
if CONF_MODE_STATE_TOPIC in config:
|
||||
cg.add(mqtt_.set_custom_state_topic(config[CONF_MODE_STATE_TOPIC]))
|
||||
|
||||
if CONF_SWING_MODE_COMMAND_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_swing_mode_command_topic(
|
||||
config[CONF_SWING_MODE_COMMAND_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_SWING_MODE_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_swing_mode_state_topic(
|
||||
config[CONF_SWING_MODE_STATE_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_COMMAND_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_command_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_COMMAND_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_state_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_STATE_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_high_command_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_high_state_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_low_command_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC]
|
||||
)
|
||||
)
|
||||
if CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC in config:
|
||||
cg.add(
|
||||
mqtt_.set_custom_target_temperature_state_topic(
|
||||
config[CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
async def register_climate(var, config):
|
||||
if not CORE.has_id(config[CONF_ID]):
|
||||
|
|
|
@ -39,6 +39,7 @@ CONF_ACCELERATION_Z = "acceleration_z"
|
|||
CONF_ACCURACY = "accuracy"
|
||||
CONF_ACCURACY_DECIMALS = "accuracy_decimals"
|
||||
CONF_ACTION_ID = "action_id"
|
||||
CONF_ACTION_STATE_TOPIC = "action_state_topic"
|
||||
CONF_ACTIVE_POWER = "active_power"
|
||||
CONF_ADDRESS = "address"
|
||||
CONF_ADDRESSABLE_LIGHT_ID = "addressable_light_id"
|
||||
|
@ -60,7 +61,9 @@ CONF_AUTOCONF = "autoconf"
|
|||
CONF_AUTOMATION_ID = "automation_id"
|
||||
CONF_AVAILABILITY = "availability"
|
||||
CONF_AWAY = "away"
|
||||
CONF_AWAY_COMMAND_TOPIC = "away_command_topic"
|
||||
CONF_AWAY_CONFIG = "away_config"
|
||||
CONF_AWAY_STATE_TOPIC = "away_state_topic"
|
||||
CONF_BACKLIGHT_PIN = "backlight_pin"
|
||||
CONF_BASELINE = "baseline"
|
||||
CONF_BATTERY_LEVEL = "battery_level"
|
||||
|
@ -141,6 +144,7 @@ CONF_CSS_URL = "css_url"
|
|||
CONF_CURRENT = "current"
|
||||
CONF_CURRENT_OPERATION = "current_operation"
|
||||
CONF_CURRENT_RESISTOR = "current_resistor"
|
||||
CONF_CURRENT_TEMPERATURE_STATE_TOPIC = "current_temperature_state_topic"
|
||||
CONF_CUSTOM_FAN_MODE = "custom_fan_mode"
|
||||
CONF_CUSTOM_FAN_MODES = "custom_fan_modes"
|
||||
CONF_CUSTOM_PRESET = "custom_preset"
|
||||
|
@ -209,6 +213,7 @@ CONF_FALLING_EDGE = "falling_edge"
|
|||
CONF_FAMILY = "family"
|
||||
CONF_FAN_MODE = "fan_mode"
|
||||
CONF_FAN_MODE_AUTO_ACTION = "fan_mode_auto_action"
|
||||
CONF_FAN_MODE_COMMAND_TOPIC = "fan_mode_command_topic"
|
||||
CONF_FAN_MODE_DIFFUSE_ACTION = "fan_mode_diffuse_action"
|
||||
CONF_FAN_MODE_FOCUS_ACTION = "fan_mode_focus_action"
|
||||
CONF_FAN_MODE_HIGH_ACTION = "fan_mode_high_action"
|
||||
|
@ -217,6 +222,7 @@ CONF_FAN_MODE_MEDIUM_ACTION = "fan_mode_medium_action"
|
|||
CONF_FAN_MODE_MIDDLE_ACTION = "fan_mode_middle_action"
|
||||
CONF_FAN_MODE_OFF_ACTION = "fan_mode_off_action"
|
||||
CONF_FAN_MODE_ON_ACTION = "fan_mode_on_action"
|
||||
CONF_FAN_MODE_STATE_TOPIC = "fan_mode_state_topic"
|
||||
CONF_FAN_ONLY_ACTION = "fan_only_action"
|
||||
CONF_FAN_ONLY_ACTION_USES_FAN_MODE_TIMER = "fan_only_action_uses_fan_mode_timer"
|
||||
CONF_FAN_ONLY_COOLING = "fan_only_cooling"
|
||||
|
@ -378,6 +384,8 @@ CONF_MINUTE = "minute"
|
|||
CONF_MINUTES = "minutes"
|
||||
CONF_MISO_PIN = "miso_pin"
|
||||
CONF_MODE = "mode"
|
||||
CONF_MODE_COMMAND_TOPIC = "mode_command_topic"
|
||||
CONF_MODE_STATE_TOPIC = "mode_state_topic"
|
||||
CONF_MODEL = "model"
|
||||
CONF_MOISTURE = "moisture"
|
||||
CONF_MONTHS = "months"
|
||||
|
@ -636,6 +644,8 @@ CONF_SUPPORTS_HEAT = "supports_heat"
|
|||
CONF_SWING_BOTH_ACTION = "swing_both_action"
|
||||
CONF_SWING_HORIZONTAL_ACTION = "swing_horizontal_action"
|
||||
CONF_SWING_MODE = "swing_mode"
|
||||
CONF_SWING_MODE_COMMAND_TOPIC = "swing_mode_command_topic"
|
||||
CONF_SWING_MODE_STATE_TOPIC = "swing_mode_state_topic"
|
||||
CONF_SWING_OFF_ACTION = "swing_off_action"
|
||||
CONF_SWING_VERTICAL_ACTION = "swing_vertical_action"
|
||||
CONF_SWITCH_DATAPOINT = "switch_datapoint"
|
||||
|
@ -646,8 +656,14 @@ CONF_TAG = "tag"
|
|||
CONF_TARGET = "target"
|
||||
CONF_TARGET_TEMPERATURE = "target_temperature"
|
||||
CONF_TARGET_TEMPERATURE_CHANGE_ACTION = "target_temperature_change_action"
|
||||
CONF_TARGET_TEMPERATURE_COMMAND_TOPIC = "target_temperature_command_topic"
|
||||
CONF_TARGET_TEMPERATURE_HIGH = "target_temperature_high"
|
||||
CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC = "target_temperature_high_command_topic"
|
||||
CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC = "target_temperature_high_state_topic"
|
||||
CONF_TARGET_TEMPERATURE_LOW = "target_temperature_low"
|
||||
CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC = "target_temperature_low_command_topic"
|
||||
CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC = "target_temperature_low_state_topic"
|
||||
CONF_TARGET_TEMPERATURE_STATE_TOPIC = "target_temperature_state_topic"
|
||||
CONF_TEMPERATURE = "temperature"
|
||||
CONF_TEMPERATURE_STEP = "temperature_step"
|
||||
CONF_TEXT_SENSORS = "text_sensors"
|
||||
|
|
|
@ -1642,6 +1642,22 @@ climate:
|
|||
sensor: ${sensorname}_sensor
|
||||
- platform: tcl112
|
||||
name: TCL112 Climate
|
||||
action_state_topic: action/state/topic
|
||||
away_command_topic: away/command/topic
|
||||
away_state_topic: away/state/topic
|
||||
current_temperature_state_topic: current/temperature/state/topic
|
||||
fan_mode_command_topic: fan_mode/mode/command/topic
|
||||
fan_mode_state_topic: fan_mode/mode/state/topic
|
||||
mode_command_topic: mode/command/topic
|
||||
mode_state_topic: mode/state/topic
|
||||
swing_mode_command_topic: swing_mode/command/topic
|
||||
swing_mode_state_topic: swing_mode/state/topic
|
||||
target_temperature_command_topic: target/temperature/command/topic
|
||||
target_temperature_high_command_topic: target/temperature/high/command/topic
|
||||
target_temperature_high_state_topic: target/temperature/high/state/topic
|
||||
target_temperature_low_command_topic: target/temperature/low/command/topic
|
||||
target_temperature_low_state_topic: target/temperature/low/state/topic
|
||||
target_temperature_state_topic: target/temperature/state/topic
|
||||
- platform: coolix
|
||||
name: Coolix Climate With Sensor
|
||||
supports_heat: True
|
||||
|
|
Loading…
Reference in a new issue