ecowitt2mqtt: Battery data type: percentage type missing and static type definition

Hi,

the battery data is missing ecowitt sensors that report a percentage type: WH45, WH57, PM2.5, Leak, WH90.

Right now E2M is managing numeric and binary, I think a third type (percentage) is needed.

Also, instead of auto determining which kind, based on the value, could a more strict type definition be applied? Something like this, implemented in the ecowitt custom component (soon to become an official HA integration from what I read).

These should be all ecowitt sensor battery types, including the latest Wittboy, implemented in a fork of that component (the complete source is here: https://github.com/warrenchin/homeassistant_ecowitt/blob/master/custom_components/ecowitt/const.py):

    TYPE_CO2_BATT: ("WH45 Battery", PERCENTAGE, TYPE_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_WH25BATT: ("WH25 Battery", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_WH26BATT: ("WH26 Battery", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_WH40BATT: ("WH40 Battery", ELECTRIC_POTENTIAL_VOLT, TYPE_SENSOR,
                    DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_WH57BATT: ("WH57 Battery", PERCENTAGE, TYPE_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_WH65BATT: ("WH65 Battery", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_WH68BATT: ("WH68 Battery", ELECTRIC_POTENTIAL_VOLT, TYPE_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_WH80BATT: ("WH80 Battery", ELECTRIC_POTENTIAL_VOLT, TYPE_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT1: ("Soil Moisture 1 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT2: ("Soil Moisture 2 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT3: ("Soil Moisture 3 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT4: ("Soil Moisture 4 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT5: ("Soil Moisture 5 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT6: ("Soil Moisture 6 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT7: ("Soil Moisture 7 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_SOILBATT8: ("Soil Moisture 8 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_BATTERY1: ("Battery 1", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY2: ("Battery 2", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY3: ("Battery 3", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY4: ("Battery 4", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY5: ("Battery 5", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY6: ("Battery 6", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY7: ("Battery 7", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_BATTERY8: ("Battery 8", "BATT", TYPE_BINARY_SENSOR,
                    DEVICE_CLASS_BATTERY, "mdi:battery", 0, None),
    TYPE_PM25BATT1: ("PM2.5 1 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT2: ("PM2.5 2 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT3: ("PM2.5 3 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT4: ("PM2.5 4 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT5: ("PM2.5 5 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT6: ("PM2.5 6 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT7: ("PM2.5 7 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_PM25BATT8: ("PM2.5 8 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT1: ("Leak 1 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT2: ("Leak 2 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT3: ("Leak 3 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT4: ("Leak 4 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT5: ("Leak 5 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT6: ("Leak 6 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT7: ("Leak 7 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_LEAKBATT8: ("Leak 8 Battery", PERCENTAGE, TYPE_SENSOR,
                     DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                     STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT1: ("Soil Temperature 1 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT2: ("Soil Temperature 2 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT3: ("Soil Temperature 3 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT4: ("Soil Temperature 4 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT5: ("Soil Temperature 5 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT6: ("Soil Temperature 6 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT7: ("Soil Temperature 7 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WN34BATT8: ("Soil Temperature 8 Battery", ELECTRIC_POTENTIAL_VOLT,
                     TYPE_SENSOR, DEVICE_CLASS_VOLTAGE,
                     "mdi:battery", 0, STATE_CLASS_MEASUREMENT),
    TYPE_WH90BATT_PC: ("WH90 Battery Percentage", None, TYPE_SENSOR,
                       DEVICE_CLASS_BATTERY, "mdi:battery", 0,
                       STATE_CLASS_MEASUREMENT),
    TYPE_WH90BATT: ("WH90 Battery", ELECTRIC_POTENTIAL_VOLT, TYPE_SENSOR,
                    DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                    STATE_CLASS_MEASUREMENT),
    TYPE_WH90CAP_VOLT: ("WH90 Capacitor", ELECTRIC_POTENTIAL_VOLT, TYPE_SENSOR,
                        DEVICE_CLASS_VOLTAGE, "mdi:battery", 0,
                        STATE_CLASS_MEASUREMENT),

Thanks.

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 20 (20 by maintainers)

Most upvoted comments

I’m okay keeping a mapping of things like battery strategies where appropriate. Still, for something like friendly names, the current suggestion is to have the consuming application (like HASS) handle that.

I can totally understand that, thanks for the explanation.

This is from the official Fine Offset API docs, regarding batteries and sensors. How to interpret the values for each sensor type. In some cases, voltages have to be multiplied by 0.02 in others by 0.1, in others you have “battery levels” (0-5 and 6 means power supply) to be multiplied by 20 to have %.

image image image image

Hope it sheds some light in this ecowitt chaos. 😃

Appreciate it! This will probably be a couple PRs (one for the percentage type, one for the mapping of batteries we know about), but once I’m done, I’ll let you know and will appreciate your test.

You bet, that’s a good enhancement.

Good to hear that. You’ve done an amazing job, the only thing I found was this.

as of 2022.06.0, we no longer attempt to determine battery type from its value; rather, users can set a default battery “strategy” and override individual ones as appropriate

That’s a good idea, in absence of the appropriate battery type per sensor. I think that once you implement those types from that list, users won’t need to define anything, it’ll do its magic out of the box. I’ve used several ecowitt integrations, but yours is by far the most flexible and easy to integrate.

Keep up the good work and if you need to test something, keep in mind I have a lot of ecowitt sensors, I’m just missing the leaf and leak sensors. I also have the wittboy. Glad to help you.