* First step of an EnOcean integration refactoring, including code reorganisation and support of a setup config flow * Moved title to root of strings file * Fixed pre-commit checks failures * Fixed linter errors * Updated formatted string format in logs * Removed leftover comment * Multiple changes after PR change requests. Using an import flow for yaml config, removed unnecessary logs, added proper unload in __init__ and EnOceanDongle Replaced config state machine by several flows. Serial port validity check done in the EnOceanDongle class asynchronously, removed unique ID from config flow Multiple cosmetic changes * Multiple changes after PR change requests * Added variable to store default value, as setdefault was caught returning None when the empty dict literal was passed as an argument * Literal used directly * Added tests for EnOcean config flows, changed static methods to bundle methods for bundle * Updated variable name * Added missing mock to test, replaced repeated magic strings by constants * Changed imports to avoid an unused import warning from pylint on DOMAIN * Adding pylint exception for unused import * Added proper propagation of setup and unload to platforms, removed dead code, some syntax changes * Removed setup_entry forwarding as the entities can only be configured using yaml * Removed forwarding of unload * Enabled code coverage for config flow only * Clean up coveragerc Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""Representation of an EnOcean device."""
|
|
from enocean.protocol.packet import Packet
|
|
from enocean.utils import combine_hex
|
|
|
|
from homeassistant.helpers.entity import Entity
|
|
|
|
from .const import SIGNAL_RECEIVE_MESSAGE, SIGNAL_SEND_MESSAGE
|
|
|
|
|
|
class EnOceanEntity(Entity):
|
|
"""Parent class for all entities associated with the EnOcean component."""
|
|
|
|
def __init__(self, dev_id, dev_name="EnOcean device"):
|
|
"""Initialize the device."""
|
|
self.dev_id = dev_id
|
|
self.dev_name = dev_name
|
|
|
|
async def async_added_to_hass(self):
|
|
"""Register callbacks."""
|
|
self.async_on_remove(
|
|
self.hass.helpers.dispatcher.async_dispatcher_connect(
|
|
SIGNAL_RECEIVE_MESSAGE, self._message_received_callback
|
|
)
|
|
)
|
|
|
|
def _message_received_callback(self, packet):
|
|
"""Handle incoming packets."""
|
|
|
|
if packet.sender_int == combine_hex(self.dev_id):
|
|
self.value_changed(packet)
|
|
|
|
def value_changed(self, packet):
|
|
"""Update the internal state of the device when a packet arrives."""
|
|
|
|
def send_command(self, data, optional, packet_type):
|
|
"""Send a command via the EnOcean dongle."""
|
|
|
|
packet = Packet(packet_type, data=data, optional=optional)
|
|
self.hass.helpers.dispatcher.dispatcher_send(SIGNAL_SEND_MESSAGE, packet)
|