Skip to content

Supported Devices

Miki edited this page Sep 14, 2019 · 31 revisions

I would love to add support for all the devices you have. If your device type isn't supported yet, follow the instructions here.

The type of devices available are:

Device Type Notes
Smart Plug Outlet1 Smart plugs that just turn on and off (instructions)
Smart Light Bulb Socket SimpleLight Light sockets that just turn on and off
Simple Light Bulb SimpleLight Light bulbs that just turn on and off
Tunable White Light Bulb TWLight2 Bulbs with tunable white and dimming functionality (instructions)
White and Color Light Bulb RGBTWLight3 Colored bulbs with tunable white and dimming functionality (instructions)
Smart Power Strip MultiOutlet4 Smart power strips that have sequential data-points and allow each outlet to be turned on and off individually (instructions)
Non-sequential Power Strip CustomMultiOutlet5 Smart power strips that have non-sequential data-points for each outlet (instructions)
Barely Smart Power Strip Outlet Smart power strips that don't allow individual control of the outlets
Air Conditioner AirConditioner6 Cooling and heating devices (instructions)
Heat Convector Convector7 Heating panels (instructions)
Simple Dimmer SimpleDimmer8 Dimmer switches with power control (instructions)
Simple Heater SimpleHeater9 Heating solutions with only temperature control (instructions)
Garage Door GarageDoor10 Smart garage doors or garage door openers (instructions)
Simple Blinds SimpleBlinds11 Smart blinds and smart switches that control blinds (instructions)
Smart Plug w/ White and Color Lights RGBTWOutlet12 Smart plugs that have controllable RGBTW LEDs (instructions)

Additional Parameters

Outlets

These are plugs with a single outlet that can only be turned on or off.

{
    "name": "My Outlet",
    "type": "Outlet",
    "manufacturer": "EZH",
    "model": "Wifi Mini Smart Life Outlet",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* If your device provides energy parameters, define these */

    /* Datapoint identifier for voltage reporting */
    "voltsId": 9,

    /* Datapoint identifier for amperage reporting */
    "ampsId": 8,

    /* Datapoint identifier for wattage reporting */
    "wattsId": 7,

    /* Often voltage is reported divided by 10; if that is 
       not the case for you, override the default */
    "voltsDivisor": 10,

    /* Often amperage is reported divided by 1000; if that is
       not the case for you, override the default */
    "ampsDivisor": 1000,

    /* Often wattage is reported divided by 10; if that is
       not the case for you, override the default */
    "wattsDivisor": 10,

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for power */
    "dpPower": 1
}

Tunable White Light Bulbs

These are light bulbs that let you control the brightness and tune the bulb's light from warm white to daylight white.

{
    "name": "My Tunable White Bulb",
    "type": "TWLight",
    "manufacturer": "Iotton",
    "model": "Smart White Bulb",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for power */
    "dpPower": 1,

    /* Override the default datapoint identifier for brightness */
    "dpBrightness": 2,

    /* Override the default datapoint identifier for color-temperature */
    "dpColorTemperature": 3,

    /* Minimum white temperature mired value
       (See https://en.wikipedia.org/wiki/Mired) */
    "minWhiteColor": 140,

    /* Maximum white temperature mired value */
    "maxWhiteColor": 400
}

White and Color Light Bulbs

These are bulbs that can produce white light as well as colors and allow you to control the brightness. They also let you tune the color-temperature of the white light.

There are two kinds of color devices: (1) the most common ones use 14 characters to represent the color (HEXHSB), and (2) others use 12 characters for the color (HSB). The colorFunction defaults to HEXHSB but can be overriden in the config block to properly use the second type.

It is common for HEXHSB devices to use white color temperature and brightness values from 0 to 255 (scale of 255). It is also common for HSB devices to use white color temperature and brightness values from 0 to 1000 (scale of 1000). If a device doesn't follow these common values, scaleWhiteColor and scaleBrightness can help.

{
    "name": "My Colored Bulb",
    "type": "RGBTWLight",
    "manufacturer": "Novostella",
    "model": "Color Changing Floor Light",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for power */
    "dpPower": 1,

    /* Override the default datapoint identifier for mode (white vs color) */
    "dpMode": 2,

    /* Override the default datapoint identifier for brightness */
    "dpBrightness": 3,

    /* Override the default datapoint identifier for color-temperature of the whites */
    "dpColorTemperature": 4,

    /* Override the default datapoint identifier for color */
    "dpColor": 5,

    /* Minimum white temperature mired value
       (See https://en.wikipedia.org/wiki/Mired) */
    "minWhiteColor": 140,

    /* Maximum white temperature mired value */
    "maxWhiteColor": 400,

    /* Override the color format (default: HEXHSB)
       Only use if your device is not recognized correctly
       Using HSB defaults the scale of brightness and white color to 1000 */
    "colorFunction": "HEXHSB",

    /* Override the default brightness scale */
    "scaleBrightness": 255,
                          
    /* Override the default color temperature scale */
    "scaleWhiteColor": 255
}

Smart Power Strips

These device can have any number of controllable outlets. To let the plugin know how many your device supports, add an additional parameter named outletCount.

{
    "name": "My Power Strip",
    "type": "MultiOutlet",
    "manufacturer": "GeekBee",
    "model": "Smart Wifi Power Strip",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",
    /* This device has 3 outlets and 2 USB ports, all individually controllable */
    "outletCount": 5
}

Non-sequential Power Strips

Some smart power strips don't have sequential data-points. Using CustomMultiOutlet you can introduce the data-points.

{
    "name": "My Power Strip",
    "type": "CustomMultiOutlet",
    "manufacturer": "GeekBee",
    "model": "Smart Wifi Power Strip",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",
    /* Introduce your data-points here; add more as needed. */
    "outlets": [
        {
            "name": "Outlet 1",
            "dp": 1
        },
        {
            "name": "Outlet 2",
            "dp": 2
        },
        {
            "name": "USB 1",
            "dp": 7
        }
    ]
}

Air Conditioners

These devices have cooling and/or heating capabilities; they could also have dry, fan, or others modes but HomeKit's definition doesn't facilitate modes other than heat, cool, and auto. By default, heat and cool modes are enabled; to let the plugin know that a device doesn't have heating or cooling capabilities, add an additional parameter named noHeat or noCool and set it to true. Tuya devices don't follow a unified pattern for naming the modes, for example cooling mode is called COOL on Kogan's KAPRA14WFGA and cold on Igenix's IG9901WIFI; by default, the plugin uses the phrases COOL and HEAT while communicating with your device but to let the plugin know that a device has different phrases, add additional parameters using cmdHeat and cmdCool. Additional parameters can be found in the sample below.

{
    "name": "My Air Conditioner",
    "type": "AirConditioner",
    "manufacturer": "Kogan",
    "model": "KAPRA14WFGA",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* This device has no cooling function */
    "noCool": true,

    /* This device has no heating function */
    "noHeat": true ,

    /* Override cooling phrase */
    "cmdCool": "COOL",

    /* Override heating phrase */
    "cmdHeat": "HEAT",

    /* This device has no oscillation (swinging) function */
    "noSwing": true,

    /* Minimum temperature supported, in Celsius (°C) */
    "minTemperature": 15,

    /* Maximum temperature supported, in Celsius (°C) */
    "maxTemperature": 40,

    /* Temperature change steps, in Celsius (°C) */
    "minTemperatureSteps": 1
}

Heat Convectors

The heating panels have a low or high setting but since HomeKit's definition doesn't accommodate that, I have mapped it to Fan Speed; be aware that when the fan speed slider is at the lowest value, it turns the device off. By default, the plugin uses LOW and HIGH to request these settings and these commands can be configured using cmdLow and cmdHigh; if your device uses Low and High, add these two additional parameters to your config. Additional parameters can be found in the sample below.

If your signature doesn't have a variation of low or high, SimpleHeater would be the correct device type to use and not this one.

{
    "name": "My Heat Convector",
    "type": "Convector",
    "manufacturer": "Gorenje",
    "model": "OptiHeat 2000 EWP",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier of activity */
    "dpActive": 7,

    /* Override the default datapoint identifier for the desired temperature*/
    "dpDesiredTemperature": 2,

    /* Override the default datapoint identifier for the current temperature */
    "dpCurrentTemperature": 3,

    /* Override the default datapoint identifier for rotation speed */
    "dpRotationSpeed": 4,

    /* Override the default datapoint identifier for child-lock */
    "dpChildLock": 6,

    /* Override the default datapoint identifier for temperature-display units */
    "dpTemperatureDisplayUnits": 19,

    /* Override phrase for low setting */
    "cmdLow": "Low",

    /* Override phrase for high setting */
    "cmdHigh": "High",

    /* This device does not provide locking the physical controls */
    "noChildLock": true,

    /* This device has no function to change the temperature units */
    "noTemperatureUnit": true,

    /* Minimum temperature supported, in Celsius (°C) */
    "minTemperature": 15,

    /* Maximum temperature supported, in Celsius (°C) */
    "maxTemperature": 35
}

Simple Dimmers

These are switches allow turning on and off, and dimming.

{
    "name": "My Simple Dimmer",
    "type": "SimpleDimmer",
    "manufacturer": "TESSAN",
    "model": "Smart Dimmer Switch",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for power */
    "dpPower": 1,

    /* Override the default datapoint identifier for brightness */
    "dpBrightness": 2
}

Simple Heaters

While defined mainly to develop a more robust device type, this can be used to control a heating device by only setting a desired temperature.

{
    "name": "My Simple Heater",
    "type": "SimpleHeater",
    "manufacturer": "Branded",
    "model": "Simple",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for being active */
    "dpActive": 1,

    /* Override the default datapoint identifier for the desired temperature */
    "dpDesiredTemperature": 2,

    /* Override the default datapoint identifier for the current temperature */
    "dpCurrentTemperature": 3,

    /* If your device reports temperatures in multiples of the real value, introduce it here.
       e.g., if your device reports 155 for 15.5°C, use the value 10 */
    "temperatureDivisor": 1,

    /* Minimum temperature supported, in Celsius (°C) */
    "minTemperature": 15,

    /* Maximum temperature supported, in Celsius (°C) */
    "maxTemperature": 35
}

Garage Doors

While still in early testing, you can use this to open and close the garage doors. If your garage door or garage door opener does more that just open and close, for example reports its position or detects obstacles, please create an issue and paste your signature with any information you can provide; this is so we can build a better solution for you together.

{
    "name": "My Garage Door",
    "type": "GarageDoor",
    "manufacturer": "eWeLink",
    "model": "WiFi Switch Garage Door Controller",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for triggering the opener */
    "dpAction": 1,

    /* Override the default datapoint identifier for the state of the door */
    "dpStatus": 2,

    /* If the app reports open when the door is closed, 
       and reports closed when it is open */
    "flipState": true
}

Simple Blinds

Normally the blinds don't report their position. This plugin attempts to time the movements to guesstimate the positions. You can adjust a few parameters to make it really close for you.

{
    "name": "My Simple Blinds",
    "type": "SimpleBlinds",
    "manufacturer": "TeePao",
    "model": "Roller Switch",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* Additional parameters to override defaults only if needed */

    /* How many seconds does it take to fully open from a fully closed state  */
    "timeToOpen": 45,

    /* How many seconds it spends tightening the blinds while closing */
    "timeToTighten": 0,

    /* If the app reports open when the blinds are closed, 
       and reports closed when they are open */
    "flipState": true
}

Outlets with White and Color Lights

These are plugs with a single outlet that that have controllable white and colored LEDs on them.

There are two kinds of color devices: (1) the most common ones use 14 characters to represent the color (HEXHSB), and (2) others use 12 characters for the color (HSB). The colorFunction defaults to HEXHSB but can be overriden in the config block to properly use the second type.

It is common for HEXHSB devices to use white color temperature and brightness values from 0 to 255 (scale of 255). It is also common for HSB devices to use white color temperature and brightness values from 0 to 1000 (scale of 1000). If a device doesn't follow these common values, scaleWhiteColor and scaleBrightness can help.

{
    "name": "My Colored Outlet",
    "type": "RGBTWOutlet",
    "manufacturer": "EZH",
    "model": "Wifi Colored Smart Life Outlet",
    "id": "032000123456789abcde",
    "key": "0123456789abcdef",

    /* If your device provides energy parameters, define these */

    /* Datapoint identifier for voltage reporting */
    "voltsId": 9,

    /* Datapoint identifier for amperage reporting */
    "ampsId": 8,

    /* Datapoint identifier for wattage reporting */
    "wattsId": 7,

    /* Often voltage is reported divided by 10; if that is 
       not the case for you, override the default */
    "voltsDivisor": 10,

    /* Often amperage is reported divided by 1000; if that is
       not the case for you, override the default */
    "ampsDivisor": 1000,

    /* Often wattage is reported divided by 10; if that is
       not the case for you, override the default */
    "wattsDivisor": 10,

    /* Additional parameters to override defaults only if needed */

    /* Override the default datapoint identifier for outlet power */
    "dpPower": 101,

    /* Override the default datapoint identifier for light power */
    "dpLight": 1,

    /* Override the default datapoint identifier for mode (white vs color) */
    "dpMode": 2,

    /* Override the default datapoint identifier for brightness */
    "dpBrightness": 3,

    /* Override the default datapoint identifier for color-temperature of the whites */
    "dpColorTemperature": 4,

    /* Override the default datapoint identifier for color */
    "dpColor": 5,

    /* Minimum white temperature mired value
       (See https://en.wikipedia.org/wiki/Mired) */
    "minWhiteColor": 140,

    /* Maximum white temperature mired value */
    "maxWhiteColor": 400,

    /* Override the color format (default: HEXHSB)
       Only use if your device is not recognized correctly
       Using HSB defaults the scale of brightness and white color to 1000 */
    "colorFunction": "HEXHSB",

    /* Override the default brightness scale */
    "scaleBrightness": 255,
                          
    /* Override the default color temperature scale */
    "scaleWhiteColor": 255
}

Adding Support for New Devices

My hope is to be able to grow the list of device-types that this plugin can support. It would be hard to get my hands on every possible type of device but you can help by sending me the "schema" and "signature" your device uses and I could add support for it. If you are comfortable coding, you could even raise a pull request.

To get the schema of your device, follow the same steps you took to obtain the id and key (all procedures within step 5), but run tuya-lan-find --schema (in step i) so the output contains the "schema" and "extras".

To get the signature of your device, after getting its id and key, configure it as a SimpleLight. After restarting Homebridge, check the logs and look for Ready to handle <your device name> with signature <a JSON string>.

Then raise an issue and put in (a) the name and type of your device, (b) the schema and, if there is one, the extras, (c) the signature, and (d) if you find one, a link to its description or where it is sold online.

If you want to help even more and the schema is not of much help, you could find what each identifier in the signature means. Disconnect your phone from WiFi so you can use the Tuya app and this plugin to communicate with your device simultaneously. Change the parameters of your device in the Tuya app and watch the logs to see what changes; add these findings to the issue you raise.