Skip to content

[NEW DEVICE SUPPORT] Living Room Fan #33

Description

@brianwhite23

Requesting New Device support.
Comments: Comments:

SmartThings source device: TP-Link KS240 ceiling fan
SmartThings device type: c2c-fan-controller-4speed

The fan works normally in SmartThings and Google Home, including fan-speed changes.

In Hubitat using Replica Fan Control:

  • On/Off works
  • Fan Speed state is received correctly
  • Current fan speed displays correctly
  • Set Fan Speed does nothing
  • Cycle Speed does nothing

The generated HubiThings rules appear to map:
Hubitat setFanSpeed(speed) -> SmartThings fanSpeed.setFanSpeed(speed)

but speed commands from Hubitat do not control the physical fan.

SmartThings capabilities shown by HubiThings:
fanSpeed, healthCheck, refresh, switch

COPY REPLICA METADATA BELOW THIS LINE
LINE***

[{ "DESCRIPTION":
{"allowed":null,"childDevices":[],"components":[{"capabilities":[{"id":"healthCheck","version":1},{"id":"refresh","version":1},{"id":"switch","version":1},{"id":"fanSpeed","version":1}],"categories":[{"categoryType":"manufacturer","name":"Fan"}],"id":"main","label":"main","optional":false}],"createTime":"2024-12-11T18:21:12.185Z","deviceId":"hidden","deviceManufacturerCode":"TP-LINK","executionContext":"CLOUD","indoorMap":{"coordinates":[62.0,40.0,-82.0],"data":{"expressionType":"only_2d","lastHideTime":"0","lastUpdateTime":"1787212861854","lightingGroupId":"00000000-0000-0000-0000-000000000000"},"rotation":[0.0,90.0,0.0],"visible":true},"label":"Ceiling Fan","locationId":"hidden","manufacturerName":"SmartThings","name":"c2c-fan-controller-4speed","ownerId":"1e3a8543-63c3-51d1-b331-e86391b8be7a","presentationId":"SmartThings-smartthings-c2c-fan-controller-4speed","profile":{"id":"d77d72d7-5912-4e4b-a474-b093ce42fbac"},"relationships":[],"restrictionTier":0,"roomId":"hidden","type":"VIPER","viper":{"endpointAppId":"viper_48564b90-500e-11e9-870f-f106e22b685b","hwVersion":"1.0","manufacturerName":"TP-LINK","modelName":"KS240","swVersion":"1.0.9 Build 241213 Rel.154621","uniqueIdentifier":"803B6DF9FF02E39BD011A5C7C2B54E8C22B1BB6400"}}
},
{ "CAPABILITIES":
{"components":[{"attributes":{"DeviceWatch-DeviceStatus":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"reason":{"enum":["INVALID-ACCESS-TOKEN","INTEGRATION-OFFLINE","DEVICE-OFFLINE","DEVICE-DELETED","DEVICE-UNAVAILABLE","DEVICE-UNDISCOVERED"],"type":"string"}},"required":[],"type":"object"},"value":{"enum":["online","offline"],"type":"string"}},"required":["value"],"type":"object"}},"DeviceWatch-Enroll":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"additionalProperties":false,"properties":{"hubHardwareId":{"maxLength":255,"title":"String","type":"string"},"protocol":{"enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"],"title":"DeviceHealthProtocol","type":"string"},"scheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"}},"title":"DeviceHealthEnroll","type":"object"}},"required":["value"],"type":"object"}},"checkInterval":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"hubHardwareId":{"pattern":"removed","type":"string"},"offlinePingable":{"enum":["0","1"],"type":"string"},"protocol":{"enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"],"title":"DeviceHealthProtocol","type":"string"}},"required":[],"type":"object"},"unit":{"default":"s","enum":["s"],"type":"string"},"value":{"maximum":604800,"minimum":0,"type":"integer"}},"required":["value"],"type":"object"}},"healthStatus":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"reason":{"enum":["INVALID-ACCESS-TOKEN","INTEGRATION-OFFLINE","DEVICE-OFFLINE","DEVICE-DELETED","DEVICE-UNAVAILABLE","DEVICE-UNDISCOVERED"],"type":"string"}},"required":[],"type":"object"},"value":{"enum":["online","offline"],"type":"string"}},"required":["value"],"type":"object"}}},"commands":{"ping":{"arguments":[],"name":"ping","sensitive":false}},"ephemeral":false,"id":"healthCheck","name":"Health Check","status":"live","version":1},{"attributes":{},"commands":{"refresh":{"arguments":[],"name":"refresh","sensitive":false}},"ephemeral":false,"id":"refresh","name":"Refresh","status":"live","version":1},{"attributes":{"switch":{"enumCommands":[{"command":"on","value":"on"},{"command":"off","value":"off"}],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["on","off"],"title":"SwitchState","type":"string"}},"required":["value"],"type":"object"}}},"commands":{"off":{"arguments":[],"name":"off","sensitive":false},"on":{"arguments":[],"name":"on","sensitive":false}},"ephemeral":false,"id":"switch","name":"Switch","status":"live","version":1},{"attributes":{"fanSpeed":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"minimum":0,"title":"PositiveInteger","type":"integer"}},"required":["value"],"type":"object"},"setter":"setFanSpeed"}},"commands":{"setFanSpeed":{"arguments":[{"name":"speed","optional":false,"schema":{"minimum":0,"title":"PositiveInteger","type":"integer"}}],"name":"setFanSpeed","sensitive":false}},"ephemeral":false,"id":"fanSpeed","name":"Fan Speed","status":"live","version":1}]}
},
{ "STATUS":
{"components":{"main":{"fanSpeed":{"fanSpeed":{"timestamp":"2026-08-27T00:42:54.288Z","value":3}},"healthCheck":{"DeviceWatch-DeviceStatus":{"data":{},"timestamp":"2026-08-27T00:42:17.063Z","value":"online"},"DeviceWatch-Enroll":{"value":null},"checkInterval":{"data":{"deviceScheme":"UNTRACKED","protocol":"cloud"},"timestamp":"2024-12-11T18:21:12.315Z","unit":"s","value":60},"healthStatus":{"value":null}},"refresh":{},"switch":{"switch":{"timestamp":"2026-08-27T00:43:56.914Z","value":"on"}}}}}
},
{ "RULES":
{"components":[{"command":{"capability":"switch","label":"command: off()","name":"off","type":"command"},"trigger":{"label":"command: off()","name":"off","type":"command"},"type":"hubitatTrigger"},{"command":{"capability":"switch","label":"command: on()","name":"on","type":"command"},"trigger":{"label":"command: on()","name":"on","type":"command"},"type":"hubitatTrigger"},{"command":{"label":"command: setSwitchValue(switch*)","name":"setSwitchValue","parameters":[{"name":"switch*","type":"ENUM"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"switch","capability":"switch","label":"attribute: switch.","properties":{"value":{"title":"SwitchState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setHealthStatusValue(healthStatus)","name":"setHealthStatusValue","parameters":[{"name":"healthStatus*","type":"ENUM"}],"type":"command"},"mute":true,"trigger":{"additionalProperties":false,"attribute":"healthStatus","capability":"healthCheck","label":"attribute: healthStatus.","properties":{"value":{"title":"HealthState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"capability":"refresh","label":"command: refresh()","name":"refresh","type":"command"},"trigger":{"label":"command: refresh()","name":"refresh","type":"command"},"type":"hubitatTrigger"},{"command":{"arguments":[{"name":"speed","optional":false,"schema":{"minimum":0,"title":"PositiveInteger","type":"integer"}}],"capability":"fanSpeed","label":"command: setFanSpeed(speed)","name":"setFanSpeed","type":"command"},"trigger":{"label":"command: setFanSpeed(speed*)","name":"setFanSpeed","parameters":[{"name":"speed*","type":"NUMBER"}],"type":"command"},"type":"hubitatTrigger"},{"command":{"label":"command: setFanSpeedValue(fanSpeed*)","name":"setFanSpeedValue","parameters":[{"name":"fanSpeed*","type":"NUMBER"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"fanSpeed","capability":"fanSpeed","label":"attribute: fanSpeed.","properties":{"value":{"minimum":0,"title":"PositiveInteger","type":"integer"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"arguments":[{"name":"fanOscillationMode","optional":false,"schema":{"enum":["off","individual","fixed","vertical","horizontal","all","indirect","direct","fixedCenter","fixedLeft","fixedRight","far","wide","mid","spot","swing"],"title":"FanOscillationMode","type":"string"}}],"capability":"fanOscillationMode","label":"command: setFanOscillationMode(fanOscillationMode)","name":"setFanOscillationMode","type":"command"},"trigger":{"label":"command: setFanOscillationMode(fanOscillationMode*)","name":"setFanOscillationMode","parameters":[{"name":"fanOscillationMode*","type":"ENUM"}],"type":"command"},"type":"hubitatTrigger"},{"command":{"label":"command: setHumidityValue(humidity*)","name":"setHumidityValue","parameters":[{"name":"humidity*","type":"NUMBER"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"humidity","capability":"relativeHumidityMeasurement","label":"attribute: humidity.","properties":{"unit":{"default":"%","enum":["%"],"type":"string"},"value":{"maximum":100,"minimum":0,"type":"number"}},"required":["value"],"title":"Percent","type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setTemperatureValue(temperature)","name":"setTemperatureValue","parameters":[{"name":"temperature*","type":"NUMBER"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"temperature","capability":"temperatureMeasurement","label":"attribute: temperature.","properties":{"unit":{"enum":["F","C"],"type":"string"},"value":{"maximum":10000,"minimum":-460,"title":"TemperatureValue","type":"number"}},"required":["value","unit"],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setFanOscillationModeValue(fanOscillationMode)","name":"setFanOscillationModeValue","parameters":[{"name":"fanOscillationMode*","type":"ENUM"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"fanOscillationMode","capability":"fanOscillationMode","label":"attribute: fanOscillationMode.","properties":{"value":{"title":"FanOscillationMode","type":"string"}},"required":[],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setSupportedFanOscillationModesValue(supportedFanOscillationModes)","name":"setSupportedFanOscillationModesValue","parameters":[{"name":"supportedFanOscillationModes*","type":"JSON_OBJECT"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"supportedFanOscillationModes","capability":"fanOscillationMode","label":"attribute: supportedFanOscillationModes.","properties":{"value":{"items":{"enum":["off","individual","fixed","vertical","horizontal","all","indirect","direct","fixedCenter","fixedLeft","fixedRight","far","wide","mid","spot","swing"],"title":"FanOscillationMode","type":"string"},"type":"array"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setLevelValue(level)","name":"setLevelValue","parameters":[{"name":"level*","type":"NUMBER"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"level","capability":"switchLevel","label":"attribute: level.","properties":{"unit":{"default":"%","enum":["%"],"type":"string"},"value":{"maximum":100,"minimum":0,"type":"integer"}},"required":["value"],"title":"IntegerPercent","type":"attribute"},"type":"smartTrigger"},{"command":{"arguments":[{"name":"level","optional":false,"schema":{"maximum":100,"minimum":0,"type":"integer"}},{"name":"rate","optional":true,"schema":{"minimum":0,"title":"PositiveInteger","type":"integer"}}],"capability":"switchLevel","label":"command: setLevel(level, rate)","name":"setLevel","type":"command"},"trigger":{"label":"command: setLevel(level*, duration)","name":"setLevel","parameters":[{"name":"level*","type":"NUMBER"},{"name":"duration","type":"NUMBER"}],"type":"command"},"type":"hubitatTrigger"}],"version":1}
}]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions