From cdfbe5b5237306986b07ba4efc99e782d5227342 Mon Sep 17 00:00:00 2001 From: Alexander Leisentritt Date: Wed, 16 Oct 2019 13:29:56 +0200 Subject: [PATCH] refactored xiaomi sensors (#755) * refactored xiaomi sensors * fix lint * fixed and added tests * fix namespace * LYWSD02 has no battery level * fixed enum * fix * fix case * fix spaces in empty line... * inform users of old sensors about the change --- esphome/components/xiaomi_ble/xiaomi_ble.cpp | 28 +++++------ esphome/components/xiaomi_ble/xiaomi_ble.h | 2 +- .../__init__.py | 0 .../sensor.py | 8 +-- .../xiaomi_cgg1.cpp} | 12 ++--- .../xiaomi_cgg1.h} | 6 +-- .../components/xiaomi_hhccjcy01/__init__.py | 0 esphome/components/xiaomi_hhccjcy01/sensor.py | 49 +++++++++++++++++++ .../xiaomi_hhccjcy01.cpp} | 12 ++--- .../xiaomi_hhccjcy01.h} | 6 +-- .../components/xiaomi_lywsdcgq/__init__.py | 0 esphome/components/xiaomi_lywsdcgq/sensor.py | 38 ++++++++++++++ .../xiaomi_lywsdcgq.cpp} | 12 ++--- .../xiaomi_lywsdcgq.h} | 6 +-- esphome/components/xiaomi_miflora/sensor.py | 48 +----------------- esphome/components/xiaomi_mijia/sensor.py | 37 +------------- tests/test2.yaml | 34 +++++++++---- 17 files changed, 159 insertions(+), 139 deletions(-) rename esphome/components/{xiaomi_cleargrass => xiaomi_cgg1}/__init__.py (100%) rename esphome/components/{xiaomi_cleargrass => xiaomi_cgg1}/sensor.py (85%) rename esphome/components/{xiaomi_mijia/xiaomi_mijia.cpp => xiaomi_cgg1/xiaomi_cgg1.cpp} (59%) rename esphome/components/{xiaomi_mijia/xiaomi_mijia.h => xiaomi_cgg1/xiaomi_cgg1.h} (91%) create mode 100644 esphome/components/xiaomi_hhccjcy01/__init__.py create mode 100644 esphome/components/xiaomi_hhccjcy01/sensor.py rename esphome/components/{xiaomi_miflora/xiaomi_miflora.cpp => xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp} (64%) rename esphome/components/{xiaomi_miflora/xiaomi_miflora.h => xiaomi_hhccjcy01/xiaomi_hhccjcy01.h} (93%) create mode 100644 esphome/components/xiaomi_lywsdcgq/__init__.py create mode 100644 esphome/components/xiaomi_lywsdcgq/sensor.py rename esphome/components/{xiaomi_cleargrass/xiaomi_cleargrass.cpp => xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp} (55%) rename esphome/components/{xiaomi_cleargrass/xiaomi_cleargrass.h => xiaomi_lywsdcgq/xiaomi_lywsdcgq.h} (90%) diff --git a/esphome/components/xiaomi_ble/xiaomi_ble.cpp b/esphome/components/xiaomi_ble/xiaomi_ble.cpp index 33e64246b4..0ccb28667e 100644 --- a/esphome/components/xiaomi_ble/xiaomi_ble.cpp +++ b/esphome/components/xiaomi_ble/xiaomi_ble.cpp @@ -81,17 +81,17 @@ optional parse_xiaomi(const esp32_ble_tracker::ESPBTDevice &d return {}; } - bool is_mijia = (raw[1] & 0x20) == 0x20 && raw[2] == 0xAA && raw[3] == 0x01; - bool is_miflora = (raw[1] & 0x20) == 0x20 && raw[2] == 0x98 && raw[3] == 0x00; + bool is_lywsdcgq = (raw[1] & 0x20) == 0x20 && raw[2] == 0xAA && raw[3] == 0x01; + bool is_hhccjcy01 = (raw[1] & 0x20) == 0x20 && raw[2] == 0x98 && raw[3] == 0x00; bool is_lywsd02 = (raw[1] & 0x20) == 0x20 && raw[2] == 0x5b && raw[3] == 0x04; - bool is_cleargrass = (raw[1] & 0x30) == 0x30 && raw[2] == 0x47 && raw[3] == 0x03; + bool is_cgg1 = (raw[1] & 0x30) == 0x30 && raw[2] == 0x47 && raw[3] == 0x03; - if (!is_mijia && !is_miflora && !is_lywsd02 && !is_cleargrass) { + if (!is_lywsdcgq && !is_hhccjcy01 && !is_lywsd02 && !is_cgg1) { // ESP_LOGVV(TAG, "Xiaomi no magic bytes"); return {}; } - uint8_t raw_offset = is_mijia || is_cleargrass ? 11 : 12; + uint8_t raw_offset = is_lywsdcgq || is_cgg1 ? 11 : 12; const uint8_t raw_type = raw[raw_offset]; const uint8_t data_length = raw[raw_offset + 2]; @@ -103,13 +103,13 @@ optional parse_xiaomi(const esp32_ble_tracker::ESPBTDevice &d return {}; } XiaomiParseResult result; - result.type = XiaomiParseResult::TYPE_MIFLORA; - if (is_mijia) { - result.type = XiaomiParseResult::TYPE_MIJIA; + result.type = XiaomiParseResult::TYPE_HHCCJCY01; + if (is_lywsdcgq) { + result.type = XiaomiParseResult::TYPE_LYWSDCGQ; } else if (is_lywsd02) { result.type = XiaomiParseResult::TYPE_LYWSD02; - } else if (is_cleargrass) { - result.type = XiaomiParseResult::TYPE_CLEARGRASS; + } else if (is_cgg1) { + result.type = XiaomiParseResult::TYPE_CGG1; } bool success = parse_xiaomi_data_byte(raw_type, data, data_length, result); if (!success) @@ -122,12 +122,12 @@ bool XiaomiListener::parse_device(const esp32_ble_tracker::ESPBTDevice &device) if (!res.has_value()) return false; - const char *name = "Mi Flora"; - if (res->type == XiaomiParseResult::TYPE_MIJIA) { - name = "Mi Jia"; + const char *name = "HHCCJCY01"; + if (res->type == XiaomiParseResult::TYPE_LYWSDCGQ) { + name = "LYWSDCGQ"; } else if (res->type == XiaomiParseResult::TYPE_LYWSD02) { name = "LYWSD02"; - } else if (res->type == XiaomiParseResult::TYPE_CLEARGRASS) { + } else if (res->type == XiaomiParseResult::TYPE_CGG1) { name = "Cleargrass"; } diff --git a/esphome/components/xiaomi_ble/xiaomi_ble.h b/esphome/components/xiaomi_ble/xiaomi_ble.h index 1fbd8ae6b0..824ea80edf 100644 --- a/esphome/components/xiaomi_ble/xiaomi_ble.h +++ b/esphome/components/xiaomi_ble/xiaomi_ble.h @@ -9,7 +9,7 @@ namespace esphome { namespace xiaomi_ble { struct XiaomiParseResult { - enum { TYPE_MIJIA, TYPE_MIFLORA, TYPE_LYWSD02, TYPE_CLEARGRASS } type; + enum { TYPE_LYWSDCGQ, TYPE_HHCCJCY01, TYPE_LYWSD02, TYPE_CGG1 } type; optional temperature; optional humidity; optional battery_level; diff --git a/esphome/components/xiaomi_cleargrass/__init__.py b/esphome/components/xiaomi_cgg1/__init__.py similarity index 100% rename from esphome/components/xiaomi_cleargrass/__init__.py rename to esphome/components/xiaomi_cgg1/__init__.py diff --git a/esphome/components/xiaomi_cleargrass/sensor.py b/esphome/components/xiaomi_cgg1/sensor.py similarity index 85% rename from esphome/components/xiaomi_cleargrass/sensor.py rename to esphome/components/xiaomi_cgg1/sensor.py index 66fcbc0fcd..897687c68a 100644 --- a/esphome/components/xiaomi_cleargrass/sensor.py +++ b/esphome/components/xiaomi_cgg1/sensor.py @@ -7,12 +7,12 @@ from esphome.const import CONF_BATTERY_LEVEL, CONF_HUMIDITY, CONF_MAC_ADDRESS, C DEPENDENCIES = ['esp32_ble_tracker'] AUTO_LOAD = ['xiaomi_ble'] -xiaomi_cleargrass_ns = cg.esphome_ns.namespace('xiaomi_cleargrass') -XiaomiCleargrass = xiaomi_cleargrass_ns.class_( - 'XiaomiCleargrass', esp32_ble_tracker.ESPBTDeviceListener, cg.Component) +xiaomi_cgg1_ns = cg.esphome_ns.namespace('xiaomi_cgg1') +XiaomiCGG1 = xiaomi_cgg1_ns.class_( + 'XiaomiCGG1', esp32_ble_tracker.ESPBTDeviceListener, cg.Component) CONFIG_SCHEMA = cv.Schema({ - cv.GenerateID(): cv.declare_id(XiaomiCleargrass), + cv.GenerateID(): cv.declare_id(XiaomiCGG1), cv.Required(CONF_MAC_ADDRESS): cv.mac_address, cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), cv.Optional(CONF_HUMIDITY): sensor.sensor_schema(UNIT_PERCENT, ICON_WATER_PERCENT, 1), diff --git a/esphome/components/xiaomi_mijia/xiaomi_mijia.cpp b/esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp similarity index 59% rename from esphome/components/xiaomi_mijia/xiaomi_mijia.cpp rename to esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp index 544af32d7b..6cc14f5a8e 100644 --- a/esphome/components/xiaomi_mijia/xiaomi_mijia.cpp +++ b/esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp @@ -1,21 +1,21 @@ -#include "xiaomi_mijia.h" +#include "xiaomi_cgg1.h" #include "esphome/core/log.h" #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_mijia { +namespace xiaomi_cgg1 { -static const char *TAG = "xiaomi_mijia"; +static const char *TAG = "xiaomi_cgg1"; -void XiaomiMijia::dump_config() { - ESP_LOGCONFIG(TAG, "Xiaomi Mijia"); +void XiaomiCGG1::dump_config() { + ESP_LOGCONFIG(TAG, "Xiaomi CGG1"); LOG_SENSOR(" ", "Temperature", this->temperature_); LOG_SENSOR(" ", "Humidity", this->humidity_); LOG_SENSOR(" ", "Battery Level", this->battery_level_); } -} // namespace xiaomi_mijia +} // namespace xiaomi_cgg1 } // namespace esphome #endif diff --git a/esphome/components/xiaomi_mijia/xiaomi_mijia.h b/esphome/components/xiaomi_cgg1/xiaomi_cgg1.h similarity index 91% rename from esphome/components/xiaomi_mijia/xiaomi_mijia.h rename to esphome/components/xiaomi_cgg1/xiaomi_cgg1.h index 814e33fa75..7f73011275 100644 --- a/esphome/components/xiaomi_mijia/xiaomi_mijia.h +++ b/esphome/components/xiaomi_cgg1/xiaomi_cgg1.h @@ -8,9 +8,9 @@ #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_mijia { +namespace xiaomi_cgg1 { -class XiaomiMijia : public Component, public esp32_ble_tracker::ESPBTDeviceListener { +class XiaomiCGG1 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { public: void set_address(uint64_t address) { address_ = address; } @@ -44,7 +44,7 @@ class XiaomiMijia : public Component, public esp32_ble_tracker::ESPBTDeviceListe sensor::Sensor *battery_level_{nullptr}; }; -} // namespace xiaomi_mijia +} // namespace xiaomi_cgg1 } // namespace esphome #endif diff --git a/esphome/components/xiaomi_hhccjcy01/__init__.py b/esphome/components/xiaomi_hhccjcy01/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/xiaomi_hhccjcy01/sensor.py b/esphome/components/xiaomi_hhccjcy01/sensor.py new file mode 100644 index 0000000000..495446ba11 --- /dev/null +++ b/esphome/components/xiaomi_hhccjcy01/sensor.py @@ -0,0 +1,49 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor, esp32_ble_tracker +from esphome.const import CONF_BATTERY_LEVEL, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ + UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, ICON_BATTERY, CONF_ID, \ + CONF_MOISTURE, CONF_ILLUMINANCE, ICON_BRIGHTNESS_5, UNIT_LUX, CONF_CONDUCTIVITY, \ + UNIT_MICROSIEMENS_PER_CENTIMETER, ICON_FLOWER + +DEPENDENCIES = ['esp32_ble_tracker'] +AUTO_LOAD = ['xiaomi_ble'] + +xiaomi_hhccjcy01_ns = cg.esphome_ns.namespace('xiaomi_hhccjcy01') +XiaomiHHCCJCY01 = xiaomi_hhccjcy01_ns.class_('XiaomiHHCCJCY01', + esp32_ble_tracker.ESPBTDeviceListener, cg.Component) + +CONFIG_SCHEMA = cv.Schema({ + cv.GenerateID(): cv.declare_id(XiaomiHHCCJCY01), + cv.Required(CONF_MAC_ADDRESS): cv.mac_address, + cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), + cv.Optional(CONF_MOISTURE): sensor.sensor_schema(UNIT_PERCENT, ICON_WATER_PERCENT, 0), + cv.Optional(CONF_ILLUMINANCE): sensor.sensor_schema(UNIT_LUX, ICON_BRIGHTNESS_5, 0), + cv.Optional(CONF_CONDUCTIVITY): + sensor.sensor_schema(UNIT_MICROSIEMENS_PER_CENTIMETER, ICON_FLOWER, 0), + cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(UNIT_PERCENT, ICON_BATTERY, 0), +}).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA) + + +def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + yield cg.register_component(var, config) + yield esp32_ble_tracker.register_ble_device(var, config) + + cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex)) + + if CONF_TEMPERATURE in config: + sens = yield sensor.new_sensor(config[CONF_TEMPERATURE]) + cg.add(var.set_temperature(sens)) + if CONF_MOISTURE in config: + sens = yield sensor.new_sensor(config[CONF_MOISTURE]) + cg.add(var.set_moisture(sens)) + if CONF_ILLUMINANCE in config: + sens = yield sensor.new_sensor(config[CONF_ILLUMINANCE]) + cg.add(var.set_illuminance(sens)) + if CONF_CONDUCTIVITY in config: + sens = yield sensor.new_sensor(config[CONF_CONDUCTIVITY]) + cg.add(var.set_conductivity(sens)) + if CONF_BATTERY_LEVEL in config: + sens = yield sensor.new_sensor(config[CONF_BATTERY_LEVEL]) + cg.add(var.set_battery_level(sens)) diff --git a/esphome/components/xiaomi_miflora/xiaomi_miflora.cpp b/esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp similarity index 64% rename from esphome/components/xiaomi_miflora/xiaomi_miflora.cpp rename to esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp index 966c78a1a6..8c8152c54c 100644 --- a/esphome/components/xiaomi_miflora/xiaomi_miflora.cpp +++ b/esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp @@ -1,15 +1,15 @@ -#include "xiaomi_miflora.h" +#include "xiaomi_hhccjcy01.h" #include "esphome/core/log.h" #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_miflora { +namespace xiaomi_hhccjcy01 { -static const char *TAG = "xiaomi_miflora"; +static const char *TAG = "xiaomi_hhccjcy01"; -void XiaomiMiflora::dump_config() { - ESP_LOGCONFIG(TAG, "Xiaomi Mijia"); +void XiaomiHHCCJCY01::dump_config() { + ESP_LOGCONFIG(TAG, "Xiaomi HHCCJCY01"); LOG_SENSOR(" ", "Temperature", this->temperature_); LOG_SENSOR(" ", "Moisture", this->moisture_); LOG_SENSOR(" ", "Conductivity", this->conductivity_); @@ -17,7 +17,7 @@ void XiaomiMiflora::dump_config() { LOG_SENSOR(" ", "Battery Level", this->battery_level_); } -} // namespace xiaomi_miflora +} // namespace xiaomi_hhccjcy01 } // namespace esphome #endif diff --git a/esphome/components/xiaomi_miflora/xiaomi_miflora.h b/esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h similarity index 93% rename from esphome/components/xiaomi_miflora/xiaomi_miflora.h rename to esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h index d1f05cdcc7..c1b8511bb8 100644 --- a/esphome/components/xiaomi_miflora/xiaomi_miflora.h +++ b/esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h @@ -8,9 +8,9 @@ #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_miflora { +namespace xiaomi_hhccjcy01 { -class XiaomiMiflora : public Component, public esp32_ble_tracker::ESPBTDeviceListener { +class XiaomiHHCCJCY01 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { public: void set_address(uint64_t address) { address_ = address; } @@ -52,7 +52,7 @@ class XiaomiMiflora : public Component, public esp32_ble_tracker::ESPBTDeviceLis sensor::Sensor *battery_level_{nullptr}; }; -} // namespace xiaomi_miflora +} // namespace xiaomi_hhccjcy01 } // namespace esphome #endif diff --git a/esphome/components/xiaomi_lywsdcgq/__init__.py b/esphome/components/xiaomi_lywsdcgq/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/xiaomi_lywsdcgq/sensor.py b/esphome/components/xiaomi_lywsdcgq/sensor.py new file mode 100644 index 0000000000..e13c860464 --- /dev/null +++ b/esphome/components/xiaomi_lywsdcgq/sensor.py @@ -0,0 +1,38 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor, esp32_ble_tracker +from esphome.const import CONF_BATTERY_LEVEL, CONF_HUMIDITY, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ + UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, ICON_BATTERY, CONF_ID + +DEPENDENCIES = ['esp32_ble_tracker'] +AUTO_LOAD = ['xiaomi_ble'] + +xiaomi_lywsdcgq_ns = cg.esphome_ns.namespace('xiaomi_lywsdcgq') +XiaomiLYWSDCGQ = xiaomi_lywsdcgq_ns.class_('XiaomiLYWSDCGQ', esp32_ble_tracker.ESPBTDeviceListener, + cg.Component) + +CONFIG_SCHEMA = cv.Schema({ + cv.GenerateID(): cv.declare_id(XiaomiLYWSDCGQ), + cv.Required(CONF_MAC_ADDRESS): cv.mac_address, + cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), + cv.Optional(CONF_HUMIDITY): sensor.sensor_schema(UNIT_PERCENT, ICON_WATER_PERCENT, 1), + cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(UNIT_PERCENT, ICON_BATTERY, 0), +}).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA) + + +def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + yield cg.register_component(var, config) + yield esp32_ble_tracker.register_ble_device(var, config) + + cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex)) + + if CONF_TEMPERATURE in config: + sens = yield sensor.new_sensor(config[CONF_TEMPERATURE]) + cg.add(var.set_temperature(sens)) + if CONF_HUMIDITY in config: + sens = yield sensor.new_sensor(config[CONF_HUMIDITY]) + cg.add(var.set_humidity(sens)) + if CONF_BATTERY_LEVEL in config: + sens = yield sensor.new_sensor(config[CONF_BATTERY_LEVEL]) + cg.add(var.set_battery_level(sens)) diff --git a/esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.cpp b/esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp similarity index 55% rename from esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.cpp rename to esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp index e50994ca4e..2dacff2876 100644 --- a/esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.cpp +++ b/esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp @@ -1,21 +1,21 @@ -#include "xiaomi_cleargrass.h" +#include "xiaomi_lywsdcgq.h" #include "esphome/core/log.h" #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_cleargrass { +namespace xiaomi_lywsdcgq { -static const char *TAG = "xiaomi_cleargrass"; +static const char *TAG = "xiaomi_lywsdcgq"; -void XiaomiCleargrass::dump_config() { - ESP_LOGCONFIG(TAG, "Xiaomi Cleargrass"); +void XiaomiLYWSDCGQ::dump_config() { + ESP_LOGCONFIG(TAG, "Xiaomi LYWSDCGQ"); LOG_SENSOR(" ", "Temperature", this->temperature_); LOG_SENSOR(" ", "Humidity", this->humidity_); LOG_SENSOR(" ", "Battery Level", this->battery_level_); } -} // namespace xiaomi_cleargrass +} // namespace xiaomi_lywsdcgq } // namespace esphome #endif diff --git a/esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.h b/esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h similarity index 90% rename from esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.h rename to esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h index ea5c80a64f..b6756eec61 100644 --- a/esphome/components/xiaomi_cleargrass/xiaomi_cleargrass.h +++ b/esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h @@ -8,9 +8,9 @@ #ifdef ARDUINO_ARCH_ESP32 namespace esphome { -namespace xiaomi_cleargrass { +namespace xiaomi_lywsdcgq { -class XiaomiCleargrass : public Component, public esp32_ble_tracker::ESPBTDeviceListener { +class XiaomiLYWSDCGQ : public Component, public esp32_ble_tracker::ESPBTDeviceListener { public: void set_address(uint64_t address) { address_ = address; } @@ -44,7 +44,7 @@ class XiaomiCleargrass : public Component, public esp32_ble_tracker::ESPBTDevice sensor::Sensor *battery_level_{nullptr}; }; -} // namespace xiaomi_cleargrass +} // namespace xiaomi_lywsdcgq } // namespace esphome #endif diff --git a/esphome/components/xiaomi_miflora/sensor.py b/esphome/components/xiaomi_miflora/sensor.py index 8be06a93f3..0a0b3ff63f 100644 --- a/esphome/components/xiaomi_miflora/sensor.py +++ b/esphome/components/xiaomi_miflora/sensor.py @@ -1,49 +1,3 @@ -import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import sensor, esp32_ble_tracker -from esphome.const import CONF_BATTERY_LEVEL, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ - UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, ICON_BATTERY, CONF_ID, \ - CONF_MOISTURE, CONF_ILLUMINANCE, ICON_BRIGHTNESS_5, UNIT_LUX, CONF_CONDUCTIVITY, \ - UNIT_MICROSIEMENS_PER_CENTIMETER, ICON_FLOWER -DEPENDENCIES = ['esp32_ble_tracker'] -AUTO_LOAD = ['xiaomi_ble'] - -xiaomi_miflora_ns = cg.esphome_ns.namespace('xiaomi_miflora') -XiaomiMiflora = xiaomi_miflora_ns.class_('XiaomiMiflora', esp32_ble_tracker.ESPBTDeviceListener, - cg.Component) - -CONFIG_SCHEMA = cv.Schema({ - cv.GenerateID(): cv.declare_id(XiaomiMiflora), - cv.Required(CONF_MAC_ADDRESS): cv.mac_address, - cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), - cv.Optional(CONF_MOISTURE): sensor.sensor_schema(UNIT_PERCENT, ICON_WATER_PERCENT, 0), - cv.Optional(CONF_ILLUMINANCE): sensor.sensor_schema(UNIT_LUX, ICON_BRIGHTNESS_5, 0), - cv.Optional(CONF_CONDUCTIVITY): - sensor.sensor_schema(UNIT_MICROSIEMENS_PER_CENTIMETER, ICON_FLOWER, 0), - cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(UNIT_PERCENT, ICON_BATTERY, 0), -}).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA) - - -def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) - yield cg.register_component(var, config) - yield esp32_ble_tracker.register_ble_device(var, config) - - cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex)) - - if CONF_TEMPERATURE in config: - sens = yield sensor.new_sensor(config[CONF_TEMPERATURE]) - cg.add(var.set_temperature(sens)) - if CONF_MOISTURE in config: - sens = yield sensor.new_sensor(config[CONF_MOISTURE]) - cg.add(var.set_moisture(sens)) - if CONF_ILLUMINANCE in config: - sens = yield sensor.new_sensor(config[CONF_ILLUMINANCE]) - cg.add(var.set_illuminance(sens)) - if CONF_CONDUCTIVITY in config: - sens = yield sensor.new_sensor(config[CONF_CONDUCTIVITY]) - cg.add(var.set_conductivity(sens)) - if CONF_BATTERY_LEVEL in config: - sens = yield sensor.new_sensor(config[CONF_BATTERY_LEVEL]) - cg.add(var.set_battery_level(sens)) +CONFIG_SCHEMA = cv.invalid("This sensor has been renamed to xiaomi_hhccjcy01") diff --git a/esphome/components/xiaomi_mijia/sensor.py b/esphome/components/xiaomi_mijia/sensor.py index 995a6cbf25..597d8d1bce 100644 --- a/esphome/components/xiaomi_mijia/sensor.py +++ b/esphome/components/xiaomi_mijia/sensor.py @@ -1,38 +1,3 @@ -import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import sensor, esp32_ble_tracker -from esphome.const import CONF_BATTERY_LEVEL, CONF_HUMIDITY, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ - UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, ICON_BATTERY, CONF_ID -DEPENDENCIES = ['esp32_ble_tracker'] -AUTO_LOAD = ['xiaomi_ble'] - -xiaomi_mijia_ns = cg.esphome_ns.namespace('xiaomi_mijia') -XiaomiMijia = xiaomi_mijia_ns.class_('XiaomiMijia', esp32_ble_tracker.ESPBTDeviceListener, - cg.Component) - -CONFIG_SCHEMA = cv.Schema({ - cv.GenerateID(): cv.declare_id(XiaomiMijia), - cv.Required(CONF_MAC_ADDRESS): cv.mac_address, - cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), - cv.Optional(CONF_HUMIDITY): sensor.sensor_schema(UNIT_PERCENT, ICON_WATER_PERCENT, 1), - cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(UNIT_PERCENT, ICON_BATTERY, 0), -}).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA) - - -def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) - yield cg.register_component(var, config) - yield esp32_ble_tracker.register_ble_device(var, config) - - cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex)) - - if CONF_TEMPERATURE in config: - sens = yield sensor.new_sensor(config[CONF_TEMPERATURE]) - cg.add(var.set_temperature(sens)) - if CONF_HUMIDITY in config: - sens = yield sensor.new_sensor(config[CONF_HUMIDITY]) - cg.add(var.set_humidity(sens)) - if CONF_BATTERY_LEVEL in config: - sens = yield sensor.new_sensor(config[CONF_BATTERY_LEVEL]) - cg.add(var.set_battery_level(sens)) +CONFIG_SCHEMA = cv.invalid("This sensor has been renamed to xiaomi_lywsdcgq") diff --git a/tests/test2.yaml b/tests/test2.yaml index b0dfc27e96..337deece91 100644 --- a/tests/test2.yaml +++ b/tests/test2.yaml @@ -61,26 +61,40 @@ sensor: - platform: ble_rssi mac_address: AC:37:43:77:5F:4C name: "BLE Google Home Mini RSSI value" - - platform: xiaomi_miflora + - platform: xiaomi_hhccjcy01 mac_address: 94:2B:FF:5C:91:61 temperature: - name: "Xiaomi MiFlora Temperature" + name: "Xiaomi HHCCJCY01 Temperature" moisture: - name: "Xiaomi MiFlora Moisture" + name: "Xiaomi HHCCJCY01 Moisture" illuminance: - name: "Xiaomi MiFlora Illuminance" + name: "Xiaomi HHCCJCY01 Illuminance" conductivity: - name: "Xiaomi MiFlora Soil Conductivity" + name: "Xiaomi HHCCJCY01 Soil Conductivity" battery_level: - name: "Xiaomi MiFlora Battery Level" - - platform: xiaomi_mijia + name: "Xiaomi HHCCJCY01 Battery Level" + - platform: xiaomi_lywsdcgq mac_address: 7A:80:8E:19:36:BA temperature: - name: "Xiaomi MiJia Temperature" + name: "Xiaomi LYWSDCGQ Temperature" humidity: - name: "Xiaomi MiJia Humidity" + name: "Xiaomi LYWSDCGQ Humidity" battery_level: - name: "Xiaomi MiJia Battery Level" + name: "Xiaomi LYWSDCGQ Battery Level" + - platform: xiaomi_lywsd02 + mac_address: 3F:5B:7D:82:58:4E + temperature: + name: "Xiaomi LYWSD02 Temperature" + humidity: + name: "Xiaomi LYWSD02 Humidity" + - platform: xiaomi_cgg1 + mac_address: 7A:80:8E:19:36:BA + temperature: + name: "Xiaomi CGG1 Temperature" + humidity: + name: "Xiaomi CGG1 Humidity" + battery_level: + name: "Xiaomi CGG1 Battery Level" - platform: pmsx003 type: PMSX003 pm_1_0: