WiFi Devices

Universal Tuya v9.0.832 โ€” local-first Tuya WiFi (no cloud required in operation)

50WiFi Drivers
28Tuya LAN (local-first)
0tuya-local devices catalogued
0DP mappings

Device Finder (337 drivers, 15,995 fingerprints)

๐Ÿ‘ค For Users

Which WiFi devices are supported?

50 WiFi drivers ship with the app: 28 speak the Tuya LAN protocol (local-first, AES-encrypted TCP on port 6668) and 22 use other local protocols (eWeLink, Sonoff DIY, camera). Every Tuya LAN driver below works entirely on your local network once paired.

eWeLink Bulb (SONOFF B02/B05)

eWeLink
wifi_ewelink_bulb ยท 4 capabilities
onoffdimlight_temperaturebutton.1

eWeLink Dimmer (SONOFF D1)

eWeLink
wifi_ewelink_dimmer ยท 3 capabilities
onoffdimbutton.1

eWeLink Fan Controller (SONOFF iFan)

eWeLink
wifi_ewelink_fan ยท 4 capabilities
onoffonoff.2dimbutton.1

eWeLink LED Strip (SONOFF L1/L2)

eWeLink
wifi_ewelink_led ยท 3 capabilities
onoffdimbutton.1

eWeLink Plug (SONOFF)

eWeLink
wifi_ewelink_plug ยท 2 capabilities
onoffbutton.1

eWeLink Power Monitor (SONOFF)

eWeLink
wifi_ewelink_pow ยท 5 capabilities
onoffmeasure_powermeasure_voltagemeasure_currentbutton.1

eWeLink Switch (SONOFF)

eWeLink
wifi_ewelink_switch ยท 2 capabilities
onoffbutton.1

eWeLink Switch 2-Channel (SONOFF)

eWeLink
wifi_ewelink_switch_2ch ยท 3 capabilities
onoffonoff.2button.1

eWeLink Switch 4-Channel (SONOFF)

eWeLink
wifi_ewelink_switch_4ch ยท 5 capabilities
onoffonoff.2onoff.3onoff.4button.1

eWeLink TH Sensor Switch (SONOFF)

eWeLink
wifi_ewelink_th ยท 2 capabilities
onoffbutton.1

SONOFF BASIC R4

Sonoff DIY
wifi_sonoff_basicr4 ยท 2 capabilities
onoffbutton.1

SONOFF DUAL R3

Sonoff DIY
wifi_sonoff_dualr3 ยท 6 capabilities
onoffonoff.2measure_powermeasure_voltagemeasure_currentbutton.1

SONOFF Micro USB

Sonoff DIY
wifi_sonoff_micro ยท 2 capabilities
onoffbutton.1

SONOFF MINI R3

Sonoff DIY
wifi_sonoff_minir3 ยท 2 capabilities
onoffbutton.1

SONOFF MINI R4 / R4M

Sonoff DIY
wifi_sonoff_minir4 ยท 2 capabilities
onoffbutton.1

SONOFF POW Elite / POWR320D

Sonoff DIY
wifi_sonoff_pow_elite ยท 6 capabilities
onoffmeasure_powermeasure_voltagemeasure_currentmeter_powerbutton.1

SONOFF S-MATE2 Extreme

Sonoff DIY
wifi_sonoff_smate2 ยท 2 capabilities
onoffbutton.1

SONOFF THR316D / THR320D

Sonoff DIY
wifi_sonoff_thr316d ยท 5 capabilities
onoffmeasure_temperaturemeasure_humiditytarget_temperaturebutton.1

SONOFF TX Touch 1-Gang

Sonoff DIY
wifi_sonoff_tx_1ch ยท 2 capabilities
onoffbutton.1

SONOFF TX Touch 2-Gang

Sonoff DIY
wifi_sonoff_tx_2ch ยท 3 capabilities
onoffonoff.2button.1

SONOFF TX Touch 3-Gang

Sonoff DIY
wifi_sonoff_tx_3ch ยท 4 capabilities
onoffonoff.2onoff.3button.1

WiFi 2-Gang Switch

Tuya LAN
wifi_switch_2gang ยท 5 capabilities
onoffonoff.gang2power_on_behaviorbutton.1button.2

WiFi 3-Gang Switch

Tuya LAN
wifi_switch_3gang ยท 7 capabilities
onoffonoff.gang2onoff.gang3power_on_behaviorbutton.1button.2

WiFi 4-Gang Switch

Tuya LAN
wifi_switch_4gang ยท 9 capabilities
onoffonoff.gang2onoff.gang3onoff.gang4power_on_behaviorbutton.1

WiFi Air Purifier (Tuya Local)

Tuya LAN
wifi_air_purifier ยท 6 capabilities
onoffdimmeasure_pm25measure_temperaturemeasure_humiditybutton.1

WiFi Air Quality Monitor (Tuya Local)

Tuya LAN
wifi_air_quality ยท 5 capabilities
measure_co2measure_temperaturemeasure_humiditymeasure_pm25button.1

WiFi Camera (Tuya Local)

Camera
wifi_camera ยท 3 capabilities
alarm_motiononoffbutton.1

WiFi Curtain Motor (Tuya Local)

Tuya LAN
wifi_cover ยท 3 capabilities
windowcoverings_statewindowcoverings_setbutton.1

WiFi Dehumidifier (Tuya Local)

Tuya LAN
wifi_dehumidifier ยท 7 capabilities
onoffmeasure_humiditymeasure_temperaturetarget_humidityalarm_waterchild_lock

WiFi Device (Tuya Local)

Tuya LAN
wifi_generic ยท 2 capabilities
onoffbutton.1

WiFi Dimmer (Tuya Local)

Tuya LAN
wifi_dimmer ยท 3 capabilities
onoffdimbutton.1

WiFi Door Lock (Tuya Local)

Tuya LAN
wifi_door_lock ยท 5 capabilities
lockedmeasure_batteryalarm_genericalarm_contactbutton.1

WiFi Doorbell / Camera (Tuya Local)

Tuya LAN
wifi_doorbell ยท 3 capabilities
alarm_genericalarm_motionbutton.1

WiFi Fan (Tuya Local)

Tuya LAN
wifi_fan ยท 3 capabilities
onoffdimbutton.1

WiFi Garage Door (Tuya Local)

Tuya LAN
wifi_garage_door ยท 3 capabilities
garagedoor_closedalarm_contactbutton.1

WiFi Heater (Tuya Local)

Tuya LAN
wifi_heater ยท 7 capabilities
onofftarget_temperaturemeasure_temperaturewifi_heater_modechild_lockeco_mode

WiFi Humidifier (Tuya Local)

Tuya LAN
wifi_humidifier ยท 5 capabilities
onoffmeasure_humiditymeasure_temperaturealarm_waterbutton.1

WiFi IR Remote (Tuya Local)

Tuya LAN
wifi_ir_remote ยท 2 capabilities
onoffbutton.1

WiFi LED Strip RGBCW (Tuya Local)

Tuya LAN
wifi_led_strip ยท 7 capabilities
onoffdimlight_huelight_saturationlight_temperaturelight_mode

WiFi Light RGBCW (Tuya Local)

Tuya LAN
wifi_light ยท 7 capabilities
onoffdimlight_huelight_saturationlight_temperaturelight_mode

WiFi Liquid Level Sensor

Tuya LAN
wifi_water_tank_monitor ยท 6 capabilities
measure_water_levelmeasure_water_percentagealarm_water_lowalarm_water_highalarm_waterbutton.1

WiFi Pet Feeder (Tuya Local)

Tuya LAN
wifi_pet_feeder ยท 3 capabilities
onoffmeasure_batterybutton.1

WiFi Power Strip (Tuya Local)

Tuya LAN
wifi_power_strip ยท 8 capabilities
onoffonoff.socket2onoff.socket3onoff.socket4measure_powermeter_power

WiFi Robot Vacuum (Tuya Local)

Tuya LAN
wifi_robot_vacuum ยท 4 capabilities
onoffvacuumcleaner_statemeasure_batterybutton.1

WiFi Sensor (Tuya Local)

Tuya LAN
wifi_sensor ยท 4 capabilities
measure_temperaturemeasure_humiditymeasure_batterybutton.1

WiFi Siren (Tuya Local)

Tuya LAN
wifi_siren ยท 6 capabilities
onoffalarm_genericmeasure_temperaturemeasure_humiditymeasure_batterybutton.1

WiFi Smart Plug (Tuya Local)

Tuya LAN
wifi_plug ยท 6 capabilities
onoffmeasure_powermeter_powermeasure_currentmeasure_voltagebutton.1

WiFi Switch (Tuya Local)

Tuya LAN
wifi_switch ยท 3 capabilities
onoffpower_on_behaviorbutton.1

WiFi Thermostat (Tuya Local)

Tuya LAN
wifi_thermostat ยท 6 capabilities
onofftarget_temperaturemeasure_temperaturemeasure_humiditychild_lockbutton.1

WiFi Water Valve (Tuya Local)

Tuya LAN
wifi_water_valve ยท 3 capabilities
onoffmeasure_batterybutton.1

How does local-first work?

๐Ÿ  Local-first, cloud-optional. After pairing, your WiFi devices are controlled over your LAN only โ€” no Tuya cloud round-trip, no internet dependency, no subscription. If the Tuya cloud goes down or you block it on your firewall, your devices keep working.

How to pair a Tuya WiFi device

  1. Put the device in pairing mode and add it once in the Smart Life / Tuya Smart mobile app (this provisions it on your WiFi).
  2. In Homey, add the device with the matching wifi_* driver and choose a pairing method: QR code (Smart Life), Tuya IoT API, or manual entry.
  3. The app retrieves the device's local_key once from the Tuya cloud (opt-in) and stores it locally on Homey.
  4. From then on, all communication is local TCP. Cloud credentials can be removed from the app settings โ€” control stays local.

FAQ

Do WiFi devices need the Tuya cloud to work?

No. The cloud is only used once during pairing to fetch the local_key. Daily operation (on/off, dimming, telemetry, automations) is 100% LAN via TuyaLocalClient (TCP 6668, AES).

Why does pairing need the cloud at all?

Tuya devices encrypt local traffic with a per-device local_key that is only issued by the Tuya cloud at provisioning time. Fetching it is a one-time, explicit opt-in step โ€” you can also enter it manually if you extracted it yourself.

What happens if my device gets a new IP address?

TuyaUDPDiscovery listens on UDP 6666/6667/6668 for device broadcasts and re-resolves the IP automatically (IP self-healing). No re-pairing needed.

What happens when a device is offline?

Commands are buffered in a bounded offline queue (50 commands, 5-minute expiry) and the client reconnects with exponential backoff (5 s โ†’ 60 s) plus a 15 s heartbeat. The device shows as unavailable in Homey instead of failing silently.

Can I enable the cloud as a fallback?

Yes โ€” wifi_connection_policy.cloudFallback (default false, local-first). Even then, the cloud is only queried for a diagnostic status snapshot (rate-limited, never applied to capabilities): control always stays local. Every transport decision is logged with its reason.

๐Ÿ”ง Under the Hood

The WiFi stack follows the tuya-local pattern: pure decision logic first, I/O second, and every transport decision explainable from the logs.

TuyaLocalClient

lib/tuya-local/TuyaLocalClient.js
  • TCP 6668, AES-encrypted Tuya LAN protocol
  • Auto protocol negotiation: 3.3 โ†’ 3.4 โ†’ 3.5 โ†’ 3.2 โ†’ 3.1
  • Heartbeat every 15 s; reconnect backoff 5 s โ†’ 60 s
  • Command queue: 200 ms spacing, 10 s timeout, 2 retries
  • Offline queue: 50 commands, 5-minute expiry

LocalFirstResolver

lib/wifi/LocalFirstResolver.js
  • Pure decision logic, zero I/O โ€” fully unit-tested
  • Priority: LAN (device_id + local_key present) โ†’ cloud (only if LAN impossible AND cloudFallback=true AND credentials present) โ†’ none
  • Returns a human-readable reason for every decision, logged as [LOCAL-FIRST] Transport decision: โ€ฆ

TuyaUDPDiscovery

lib/tuya-local/TuyaUDPDiscovery.js
  • UDP 6666/6667/6668 broadcast listener
  • IP self-healing: re-resolves devices after DHCP changes
  • IP resolution order: settings โ†’ UDP cache โ†’ find() scan on connect

WiFiConnectionPolicy

lib/wifi/WiFiConnectionPolicy.js
  • Per-device policy store, strategy local_first
  • cloudFallback defaults to false (opt-in)
  • localDiscovery enables dynamic IP self-healing

Cloud fallback (opt-in)

lib/tuya-local/TuyaLocalDevice.js
  • On LAN failure: diagnostic cloud snapshot only, rate-limited to 1 / 10 min
  • Snapshot is never applied to capabilities โ€” control stays local
  • Device set unavailable, LAN retried after 5 min (connection-timeout handler)

LocalWiFiTuyaBridge

lib/tuya/LocalWiFiTuyaBridge.js
  • Local-first facade over discovery + client
  • resolveTransport(id) with decision logging
  • Clean session lifecycle: register โ†’ connect โ†’ sendCommand โ†’ destroy

๐Ÿ— Architecture

Data flow

                     UDP 6666 / 6667 / 6668 (broadcasts)
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚                                          โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   TCP 6668, AES        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Tuya WiFi    โ”‚ โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”‚  TuyaLocalClient           โ”‚
โ”‚  device       โ”‚   proto 3.1/3.3/3.4/3.5โ”‚  heartbeat 15s ยท backoff    โ”‚
โ”‚               โ”‚                        โ”‚  5sโ†’60s ยท queues            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ–ฒ                                               โ”‚
       โ”‚ LAN (default)                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚                                  โ”‚  LocalFirstResolver        โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚  pure decision + reason    โ”‚
โ”‚  Homey app                   โ”‚          โ”‚  lan โ†’ cloud? โ†’ none       โ”‚
โ”‚  wifi_* drivers (Tuya LAN)   โ”‚          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚  TuyaLocalDevice             โ”‚                        โ”‚ only if cloudFallback=true
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ–ฒ TuyaUDPDiscovery                โ”‚  Tuya Cloud (opt-in)       โ”‚
        โ””โ”€โ”€ IP self-healing โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  diagnostic snapshot only, โ”‚
                                          โ”‚  never applied, rate-      โ”‚
                                          โ”‚  limited 1/10min           โ”‚
                                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Components

ComponentFileRole
TuyaLocalClientlib/tuya-local/TuyaLocalClient.jsEncrypted LAN session: protocol auto-negotiation, heartbeat, backoff, command & offline queues
TuyaLocalDevicelib/tuya-local/TuyaLocalDevice.jsBase class for the 28 Tuya LAN drivers; wires resolver decisions, connection-timeout fallback, LAN retry
LocalFirstResolverlib/wifi/LocalFirstResolver.jsPure transport decision (lan/cloud/none) with a logged, user-diagnosable reason
WiFiConnectionPolicylib/wifi/WiFiConnectionPolicy.jsPer-device policy store โ€” local_first strategy, cloudFallback opt-in (default off)
TuyaUDPDiscoverylib/tuya-local/TuyaUDPDiscovery.jsUDP 6666/6667/6668 listener, dynamic IP self-healing
LocalWiFiTuyaBridgelib/tuya/LocalWiFiTuyaBridge.jsLocal-first facade (discovery + sessions) for unified WiFi handling
TuyaCloudAPIlib/tuya-local/TuyaCloudAPI.jsPairing-time local_key retrieval and opt-in diagnostic snapshots

DP mappings (tuya-local catalog)

The data-point mappings are cross-checked against the tuya-local project catalog: 0 devices catalogued across 0 manufacturers with 0 DP mappings (snapshot 0 devices exported in data/scanners/tuya-local-results.json). Conservative additions land in driver dpMappings only when attested across multiple devices โ€” ambiguous generic DP names ("switch", "sensor", "value") are annotated, never guessed.