Handle network key type

Aims to handle network key type by using a text match that assigns the integer, as reported in https://github.com/python-kasa/python-kasa/issues/1325

One solution of multiple potential solutions. Adds the default of 3, which should be WPA2, and is set as a default in multiple other locations within the code.

May need more documentation on the levels (0-4) and their correspondence.
This commit is contained in:
RiderExMachina 2024-12-10 19:34:54 -08:00
parent 123ea107b1
commit 91cc8c6bfa
2 changed files with 18 additions and 2 deletions

View File

@ -35,7 +35,7 @@ async def scan(dev):
@wifi.command() @wifi.command()
@click.argument("ssid") @click.argument("ssid")
@click.option("--keytype", prompt=True) @click.option("--keytype", prompt=True, default="3")
@click.option("--password", prompt=True, hide_input=True) @click.option("--password", prompt=True, hide_input=True)
@pass_dev @pass_dev
async def join(dev: Device, ssid: str, password: str, keytype: str): async def join(dev: Device, ssid: str, password: str, keytype: str):

View File

@ -679,7 +679,23 @@ class IotDevice(Device):
async def _join(target: str, payload: dict) -> dict: async def _join(target: str, payload: dict) -> dict:
return await self._query_helper(target, "set_stainfo", payload) return await self._query_helper(target, "set_stainfo", payload)
payload = {"ssid": ssid, "password": password, "key_type": int(keytype)} try:
keytype = int(keytype)
except ValueError:
match keytype.lower():
case "open":
keytype = 0
case "wep":
keytype = 1
case "wpa":
keytype = 2
case "wpa2":
keytype = 3
case "wpa3":
keytype = 4
case _:
raise KasaException(f"Unknown network keytype: {keytype}")
payload = {"ssid": ssid, "password": password, "key_type": keytype}
try: try:
return await _join("netif", payload) return await _join("netif", payload)
except KasaException as ex: except KasaException as ex: