mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add LYWSD02 battery sensor (#1334)
* add battery sensor for lywsd02 * update test
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							ed328d2df8
						
					
				
				
					commit
					f034472e2a
				
			| @@ -1,8 +1,8 @@ | |||||||
| import esphome.codegen as cg | import esphome.codegen as cg | ||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
| from esphome.components import sensor, esp32_ble_tracker | from esphome.components import sensor, esp32_ble_tracker | ||||||
| from esphome.const import CONF_HUMIDITY, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ | from esphome.const import CONF_BATTERY_LEVEL, CONF_HUMIDITY, CONF_MAC_ADDRESS, CONF_TEMPERATURE, \ | ||||||
|     UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, CONF_ID |     UNIT_CELSIUS, ICON_THERMOMETER, UNIT_PERCENT, ICON_WATER_PERCENT, ICON_BATTERY, CONF_ID | ||||||
|  |  | ||||||
| DEPENDENCIES = ['esp32_ble_tracker'] | DEPENDENCIES = ['esp32_ble_tracker'] | ||||||
| AUTO_LOAD = ['xiaomi_ble'] | AUTO_LOAD = ['xiaomi_ble'] | ||||||
| @@ -16,6 +16,7 @@ CONFIG_SCHEMA = cv.Schema({ | |||||||
|     cv.Required(CONF_MAC_ADDRESS): cv.mac_address, |     cv.Required(CONF_MAC_ADDRESS): cv.mac_address, | ||||||
|     cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), |     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_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) | }).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -32,3 +33,6 @@ def to_code(config): | |||||||
|     if CONF_HUMIDITY in config: |     if CONF_HUMIDITY in config: | ||||||
|         sens = yield sensor.new_sensor(config[CONF_HUMIDITY]) |         sens = yield sensor.new_sensor(config[CONF_HUMIDITY]) | ||||||
|         cg.add(var.set_humidity(sens)) |         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)) | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ void XiaomiLYWSD02::dump_config() { | |||||||
|   ESP_LOGCONFIG(TAG, "Xiaomi LYWSD02"); |   ESP_LOGCONFIG(TAG, "Xiaomi LYWSD02"); | ||||||
|   LOG_SENSOR("  ", "Temperature", this->temperature_); |   LOG_SENSOR("  ", "Temperature", this->temperature_); | ||||||
|   LOG_SENSOR("  ", "Humidity", this->humidity_); |   LOG_SENSOR("  ", "Humidity", this->humidity_); | ||||||
|  |   LOG_SENSOR("  ", "Battery Level", this->battery_level_); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool XiaomiLYWSD02::parse_device(const esp32_ble_tracker::ESPBTDevice &device) { | bool XiaomiLYWSD02::parse_device(const esp32_ble_tracker::ESPBTDevice &device) { | ||||||
| @@ -44,6 +45,8 @@ bool XiaomiLYWSD02::parse_device(const esp32_ble_tracker::ESPBTDevice &device) { | |||||||
|       this->temperature_->publish_state(*res->temperature); |       this->temperature_->publish_state(*res->temperature); | ||||||
|     if (res->humidity.has_value() && this->humidity_ != nullptr) |     if (res->humidity.has_value() && this->humidity_ != nullptr) | ||||||
|       this->humidity_->publish_state(*res->humidity); |       this->humidity_->publish_state(*res->humidity); | ||||||
|  |     if (res->battery_level.has_value() && this->battery_level_ != nullptr) | ||||||
|  |       this->battery_level_->publish_state(*res->battery_level); | ||||||
|     success = true; |     success = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,11 +20,13 @@ class XiaomiLYWSD02 : public Component, public esp32_ble_tracker::ESPBTDeviceLis | |||||||
|   float get_setup_priority() const override { return setup_priority::DATA; } |   float get_setup_priority() const override { return setup_priority::DATA; } | ||||||
|   void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; } |   void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; } | ||||||
|   void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; } |   void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; } | ||||||
|  |   void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   uint64_t address_; |   uint64_t address_; | ||||||
|   sensor::Sensor *temperature_{nullptr}; |   sensor::Sensor *temperature_{nullptr}; | ||||||
|   sensor::Sensor *humidity_{nullptr}; |   sensor::Sensor *humidity_{nullptr}; | ||||||
|  |   sensor::Sensor *battery_level_{nullptr}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace xiaomi_lywsd02 | }  // namespace xiaomi_lywsd02 | ||||||
|   | |||||||
| @@ -117,6 +117,8 @@ sensor: | |||||||
|       name: "Xiaomi LYWSD02 Temperature" |       name: "Xiaomi LYWSD02 Temperature" | ||||||
|     humidity: |     humidity: | ||||||
|       name: "Xiaomi LYWSD02 Humidity" |       name: "Xiaomi LYWSD02 Humidity" | ||||||
|  |     battery_level: | ||||||
|  |       name: "Xiaomi LYWSD02 Battery Level" | ||||||
|   - platform: xiaomi_cgg1 |   - platform: xiaomi_cgg1 | ||||||
|     mac_address: 7A:80:8E:19:36:BA |     mac_address: 7A:80:8E:19:36:BA | ||||||
|     temperature: |     temperature: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user