Samsung SmartThings Cloud Binding (Beta) [5.0.0.0;6.0.0.0)

Key Value
uid smartthingscloud
type binding
author Nanna Agesen
version range [5.0.0;6.0.0)
download org.openhab.binding.smartthingscloud-5.2.0-SNAPSHOT.jar

Samsung SmartThings Cloud Binding

Connect your Samsung SmartThings cloud-connected appliances to openHAB β€” no hub, no Personal Access Token, no developer registration required.

Authorization uses OAuth2 PKCE (the same flow as the official SmartThings CLI). You click Authorize in the browser on the openHAB machine, log in with your Samsung account, and the bridge goes ONLINE. Tokens are persisted and auto-refreshed β€” no re-authorization needed after restart.

Note: This is not the legacy SmartThings Hub binding. That binding required a physical SmartThings Hub and Groovy SmartApps, which Samsung deprecated in 2022. This binding communicates directly with the Samsung SmartThings Cloud API and works with any Wi-Fi connected Samsung appliance.


Supported Things

Thing Type Description
account (Bridge) Samsung SmartThings account β€” manages OAuth2 tokens
washer Samsung washing machine
television Samsung Smart TV
presence SmartThings phone / presence sensor
lightSensor SmartThings illuminance sensor
scene SmartThings scene β€” trigger a scene with a Switch

Channels

Account Bridge β€” Status (read-only)

| Channel | Type | Description |
|----|----|----|β€”|
| authStatus | String | Authorization state: Authorized βœ“ / Connection failed β€” check logs / Not authorized β€” open .../smartthingscloud |


Washer β€” State (read-only)

Channel Type Description
machineState String Machine state: run, pause, stop
jobState String Cycle phase: washing, rinsing, spin, finish, none, etc.
completionTime DateTime Estimated finish time
running Switch ON while a cycle is active
remaining Number Minutes remaining
remoteEnabled Switch ON when remote control is permitted by the machine
mode String Active wash program code
rinseMode String Rinse count/mode
spinSpeed String Spin speed (rpm)
temperature String Wash temperature (Β°C)
watt Number:Power Current power consumption (W)
kwh Number:Energy Accumulated energy usage (kWh)
waterLiters Number Cumulative water consumed (lifetime total, liters)
operatingState String Detailed operating state: ready, running, paused, finished
currentCycle String Active wash program code from Samsung (e.g. B0, 1B, 65)
kidsLock Switch ON when child lock is active
progress Number Wash cycle progress 0–100 % (only populated while running)
detergentRemaining Number Detergent level remaining (%)
softenerRemaining Number Softener level remaining (%)
delayEnd Number Delay-end countdown remaining (minutes)
supportedCourses String Comma-separated list of supported wash programs

Washer β€” Control (read/write)

Channel Type Description
power Switch Power on/off
bubbleSoak Switch Bubble Soak pre-soak on/off
volume Number End-of-cycle buzzer volume: 0=off, 1–3
extraCare String Extra Care mode (off, manual, userLocationBased)
extraCareLocation String Extra Care location (indoor, outdoor)

Washer β€” Energy totals (read-only)

Channel Type Description
watt Number:Power Live power consumption (W)
kwh Number:Energy Accumulated energy used (kWh)

Television β€” State (read-only)

| Channel | Type | Description |
|----|----|----|β€”|
| tvVolume | Number | Current volume level (0–100) |
| tvMute | Switch | ON when muted |
| inputSource | String | Active input source (e.g. HDMI1, digitalTv) |
| tvChannel | String | Active channel number |
| tvChannelName | String | Active channel name |
| pictureMode | String | Picture mode: Standard, Movie, Game, etc. |
| soundMode | String | Sound mode: Standard, Movie, Music, etc. |
| playbackStatus | String | Current playback state |
| watt | Number:Power | Current power draw (W) |
| kwh | Number:Energy | Accumulated energy (kWh, lifetime) |
| firmwareVersion | String | TV firmware version |
| onlineStatus | String | Online status (Idle, Active) |
| supportedInputSources | String | Comma-separated list of available input sources |
| supportedPictureModes | String | Comma-separated list of available picture modes |
| supportedSoundModes | String | Comma-separated list of available sound modes |

Television β€” Control (read/write)

| Channel | Type | Description |
|----|----|----|β€”|
| power | Switch | Power on/off |
| tvVolume | Number | Set volume (0–100) |
| tvMute | Switch | Mute/unmute |
| inputSource | String | Set input source |
| tvChannel | String | Set channel number |
| pictureMode | String | Set picture mode |
| soundMode | String | Set sound mode |
| channelUp | Switch | Zap one channel up (momentary β€” resets to OFF automatically) |
| channelDown | Switch | Zap one channel down (momentary β€” resets to OFF automatically) |


Presence β€” State (read-only)

Channel Type Description
presence Switch ON = home, OFF = away

Light Sensor β€” State (read-only)

Channel Type Description
illuminance Number:Illuminance Light level in lux
brightnessLevel Dimmer Brightness 0–100 % (maps lux to %)

Scene β€” Control (write-only)

| Channel | Type | Description |
|----|----|----||
| trigger | Switch | Send ON to execute the scene β€” auto-resets to OFF |

Configuration parameters:

Parameter Required Description
sceneId :white_check_mark: SmartThings scene ID (UUID)
locationId :cross_mark: Location ID β€” only needed for multi-location accounts

Find your scene ID with the SmartThings CLI: smartthings scenes


Quick Start

smartthings.things

Bridge smartthingscloud:account:myaccount "Samsung SmartThings" [
    pollingIntervalSeconds=30
] {
    Thing washer mywasher "Samsung Washing Machine" [
        deviceId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    ]
}

Tip: Find your deviceId in the Samsung SmartThings app under the device’s detail page, or it is shown on the authorization success page after the OAuth2 flow.

smartthings.items

Group gWasher "Washing Machine" <washingmachine>

// State
String          Washer_MachineState     "State [%s]"              (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:machineState" }
String          Washer_JobState         "Phase [%s]"              (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:jobState" }
Switch          Washer_Running          "Running"                 (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:running" }
Number          Washer_Remaining        "Remaining [%.0f min]"    (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:remaining" }
DateTime        Washer_CompletionTime   "Done at [%1$tH:%1$tM]"   (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:completionTime" }
Switch          Washer_RemoteEnabled    "Remote Control [%s]"     (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:remoteEnabled" }

// Program
String          Washer_Mode             "Program [%s]"            (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:mode" }
String          Washer_RinseMode        "Rinse [%s]"              (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:rinseMode" }
String          Washer_SpinSpeed        "Spin [%s rpm]"           (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:spinSpeed" }
String          Washer_Temperature      "Temperature [%s Β°C]"     (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:temperature" }

// Energy & water
Number:Power    Washer_Watt             "Power [%.0f W]"          (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:watt" }
Number:Energy   Washer_kWh              "Energy [%.2f kWh]"       (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:kwh" }
Number          Washer_WaterLiters      "Water [%.1f L]"          (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:waterLiters" }

// Extended state (read-only)
String          Washer_OperatingState   "Operating State [%s]"    (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:operatingState" }
String          Washer_CurrentCycle     "Active Program [%s]"     (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:currentCycle" }
Switch          Washer_KidsLock         "Child Lock [%s]"         (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:kidsLock" }
Number          Washer_Progress         "Progress [%.0f %%]"      (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:progress" }

// Control
Switch          Washer_Power            "Power"                   (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:power" }
Switch          Washer_BubbleSoak       "Bubble Soak"             (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:bubbleSoak" }
Number          Washer_Volume           "Volume [%.0f]"           (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:volume" }
String          Washer_ExtraCare        "Extra Care [%s]"         (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:extraCare" }
String          Washer_ExtraCareLocation "Location [%s]"          (gWasher) { channel="smartthingscloud:washer:myaccount:mywasher:extraCareLocation" }

:warning: Sitemap tip: Use mappings=[ON="On", OFF="Off"] (uppercase) for Switch channels in sitemaps. Lowercase keys send StringType instead of OnOffType and the command will be ignored.

OAuth2 Authorization

  1. Add the bridge and washer things (.things file or UI)
  2. Open http://localhost:8080/smartthingscloud in a browser on the openHAB machine itself
  3. Click β€œAuthorize with SmartThings” and log in with your Samsung account
  4. Bridge goes ONLINE β€” done

:warning: Important: The browser must run on the same machine as openHAB. Samsung’s OAuth2 callback is hardcoded to http://localhost:61973/finish (a Samsung-side constraint from the SmartThings CLI client ID β€” it cannot be changed). Use SSH port forwarding (ssh -L 8080:localhost:8080 user@openhab-host) if you only have remote access.


Why no PAT token?

The binding reuses the clientId from the open-source SmartThings CLI β€” a client ID registered by Samsung for personal use that supports the standard OAuth2 PKCE flow. No developer account, no app registration, no secrets to manage.


Beta β€” contributions welcome!

This is a beta release. The following thing types are currently implemented:

  • :white_check_mark: washer β€” Samsung washing machine (26 channels)
  • :white_check_mark: television β€” Samsung Smart TV (12 channels β€” power, volume, mute, input, channel, picture/sound mode, app ID, channel up/down, supported inputs/modes)
  • :white_check_mark: presence β€” SmartThings phone / arrival sensor
  • :white_check_mark: lightSensor β€” illuminance (lux) + brightness level
  • :white_check_mark: scene β€” execute any SmartThings scene via a Switch channel

Still planned:

  • Dryer
  • Dishwasher
  • Air purifier / air conditioner
  • Fridge / freezer

If you own one of these and want openHAB support, I’d love to hear from you. Open an issue on GitHub describing your device and I’m happy to work with you to implement it β€” you don’t need Java experience, just the ability to test on your own device.


Resources


Tested on openHAB 5.2. Feedback on openHAB 4.x compatibility welcome.

6 Likes