mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-21 13:33:27 +02:00
f34c9b33fc
* Added support for Midea IoT climate devices via UART interface (USB-dongle) * Fixed lint checks * Fixed lint checks * CODEOWNERS update * Clang-format * Clang-format * Add network device notification message support (show WiFi sign on devices) * Make wifi_signal_sensor optional component * Some optimization * Optimizations and code formatting * Fixed lint checks * Fixed lint checks * Fixed sign error * Code changes * Network notify repeat every 10 min * Added log messages * Fixed lint checks * Refactoring: MideaClimate => MideaAC * Using enums instead literals in Midea states * Enum changed to be more correct * Shrink notify frame to 32 bytes * Fixed lint checks * Change notify frame appliance type to common broadcast * Control optimization * Fixed control error * Control command now don't reset others uncontrollable properties of device * Fixed lint checks * Some optimization * on_receive callback give const Frame * Fix control * Fixes * Some minor changes * Fixed lint error * No dependency from wifi_signal sensor for stretched WiFi icon. New option: stretched_icon instead wifi_signal_id. * Fix option name * Added export of outdoor temperature as sensor value * Fixed lint errors * Fixed pylint error * Minor fix * Fix temperature overflow in some cases * Added answer on QueryNetwork command from appliance. Now don't wait for ack on 0x0D command. * Fix lint error * Added humidity setpoint optional sensor * Added boolean options 'swing_horizontal' and 'swing_both' * Added debug frame output * Added debug frame output * Fix lints error * Some debug output optimization * Fix lint check * Some code optimization: adding templates * Fix lint error * Added sensors device classes * Python code reformatted with black formatter * RX frame debug message RX frame debug message now prints before checking * Remove CRC check for receiving frames * Added experimental power usage option * Added power usage option * Fixed lint errors * Major changes. See esp-docs. * Added tests in test4.yaml * Added tests in test1.yaml * Added wifi dependency * Fix test1.yaml * Some fix :) * One more refactoring * One more refactoring * One more refactoring
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
from esphome.components import climate, sensor
|
|
import esphome.config_validation as cv
|
|
import esphome.codegen as cg
|
|
from esphome.const import (
|
|
CONF_ID,
|
|
UNIT_CELSIUS,
|
|
UNIT_PERCENT,
|
|
UNIT_WATT,
|
|
ICON_THERMOMETER,
|
|
ICON_POWER,
|
|
DEVICE_CLASS_POWER,
|
|
DEVICE_CLASS_TEMPERATURE,
|
|
ICON_WATER_PERCENT,
|
|
DEVICE_CLASS_HUMIDITY,
|
|
)
|
|
from esphome.components.midea_dongle import CONF_MIDEA_DONGLE_ID, MideaDongle
|
|
|
|
AUTO_LOAD = ["climate", "sensor", "midea_dongle"]
|
|
CODEOWNERS = ["@dudanov"]
|
|
|
|
CONF_BEEPER = "beeper"
|
|
CONF_SWING_HORIZONTAL = "swing_horizontal"
|
|
CONF_SWING_BOTH = "swing_both"
|
|
CONF_OUTDOOR_TEMPERATURE = "outdoor_temperature"
|
|
CONF_POWER_USAGE = "power_usage"
|
|
CONF_HUMIDITY_SETPOINT = "humidity_setpoint"
|
|
midea_ac_ns = cg.esphome_ns.namespace("midea_ac")
|
|
MideaAC = midea_ac_ns.class_("MideaAC", climate.Climate, cg.Component)
|
|
|
|
CONFIG_SCHEMA = cv.All(
|
|
climate.CLIMATE_SCHEMA.extend(
|
|
{
|
|
cv.GenerateID(): cv.declare_id(MideaAC),
|
|
cv.GenerateID(CONF_MIDEA_DONGLE_ID): cv.use_id(MideaDongle),
|
|
cv.Optional(CONF_BEEPER, default=False): cv.boolean,
|
|
cv.Optional(CONF_SWING_HORIZONTAL, default=False): cv.boolean,
|
|
cv.Optional(CONF_SWING_BOTH, default=False): cv.boolean,
|
|
cv.Optional(CONF_OUTDOOR_TEMPERATURE): sensor.sensor_schema(
|
|
UNIT_CELSIUS, ICON_THERMOMETER, 0, DEVICE_CLASS_TEMPERATURE
|
|
),
|
|
cv.Optional(CONF_POWER_USAGE): sensor.sensor_schema(
|
|
UNIT_WATT, ICON_POWER, 0, DEVICE_CLASS_POWER
|
|
),
|
|
cv.Optional(CONF_HUMIDITY_SETPOINT): sensor.sensor_schema(
|
|
UNIT_PERCENT, ICON_WATER_PERCENT, 0, DEVICE_CLASS_HUMIDITY
|
|
),
|
|
}
|
|
).extend(cv.COMPONENT_SCHEMA)
|
|
)
|
|
|
|
|
|
def to_code(config):
|
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
yield cg.register_component(var, config)
|
|
yield climate.register_climate(var, config)
|
|
paren = yield cg.get_variable(config[CONF_MIDEA_DONGLE_ID])
|
|
cg.add(var.set_midea_dongle_parent(paren))
|
|
cg.add(var.set_beeper_feedback(config[CONF_BEEPER]))
|
|
cg.add(var.set_swing_horizontal(config[CONF_SWING_HORIZONTAL]))
|
|
cg.add(var.set_swing_both(config[CONF_SWING_BOTH]))
|
|
if CONF_OUTDOOR_TEMPERATURE in config:
|
|
sens = yield sensor.new_sensor(config[CONF_OUTDOOR_TEMPERATURE])
|
|
cg.add(var.set_outdoor_temperature_sensor(sens))
|
|
if CONF_POWER_USAGE in config:
|
|
sens = yield sensor.new_sensor(config[CONF_POWER_USAGE])
|
|
cg.add(var.set_power_sensor(sens))
|
|
if CONF_HUMIDITY_SETPOINT in config:
|
|
sens = yield sensor.new_sensor(config[CONF_HUMIDITY_SETPOINT])
|
|
cg.add(var.set_humidity_setpoint_sensor(sens))
|