diff --git a/components/panasonic_heatpump/README.md b/components/panasonic_heatpump/README.md index 2895639..4084656 100644 --- a/components/panasonic_heatpump/README.md +++ b/components/panasonic_heatpump/README.md @@ -546,6 +546,10 @@ select: name: "Set Bivalent Mode" ``` +## Known Issues + +When the ESP controller is connected initially to the heatpump, the heatpump may not respond to any request messages. If the CZ-TAW1 is also connected to the ESP controller you will probably see some requests like 31 05 10 01 ... These are initial request messages. If the heatpump is not responding, it may help to turn off and on the power of the heatpump (switching the heatpump off is not enough). After a power on the heatpump should respond to the requests. + ## Sources :heart: A big THANKS to [Egyras](https://github.com/Egyras) and the work done on the repository [HeishaMon](https://github.com/Egyras/HeishaMon) for decoding the panasonic uart protocol and providing information to build hardware based on an ESP Chip. diff --git a/components/panasonic_heatpump/binary_sensor/__init__.py b/components/panasonic_heatpump/binary_sensor/__init__.py index f15e868..e334744 100644 --- a/components/panasonic_heatpump/binary_sensor/__init__.py +++ b/components/panasonic_heatpump/binary_sensor/__init__.py @@ -61,87 +61,87 @@ PanasonicHeatpumpBinarySensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpB CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP0): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP2): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP3): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP13): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP26): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP60): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP61): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP68): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP69): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP99): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP100): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP108): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP109): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP110): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP119): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP120): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP121): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP122): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP123): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP124): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP129): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP132): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP133): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), + cv.Optional(CONF_TOP0): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP2): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP3): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP13): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP26): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP60): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP61): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP68): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP69): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP99): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP100): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP108): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP109): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP110): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP119): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP120): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP121): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP122): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP123): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP124): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP129): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP132): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP133): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp index ddbb516..c2f0f96 100644 --- a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp +++ b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpBinarySensor::dump_config() { LOG_BINARY_SENSOR("", "Panasonic Heatpump Binary Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h index 4283ce8..8d620ba 100644 --- a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h +++ b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpBinarySensor : public binary_sensor::BinarySensor, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/commands.cpp b/components/panasonic_heatpump/commands.cpp index 6ce90e4..35e077d 100644 --- a/components/panasonic_heatpump/commands.cpp +++ b/components/panasonic_heatpump/commands.cpp @@ -89,15 +89,19 @@ namespace esphome { switch (input) { - case 0: return 18; - case 1: return 19; - case 2: return 24; - case 3: return 33; - case 4: return 34; - case 5: return 35; - case 6: return 40; + case 0: return 18; // heat-only + case 1: return 19; // cool-only + case 2: return 24; // auto + case 3: return 25; // auto-heat + case 4: return 26; // auto-cool + case 5: return 33; // dhw-only + case 6: return 34; // heat+dhw + case 7: return 35; // cool+dhw + case 8: return 40; // auto-dhw + case 9: return 41; // auto-heat+dhw + case 10: return 42; // auto-cool+dhw + default: return 0; // do nothing } - return 0; } //start of optional pcb commands @@ -142,8 +146,8 @@ namespace esphome case 2: return 0x85; case 3: return 0x52; case 4: return 0x2B; + default: return 0; // do nothing } - return 0; } } // namespace panasonic_heatpump } // namespace esphome \ No newline at end of file diff --git a/components/panasonic_heatpump/decode.cpp b/components/panasonic_heatpump/decode.cpp index c0cdb07..0e93d3f 100644 --- a/components/panasonic_heatpump/decode.cpp +++ b/components/panasonic_heatpump/decode.cpp @@ -183,30 +183,18 @@ namespace esphome { switch ((int)(input & 0b111111)) { - case 18: // heat-only - return 0; - case 19: // cool-only - return 1; - case 24: // auto - return 2; - case 25: // auto-heat - return 3; - case 26: // auto-cool - return 4; - case 33: // dhw-only - return 5; - case 34: // heat+dhw - return 6; - case 35: // cool+dhw - return 7; - case 40: // auto-dhw - return 8; - case 41: // auto-heat+dhw - return 9; - case 42: // auto-cool+dhw - return 10; - default: // unknown - return -1; + case 18: return 0; // heat-only + case 19: return 1; // cool-only + case 24: return 2; // auto + case 25: return 3; // auto-heat + case 26: return 4; // auto-cool + case 33: return 5; // dhw-only + case 34: return 6; // heat+dhw + case 35: return 7; // cool+dhw + case 40: return 8; // auto-dhw + case 41: return 9; // auto-heat+dhw + case 42: return 10; // auto-cool+dhw + default: return -1; // unknown } } diff --git a/components/panasonic_heatpump/number/__init__.py b/components/panasonic_heatpump/number/__init__.py index ad3ec06..548c478 100644 --- a/components/panasonic_heatpump/number/__init__.py +++ b/components/panasonic_heatpump/number/__init__.py @@ -277,7 +277,12 @@ async def to_code(config): hub = await cg.get_variable(config[CONF_PANASONIC_HEATPUMP_ID]) for index, key in enumerate(TYPES): if child_config := config.get(key): - var = await number.new_number(child_config, min_value=CONF_NUMBERS[index][0], max_value=CONF_NUMBERS[index][1], step=CONF_NUMBERS[index][2]) + var = await number.new_number( + child_config, + min_value=CONF_NUMBERS[index][0], + max_value=CONF_NUMBERS[index][1], + step=CONF_NUMBERS[index][2] + ) await cg.register_component(var, child_config) await cg.register_parented(var, config[CONF_PANASONIC_HEATPUMP_ID]) cg.add(getattr(hub, f"set_{key}_number")(var)) diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp index 124c318..3a2fc9f 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp @@ -11,12 +11,13 @@ namespace esphome void PanasonicHeatpumpNumber::dump_config() { LOG_NUMBER("", "Panasonic Heatpump Number", this); + delay(10); } void PanasonicHeatpumpNumber::control(float value) { this->publish_state(value); - this->parent_->number_control(this, value); + this->parent_->control_number(this, value); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 800f498..7bd7dbe 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -10,6 +10,7 @@ namespace esphome void PanasonicHeatpumpComponent::dump_config() { ESP_LOGCONFIG(TAG, "Panasonic Heatpump"); + delay(10); } void PanasonicHeatpumpComponent::setup() @@ -30,8 +31,6 @@ namespace esphome void PanasonicHeatpumpComponent::loop() { - // ToDo: if response timeout then send init again - this->read_response(); this->send_request(); this->read_request(); @@ -46,14 +45,15 @@ namespace esphome uint8_t byte; while (this->available()) { + // Read byte from heatpump and forward it directly to the client (CZ-TAW1) this->read_byte(&byte); if (this->uart_client_ != nullptr) this->uart_client_->write_byte(byte); - // Message shall start with 0x71, if not skip this byte + // Message shall start with 0x31, 0x71 or 0xF1, if not skip this byte if (!this->response_receiving_) { - if (byte != 0x71) + if (byte != 0x31 && byte != 0x71 && byte != 0xF1) continue; this->response_receiving_ = true; } @@ -64,11 +64,11 @@ namespace esphome if (this->response_message_.size() == 2) this->response_payload_length_ = byte; // Discard message if format is wrong - if (this->response_message_.size() == 3 && byte != 0x01 || - this->response_message_.size() == 4 && byte != 0x10) + if ((this->response_message_.size() == 3 || this->response_message_.size() == 4) + && byte != 0x01 && byte != 0x10) { - ESP_LOGW(TAG, "Invalid response message: %d. byte is 0x%02X but expexted is 0x%02X", - response_message_.size(), byte, response_message_.size() == 3 ? "01" : "10"); + ESP_LOGW(TAG, "Invalid response message: %d. byte is 0x%02X but expexted is 0x01 or 0x10", + response_message_.size(), byte); delay(10); this->response_message_.clear(); this->response_receiving_ = false; @@ -78,7 +78,7 @@ namespace esphome // Check if message is complete if (this->response_message_.size() > 2 && this->response_message_.size() == this->response_payload_length_ + 3) { - this->log_uart_hex("<<<", this->response_message_, ','); + this->log_uart_hex(UART_LOG_RX, this->response_message_, ','); this->decode_response(this->response_message_); this->response_message_.clear(); this->response_receiving_ = false; @@ -92,7 +92,7 @@ namespace esphome if (this->next_request_ == 2) // command { - this->log_uart_hex(">>>", this->command_message_, ','); + this->log_uart_hex(UART_LOG_TX, this->command_message_, ','); this->write_array(this->command_message_); this->flush(); return; @@ -103,13 +103,13 @@ namespace esphome if (this->next_request_ == 0) // initial { // Probably not necessary but CZ-TAW1 sends this query on boot - this->log_uart_hex(">>>", PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_TX, PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); this->write_array(PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE); this->flush(); } else if (this->next_request_ == 1) // polling { - this->log_uart_hex(">>>", PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_TX, PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); this->write_array(PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE); this->flush(); } @@ -122,13 +122,14 @@ namespace esphome uint8_t byte; while (this->uart_client_->available()) { + // Read byte from client and forward it directly to the heatpump this->uart_client_->read_byte(&byte); this->write_byte(byte); - // Message shall start with 0x71, if not skip this byte + // Message shall start with 0x31, 0x71 or 0xF1, if not skip this byte if (!this->request_receiving_) { - if (byte != 0x71 && byte != 0xF1) + if (byte != 0x31 && byte != 0x71 && byte != 0xF1) continue; this->request_receiving_ = true; } @@ -140,11 +141,11 @@ namespace esphome this->request_payload_length_ = byte; // Discard message if format is wrong - if (this->request_message_.size() == 3 && byte != 0x01 || - this->request_message_.size() == 4 && byte != 0x10) + if ((this->request_message_.size() == 3 || this->request_message_.size() == 4) + && byte != 0x01 && byte != 0x10) { - ESP_LOGW(TAG, "Invalid request message: %d. byte is 0x%02X but expexted is 0x%02X", - request_message_.size(), byte, request_message_.size() == 3 ? "01" : "10"); + ESP_LOGW(TAG, "Invalid request message: %d. byte is 0x%02X but expexted is 0x01 or 0x10", + request_message_.size(), byte); delay(10); this->request_message_.clear(); this->request_receiving_ = false; @@ -154,20 +155,40 @@ namespace esphome // Check if message is complete if (this->request_message_.size() > 2 && this->request_message_.size() == this->request_payload_length_ + 3) { - this->log_uart_hex(">>>", this->request_message_, ','); + this->log_uart_hex(UART_LOG_TX, this->request_message_, ','); this->request_message_.clear(); this->request_receiving_ = false; } } } - void PanasonicHeatpumpComponent::log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator) + void PanasonicHeatpumpComponent::log_uart_hex(UartLogDirection direction, const uint8_t *data, size_t length, uint8_t separator) { if (this->log_uart_msg_ == false) return; std::string logStr; + std::string msgDir = direction == UART_LOG_TX ? ">>>" : "<<<"; + std::string msgType = "response"; + if (direction == UART_LOG_TX) + { + switch(data[0]) + { + case 0x31: + msgType = "initial_request"; + break; + case 0x71: + msgType = "polling_request"; + break; + case 0xF1: + msgType = "command_request"; + break; + default: + msgType = "request"; + }; + } + logStr = "[" + std::to_string(length) + "]"; - ESP_LOGI(TAG, "%s %s", prefix.c_str(), logStr.c_str()); + ESP_LOGI(TAG, "%s %s%s", msgDir.c_str(), msgType.c_str(), logStr.c_str()); delay(10); logStr = ""; @@ -182,7 +203,7 @@ namespace esphome size_t chunkSize = 90; for (size_t i = 0; i < logStr.length(); i += chunkSize) { - ESP_LOGI(TAG, "%s %s", prefix.c_str(), logStr.substr(i, chunkSize).c_str()); + ESP_LOGD(TAG, "%s %s", msgDir.c_str(), logStr.substr(i, chunkSize).c_str()); delay(10); } } @@ -214,6 +235,35 @@ namespace esphome return; } + this->publish_sensor(bytes); + this->publish_binary_sensor(bytes); + this->publish_text_sensor(bytes); + this->publish_number(bytes); + this->publish_select(bytes); + this->publish_switch(bytes); + } + + void PanasonicHeatpumpComponent::set_command_byte(uint8_t value, uint8_t index) + { + if (this->next_request_ == 1) + { + // initialize the command + command_message_.clear(); + command_message_.insert(this->command_message_.end(), PanasonicCommand::CommandMessage, + PanasonicCommand::CommandMessage + REQUEST_DATA_MSG_SIZE); + } + // set command byte + command_message_[index] = value; + // calculate and set set checksum (last element) + command_message_.back() = PanasonicCommand::calcChecksum(command_message_, command_message_.size() - 1); + + // command will be send on next loop + this->next_request_ = 2; + this->trigger_request_ = true; + } + + void PanasonicHeatpumpComponent::publish_sensor(std::vector bytes) + { #ifdef USE_SENSOR if (this->top1_sensor_) this->top1_sensor_->publish_state(PanasonicDecode::getPumpFlow(bytes[169], bytes[170])); if (this->top5_sensor_) this->top5_sensor_->publish_state(PanasonicDecode::getByteMinus128(bytes[143]) + PanasonicDecode::getFractional(bytes[118], 0)); @@ -311,6 +361,10 @@ namespace esphome if (this->top137_sensor_) this->top137_sensor_->publish_state(PanasonicDecode::getByteMinus1(bytes[69])); if (this->top138_sensor_) this->top138_sensor_->publish_state(PanasonicDecode::getByteMinus1(bytes[70])); #endif + } + + void PanasonicHeatpumpComponent::publish_binary_sensor(std::vector bytes) + { #ifdef USE_BINARY_SENSOR if (this->top0_binary_sensor_) this->top0_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(bytes[4]))); if (this->top2_binary_sensor_) this->top2_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[4]))); @@ -336,6 +390,10 @@ namespace esphome if (this->top132_binary_sensor_) this->top132_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit3and4(bytes[26]))); if (this->top133_binary_sensor_) this->top133_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_text_sensor(std::vector bytes) + { #ifdef USE_TEXT_SENSOR if (this->top4_text_sensor_) this->top4_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::OpModeDesc, PanasonicDecode::getOpMode(bytes[6]))); if (this->top17_text_sensor_) this->top17_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Powerfulmode, PanasonicDecode::getBit6and7and8(bytes[7]))); @@ -359,6 +417,10 @@ namespace esphome if (this->top126_text_sensor_) this->top126_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Valve, PanasonicDecode::getBit7and8(bytes[116]))); if (this->top130_text_sensor_) this->top130_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Bivalent, PanasonicDecode::getBit5and6(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_number(std::vector bytes) + { #ifdef USE_NUMBER if (this->set11_number_) this->set11_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[42])); if (this->set20_number_) this->set20_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[99])); @@ -394,6 +456,10 @@ namespace esphome if (this->set37_number_) this->set37_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[66])); if (this->set38_number_) this->set38_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[68])); #endif + } + + void PanasonicHeatpumpComponent::publish_select(std::vector bytes) + { #ifdef USE_SELECT if (this->set9_select_) this->set9_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::OpModeDesc, PanasonicDecode::getOpMode(bytes[6]))); if (this->set4_select_) this->set4_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Powerfulmode, PanasonicDecode::getBit6and7and8(bytes[7]))); @@ -403,6 +469,10 @@ namespace esphome if (this->set26_select_) this->set26_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::ExtPadHeaterType, PanasonicDecode::getBit3and4(bytes[25]))); if (this->set35_select_) this->set35_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Bivalent, PanasonicDecode::getBit5and6(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_switch(std::vector bytes) + { #ifdef USE_SWITCH if (this->set1_switch_) this->set1_switch_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(bytes[4]))); if (this->set10_switch_) this->set10_switch_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[4]))); @@ -418,91 +488,75 @@ namespace esphome #endif } - void PanasonicHeatpumpComponent::set_command_message(uint8_t value, uint8_t index) - { - if (this->next_request_ == 1) - { - // initialize the command - command_message_.clear(); - command_message_.insert(this->command_message_.end(), PanasonicCommand::CommandMessage, - PanasonicCommand::CommandMessage + REQUEST_DATA_MSG_SIZE); - } - // set command byte - command_message_[index] = value; - // calculate and set set checksum (last element) - command_message_.back() = PanasonicCommand::calcChecksum(command_message_, command_message_.size() - 1); - - // command will be send on next loop - this->next_request_ = 2; - this->trigger_request_ = true; - } #ifdef USE_NUMBER - void PanasonicHeatpumpComponent::number_control(number::Number* object, float value) + void PanasonicHeatpumpComponent::control_number(number::Number* object, float value) { - if (object == this->set5_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 38); - else if (object == this->set6_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 39); - else if (object == this->set7_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 40); - else if (object == this->set8_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 41); - else if (object == this->set11_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 42); - else if (object == this->set15_number_) this->set_command_message(PanasonicCommand::setPlus1(value), 45); - else if (object == this->set16_1_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 75); - else if (object == this->set16_2_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 76); - else if (object == this->set16_3_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 77); - else if (object == this->set16_4_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 78); - else if (object == this->set16_5_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 79); - else if (object == this->set16_6_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 80); - else if (object == this->set16_7_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 81); - else if (object == this->set16_8_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 82); - else if (object == this->set16_9_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 86); - else if (object == this->set16_10_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 87); - else if (object == this->set16_11_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 88); - else if (object == this->set16_12_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 89); - else if (object == this->set16_13_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 90); - else if (object == this->set16_14_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 91); - else if (object == this->set16_15_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 92); - else if (object == this->set16_16_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 93); - else if (object == this->set18_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 84); - else if (object == this->set19_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 94); - else if (object == this->set20_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 99); - else if (object == this->set21_number_) this->set_command_message(PanasonicCommand::setPlus1(value), 104); - else if (object == this->set22_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 105); - else if (object == this->set23_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 106); - else if (object == this->set27_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 59); - else if (object == this->set29_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 83); - else if (object == this->set36_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 65); - else if (object == this->set37_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 66); - else if (object == this->set38_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 68); + if (object == this->set5_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 38); + else if (object == this->set6_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 39); + else if (object == this->set7_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 40); + else if (object == this->set8_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 41); + else if (object == this->set11_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 42); + else if (object == this->set15_number_) this->set_command_byte(PanasonicCommand::setPlus1(value), 45); + else if (object == this->set16_1_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 75); + else if (object == this->set16_2_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 76); + else if (object == this->set16_3_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 77); + else if (object == this->set16_4_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 78); + else if (object == this->set16_5_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 79); + else if (object == this->set16_6_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 80); + else if (object == this->set16_7_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 81); + else if (object == this->set16_8_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 82); + else if (object == this->set16_9_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 86); + else if (object == this->set16_10_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 87); + else if (object == this->set16_11_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 88); + else if (object == this->set16_12_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 89); + else if (object == this->set16_13_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 90); + else if (object == this->set16_14_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 91); + else if (object == this->set16_15_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 92); + else if (object == this->set16_16_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 93); + else if (object == this->set18_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 84); + else if (object == this->set19_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 94); + else if (object == this->set20_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 99); + else if (object == this->set21_number_) this->set_command_byte(PanasonicCommand::setPlus1(value), 104); + else if (object == this->set22_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 105); + else if (object == this->set23_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 106); + else if (object == this->set27_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 59); + else if (object == this->set29_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 83); + else if (object == this->set36_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 65); + else if (object == this->set37_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 66); + else if (object == this->set38_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 68); } #endif + #ifdef USE_SELECT - void PanasonicHeatpumpComponent::select_control(select::Select* object, size_t value) + void PanasonicHeatpumpComponent::control_select(select::Select* object, size_t value) { - if (object == this->set2_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 5); - else if (object == this->set3_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply8(value), 7); - else if (object == this->set4_select_) this->set_command_message(PanasonicCommand::setPlus73(value), 7); - else if (object == this->set9_select_) this->set_command_message(PanasonicCommand::setOperationMode(value), 6); - else if (object == this->set17_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 6); - else if (object == this->set26_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 25); - else if (object == this->set35_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 26); + if (object == this->set2_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 5); + else if (object == this->set3_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply8(value), 7); + else if (object == this->set4_select_) this->set_command_byte(PanasonicCommand::setPlus73(value), 7); + else if (object == this->set9_select_) this->set_command_byte(PanasonicCommand::setOperationMode(value), 6); + else if (object == this->set17_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 6); + else if (object == this->set26_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 25); + else if (object == this->set35_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 26); } #endif + #ifdef USE_SWITCH - void PanasonicHeatpumpComponent::switch_control(switch_::Switch* object, size_t value) + void PanasonicHeatpumpComponent::control_switch(switch_::Switch* object, size_t value) { - if (object == this->set1_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 4); - else if (object == this->set10_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 4); - else if (object == this->set12_switch_) this->set_command_message(PanasonicCommand::setMultiply2(value), 8); - else if (object == this->set13_switch_) this->set_command_message(PanasonicCommand::setMultiply4(value), 8); - else if (object == this->set14_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 4); - else if (object == this->set24_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 5); - else if (object == this->set25_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 20); - else if (object == this->set28_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 24); - else if (object == this->set30_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 23); - else if (object == this->set31_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 23); - else if (object == this->set32_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 23); - else if (object == this->set33_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 23); - else if (object == this->set34_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 26); + if (object == this->set1_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 4); + else if (object == this->set10_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 4); + else if (object == this->set12_switch_) this->set_command_byte(PanasonicCommand::setMultiply2(value), 8); + else if (object == this->set13_switch_) this->set_command_byte(PanasonicCommand::setMultiply4(value), 8); + else if (object == this->set14_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 4); + else if (object == this->set24_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 5); + else if (object == this->set25_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 20); + else if (object == this->set28_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 24); + else if (object == this->set30_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 23); + else if (object == this->set31_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 23); + else if (object == this->set32_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 23); + else if (object == this->set33_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 23); + else if (object == this->set34_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 26); } #endif } // namespace panasonic_heatpump diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index ceb8278..e72fccb 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -32,6 +32,12 @@ namespace esphome { namespace panasonic_heatpump { + enum UartLogDirection + { + UART_LOG_RX, + UART_LOG_TX, + }; + class PanasonicHeatpumpComponent : public PollingComponent, public uart::UARTDevice { public: @@ -216,7 +222,7 @@ namespace esphome SUB_NUMBER(set37); SUB_NUMBER(set38); - void number_control(number::Number* object, float value); + void control_number(number::Number* object, float value); #endif #ifdef USE_SELECT SUB_SELECT(set2); @@ -227,7 +233,7 @@ namespace esphome SUB_SELECT(set26); SUB_SELECT(set35); - void select_control(select::Select* object, size_t value); + void control_select(select::Select* object, size_t value); #endif #ifdef USE_SWITCH SUB_SWITCH(set1); @@ -244,7 +250,7 @@ namespace esphome SUB_SWITCH(set33); SUB_SWITCH(set34); - void switch_control(switch_::Switch* object, size_t value); + void control_switch(switch_::Switch* object, size_t value); #endif PanasonicHeatpumpComponent() = default; @@ -254,15 +260,11 @@ namespace esphome void update() override; void loop() override; - //void set_uart_hp(uart::UARTComponent *uart) { this->uart_hp_ = uart; } - //void set_uart_wm(uart::UARTComponent *uart) { this->uart_wm_ = uart; } void set_uart_client(uart::UARTComponent *uart) { this->uart_client_ = uart; } void set_log_uart_msg(bool enable) { this->log_uart_msg_ = enable; } void set_polling_time(uint32_t time_sec) { this->polling_time_ = time_sec; } protected: - //uart::UARTComponent* uart_hp_; - //uart::UARTComponent* uart_wm_; uart::UARTComponent* uart_client_{nullptr}; bool log_uart_msg_{false}; uint32_t polling_time_{1}; @@ -281,9 +283,18 @@ namespace esphome void send_request(); void read_request(); void decode_response(std::vector data); - void set_command_message(uint8_t value, uint8_t index); - void log_uart_hex(std::string prefix, const std::vector &data, uint8_t separator) { this->log_uart_hex(prefix, &data[0], data.size(), separator); } - void log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator); + void set_command_byte(uint8_t value, uint8_t index); + void publish_sensor(std::vector bytes); + void publish_binary_sensor(std::vector bytes); + void publish_text_sensor(std::vector bytes); + void publish_number(std::vector bytes); + void publish_select(std::vector bytes); + void publish_switch(std::vector bytes); + void log_uart_hex(UartLogDirection direction, const std::vector &data, uint8_t separator) + { + this->log_uart_hex(direction, &data[0], data.size(), separator); + } + void log_uart_hex(UartLogDirection direction, const uint8_t *data, size_t length, uint8_t separator); }; } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp index f2129f7..062abf2 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpSelect::dump_config() { LOG_SELECT("", "Panasonic Heatpump Select", this); + delay(10); } void PanasonicHeatpumpSelect::control(const std::string &value) @@ -18,7 +19,7 @@ namespace esphome this->publish_state(value); auto index = this->active_index(); if (index.has_value()) - this->parent_->select_control(this, index.value()); + this->parent_->control_select(this, index.value()); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/sensor/__init__.py b/components/panasonic_heatpump/sensor/__init__.py index ffcc1b7..4366194 100644 --- a/components/panasonic_heatpump/sensor/__init__.py +++ b/components/panasonic_heatpump/sensor/__init__.py @@ -230,565 +230,565 @@ PanasonicHeatpumpSensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpSensor" CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP1): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_VOLUME_FLOW_RATE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_LITRE_PER_MINUTE, - ), - cv.Optional(CONF_TOP5): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP6): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP7): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP8): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_FREQUENCY, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_HERTZ, - ), - cv.Optional(CONF_TOP9): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP10): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP11): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP12): sensor.sensor_schema( - PanasonicHeatpumpSensor, - unit_of_measurement=UNIT_EMPTY, - icon=ICON_COUNTER, - ), - cv.Optional(CONF_TOP14): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP15): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP16): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP21): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP22): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP23): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP24): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP25): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP27): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP28): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP29): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP30): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP31): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP32): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP33): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP34): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP35): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP36): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP37): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP38): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP39): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP40): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP41): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP42): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP43): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP45): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP46): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP47): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP48): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP49): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP50): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP51): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP52): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP53): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP54): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP55): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP56): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP57): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP62): sensor.sensor_schema( - PanasonicHeatpumpSensor, - icon=ICON_FAN_SPEED, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP63): sensor.sensor_schema( - PanasonicHeatpumpSensor, - icon=ICON_FAN_SPEED, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP64): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PRESSURE_KGFCM2, - ), - cv.Optional(CONF_TOP65): sensor.sensor_schema( - PanasonicHeatpumpSensor, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP66): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PRESSURE_KGFCM2, - ), - cv.Optional(CONF_TOP67): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_CURRENT, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_AMPERE, - ), - cv.Optional(CONF_TOP70): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP71): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP72): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP73): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP74): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP75): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP77): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP78): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP79): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP80): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP82): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP83): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP84): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP85): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP86): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP87): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP88): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP89): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP90): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP91): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP93): sensor.sensor_schema( - PanasonicHeatpumpSensor, - ), - cv.Optional(CONF_TOP95): sensor.sensor_schema( - PanasonicHeatpumpSensor, - ), - cv.Optional(CONF_TOP96): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP97): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP98): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP102): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP103): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP104): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP105): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP113): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP115): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_BAR, - ), - cv.Optional(CONF_TOP116): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP117): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP118): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP127): sensor.sensor_schema( - PanasonicHeatpumpSensor, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PERCENT, - ), - cv.Optional(CONF_TOP128): sensor.sensor_schema( - PanasonicHeatpumpSensor, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PERCENT, - ), - cv.Optional(CONF_TOP131): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP134): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP135): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP136): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP137): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP138): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), + cv.Optional(CONF_TOP1): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_VOLUME_FLOW_RATE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_LITRE_PER_MINUTE, + ), + cv.Optional(CONF_TOP5): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP6): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP7): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP8): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_FREQUENCY, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_HERTZ, + ), + cv.Optional(CONF_TOP9): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP10): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP11): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP12): sensor.sensor_schema( + PanasonicHeatpumpSensor, + unit_of_measurement=UNIT_EMPTY, + icon=ICON_COUNTER, + ), + cv.Optional(CONF_TOP14): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP15): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP16): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP21): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP22): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP23): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP24): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP25): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP27): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP28): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP29): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP30): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP31): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP32): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP33): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP34): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP35): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP36): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP37): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP38): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP39): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP40): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP41): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP42): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP43): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP45): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP46): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP47): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP48): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP49): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP50): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP51): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP52): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP53): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP54): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP55): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP56): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP57): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP62): sensor.sensor_schema( + PanasonicHeatpumpSensor, + icon=ICON_FAN_SPEED, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP63): sensor.sensor_schema( + PanasonicHeatpumpSensor, + icon=ICON_FAN_SPEED, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP64): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PRESSURE_KGFCM2, + ), + cv.Optional(CONF_TOP65): sensor.sensor_schema( + PanasonicHeatpumpSensor, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP66): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PRESSURE_KGFCM2, + ), + cv.Optional(CONF_TOP67): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_CURRENT, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_AMPERE, + ), + cv.Optional(CONF_TOP70): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP71): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP72): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP73): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP74): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP75): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP77): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP78): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP79): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP80): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP82): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP83): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP84): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP85): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP86): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP87): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP88): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP89): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP90): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP91): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP93): sensor.sensor_schema( + PanasonicHeatpumpSensor, + ), + cv.Optional(CONF_TOP95): sensor.sensor_schema( + PanasonicHeatpumpSensor, + ), + cv.Optional(CONF_TOP96): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP97): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP98): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP102): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP103): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP104): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP105): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP113): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP115): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_BAR, + ), + cv.Optional(CONF_TOP116): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP117): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP118): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP127): sensor.sensor_schema( + PanasonicHeatpumpSensor, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PERCENT, + ), + cv.Optional(CONF_TOP128): sensor.sensor_schema( + PanasonicHeatpumpSensor, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PERCENT, + ), + cv.Optional(CONF_TOP131): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP134): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP135): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP136): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP137): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP138): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp index e6d5307..58c558c 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpSensor::dump_config() { LOG_SENSOR("", "Panasonic Heatpump Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h index 64447e6..82072b9 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpSensor : public sensor::Sensor, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp index f6d5281..5736b69 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp @@ -11,13 +11,14 @@ namespace esphome void PanasonicHeatpumpSwitch::dump_config() { LOG_SWITCH("", "Panasonic Heatpump Switch", this); + delay(10); } - + void PanasonicHeatpumpSwitch::write_state(bool state) { this->publish_state(state); size_t value = state ? 1 : 0; - this->parent_->switch_control(this, value); + this->parent_->control_switch(this, value); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h index a7abd93..7fd5264 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpSwitch : public switch_::Switch, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/text_sensor/__init__.py b/components/panasonic_heatpump/text_sensor/__init__.py index 275e3ca..5d44cc0 100644 --- a/components/panasonic_heatpump/text_sensor/__init__.py +++ b/components/panasonic_heatpump/text_sensor/__init__.py @@ -74,88 +74,88 @@ PanasonicHeatpumpTextSensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpTex CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP4): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_OPERATING_MODE, - ), - cv.Optional(CONF_TOP17): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_POWERFUL_MODE, - ), - cv.Optional(CONF_TOP18): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_QUIET_MODE, - ), - cv.Optional(CONF_TOP19): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_HOLIDAY_MODE, - ), - cv.Optional(CONF_TOP20): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP44): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_ERROR, - ), - cv.Optional(CONF_TOP58): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_BLOCKED, - ), - cv.Optional(CONF_TOP59): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_BLOCKED, - ), - cv.Optional(CONF_TOP76): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_HEATING_MODE, - ), - cv.Optional(CONF_TOP81): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_COOLING_MODE, - ), - cv.Optional(CONF_TOP92): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_MODEL, - ), - cv.Optional(CONF_TOP94): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_ZONE, - ), - cv.Optional(CONF_TOP101): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_SOLAR_MODE, - ), - cv.Optional(CONF_TOP106): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_PUMP, - ), - cv.Optional(CONF_TOP107): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_LIQUID, - ), - cv.Optional(CONF_TOP111): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - ), - cv.Optional(CONF_TOP112): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - ), - cv.Optional(CONF_TOP114): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_EXTERNAL_PAD_HEATER, - ), - cv.Optional(CONF_TOP125): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP126): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP130): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor,), + cv.Optional(CONF_TOP4): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_OPERATING_MODE, + ), + cv.Optional(CONF_TOP17): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_POWERFUL_MODE, + ), + cv.Optional(CONF_TOP18): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_QUIET_MODE, + ), + cv.Optional(CONF_TOP19): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_HOLIDAY_MODE, + ), + cv.Optional(CONF_TOP20): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP44): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_ERROR, + ), + cv.Optional(CONF_TOP58): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TOP59): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TOP76): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_HEATING_MODE, + ), + cv.Optional(CONF_TOP81): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_COOLING_MODE, + ), + cv.Optional(CONF_TOP92): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_MODEL, + ), + cv.Optional(CONF_TOP94): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_ZONE, + ), + cv.Optional(CONF_TOP101): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_SOLAR_MODE, + ), + cv.Optional(CONF_TOP106): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_PUMP, + ), + cv.Optional(CONF_TOP107): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_LIQUID, + ), + cv.Optional(CONF_TOP111): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + ), + cv.Optional(CONF_TOP112): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + ), + cv.Optional(CONF_TOP114): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_EXTERNAL_PAD_HEATER, + ), + cv.Optional(CONF_TOP125): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP126): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP130): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor,), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp index f065e88..016838b 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpTextSensor::dump_config() { LOG_TEXT_SENSOR("", "Panasonic Heatpump Text Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h index 254e6df..164d7eb 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpTextSensor : public text_sensor::TextSensor, public Component, public Parented { public: