diff --git a/switch/__init__.py b/switch/__init__.py index 5b035c5..dbaea05 100644 --- a/switch/__init__.py +++ b/switch/__init__.py @@ -19,6 +19,9 @@ CONFIG_SCHEMA = cv.Schema( cv.Optional("BTAUDIO"): switch.switch_schema( tw7100Switch ), + cv.Optional("MUTE"): switch.switch_schema( + tw7100Switch + ), } ) @@ -37,3 +40,9 @@ async def to_code(config): cg.add(switch_.set_cmd("BTAUDIO")) cg.add(switch_.set_tw7100_parent(parent)) cg.add(parent.set_set_btaudio(switch_)) + + if "MUTE" in config: + switch_ = await switch.new_switch(config["MUTE"]) + cg.add(switch_.set_cmd("MUTE")) + cg.add(switch_.set_tw7100_parent(parent)) + cg.add(parent.set_set_mute(switch_)) diff --git a/switch/tw7100_switch.cpp b/switch/tw7100_switch.cpp index b4a07fb..9fdd23e 100644 --- a/switch/tw7100_switch.cpp +++ b/switch/tw7100_switch.cpp @@ -26,6 +26,10 @@ void tw7100Switch::write_state(bool state) { sprintf(param, "%02d", state); ESP_LOGV(TAG, "pushing back cmd %s with param %s", cmd_.c_str(), param); parent_->push_cmd(cmd_, param); + } else if (cmd_ == "MUTE") { + std::string param = state ? "ON" : "OFF"; + ESP_LOGV(TAG, "pushing back cmd %s with param %s", cmd_.c_str(), param.c_str()); + parent_->push_cmd(cmd_, param); } } diff --git a/tw7100.cpp b/tw7100.cpp index 8309280..4b18732 100644 --- a/tw7100.cpp +++ b/tw7100.cpp @@ -69,7 +69,7 @@ std::vector pwr_on_query_cmds{ "AUDIOOUT?", */ // -// "MUTE?", // TODO: implement parser + "MUTE?", // Environment settings /* "HREVERSE?", @@ -246,6 +246,9 @@ void tw7100Component::update_sensor(std::pair data) { auto call = source_select_->make_call(); call.set_option(source_select_->sources[value_string]); call.perform(); + } else if (cmd == "MUTE") { + ESP_LOGV(TAG, "updating mute switch with value %s", value_string); + mute_switch_->publish_state(value_string == "ON"); } else { ESP_LOGW(TAG, "Command %s unknown, skipping updating sensor with value", cmd.c_str()); } diff --git a/tw7100.h b/tw7100.h index 3a191e2..6aa3896 100644 --- a/tw7100.h +++ b/tw7100.h @@ -41,6 +41,7 @@ class tw7100Component : public PollingComponent, public uart::UARTDevice { void set_serial(text_sensor::TextSensor *serial) { this->serial_ = serial; } void set_set_power(switch_::Switch *switch_) { this->power_switch_ = switch_; } void set_set_btaudio(switch_::Switch *switch_) { this->btaudio_switch_ = switch_; } + void set_set_mute(switch_::Switch *switch_) { this->mute_switch_ = switch_; } void set_set_source(tw7100::tw7100Select *source_) { this->source_select_ = source_; } void set_set_luminance(tw7100::tw7100Select *luminance_) { this->luminance_select_ = luminance_; } @@ -54,6 +55,7 @@ class tw7100Component : public PollingComponent, public uart::UARTDevice { text_sensor::TextSensor *serial_{nullptr}; switch_::Switch *power_switch_{nullptr}; switch_::Switch *btaudio_switch_{nullptr}; + switch_::Switch *mute_switch_{nullptr}; tw7100::tw7100Select *source_select_{nullptr}; tw7100::tw7100Select *luminance_select_{nullptr}; };