| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -232,6 +232,7 @@ The following devices have been tested and confirmed as working. If your device | |||
| 232 | 232 | - **Bulbs**: KL110, KL120, KL125, KL130, KL135, KL50, KL60, LB110 | |
| 233 | 233 | - **Light Strips**: KL400L5, KL420L5, KL430 | |
| 234 | 234 | - **Hubs**: KH100<sup>\*</sup> | |
| 235 | + - **Hub-Connected Devices<sup>\*\*\*</sup>**: KE100<sup>\*</sup> | ||
| 235 | 236 | ||
| 236 | 237 | ### Supported Tapo<sup>\*</sup> devices | |
| 237 | 238 | ||
@@ -241,10 +242,12 @@ The following devices have been tested and confirmed as working. If your device | |||
| 241 | 242 | - **Bulbs**: L510B, L510E, L530E | |
| 242 | 243 | - **Light Strips**: L900-10, L900-5, L920-5, L930-5 | |
| 243 | 244 | - **Hubs**: H100 | |
| 245 | + - **Hub-Connected Devices<sup>\*\*\*</sup>**: T300, T310, T315 | ||
| 244 | 246 | ||
| 245 | 247 | <!--SUPPORTED_END--> | |
| 246 | - <sup>*</sup> Model requires authentication<br> | ||
| 247 | - <sup>**</sup> Newer versions require authentication | ||
| 248 | + <sup>\*</sup> Model requires authentication<br> | ||
| 249 | + <sup>\*\*</sup> Newer versions require authentication<br> | ||
| 250 | + <sup>\*\*\*</sup> Devices may work across TAPO/KASA branded hubs | ||
| 248 | 251 | ||
| 249 | 252 | See [supported devices in our documentation](SUPPORTED.md) for more detailed information about tested hardware and software versions. | |
| 250 | 253 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,7 +6,7 @@ The following devices have been tested and confirmed as working. If your device | |||
| 6 | 6 | <!--SUPPORTED_START--> | |
| 7 | 7 | ## Kasa devices | |
| 8 | 8 | ||
| 9 | - Some newer Kasa devices require authentication. These are marked with <sup>*</sup> in the list below. | ||
| 9 | + Some newer Kasa devices require authentication. These are marked with <sup>*</sup> in the list below.<br>Hub-Connected Devices may work across TAPO/KASA branded hubs even if they don't work across the native apps. | ||
| 10 | 10 | ||
| 11 | 11 | ### Plugs | |
| 12 | 12 | ||
@@ -134,10 +134,16 @@ Some newer Kasa devices require authentication. These are marked with <sup>*</su | |||
| 134 | 134 | - **KH100** | |
| 135 | 135 | - Hardware: 1.0 (UK) / Firmware: 1.5.6<sup>\*</sup> | |
| 136 | 136 | ||
| 137 | + ### Hub-Connected Devices | ||
| 138 | + | ||
| 139 | + - **KE100** | ||
| 140 | + - Hardware: 1.0 (EU) / Firmware: 2.8.0<sup>\*</sup> | ||
| 141 | + - Hardware: 1.0 (UK) / Firmware: 2.8.0<sup>\*</sup> | ||
| 142 | + | ||
| 137 | 143 | ||
| 138 | 144 | ## Tapo devices | |
| 139 | 145 | ||
| 140 | - All Tapo devices require authentication. | ||
| 146 | + All Tapo devices require authentication.<br>Hub-Connected Devices may work across TAPO/KASA branded hubs even if they don't work across the native apps. | ||
| 141 | 147 | ||
| 142 | 148 | ### Plugs | |
| 143 | 149 | ||
@@ -204,5 +210,14 @@ All Tapo devices require authentication. | |||
| 204 | 210 | - Hardware: 1.0 (EU) / Firmware: 1.2.3 | |
| 205 | 211 | - Hardware: 1.0 (EU) / Firmware: 1.5.5 | |
| 206 | 212 | ||
| 213 | + ### Hub-Connected Devices | ||
| 214 | + | ||
| 215 | + - **T300** | ||
| 216 | + - Hardware: 1.0 (EU) / Firmware: 1.7.0 | ||
| 217 | + - **T310** | ||
| 218 | + - Hardware: 1.0 (EU) / Firmware: 1.5.0 | ||
| 219 | + - **T315** | ||
| 220 | + - Hardware: 1.0 (EU) / Firmware: 1.7.0 | ||
| 221 | + | ||
| 207 | 222 | ||
| 208 | 223 | <!--SUPPORTED_END--> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,10 +29,12 @@ class SupportedVersion(NamedTuple): | |||
| 29 | 29 | DeviceType.StripSocket: "Power Strips", | |
| 30 | 30 | DeviceType.Dimmer: "Wall Switches", | |
| 31 | 31 | DeviceType.WallSwitch: "Wall Switches", | |
| 32 | + DeviceType.Fan: "Wall Switches", | ||
| 32 | 33 | DeviceType.Bulb: "Bulbs", | |
| 33 | 34 | DeviceType.LightStrip: "Light Strips", | |
| 34 | 35 | DeviceType.Hub: "Hubs", | |
| 35 | - DeviceType.Sensor: "Sensors", | ||
| 36 | + DeviceType.Sensor: "Hub-Connected Devices", | ||
| 37 | + DeviceType.Thermostat: "Hub-Connected Devices", | ||
| 36 | 38 | } | |
| 37 | 39 | ||
| 38 | 40 | ||
@@ -106,7 +108,7 @@ def _supported_summary(supported): | |||
| 106 | 108 | return _supported_text( | |
| 107 | 109 | supported, | |
| 108 | 110 | "### Supported $brand$auth devices\n\n$types\n", | |
| 109 | - "- **$type_**: $models\n", | ||
| 111 | + "- **$type_$type_asterix**: $models\n", | ||
| 110 | 112 | ) | |
| 111 | 113 | ||
| 112 | 114 | ||
@@ -136,6 +138,10 @@ def _supported_text( | |||
| 136 | 138 | if brand == "kasa" | |
| 137 | 139 | else "All Tapo devices require authentication." | |
| 138 | 140 | ) | |
| 141 | + preamble_text += ( | ||
| 142 | + "<br>Hub-Connected Devices may work across TAPO/KASA branded " | ||
| 143 | + + "hubs even if they don't work across the native apps." | ||
| 144 | + ) | ||
| 139 | 145 | brand_text = brand.capitalize() | |
| 140 | 146 | brand_auth = r"<sup>\*</sup>" if brand == "tapo" else "" | |
| 141 | 147 | types_text = "" | |
@@ -177,24 +183,37 @@ def _supported_text( | |||
| 177 | 183 | else: | |
| 178 | 184 | models_list.append(f"{model}{auth_flag}") | |
| 179 | 185 | models_text = models_text if models_text else ", ".join(models_list) | |
| 180 | - types_text += typest.substitute(type_=supported_type, models=models_text) | ||
| 186 | + type_asterix = ( | ||
| 187 | + r"<sup>\*\*\*</sup>" | ||
| 188 | + if supported_type == "Hub-Connected Devices" | ||
| 189 | + else "" | ||
| 190 | + ) | ||
| 191 | + types_text += typest.substitute( | ||
| 192 | + type_=supported_type, type_asterix=type_asterix, models=models_text | ||
| 193 | + ) | ||
| 181 | 194 | brands += brandt.substitute( | |
| 182 | 195 | brand=brand_text, types=types_text, auth=brand_auth, preamble=preamble_text | |
| 183 | 196 | ) | |
| 184 | 197 | return brands | |
| 185 | 198 | ||
| 186 | 199 | ||
| 187 | 200 | def _get_smart_supported(supported): | |
| 188 | - for file in Path(SMART_FOLDER).glob("*.json"): | ||
| 201 | + for file in Path(SMART_FOLDER).glob("**/*.json"): | ||
| 189 | 202 | with file.open() as f: | |
| 190 | 203 | fixture_data = json.load(f) | |
| 191 | 204 | ||
| 192 | - model, _, region = fixture_data["discovery_result"]["device_model"].partition( | ||
| 193 | - "(" | ||
| 194 | - ) | ||
| 205 | + if "discovery_result" in fixture_data: | ||
| 206 | + model, _, region = fixture_data["discovery_result"][ | ||
| 207 | + "device_model" | ||
| 208 | + ].partition("(") | ||
| 209 | + device_type = fixture_data["discovery_result"]["device_type"] | ||
| 210 | + else: # child devices of hubs do not have discovery result | ||
| 211 | + model = fixture_data["get_device_info"]["model"] | ||
| 212 | + region = fixture_data["get_device_info"].get("specs") | ||
| 213 | + device_type = fixture_data["get_device_info"]["type"] | ||
| 195 | 214 | # P100 doesn't have region HW | |
| 196 | 215 | region = region.replace(")", "") if region else "" | |
| 197 | - device_type = fixture_data["discovery_result"]["device_type"] | ||
| 216 | + | ||
| 198 | 217 | _protocol, devicetype = device_type.split(".") | |
| 199 | 218 | brand = devicetype[:4].lower() | |
| 200 | 219 | components = [ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -639,6 +639,10 @@ def _get_device_type_from_components( | |||
| 639 | 639 | return DeviceType.Bulb | |
| 640 | 640 | if "SWITCH" in device_type: | |
| 641 | 641 | return DeviceType.WallSwitch | |
| 642 | + if "SENSOR" in device_type: | ||
| 643 | + return DeviceType.Sensor | ||
| 644 | + if "ENERGY" in device_type: | ||
| 645 | + return DeviceType.Thermostat | ||
| 642 | 646 | _LOGGER.warning("Unknown device type, falling back to plug") | |
| 643 | 647 | return DeviceType.Plug | |
| 644 | 648 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments