Local-control Home Assistant component that authenticates to newer-firmware Samsung devices and talks over CoAP-DTLS.
Python
445
881 commits
updated Sep 24, 2026
Control your Samsung appliances from Home Assistant over your home network, with no cloud account.
LocalThings connects Home Assistant to Samsung washers, dryers, refrigerators, air conditioners, ovens and other appliances that work with the SmartThings app. It talks to each appliance on your local network.
| Appliance | Appliance |
|---|---|
| Air conditioner, including multi-unit systems | EHS heat pump |
| Air dresser | Microwave |
| Air monitor | Oven |
| Air purifier | Range and range hood |
| Cooktop, with gas cooktops read-only | Refrigerator, kimchi refrigerator, wine cellar |
| Dehumidifier | Vacuum clean station |
| Dishwasher | Washer and washer-dryer |
| Dryer | Water purifier |
What you see depends on what each appliance reports. Typical controls and sensors include power, program or mode selection, start, pause and stop, temperatures and setpoints, time remaining and finish time, door and child-lock state, energy use, filter status and alarms.
Most Samsung appliances from about 2022 onward work, and so do some earlier washers that use an older local interface. See Older appliances on TCP 8888. Setup detects which interface an appliance has, and tells you if it finds none.
If an appliance sets up but LocalThings doesn't recognize it, or a control is missing, Home Assistant shows a notice asking for a diagnostics download. That download is usually all the maintainers need to add support. See Reporting a capability gap.
LocalThings uses the standards the appliances implement:
/oic/res and reads its device type, such as oic.d.washer, from /oic/d. Where an appliance offers both a standard OCF resource and a Samsung extension for the same state, LocalThings uses the standard one.smartthings-local library implements the protocol layer.In HACS, go to Integrations, search for LocalThings, and select Download. LocalThings is in HACS's default list, so you don't need to add a custom repository.
Without HACS, copy custom_components/localthings/ into the custom_components/ folder of your Home Assistant config.
Restart Home Assistant.
When you add your first appliance, LocalThings contacts Samsung's servers once to read a public identifier. It uses no account or login. Later appliances reuse that identifier, so adding them needs only an IP address and no internet access.
A few appliances need one more step:
AC14K_M credentials, which LocalThings doesn't ship. The smartthings-local project's setup_cert.py shows one way to get them, with python setup_cert.py --fallback. Paste them in when setup asks. You only do this once.You can rename devices. LocalThings identifies each appliance by its OCF device ID, not by its name or serial number. Some models ship the same serial number on every unit.
Each appliance has a Configure option in Settings > Devices & Services, with these settings under Device settings:
Brief disconnects are normal. Samsung appliances drop their connection for a moment now and then. LocalThings reconnects, and entities keep their last value meanwhile. If reconnects happen several times a minute, check the appliance's Wi-Fi signal. Also check that nothing else on your network holds a connection to it, because an appliance accepts one connection at a time.
Keep appliances registered in SmartThings. If you remove an appliance from SmartThings, it resets its network settings the next time it reaches Samsung's servers. It then drops off Wi-Fi until you set it up in the app again. This happens even if you block its internet access most of the time.
If Home Assistant restarts while an appliance is off, LocalThings loads the appliance's device and entities from the last successful setup. They show unavailable until the appliance answers, then recover without any action from you. This works for any appliance LocalThings has reached at least once. A new appliance must be reachable to set it up.
About half of Samsung's appliances report their Wi-Fi MAC address. For those, Home Assistant's DHCP discovery spots the new address and LocalThings updates the entry. For other appliances, select Reconfigure on the entry and enter the new address. LocalThings checks that the appliance at that address is the right one, and keeps its entities, history and automations. Deleting and re-adding the appliance would lose all three.
Some appliances from about 2018 to 2022 have a different local interface, HTTPS on TCP port 8888. So far this covers a WW6500 washer. Setup detects the interface from the IP address and then asks for a device token. Leave the field empty and the appliance issues a token, sending it back to Home Assistant on port 8889. For that to work, switch Remote Control on at the appliance with the door closed, and make sure the appliance can reach Home Assistant on port 8889. If the appliance later rejects its token, Home Assistant asks for a new one.
On these appliances, a chosen cycle, temperature, rinse count or spin speed takes effect only when the cycle starts. The selects hold your choice, and the Start button sends it. If you turn the dial on the appliance, the dial's setting replaces the held choice.
This interface speaks only TLS 1.0 and presents a certificate LocalThings can't verify, so LocalThings accepts both on this one connection. No other part of LocalThings relaxes TLS.
Some installations run several indoor units from one outdoor unit, all at one IP address. LocalThings finds the extra units after its first connection. Each unit gets its own Home Assistant device and climate card, linked to the main unit. LocalThings skips the unused slots some systems report. If a unit you expect is missing, attach a diagnostics download to an issue.
If LocalThings doesn't recognize an appliance, or the appliance reports something LocalThings doesn't handle yet, a notice appears under Settings > System > Repairs. It points you to Download diagnostics on the device. LocalThings removes personal and network details from that download before you save it. It removes the account email, tokens, device IDs, MAC addresses, serial numbers, the Wi-Fi network name and the device's name. You can attach the file to a device-support issue, and that is the fastest way to get an appliance supported.
A diagnostics download can't show whether a command sticks or what order commands need. The localthings.read_resource and localthings.write_resource actions answer those questions by reading and writing an appliance's resources without going through its entities. See Reading and writing resources directly.
We welcome patches, especially:
smartthings-local. Fixes to entities, setup, the coordinator or the registry belong here.Please don't include real device UUIDs, MAC addresses, serial numbers, IP addresses or private keys in a pull request. CONTRIBUTING.md covers the dev environment, the checks to run, the repo layout, and the rules for comments and commits.
(top 30 of 33)
Python
100.0%
Local-control Home Assistant component that authenticates to newer-firmware Samsung devices and talks over CoAP-DTLS.
Python
445
881 commits
updated Sep 24, 2026
Control your Samsung appliances from Home Assistant over your home network, with no cloud account.
LocalThings connects Home Assistant to Samsung washers, dryers, refrigerators, air conditioners, ovens and other appliances that work with the SmartThings app. It talks to each appliance on your local network.
| Appliance | Appliance |
|---|---|
| Air conditioner, including multi-unit systems | EHS heat pump |
| Air dresser | Microwave |
| Air monitor | Oven |
| Air purifier | Range and range hood |
| Cooktop, with gas cooktops read-only | Refrigerator, kimchi refrigerator, wine cellar |
| Dehumidifier | Vacuum clean station |
| Dishwasher | Washer and washer-dryer |
| Dryer | Water purifier |
What you see depends on what each appliance reports. Typical controls and sensors include power, program or mode selection, start, pause and stop, temperatures and setpoints, time remaining and finish time, door and child-lock state, energy use, filter status and alarms.
Most Samsung appliances from about 2022 onward work, and so do some earlier washers that use an older local interface. See Older appliances on TCP 8888. Setup detects which interface an appliance has, and tells you if it finds none.
If an appliance sets up but LocalThings doesn't recognize it, or a control is missing, Home Assistant shows a notice asking for a diagnostics download. That download is usually all the maintainers need to add support. See Reporting a capability gap.
LocalThings uses the standards the appliances implement:
/oic/res and reads its device type, such as oic.d.washer, from /oic/d. Where an appliance offers both a standard OCF resource and a Samsung extension for the same state, LocalThings uses the standard one.smartthings-local library implements the protocol layer.In HACS, go to Integrations, search for LocalThings, and select Download. LocalThings is in HACS's default list, so you don't need to add a custom repository.
Without HACS, copy custom_components/localthings/ into the custom_components/ folder of your Home Assistant config.
Restart Home Assistant.
When you add your first appliance, LocalThings contacts Samsung's servers once to read a public identifier. It uses no account or login. Later appliances reuse that identifier, so adding them needs only an IP address and no internet access.
A few appliances need one more step:
AC14K_M credentials, which LocalThings doesn't ship. The smartthings-local project's setup_cert.py shows one way to get them, with python setup_cert.py --fallback. Paste them in when setup asks. You only do this once.You can rename devices. LocalThings identifies each appliance by its OCF device ID, not by its name or serial number. Some models ship the same serial number on every unit.
Each appliance has a Configure option in Settings > Devices & Services, with these settings under Device settings:
Brief disconnects are normal. Samsung appliances drop their connection for a moment now and then. LocalThings reconnects, and entities keep their last value meanwhile. If reconnects happen several times a minute, check the appliance's Wi-Fi signal. Also check that nothing else on your network holds a connection to it, because an appliance accepts one connection at a time.
Keep appliances registered in SmartThings. If you remove an appliance from SmartThings, it resets its network settings the next time it reaches Samsung's servers. It then drops off Wi-Fi until you set it up in the app again. This happens even if you block its internet access most of the time.
If Home Assistant restarts while an appliance is off, LocalThings loads the appliance's device and entities from the last successful setup. They show unavailable until the appliance answers, then recover without any action from you. This works for any appliance LocalThings has reached at least once. A new appliance must be reachable to set it up.
About half of Samsung's appliances report their Wi-Fi MAC address. For those, Home Assistant's DHCP discovery spots the new address and LocalThings updates the entry. For other appliances, select Reconfigure on the entry and enter the new address. LocalThings checks that the appliance at that address is the right one, and keeps its entities, history and automations. Deleting and re-adding the appliance would lose all three.
Some appliances from about 2018 to 2022 have a different local interface, HTTPS on TCP port 8888. So far this covers a WW6500 washer. Setup detects the interface from the IP address and then asks for a device token. Leave the field empty and the appliance issues a token, sending it back to Home Assistant on port 8889. For that to work, switch Remote Control on at the appliance with the door closed, and make sure the appliance can reach Home Assistant on port 8889. If the appliance later rejects its token, Home Assistant asks for a new one.
On these appliances, a chosen cycle, temperature, rinse count or spin speed takes effect only when the cycle starts. The selects hold your choice, and the Start button sends it. If you turn the dial on the appliance, the dial's setting replaces the held choice.
This interface speaks only TLS 1.0 and presents a certificate LocalThings can't verify, so LocalThings accepts both on this one connection. No other part of LocalThings relaxes TLS.
Some installations run several indoor units from one outdoor unit, all at one IP address. LocalThings finds the extra units after its first connection. Each unit gets its own Home Assistant device and climate card, linked to the main unit. LocalThings skips the unused slots some systems report. If a unit you expect is missing, attach a diagnostics download to an issue.
If LocalThings doesn't recognize an appliance, or the appliance reports something LocalThings doesn't handle yet, a notice appears under Settings > System > Repairs. It points you to Download diagnostics on the device. LocalThings removes personal and network details from that download before you save it. It removes the account email, tokens, device IDs, MAC addresses, serial numbers, the Wi-Fi network name and the device's name. You can attach the file to a device-support issue, and that is the fastest way to get an appliance supported.
A diagnostics download can't show whether a command sticks or what order commands need. The localthings.read_resource and localthings.write_resource actions answer those questions by reading and writing an appliance's resources without going through its entities. See Reading and writing resources directly.
We welcome patches, especially:
smartthings-local. Fixes to entities, setup, the coordinator or the registry belong here.Please don't include real device UUIDs, MAC addresses, serial numbers, IP addresses or private keys in a pull request. CONTRIBUTING.md covers the dev environment, the checks to run, the repo layout, and the rules for comments and commits.
(top 30 of 33)
Python
100.0%