diff --git a/README.md b/README.md
index 70c3127e..4eff5338 100644
--- a/README.md
+++ b/README.md
@@ -198,7 +198,7 @@ The following devices have been tested and confirmed as working. If your device
- **Bulbs**: L510B, L510E, L530E
- **Light Strips**: L900-10, L900-5, L920-5, L930-5
- **Hubs**: H100
-- **Hub-Connected Devices\*\*\***: S200B, T100, T110, T300, T310, T315
+- **Hub-Connected Devices\*\*\***: S200B, S200D, T100, T110, T300, T310, T315
\* Model requires authentication
diff --git a/SUPPORTED.md b/SUPPORTED.md
index cb995eca..e81e5831 100644
--- a/SUPPORTED.md
+++ b/SUPPORTED.md
@@ -243,6 +243,9 @@ All Tapo devices require authentication.
Hub-Connected Devices may work acros
- **S200B**
- Hardware: 1.0 (EU) / Firmware: 1.11.0
+- **S200D**
+ - Hardware: 1.0 (EU) / Firmware: 1.11.0
+ - Hardware: 1.0 (EU) / Firmware: 1.12.0
- **T100**
- Hardware: 1.0 (EU) / Firmware: 1.12.0
- **T110**
diff --git a/kasa/tests/device_fixtures.py b/kasa/tests/device_fixtures.py
index fec386d6..e05be7b6 100644
--- a/kasa/tests/device_fixtures.py
+++ b/kasa/tests/device_fixtures.py
@@ -119,7 +119,7 @@ DIMMERS = {
}
HUBS_SMART = {"H100", "KH100"}
-SENSORS_SMART = {"T310", "T315", "T300", "T100", "T110", "S200B"}
+SENSORS_SMART = {"T310", "T315", "T300", "T100", "T110", "S200B", "S200D"}
THERMOSTATS_SMART = {"KE100"}
WITH_EMETER_IOT = {"HS110", "HS300", "KP115", "KP125", *BULBS_IOT}
diff --git a/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.11.0.json b/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.11.0.json
new file mode 100644
index 00000000..3ee20e53
--- /dev/null
+++ b/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.11.0.json
@@ -0,0 +1,504 @@
+{
+ "component_nego": {
+ "component_list": [
+ {
+ "id": "device",
+ "ver_code": 2
+ },
+ {
+ "id": "quick_setup",
+ "ver_code": 3
+ },
+ {
+ "id": "trigger_log",
+ "ver_code": 1
+ },
+ {
+ "id": "time",
+ "ver_code": 1
+ },
+ {
+ "id": "device_local_time",
+ "ver_code": 1
+ },
+ {
+ "id": "account",
+ "ver_code": 1
+ },
+ {
+ "id": "synchronize",
+ "ver_code": 1
+ },
+ {
+ "id": "cloud_connect",
+ "ver_code": 1
+ },
+ {
+ "id": "iot_cloud",
+ "ver_code": 1
+ },
+ {
+ "id": "firmware",
+ "ver_code": 1
+ },
+ {
+ "id": "localSmart",
+ "ver_code": 1
+ },
+ {
+ "id": "battery_detect",
+ "ver_code": 1
+ },
+ {
+ "id": "double_click",
+ "ver_code": 1
+ }
+ ]
+ },
+ "get_connect_cloud_state": {
+ "status": 0
+ },
+ "get_device_info": {
+ "at_low_battery": false,
+ "avatar": "button",
+ "bind_count": 1,
+ "category": "subg.trigger.button",
+ "device_id": "SCRUBBED_CHILD_DEVICE_ID_1",
+ "fw_ver": "1.11.0 Build 230821 Rel.113553",
+ "hw_id": "00000000000000000000000000000000",
+ "hw_ver": "1.0",
+ "jamming_rssi": -117,
+ "jamming_signal_level": 1,
+ "lastOnboardingTimestamp": 1728469002,
+ "mac": "6083E7000000",
+ "model": "S200D",
+ "nickname": "I01BU0tFRF9OQU1FIw==",
+ "oem_id": "00000000000000000000000000000000",
+ "parent_device_id": "0000000000000000000000000000000000000000",
+ "region": "CEST",
+ "report_interval": 16,
+ "rssi": -42,
+ "signal_level": 3,
+ "specs": "EU",
+ "status": "online",
+ "status_follow_edge": false,
+ "type": "SMART.TAPOSENSOR"
+ },
+ "get_fw_download_state": {
+ "cloud_cache_seconds": 1,
+ "download_progress": 0,
+ "reboot_time": 5,
+ "status": 0,
+ "upgrade_time": 5
+ },
+ "get_latest_fw": {
+ "fw_ver": "1.12.0 Build 231121 Rel.092444",
+ "hw_id": "00000000000000000000000000000000",
+ "need_to_upgrade": true,
+ "oem_id": "00000000000000000000000000000000",
+ "release_date": "2024-06-06",
+ "release_note": "Modifications and Bug Fixes:\n1. Optimized low battery notification.\n2. Fixed some minor bugs.",
+ "type": 1
+ },
+ "get_temp_humidity_records": {
+ "local_time": 1728469073,
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "temp_unit": "celsius"
+ },
+ "get_trigger_logs": {
+ "logs": [],
+ "start_id": 0,
+ "sum": 0
+ }
+}
diff --git a/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.12.0.json b/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.12.0.json
new file mode 100644
index 00000000..0ba6e17b
--- /dev/null
+++ b/kasa/tests/fixtures/smart/child/S200D(EU)_1.0_1.12.0.json
@@ -0,0 +1,536 @@
+{
+ "component_nego": {
+ "component_list": [
+ {
+ "id": "device",
+ "ver_code": 2
+ },
+ {
+ "id": "quick_setup",
+ "ver_code": 3
+ },
+ {
+ "id": "trigger_log",
+ "ver_code": 1
+ },
+ {
+ "id": "time",
+ "ver_code": 1
+ },
+ {
+ "id": "device_local_time",
+ "ver_code": 1
+ },
+ {
+ "id": "account",
+ "ver_code": 1
+ },
+ {
+ "id": "synchronize",
+ "ver_code": 1
+ },
+ {
+ "id": "cloud_connect",
+ "ver_code": 1
+ },
+ {
+ "id": "iot_cloud",
+ "ver_code": 1
+ },
+ {
+ "id": "firmware",
+ "ver_code": 1
+ },
+ {
+ "id": "localSmart",
+ "ver_code": 1
+ },
+ {
+ "id": "battery_detect",
+ "ver_code": 1
+ },
+ {
+ "id": "double_click",
+ "ver_code": 1
+ }
+ ]
+ },
+ "get_connect_cloud_state": {
+ "status": 0
+ },
+ "get_device_info": {
+ "at_low_battery": false,
+ "avatar": "button",
+ "bind_count": 1,
+ "category": "subg.trigger.button",
+ "device_id": "SCRUBBED_CHILD_DEVICE_ID_2",
+ "fw_ver": "1.12.0 Build 231121 Rel.092444",
+ "hw_id": "00000000000000000000000000000000",
+ "hw_ver": "1.0",
+ "jamming_rssi": -120,
+ "jamming_signal_level": 1,
+ "lastOnboardingTimestamp": 1728469002,
+ "mac": "6083E7000000",
+ "model": "S200D",
+ "nickname": "I01BU0tFRF9OQU1FIw==",
+ "oem_id": "00000000000000000000000000000000",
+ "parent_device_id": "0000000000000000000000000000000000000000",
+ "region": "CEST",
+ "report_interval": 16,
+ "rssi": -42,
+ "signal_level": 3,
+ "specs": "EU",
+ "status": "online",
+ "status_follow_edge": false,
+ "type": "SMART.TAPOSENSOR"
+ },
+ "get_fw_download_state": {
+ "cloud_cache_seconds": 1,
+ "download_progress": 0,
+ "reboot_time": 5,
+ "status": 0,
+ "upgrade_time": 5
+ },
+ "get_latest_fw": {
+ "fw_size": 0,
+ "fw_ver": "1.12.0 Build 231121 Rel.092444",
+ "hw_id": "",
+ "need_to_upgrade": false,
+ "oem_id": "",
+ "release_date": "",
+ "release_note": "",
+ "type": 0
+ },
+ "get_temp_humidity_records": {
+ "local_time": 1728470630,
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "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,
+ -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
+ ],
+ "temp_unit": "celsius"
+ },
+ "get_trigger_logs": {
+ "logs": [
+ {
+ "event": "singleClick",
+ "eventId": "601a2fbd-f4d0-ca4f-85e0-dacf4d0ca4f8",
+ "id": 99,
+ "timestamp": 1728469787
+ },
+ {
+ "event": "singleClick",
+ "eventId": "d0b50fda-30c5-37c6-3646-fea20c537c63",
+ "id": 98,
+ "timestamp": 1728469781
+ },
+ {
+ "event": "singleClick",
+ "eventId": "f830dc2a-d920-5466-f7b7-1f436dfab990",
+ "id": 97,
+ "timestamp": 1728469780
+ },
+ {
+ "event": "doubleClick",
+ "eventId": "8b6719ae-7d1c-acf4-d846-89e6d1cacf4d",
+ "id": 96,
+ "timestamp": 1728469776
+ },
+ {
+ "event": "singleClick",
+ "eventId": "913fe08f-b823-66c4-9db9-2bea82366c49",
+ "id": 95,
+ "timestamp": 1728469774
+ }
+ ],
+ "start_id": 99,
+ "sum": 51
+ }
+}