def test_status(self): self.device._reset_state() device_info = DeviceInfo(self.device.dummy_device_info) assert repr(self.state()) == repr( AirDehumidifierStatus(self.device.start_state, device_info)) assert self.is_on() is True assert self.state().temperature == self.device.start_state["temp"] assert self.state().humidity == self.device.start_state["humidity"] assert self.state().mode == OperationMode( self.device.start_state["mode"]) assert self.state().led == self.device.start_state["led"] assert self.state().buzzer == ( self.device.start_state["buzzer"] == 'on') assert self.state().child_lock == ( self.device.start_state["child_lock"] == 'on') assert self.state().target_humidity == self.device.start_state["auto"] assert self.state().fan_speed == FanSpeed( self.device.start_state["fan_speed"]) assert self.state().tank_full == ( self.device.start_state["tank_full"] == 'on') assert self.state().compressor_status == ( self.device.start_state["compressor_status"] == 'on') assert self.state().defrost_status == ( self.device.start_state["defrost_status"] == 'on') assert self.state().fan_st == self.device.start_state["fan_st"] assert self.state().alarm == self.device.start_state["alarm"]
def test_status(self): self.device._reset_state() device_info = DeviceInfo(self.device.dummy_device_info) assert repr(self.state()) == repr(AirHumidifierStatus(self.device.start_state, device_info)) assert self.is_on() is True assert self.state().temperature == self.device.start_state["temp_dec"] / 10.0 assert self.state().humidity == self.device.start_state["humidity"] assert self.state().mode == OperationMode(self.device.start_state["mode"]) assert self.state().led_brightness == LedBrightness(self.device.start_state["led_b"]) assert self.state().buzzer == (self.device.start_state["buzzer"] == 'on') assert self.state().child_lock == (self.device.start_state["child_lock"] == 'on') assert self.state().target_humidity == self.device.start_state["limit_hum"] assert self.state().trans_level == self.device.start_state["trans_level"] assert self.state().motor_speed is None assert self.state().depth is None assert self.state().dry is None assert self.state().use_time == self.device.start_state["use_time"] assert self.state().hardware_version == self.device.start_state["hw_version"] assert self.state().button_pressed == self.device.start_state["button_pressed"] assert self.state().firmware_version == device_info.firmware_version assert self.state().firmware_version_major == device_info.firmware_version.rsplit('_', 1)[0] assert self.state().firmware_version_minor == int(device_info.firmware_version.rsplit('_', 1)[1]) assert self.state().strong_mode_enabled is False
def test_status(dev): assert dev.status().is_on is True assert dev.status().humidity == dev.start_state["humidity"] assert dev.status().mode == OperationMode(dev.start_state["mode"]) assert dev.status().led_brightness == LedBrightness( dev.start_state["led_b"]) assert dev.status().buzzer == (dev.start_state["buzzer"] == "on") assert dev.status().child_lock == (dev.start_state["child_lock"] == "on") assert dev.status().target_humidity == dev.start_state["limit_hum"] if dev.model == MODEL_HUMIDIFIER_CB1: assert dev.status().temperature == dev.start_state["temperature"] else: assert dev.status().temperature == dev.start_state["temp_dec"] / 10.0 if dev.model == MODEL_HUMIDIFIER_V1: # Extra props only on v1 assert dev.status().trans_level == dev.start_state["trans_level"] assert dev.status().button_pressed == dev.start_state["button_pressed"] assert dev.status().motor_speed is None assert dev.status().depth is None assert dev.status().dry is None assert dev.status().water_level is None assert dev.status().water_tank_detached is None if dev.model in [MODEL_HUMIDIFIER_CA1, MODEL_HUMIDIFIER_CB1]: assert dev.status().motor_speed == dev.start_state["speed"] assert dev.status().depth == dev.start_state["depth"] assert dev.status().water_level == int(dev.start_state["depth"] / 1.2) assert dev.status().water_tank_detached == ( dev.start_state["depth"] == 127) assert dev.status().dry == (dev.start_state["dry"] == "on") # Extra props only on v1 should be none now assert dev.status().trans_level is None assert dev.status().button_pressed is None assert dev.status().use_time == dev.start_state["use_time"] assert dev.status().hardware_version == dev.start_state["hw_version"] device_info = DeviceInfo(dev.dummy_device_info) assert dev.status().firmware_version == device_info.firmware_version assert (dev.status().firmware_version_major == device_info.firmware_version.rsplit("_", 1)[0]) try: version_minor = int(device_info.firmware_version.rsplit("_", 1)[1]) except IndexError: version_minor = 0 assert dev.status().firmware_version_minor == version_minor assert dev.status().strong_mode_enabled is False
def test_status(self): self.device._reset_state() device_info = DeviceInfo(self.device.dummy_device_info) assert repr(self.state()) == repr( AirHumidifierStatus(self.device.start_state, device_info)) assert self.is_on() is True assert self.state( ).temperature == self.device.start_state["temp_dec"] / 10.0 assert self.state().humidity == self.device.start_state["humidity"] assert self.state().mode == OperationMode( self.device.start_state["mode"]) assert self.state().led_brightness == LedBrightness( self.device.start_state["led_b"]) assert self.state().buzzer == ( self.device.start_state["buzzer"] == "on") assert self.state().child_lock == ( self.device.start_state["child_lock"] == "on") assert self.state( ).target_humidity == self.device.start_state["limit_hum"] assert self.state().trans_level is None assert self.state().motor_speed == self.device.start_state["speed"] assert self.state().depth == self.device.start_state["depth"] assert self.state().water_level == int( self.device.start_state["depth"] / 1.25) assert self.state().water_tank_detached == ( self.device.start_state["depth"] == 127) assert self.state().dry == (self.device.start_state["dry"] == "on") assert self.state().use_time == self.device.start_state["use_time"] assert self.state( ).hardware_version == self.device.start_state["hw_version"] assert self.state().button_pressed is None assert self.state().firmware_version == device_info.firmware_version assert (self.state().firmware_version_major == device_info.firmware_version.rsplit("_", 1)[0]) try: version_minor = int(device_info.firmware_version.rsplit("_", 1)[1]) except IndexError: version_minor = 0 assert self.state().firmware_version_minor == version_minor assert self.state().strong_mode_enabled is False
def _fetch_info(self) -> DeviceInfo: """Return info about the device. This is overrides the base class info to account for gen1 devices that do not respond to info query properly when not connected to the cloud. """ try: info = super()._fetch_info() return info except (TypeError, DeviceInfoUnavailableException): # cloud-blocked gen1 vacuums will not return proper payloads def create_dummy_mac(addr): """Returns a dummy mac for a given IP address. This squats the FF:FF:<first octet> OUI for a dummy mac presentation to allow presenting a unique identifier for homeassistant. """ from ipaddress import ip_address ip_to_mac = ":".join([ f"{hex(x).replace('0x', ''):0>2}" for x in ip_address(addr).packed ]) return f"FF:FF:{ip_to_mac}" dummy_v1 = DeviceInfo({ "model": ROCKROBO_V1, "token": self.token, "netif": { "localIp": self.ip }, "mac": create_dummy_mac(self.ip), "fw_ver": "1.0_nocloud", "hw_ver": "1st gen non-cloud hw", }) self._info = dummy_v1 _LOGGER.debug("Unable to query info, falling back to dummy %s", dummy_v1.model) return self._info
def _fetch_info(self) -> DeviceInfo: """Return info about the device. This is overrides the base class info to account for gen1 devices that do not respond to info query properly when not connected to the cloud. """ try: info = super()._fetch_info() return info except (TypeError, DeviceInfoUnavailableException): # cloud-blocked gen1 vacuums will not return proper payloads dummy_v1 = DeviceInfo({ "model": ROCKROBO_V1, "token": self.token, "netif": { "localIp": self.ip }, "fw_ver": "1.0_dummy", }) self._info = dummy_v1 _LOGGER.debug("Unable to query info, falling back to dummy %s", dummy_v1.model) return self._info