Do not crash on missing build number in fw version (#1500)
Some checks failed
CI / Perform linting checks (3.13) (push) Has been cancelled
CodeQL checks / Analyze (python) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.11) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.12) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.13) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.11) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.12) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.13) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.11) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.12) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.13) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.11) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.12) (push) Has been cancelled
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.13) (push) Has been cancelled
Stale / stale (push) Has been cancelled

Co-authored-by: Steven B <51370195+sdb9696@users.noreply.github.com>
This commit is contained in:
Teemu R. 2025-02-10 12:13:01 +01:00 committed by GitHub
parent d5187dc6f1
commit 668e32d3a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 428 additions and 40 deletions

View File

@ -725,15 +725,6 @@ async def get_smart_test_calls(protocol: SmartProtocol):
successes = []
child_device_components = {}
extra_test_calls = [
SmartCall(
module="temp_humidity_records",
request=SmartRequest.get_raw_request("get_temp_humidity_records").to_dict(),
should_succeed=False,
child_device_id="",
),
]
click.echo("Testing component_nego call ..", nl=False)
responses = await _make_requests_or_exit(
protocol,
@ -812,8 +803,6 @@ async def get_smart_test_calls(protocol: SmartProtocol):
click.echo(f"Skipping {component_id}..", nl=False)
click.echo(click.style("UNSUPPORTED", fg="yellow"))
test_calls.extend(extra_test_calls)
# Child component calls
for child_device_id, child_components in child_device_components.items():
test_calls.append(
@ -839,12 +828,6 @@ async def get_smart_test_calls(protocol: SmartProtocol):
else:
click.echo(f"Skipping {component_id}..", nl=False)
click.echo(click.style("UNSUPPORTED", fg="yellow"))
# Add the extra calls for each child
for extra_call in extra_test_calls:
extra_child_call = dataclasses.replace(
extra_call, child_device_id=child_device_id
)
test_calls.append(extra_child_call)
return test_calls, successes

View File

@ -425,6 +425,7 @@ COMPONENT_REQUESTS = {
"get_trigger_logs", SmartRequest.GetTriggerLogsParams()
)
],
"temp_humidity_record": [SmartRequest.get_raw_request("get_temp_humidity_records")],
"double_click": [SmartRequest.get_raw_request("get_double_click_info")],
"child_device": [
SmartRequest.get_raw_request("get_child_device_list"),

View File

@ -48,7 +48,7 @@ async def state(ctx, dev: Device):
)
echo(
f"Firmware: {dev.device_info.firmware_version}"
f" {dev.device_info.firmware_build}"
f"{' ' + build if (build := dev.device_info.firmware_build) else ''}"
)
echo(f"MAC (rssi): {dev.mac} ({dev.rssi})")
if verbose:

View File

@ -161,7 +161,7 @@ class DeviceInfo:
device_type: DeviceType
hardware_version: str
firmware_version: str
firmware_build: str
firmware_build: str | None
requires_auth: bool
region: str | None

View File

@ -760,7 +760,10 @@ class IotDevice(Device):
device_family = sys_info.get("type", sys_info.get("mic_type"))
device_type = IotDevice._get_device_type_from_sys_info(info)
fw_version_full = sys_info["sw_ver"]
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
if " " in fw_version_full:
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
else:
firmware_version, firmware_build = fw_version_full, None
auth = bool(discovery_info and ("mgt_encrypt_schm" in discovery_info))
return DeviceInfo(

View File

@ -913,7 +913,10 @@ class SmartDevice(Device):
components, device_family
)
fw_version_full = di["fw_ver"]
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
if " " in fw_version_full:
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
else:
firmware_version, firmware_build = fw_version_full, None
_protocol, devicetype = device_family.split(".")
# Brand inferred from SMART.KASAPLUG/SMART.TAPOPLUG etc.
brand = devicetype[:4].lower()

View File

@ -103,7 +103,10 @@ class SmartCamChild(SmartChildDevice, SmartCamDevice):
model = cifp["device_model"]
device_type = SmartCamDevice._get_device_type_from_sysinfo(cifp)
fw_version_full = cifp["sw_ver"]
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
if " " in fw_version_full:
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
else:
firmware_version, firmware_build = fw_version_full, None
return DeviceInfo(
short_name=model,
long_name=model,

View File

@ -47,7 +47,10 @@ class SmartCamDevice(SmartDevice):
long_name = discovery_info["device_model"] if discovery_info else short_name
device_type = SmartCamDevice._get_device_type_from_sysinfo(basic_info)
fw_version_full = basic_info["sw_version"]
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
if " " in fw_version_full:
firmware_version, firmware_build = fw_version_full.split(" ", maxsplit=1)
else:
firmware_version, firmware_build = fw_version_full, None
return DeviceInfo(
short_name=basic_info["device_model"],
long_name=long_name,

View File

@ -75,7 +75,6 @@
}
]
},
"get_auto_update_info": -1001,
"get_connect_cloud_state": {
"status": 0
},
@ -84,25 +83,25 @@
"avatar": "sensor_t310",
"bind_count": 1,
"category": "subg.trigger.temp-hmdt-sensor",
"current_humidity": 49,
"current_humidity_exception": 0,
"current_temp": 21.7,
"current_humidity": 61,
"current_humidity_exception": 1,
"current_temp": 21.0,
"current_temp_exception": 0,
"device_id": "SCRUBBED_CHILD_DEVICE_ID_1",
"fw_ver": "1.5.0 Build 230105 Rel.180832",
"fw_ver": "1.5.0",
"hw_id": "00000000000000000000000000000000",
"hw_ver": "1.0",
"jamming_rssi": -111,
"jamming_signal_level": 1,
"lastOnboardingTimestamp": 1724637745,
"mac": "F0A731000000",
"jamming_rssi": -108,
"jamming_signal_level": 2,
"lastOnboardingTimestamp": 1690859014,
"mac": "788CB5000000",
"model": "T310",
"nickname": "I01BU0tFRF9OQU1FIw==",
"oem_id": "00000000000000000000000000000000",
"parent_device_id": "0000000000000000000000000000000000000000",
"region": "Australia/Canberra",
"report_interval": 16,
"rssi": -46,
"region": "Pacific/Auckland",
"report_interval": 8,
"rssi": -56,
"signal_level": 3,
"specs": "US",
"status": "online",
@ -110,8 +109,6 @@
"temp_unit": "celsius",
"type": "SMART.TAPOSENSOR"
},
"get_device_time": -1001,
"get_device_usage": -1001,
"get_fw_download_state": {
"cloud_cache_seconds": 1,
"download_progress": 0,
@ -121,7 +118,7 @@
},
"get_latest_fw": {
"fw_size": 0,
"fw_ver": "1.5.0 Build 230105 Rel.180832",
"fw_ver": "1.5.0",
"hw_id": "",
"need_to_upgrade": false,
"oem_id": "",
@ -129,10 +126,405 @@
"release_note": "",
"type": 0
},
"get_temp_humidity_records": {
"local_time": 1739107441,
"past24h_humidity": [
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
58,
57,
57,
57,
56,
56,
55,
55,
55,
55,
54,
54,
55,
56,
57,
57,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
60,
60,
61,
82,
59,
60,
61,
61,
61,
61
],
"past24h_humidity_exception": [
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
22,
0,
0,
1,
1,
1,
1
],
"past24h_temp": [
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
213,
213,
212,
211,
210,
208,
207,
206,
205,
204,
203,
202,
201,
202,
203,
205,
206,
208,
209,
210,
210,
211,
211,
212,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
215,
254,
221,
214,
212,
211,
210,
210
],
"past24h_temp_exception": [
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
-1000,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
4,
0,
0,
0,
0,
0,
0
],
"temp_unit": "celsius"
},
"get_trigger_logs": {
"logs": [],
"start_id": 0,
"sum": 0
},
"qs_component_nego": -1001
}
}