Files
esphome-votronic/components/votronic_ble/sensor.py
Sebastian Muszynski 42e6758aad Initial commit
2023-01-22 17:59:53 +01:00

72 lines
1.8 KiB
Python

import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import sensor
from esphome.const import (
CONF_CURRENT,
CONF_POWER,
DEVICE_CLASS_CURRENT,
DEVICE_CLASS_POWER,
DEVICE_CLASS_VOLTAGE,
ICON_EMPTY,
STATE_CLASS_MEASUREMENT,
UNIT_AMPERE,
UNIT_VOLT,
UNIT_WATT,
)
from . import CONF_VOTRONIC_BLE_ID, VotronicBle
DEPENDENCIES = ["votronic_ble"]
CODEOWNERS = ["@syssi"]
CONF_TOTAL_VOLTAGE = "total_voltage"
ICON_CURRENT_DC = "mdi:current-dc"
UNIT_SECONDS = "s"
UNIT_HOURS = "h"
UNIT_AMPERE_HOURS = "Ah"
SENSORS = [
CONF_TOTAL_VOLTAGE,
CONF_CURRENT,
CONF_POWER,
]
CONFIG_SCHEMA = cv.Schema(
{
cv.GenerateID(CONF_VOTRONIC_BLE_ID): cv.use_id(VotronicBle),
cv.Optional(CONF_TOTAL_VOLTAGE): sensor.sensor_schema(
unit_of_measurement=UNIT_VOLT,
icon=ICON_EMPTY,
accuracy_decimals=2,
device_class=DEVICE_CLASS_VOLTAGE,
state_class=STATE_CLASS_MEASUREMENT,
),
cv.Optional(CONF_CURRENT): sensor.sensor_schema(
unit_of_measurement=UNIT_AMPERE,
icon=ICON_CURRENT_DC,
accuracy_decimals=1,
device_class=DEVICE_CLASS_CURRENT,
state_class=STATE_CLASS_MEASUREMENT,
),
cv.Optional(CONF_POWER): sensor.sensor_schema(
unit_of_measurement=UNIT_WATT,
icon=ICON_EMPTY,
accuracy_decimals=1,
device_class=DEVICE_CLASS_POWER,
state_class=STATE_CLASS_MEASUREMENT,
),
}
)
async def to_code(config):
hub = await cg.get_variable(config[CONF_VOTRONIC_BLE_ID])
for key in SENSORS:
if key in config:
conf = config[key]
sens = await sensor.new_sensor(conf)
cg.add(getattr(hub, f"set_{key}_sensor")(sens))