diff --git a/esphome/components/bl0939/sensor.py b/esphome/components/bl0939/sensor.py index bcc72ad61a..4c6e3ea4d9 100644 --- a/esphome/components/bl0939/sensor.py +++ b/esphome/components/bl0939/sensor.py @@ -9,6 +9,7 @@ from esphome.const import ( DEVICE_CLASS_POWER, DEVICE_CLASS_VOLTAGE, STATE_CLASS_MEASUREMENT, + STATE_CLASS_TOTAL_INCREASING, UNIT_AMPERE, UNIT_KILOWATT_HOURS, UNIT_VOLT, @@ -66,16 +67,19 @@ CONFIG_SCHEMA = ( unit_of_measurement=UNIT_KILOWATT_HOURS, accuracy_decimals=3, device_class=DEVICE_CLASS_ENERGY, + state_class=STATE_CLASS_TOTAL_INCREASING, ), cv.Optional(CONF_ENERGY_2): sensor.sensor_schema( unit_of_measurement=UNIT_KILOWATT_HOURS, accuracy_decimals=3, device_class=DEVICE_CLASS_ENERGY, + state_class=STATE_CLASS_TOTAL_INCREASING, ), cv.Optional(CONF_ENERGY_TOTAL): sensor.sensor_schema( unit_of_measurement=UNIT_KILOWATT_HOURS, accuracy_decimals=3, device_class=DEVICE_CLASS_ENERGY, + state_class=STATE_CLASS_TOTAL_INCREASING, ), } ) diff --git a/esphome/components/remote_base/__init__.py b/esphome/components/remote_base/__init__.py index c3149ce430..c5c8921e20 100644 --- a/esphome/components/remote_base/__init__.py +++ b/esphome/components/remote_base/__init__.py @@ -79,7 +79,9 @@ def register_trigger(name, type, data_type): validator = automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(type), - cv.GenerateID(CONF_RECEIVER_ID): cv.use_id(RemoteReceiverBase), + cv.Optional(CONF_RECEIVER_ID): cv.invalid( + "This has been removed in ESPHome 2022.3.0 and the trigger attaches directly to the parent receiver." + ), } ) registerer = TRIGGER_REGISTRY.register(f"on_{name}", validator) @@ -87,7 +89,6 @@ def register_trigger(name, type, data_type): def decorator(func): async def new_func(config): var = cg.new_Pvariable(config[CONF_TRIGGER_ID]) - await register_listener(var, config) await coroutine(func)(var, config) await automation.build_automation(var, [(data_type, "x")], config) return var @@ -223,10 +224,12 @@ async def build_binary_sensor(full_config): async def build_triggers(full_config): + triggers = [] for key in TRIGGER_REGISTRY: for config in full_config.get(key, []): func = TRIGGER_REGISTRY[key][0] - await func(config) + triggers.append(await func(config)) + return triggers async def build_dumpers(config): diff --git a/esphome/components/remote_receiver/__init__.py b/esphome/components/remote_receiver/__init__.py index 253204bd1a..1ed9161ec7 100644 --- a/esphome/components/remote_receiver/__init__.py +++ b/esphome/components/remote_receiver/__init__.py @@ -56,7 +56,9 @@ async def to_code(config): for dumper in dumpers: cg.add(var.register_dumper(dumper)) - await remote_base.build_triggers(config) + triggers = await remote_base.build_triggers(config) + for trigger in triggers: + cg.add(var.register_listener(trigger)) await cg.register_component(var, config) cg.add(var.set_tolerance(config[CONF_TOLERANCE])) diff --git a/esphome/components/wiegand/wiegand.cpp b/esphome/components/wiegand/wiegand.cpp index 67558da731..c4e834c85a 100644 --- a/esphome/components/wiegand/wiegand.cpp +++ b/esphome/components/wiegand/wiegand.cpp @@ -38,8 +38,8 @@ void Wiegand::setup() { bool check_eparity(uint64_t value, int start, int length) { int parity = 0; uint64_t mask = 1LL << start; - for (int i = 0; i <= length; i++, mask <<= 1) { - if (value & i) + for (int i = 0; i < length; i++, mask <<= 1) { + if (value & mask) parity++; } return !(parity & 1); @@ -48,8 +48,8 @@ bool check_eparity(uint64_t value, int start, int length) { bool check_oparity(uint64_t value, int start, int length) { int parity = 0; uint64_t mask = 1LL << start; - for (int i = 0; i <= length; i++, mask <<= 1) { - if (value & i) + for (int i = 0; i < length; i++, mask <<= 1) { + if (value & mask) parity++; } return parity & 1; diff --git a/esphome/const.py b/esphome/const.py index bcac2b105e..4d3a5c61e5 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2023.2.3" +__version__ = "2023.2.4" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"