diff --git a/devtools/dump_devinfo.py b/devtools/dump_devinfo.py index b6c44fe5..d91d44e7 100644 --- a/devtools/dump_devinfo.py +++ b/devtools/dump_devinfo.py @@ -847,7 +847,8 @@ def get_smart_child_fixture(response): model_info = SmartDevice._get_device_info(response, None) hw_version = model_info.hardware_version fw_version = model_info.firmware_version - model = model_info.long_name + # Vacuum models can have a space in their name + model = model_info.long_name.replace(" ", "_") if model_info.region is not None: model = f"{model}({model_info.region})" save_filename = f"{model}_{hw_version}_{fw_version}.json" diff --git a/tests/device_fixtures.py b/tests/device_fixtures.py index d206b714..f966a5f5 100644 --- a/tests/device_fixtures.py +++ b/tests/device_fixtures.py @@ -124,6 +124,7 @@ DIMMERS = { HUBS_SMART = {"H100", "KH100"} SENSORS_SMART = {"T310", "T315", "T300", "T100", "T110", "S200B", "S200D"} THERMOSTATS_SMART = {"KE100"} +VACUUMS_SMART = {"RV30"} WITH_EMETER_IOT = {"HS110", "HS300", "KP115", "KP125", *BULBS_IOT} WITH_EMETER_SMART = {"P110", "P110M", "P115", "KP125M", "EP25", "P304M"} @@ -142,6 +143,7 @@ ALL_DEVICES_SMART = ( .union(SENSORS_SMART) .union(SWITCHES_SMART) .union(THERMOSTATS_SMART) + .union(VACUUMS_SMART) ) ALL_DEVICES = ALL_DEVICES_IOT.union(ALL_DEVICES_SMART) @@ -310,6 +312,9 @@ dimmers_smart = parametrize( hubs_smart = parametrize( "hubs smart", model_filter=HUBS_SMART, protocol_filter={"SMART"} ) +vacuums_smart = parametrize( + "vacuums smart", model_filter=VACUUMS_SMART, protocol_filter={"SMART"} +) sensors_smart = parametrize( "sensors smart", model_filter=SENSORS_SMART, protocol_filter={"SMART.CHILD"} ) @@ -351,15 +356,15 @@ def check_categories(): + thermostats_smart.args[1] + camera_smartcam.args[1] + hub_smartcam.args[1] + + vacuums_smart.args[1] ) diffs: set[FixtureInfo] = set(FIXTURE_DATA) - set(categorized_fixtures) if diffs: - print(diffs) for diff in diffs: print( f"No category for file {diff.name} protocol {diff.protocol}, add to the corresponding set (BULBS, PLUGS, ..)" ) - raise Exception(f"Missing category for {diff.name}") + raise Exception(f"Missing category for {diffs}") check_categories() diff --git a/tests/fixtures/smart/RV30_Plus(US)_1.0_1.2.2.json b/tests/fixtures/smart/RV30_Plus(US)_1.0_1.2.2.json new file mode 100644 index 00000000..561c9e44 --- /dev/null +++ b/tests/fixtures/smart/RV30_Plus(US)_1.0_1.2.2.json @@ -0,0 +1,334 @@ +{ + "component_nego": { + "component_list": [ + { + "id": "device", + "ver_code": 1 + }, + { + "id": "iot_cloud", + "ver_code": 1 + }, + { + "id": "time", + "ver_code": 1 + }, + { + "id": "firmware", + "ver_code": 1 + }, + { + "id": "quick_setup", + "ver_code": 1 + }, + { + "id": "clean", + "ver_code": 2 + }, + { + "id": "battery", + "ver_code": 1 + }, + { + "id": "consumables", + "ver_code": 2 + }, + { + "id": "direction_control", + "ver_code": 1 + }, + { + "id": "button_and_led", + "ver_code": 1 + }, + { + "id": "speaker", + "ver_code": 3 + }, + { + "id": "schedule", + "ver_code": 3 + }, + { + "id": "wireless", + "ver_code": 1 + }, + { + "id": "map", + "ver_code": 3 + }, + { + "id": "auto_change_map", + "ver_code": 2 + }, + { + "id": "ble_whole_setup", + "ver_code": 1 + }, + { + "id": "dust_bucket", + "ver_code": 1 + }, + { + "id": "inherit", + "ver_code": 1 + }, + { + "id": "mop", + "ver_code": 1 + }, + { + "id": "do_not_disturb", + "ver_code": 1 + }, + { + "id": "device_local_time", + "ver_code": 1 + }, + { + "id": "charge_pose_clean", + "ver_code": 1 + }, + { + "id": "continue_breakpoint_sweep", + "ver_code": 1 + }, + { + "id": "goto_point", + "ver_code": 1 + }, + { + "id": "furniture", + "ver_code": 1 + }, + { + "id": "map_cloud_backup", + "ver_code": 1 + }, + { + "id": "dev_log", + "ver_code": 1 + } + ] + }, + "discovery_result": { + "device_id": "00000000000000000000000000000000", + "device_model": "RV30 Plus(US)", + "device_type": "SMART.TAPOROBOVAC", + "factory_default": false, + "ip": "127.0.0.123", + "is_support_iot_cloud": true, + "mac": "AC-15-A2-00-00-00", + "mgt_encrypt_schm": { + "encrypt_type": "AES", + "http_port": 4433, + "is_support_https": true + }, + "obd_src": "tplink", + "owner": "00000000000000000000000000000000" + }, + "getAutoChangeMap": { + "auto_change_map": true + }, + "getAutoDustCollection": { + "auto_dust_collection": 1 + }, + "getBatteryInfo": { + "battery_percentage": 100 + }, + "getCleanRecords": { + "lastest_day_record": [ + 0, + 0, + 0, + 0 + ], + "record_list": [], + "record_list_num": 0, + "total_area": 0, + "total_number": 0, + "total_time": 0 + }, + "getConsumablesInfo": { + "charge_contact_time": 0, + "edge_brush_time": 0, + "filter_time": 0, + "main_brush_lid_time": 0, + "rag_time": 0, + "roll_brush_time": 0, + "sensor_time": 0 + }, + "getCurrentVoiceLanguage": { + "name": "bb053ca2c5605a55090fcdb952f3902b", + "version": 1 + }, + "getDoNotDisturb": { + "do_not_disturb": true, + "e_min": 480, + "s_min": 1320 + }, + "getMapInfo": { + "auto_change_map": true, + "current_map_id": 0, + "map_list": [], + "map_num": 0, + "version": "LDS" + }, + "getMopState": { + "mop_state": false + }, + "getVacStatus": { + "err_status": [ + 0 + ], + "errorCode_id": [ + 0 + ], + "prompt": [], + "promptCode_id": [], + "status": 6 + }, + "get_device_info": { + "auto_pack_ver": "0.0.49.1720", + "avatar": "", + "board_sn": "22420ABD10A80A74", + "custom_sn": "222A056000059", + "device_id": "0000000000000000000000000000000000000000", + "fw_id": "00000000000000000000000000000000", + "fw_ver": "1.2.2 Build 240627 Rel.162730", + "has_set_location_info": false, + "hw_id": "00000000000000000000000000000000", + "hw_ver": "1.0", + "ip": "127.0.0.123", + "lang": "", + "latitude": 0, + "linux_ver": "V6.45.2670418356", + "location": "Home", + "longitude": 0, + "mac": "AC-15-A2-00-00-00", + "mcu_ver": "1.1.2703.116", + "model": "RV30 Plus", + "nickname": "I01BU0tFRF9OQU1FIw==", + "oem_id": "00000000000000000000000000000000", + "overheated": false, + "region": "America/Chicago", + "rssi": -49, + "signal_level": 3, + "specs": "", + "ssid": "I01BU0tFRF9TU0lEIw==", + "time_diff": -360, + "total_ver": "1.3.8", + "type": "SMART.TAPOROBOVAC" + }, + "get_device_time": { + "region": "America/Chicago", + "time_diff": -360, + "timestamp": 1732911696 + }, + "get_fw_download_state": { + "auto_upgrade": false, + "download_progress": 0, + "reboot_time": 5, + "status": 0, + "upgrade_time": 5 + }, + "get_inherit_info": null, + "get_latest_fw": { + "fw_size": 0, + "fw_ver": "1.2.2 Build 240627 Rel.162730", + "hw_id": "", + "need_to_upgrade": false, + "oem_id": "", + "release_date": "", + "release_note": "", + "type": 0 + }, + "get_next_event": {}, + "get_schedule_rules": { + "enable": false, + "rule_list": [], + "schedule_rule_max_count": 32, + "start_index": 0, + "sum": 0 + }, + "get_wireless_scan_info": { + "ap_list": [ + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + } + ], + "start_index": 0, + "sum": 9, + "wep_supported": true + }, + "qs_component_nego": { + "component_list": [ + { + "id": "quick_setup", + "ver_code": 1 + }, + { + "id": "iot_cloud", + "ver_code": 1 + }, + { + "id": "firmware", + "ver_code": 1 + }, + { + "id": "ble_whole_setup", + "ver_code": 1 + }, + { + "id": "inherit", + "ver_code": 1 + } + ], + "extra_info": { + "device_model": "RV30 Plus", + "device_type": "SMART.TAPOROBOVAC" + } + } +}