"""Support for universal remotes.""" import struct from .device import device from .exceptions import check_error class rm(device): """Controls a Broadlink RM.""" def __init__(self, *args, **kwargs) -> None: """Initialize the controller.""" device.__init__(self, *args, **kwargs) self.type = "RM2" def _send(self, command: int, data: bytes = b'') -> bytes: """Send a packet to the device.""" packet = struct.pack(" bytes: """Return the last captured code.""" return self._send(0x4) def send_data(self, data: bytes) -> None: """Send a code to the device.""" self._send(0x2, data) def enter_learning(self) -> None: """Enter infrared learning mode.""" self._send(0x3) def sweep_frequency(self) -> None: """Sweep frequency.""" self._send(0x19) def cancel_sweep_frequency(self) -> None: """Cancel sweep frequency.""" self._send(0x1E) def check_frequency(self) -> bool: """Return True if the frequency was identified successfully.""" resp = self._send(0x1A) return resp[0] == 1 def find_rf_packet(self) -> None: """Enter radiofrequency learning mode.""" self._send(0x1B) def check_temperature(self) -> float: """Return the temperature.""" return self.check_sensors()["temperature"] def check_sensors(self) -> dict: """Return the state of the sensors.""" resp = self._send(0x1) temperature = struct.unpack(" None: """Initialize the controller.""" device.__init__(self, *args, **kwargs) self.type = "RM4" def _send(self, command: int, data: bytes = b'') -> bytes: """Send a packet to the device.""" packet = struct.pack(" float: """Return the humidity.""" return self.check_sensors()["humidity"] def check_sensors(self) -> dict: """Return the state of the sensors.""" resp = self._send(0x24) temperature = struct.unpack("