From 8c9180e892c46155a8d724fe3fbd3b8635c6d968 Mon Sep 17 00:00:00 2001 From: tiagofreire-pt <41837236+tiagofreire-pt@users.noreply.github.com> Date: Thu, 8 Aug 2019 12:16:21 +0100 Subject: [PATCH] Add support for Xiaomi Mi Scale V1 and V2 https://github.com/esphome/feature-requests/issues/209 @tsunglung have all the rights and effort for this. --- esphome/components/xiaomi_miscale/sensor.py | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 esphome/components/xiaomi_miscale/sensor.py diff --git a/esphome/components/xiaomi_miscale/sensor.py b/esphome/components/xiaomi_miscale/sensor.py new file mode 100644 index 0000000000..54f842abd5 --- /dev/null +++ b/esphome/components/xiaomi_miscale/sensor.py @@ -0,0 +1,36 @@ +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'] +UNIT_GRAMS = 'kg' +CONF_WEIGHT = 'weight' +ICON_SCALE = 'mdi:scale' + +xiaomi_miscale_ns = cg.esphome_ns.namespace('xiaomi_miscale') +XiaomiMiscale = xiaomi_miscale_ns.class_('XiaomiMiscale', esp32_ble_tracker.ESPBTDeviceListener, + cg.Component) + +CONFIG_SCHEMA = cv.Schema({ + cv.GenerateID(): cv.declare_id(XiaomiMiscale), + cv.Required(CONF_MAC_ADDRESS): cv.mac_address, + cv.Optional(CONF_WEIGHT): sensor.sensor_schema(UNIT_GRAMS, ICON_SCALE, 1), +}).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_WEIGHT in config: + sens = yield sensor.new_sensor(config[CONF_WEIGHT]) + cg.add(var.set_weight(sens))