diff --git a/SUPPORTED.md b/SUPPORTED.md index 1d38ee0e7..a9d60b87f 100644 --- a/SUPPORTED.md +++ b/SUPPORTED.md @@ -52,6 +52,7 @@ Some newer Kasa devices require authentication. These are marked with [^1] in th - **KP125M** - Hardware: 1.0 (US) / Firmware: 1.1.3[^1] - Hardware: 1.0 (US) / Firmware: 1.2.3[^1] + - Hardware: 1.0 (US) / Firmware: 1.4.1[^1] - **KP401** - Hardware: 1.0 (US) / Firmware: 1.0.0 diff --git a/kasa/transports/tpaptransport.py b/kasa/transports/tpaptransport.py index 3a6471417..b7776adb7 100644 --- a/kasa/transports/tpaptransport.py +++ b/kasa/transports/tpaptransport.py @@ -1164,6 +1164,10 @@ class TpapTransport(BaseTransport): def __init__(self, *, config: DeviceConfig) -> None: """Create the transport.""" super().__init__(config=config) + if ( + not self._credentials or self._credentials.username is None + ) and not self._credentials_hash: + self._credentials = Credentials() if self._credentials is None and self._credentials_hash: try: decoded_hash = json_loads( diff --git a/tests/fixtures/smart/KP125M(US)_1.0_1.4.1.json b/tests/fixtures/smart/KP125M(US)_1.0_1.4.1.json new file mode 100644 index 000000000..0cb3a4e54 --- /dev/null +++ b/tests/fixtures/smart/KP125M(US)_1.0_1.4.1.json @@ -0,0 +1,614 @@ +{ + "component_nego": { + "component_list": [ + { + "id": "device", + "ver_code": 2 + }, + { + "id": "firmware", + "ver_code": 2 + }, + { + "id": "quick_setup", + "ver_code": 3 + }, + { + "id": "time", + "ver_code": 1 + }, + { + "id": "wireless", + "ver_code": 1 + }, + { + "id": "schedule", + "ver_code": 2 + }, + { + "id": "countdown", + "ver_code": 2 + }, + { + "id": "antitheft", + "ver_code": 1 + }, + { + "id": "account", + "ver_code": 1 + }, + { + "id": "synchronize", + "ver_code": 1 + }, + { + "id": "sunrise_sunset", + "ver_code": 1 + }, + { + "id": "led", + "ver_code": 1 + }, + { + "id": "cloud_connect", + "ver_code": 1 + }, + { + "id": "iot_cloud", + "ver_code": 1 + }, + { + "id": "device_local_time", + "ver_code": 1 + }, + { + "id": "default_states", + "ver_code": 1 + }, + { + "id": "auto_off", + "ver_code": 2 + }, + { + "id": "energy_unit", + "ver_code": 1 + }, + { + "id": "energy_monitoring", + "ver_code": 2 + }, + { + "id": "power_protection", + "ver_code": 1 + }, + { + "id": "charging_protection", + "ver_code": 2 + }, + { + "id": "matter", + "ver_code": 3 + }, + { + "id": "current_protection", + "ver_code": 1 + }, + { + "id": "tpap", + "ver_code": 1 + }, + { + "id": "noc", + "ver_code": 1 + } + ] + }, + "discovery_result": { + "error_code": 0, + "result": { + "device_id": "00000000000000000000000000000000", + "device_model": "KP125M(US)", + "device_type": "SMART.KASAPLUG", + "factory_default": false, + "ip": "127.0.0.123", + "is_support_iot_cloud": true, + "mac": "50-91-E3-00-00-00", + "mgt_encrypt_schm": { + "encrypt_type": "TPAP", + "http_port": 80, + "is_support_https": false, + "lv": 2 + }, + "obd_src": "tplink", + "owner": "00000000000000000000000000000000", + "protocol_version": 1, + "tpap": { + "dac": 1, + "noc": 1, + "pake": [ + 2 + ], + "port": 80, + "tls": 0 + }, + "tpap_preferred": true + } + }, + "get_antitheft_rules": { + "antitheft_rule_max_count": 1, + "enable": false, + "rule_list": [] + }, + "get_auto_off_config": { + "delay_min": 120, + "enable": false + }, + "get_auto_update_info": { + "enable": true, + "random_range": 120, + "time": 180 + }, + "get_connect_cloud_state": { + "status": 0 + }, + "get_countdown_rules": { + "countdown_rule_max_count": 1, + "enable": false, + "rule_list": [] + }, + "get_current_power": { + "current_power": 0 + }, + "get_device_info": { + "auto_off_remain_time": 0, + "auto_off_status": "off", + "avatar": "fan", + "charging_status": "normal", + "default_states": { + "type": "last_states" + }, + "device_id": "0000000000000000000000000000000000000000", + "device_on": false, + "fw_id": "00000000000000000000000000000000", + "fw_ver": "1.4.1 Build 260721 Rel.065650", + "has_set_location_info": true, + "hw_id": "00000000000000000000000000000000", + "hw_ver": "1.0", + "ip": "127.0.0.123", + "lang": "zh_TW", + "latitude": 0, + "longitude": 0, + "mac": "50-91-E3-00-00-00", + "model": "KP125M", + "nickname": "I01BU0tFRF9OQU1FIw==", + "oem_id": "00000000000000000000000000000000", + "on_time": 0, + "overcurrent_status": "normal", + "power_protection_status": "normal", + "region": "America/Regina", + "rssi": -43, + "signal_level": 3, + "specs": "", + "ssid": "I01BU0tFRF9TU0lEIw==", + "time_diff": -360, + "type": "SMART.KASAPLUG" + }, + "get_device_time": { + "region": "America/Regina", + "time_diff": -360, + "timestamp": 1788123201 + }, + "get_device_usage": { + "power_usage": { + "past30": 10, + "past30_mwh": 10000, + "past7": 0, + "past7_mwh": 0, + "today": 0, + "today_mwh": 0 + }, + "saved_power": { + "past30": 64, + "past30_mwh": 64000, + "past7": 0, + "past7_mwh": 0, + "today": 0, + "today_mwh": 0 + }, + "time_usage": { + "past30": 74, + "past7": 0, + "today": 0 + } + }, + "get_electricity_price_config": { + "constant_price": 150, + "time_of_use_config": { + "summer": { + "midpeak": 0, + "offpeak": 0, + "onpeak": 0, + "period": [ + 0, + 0, + 0, + 0 + ], + "weekday_config": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "weekend_config": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + "winter": { + "midpeak": 0, + "offpeak": 0, + "onpeak": 0, + "period": [ + 0, + 0, + 0, + 0 + ], + "weekday_config": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "weekend_config": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + } + }, + "type": "constant" + }, + "get_emeter_data": { + "current_ma": 0, + "energy_mwh": 0, + "energy_wh": 0, + "power_mw": 0, + "voltage_mv": 120445 + }, + "get_emeter_vgain_igain": { + "igain": 10595, + "vgain": 117725 + }, + "get_energy_usage": { + "current_power": 0, + "electricity_charge": [ + 1661, + 607, + 1 + ], + "local_time": "2026-08-30 14:53:22", + "month_energy": 10, + "month_energy_mwh": 10000, + "month_runtime": 74, + "today_energy": 0, + "today_energy_mwh": 0, + "today_runtime": 0 + }, + "get_fw_download_state": { + "auto_upgrade": false, + "download_progress": 0, + "reboot_time": 5, + "status": 0, + "upgrade_time": 5 + }, + "get_latest_fw": { + "fw_size": 0, + "fw_ver": "1.4.1 Build 260721 Rel.065650", + "hw_id": "", + "need_to_upgrade": false, + "oem_id": "", + "release_date": "", + "release_note": "", + "type": 0 + }, + "get_led_info": { + "led_rule": "always", + "led_status": false, + "night_mode": { + "end_time": 377, + "night_mode_type": "sunrise_sunset", + "start_time": 1199, + "sunrise_offset": 0, + "sunset_offset": 0 + } + }, + "get_matter_setup_info": { + "setup_code": "00000000000", + "setup_payload": "00:000000.000000000000" + }, + "get_max_power": { + "max_power": 1888 + }, + "get_next_event": {}, + "get_protection_power": { + "enabled": false, + "protection_power": 0 + }, + "get_schedule_rules": { + "enable": true, + "rule_list": [ + { + "day": 11, + "desired_states": { + "on": false + }, + "e_action": "none", + "e_min": 0, + "e_type": "normal", + "enable": false, + "id": "S1", + "mode": "repeat", + "month": 2, + "s_min": 540, + "s_type": "normal", + "time_offset": 0, + "week_day": 127, + "year": 2026 + }, + { + "day": 10, + "desired_states": { + "on": true + }, + "e_action": "none", + "e_min": 0, + "e_type": "normal", + "enable": false, + "id": "S2", + "mode": "repeat", + "month": 2, + "s_min": 1020, + "s_type": "normal", + "time_offset": 0, + "week_day": 127, + "year": 2026 + } + ], + "schedule_rule_max_count": 32, + "start_index": 0, + "sum": 2 + }, + "get_wireless_scan_info": { + "ap_list": [ + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 3, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 3, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 2, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 2, + "key_type": "wpa2_psk", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + }, + { + "bssid": "000000000000", + "channel": 0, + "cipher_type": 0, + "key_type": "none", + "signal_level": 1, + "ssid": "I01BU0tFRF9TU0lEIw==" + } + ], + "start_index": 0, + "sum": 13, + "wep_supported": false + }, + "qs_component_nego": { + "component_list": [ + { + "id": "quick_setup", + "ver_code": 3 + }, + { + "id": "sunrise_sunset", + "ver_code": 1 + }, + { + "id": "ble_whole_setup", + "ver_code": 1 + }, + { + "id": "matter", + "ver_code": 3 + }, + { + "id": "iot_cloud", + "ver_code": 1 + }, + { + "id": "inherit", + "ver_code": 1 + }, + { + "id": "firmware", + "ver_code": 2 + } + ], + "extra_info": { + "device_model": "KP125M", + "device_type": "SMART.KASAPLUG", + "is_klap": true + } + } +}