mirror of
https://github.com/esphome/esphome.git
synced 2026-10-22 13:56:10 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1973a1d29d |
@@ -3,20 +3,11 @@ from esphome.components import switch
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_BEEPER, CONF_DISPLAY, ENTITY_CATEGORY_CONFIG
|
||||
import esphome.final_validate as fv
|
||||
from esphome.types import ConfigType
|
||||
|
||||
from ..climate import (
|
||||
CONF_HAIER_ID,
|
||||
CONF_PROTOCOL,
|
||||
PROTOCOL_HON,
|
||||
HaierClimateBase,
|
||||
haier_ns,
|
||||
)
|
||||
from ..climate import CONF_HAIER_ID, CONF_PROTOCOL, PROTOCOL_HON, HaierClimateBase
|
||||
|
||||
CODEOWNERS = ["@paveldn"]
|
||||
BeeperSwitch = haier_ns.class_("BeeperSwitch", switch.Switch)
|
||||
HealthModeSwitch = haier_ns.class_("HealthModeSwitch", switch.Switch)
|
||||
DisplaySwitch = haier_ns.class_("DisplaySwitch", switch.Switch)
|
||||
QuietModeSwitch = haier_ns.class_("QuietModeSwitch", switch.Switch)
|
||||
|
||||
# Haier switches
|
||||
CONF_HEALTH_MODE = "health_mode"
|
||||
@@ -32,26 +23,26 @@ CONFIG_SCHEMA = cv.Schema(
|
||||
{
|
||||
cv.GenerateID(CONF_HAIER_ID): cv.use_id(HaierClimateBase),
|
||||
cv.Optional(CONF_DISPLAY): switch.switch_schema(
|
||||
DisplaySwitch,
|
||||
switch.ApplySwitch,
|
||||
icon=ICON_LED_ON,
|
||||
entity_category=ENTITY_CATEGORY_CONFIG,
|
||||
default_restore_mode="DISABLED",
|
||||
),
|
||||
cv.Optional(CONF_HEALTH_MODE): switch.switch_schema(
|
||||
HealthModeSwitch,
|
||||
switch.ApplySwitch,
|
||||
icon=ICON_LEAF,
|
||||
default_restore_mode="DISABLED",
|
||||
),
|
||||
# Beeper switch is only supported for HonClimate
|
||||
cv.Optional(CONF_BEEPER): switch.switch_schema(
|
||||
BeeperSwitch,
|
||||
switch.ApplySwitch,
|
||||
icon=ICON_VOLUME_HIGH,
|
||||
entity_category=ENTITY_CATEGORY_CONFIG,
|
||||
default_restore_mode="DISABLED",
|
||||
),
|
||||
# Quiet mode is only supported for HonClimate
|
||||
cv.Optional(CONF_QUIET_MODE): switch.switch_schema(
|
||||
QuietModeSwitch,
|
||||
switch.ApplySwitch,
|
||||
icon=ICON_VOLUME_OFF,
|
||||
entity_category=ENTITY_CATEGORY_CONFIG,
|
||||
default_restore_mode="DISABLED",
|
||||
@@ -77,11 +68,31 @@ def _final_validate(config) -> None:
|
||||
FINAL_VALIDATE_SCHEMA = _final_validate
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
parent = await cg.get_variable(config[CONF_HAIER_ID])
|
||||
|
||||
for switch_type in [CONF_DISPLAY, CONF_HEALTH_MODE, CONF_BEEPER, CONF_QUIET_MODE]:
|
||||
if conf := config.get(switch_type):
|
||||
sw_var = await switch.new_switch(conf)
|
||||
await cg.register_parented(sw_var, parent)
|
||||
cg.add(getattr(parent, f"set_{switch_type}_switch")(sw_var))
|
||||
async def to_code(config: ConfigType) -> None:
|
||||
hub = await cg.get_variable(config[CONF_HAIER_ID])
|
||||
switches = switch.sub_switches(config, parent=hub)
|
||||
# The setters skip an unchanged value; the switch reports the state either way
|
||||
await switches(
|
||||
CONF_DISPLAY,
|
||||
hub.set_display_switch,
|
||||
apply="set_display_state(state)",
|
||||
publish="after",
|
||||
)
|
||||
await switches(
|
||||
CONF_HEALTH_MODE,
|
||||
hub.set_health_mode_switch,
|
||||
apply="set_health_mode(state)",
|
||||
publish="after",
|
||||
)
|
||||
await switches(
|
||||
CONF_BEEPER,
|
||||
hub.set_beeper_switch,
|
||||
apply="set_beeper_state(state)",
|
||||
publish="after",
|
||||
)
|
||||
await switches(
|
||||
CONF_QUIET_MODE,
|
||||
hub.set_quiet_mode_switch,
|
||||
apply="set_quiet_mode_state(state)",
|
||||
publish="after",
|
||||
)
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#include "beeper.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
void BeeperSwitch::write_state(bool state) {
|
||||
if (this->parent_->get_beeper_state() != state) {
|
||||
this->parent_->set_beeper_state(state);
|
||||
}
|
||||
this->publish_state(state);
|
||||
}
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,16 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/switch/switch.h"
|
||||
#include "../hon_climate.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
class BeeperSwitch final : public switch_::Switch, public Parented<HonClimate> {
|
||||
public:
|
||||
BeeperSwitch() = default;
|
||||
|
||||
protected:
|
||||
void write_state(bool state) override;
|
||||
};
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,12 +0,0 @@
|
||||
#include "display.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
void DisplaySwitch::write_state(bool state) {
|
||||
if (this->parent_->get_display_state() != state) {
|
||||
this->parent_->set_display_state(state);
|
||||
}
|
||||
this->publish_state(state);
|
||||
}
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,16 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/switch/switch.h"
|
||||
#include "../haier_base.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
class DisplaySwitch final : public switch_::Switch, public Parented<HaierClimateBase> {
|
||||
public:
|
||||
DisplaySwitch() = default;
|
||||
|
||||
protected:
|
||||
void write_state(bool state) override;
|
||||
};
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,12 +0,0 @@
|
||||
#include "health_mode.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
void HealthModeSwitch::write_state(bool state) {
|
||||
if (this->parent_->get_health_mode() != state) {
|
||||
this->parent_->set_health_mode(state);
|
||||
}
|
||||
this->publish_state(state);
|
||||
}
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,16 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/switch/switch.h"
|
||||
#include "../haier_base.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
class HealthModeSwitch final : public switch_::Switch, public Parented<HaierClimateBase> {
|
||||
public:
|
||||
HealthModeSwitch() = default;
|
||||
|
||||
protected:
|
||||
void write_state(bool state) override;
|
||||
};
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,12 +0,0 @@
|
||||
#include "quiet_mode.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
void QuietModeSwitch::write_state(bool state) {
|
||||
if (this->parent_->get_quiet_mode_state() != state) {
|
||||
this->parent_->set_quiet_mode_state(state);
|
||||
}
|
||||
this->publish_state(state);
|
||||
}
|
||||
|
||||
} // namespace esphome::haier
|
||||
@@ -1,16 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/switch/switch.h"
|
||||
#include "../hon_climate.h"
|
||||
|
||||
namespace esphome::haier {
|
||||
|
||||
class QuietModeSwitch final : public switch_::Switch, public Parented<HonClimate> {
|
||||
public:
|
||||
QuietModeSwitch() = default;
|
||||
|
||||
protected:
|
||||
void write_state(bool state) override;
|
||||
};
|
||||
|
||||
} // namespace esphome::haier
|
||||
Reference in New Issue
Block a user