Be Smart, Go Local.

Tuya Zigbee IR Blaster Remote ZS06 Review

AliExpress Reviews: Tuya Zigbee Infrared Remote Blaster model ZS06 / UFO-R11. Small and easy to setup IR remote for controlling non-smart devices.

When you first start diving into the Smart Home world, you start wondering how can you automate your dumb devices, such as Air Conditioners, Humidifiers, TV and Sound Systems. While some can be easily integrated in Home Assistant if they have the capability to form a network connection, others are completely offline and are controlled simply by an Infrared remote.

Googling around for smart IR blasters, you will probably come across the Broadlink RM Remote Control, which has been around for a while now and has it’s own Home Assistant Integration. The Broadlink is a Wi-Fi-based device, with a capable IR blaster that clones your IR remote codes and fires them on demand, thus controlling your dumb home electronics.

In this review, I am testing something similar, an IR Blaster Remote model ZS06 by Tuya, but instead of Wi-Fi it’s Zigbee based, something a lot of home automation users prefer.

Tuya Zigbee IR Remote Blaster

I bought this device for $15 on AliExpress after coins discount, but it’s also available on Amazon as a Wi-Fi version ONLY for a similar price.

A battery operated version of this IR Blaster is also available, white labelled UFO-R11, which costs ~$18 and also be bought on AliExpress (Zigbee) or Amazon (Zigbee).

Technical Specification

  • Model: ZS06
  • Input: 5V1A
  • Communication: Zigbee 802.15.4
  • Size: 50x50x19mm
  • IR Frequency: 38KHz
  • IR Range: ≤12m
  • Working Humidity: 10-85%RH
  • Working Temperature: -10°C ~ 60°C


The Tuya ZS06 IR Remote Blaster comes in a package containing the device itself, a user manual, USB-A to Micro USB cable and a double-sided adhesive sticker for installation. There is no 5V1A adapter in the box, you will have to supply it yourself.

Tuya Zigbee IR Remote Blaster Package Contents

It surprised me how tiny it really is, which just further puffed up my curiosity of taking a peak inside. It has very unanimous body, deep black color and sleek edges.

A Micro-USB port is placed on the bottom on one side, for powering the remote with a 5V1A adapter. An indicator LED is peaking through a small hole on the top of the device, indicating pairing mode, code sent or read etc.

On the backside, a small pairing button is protruding in the corner under the label with it’s most basic characteristics. Overall, a good design which was instantly appealing to me.

Tuya Zigbee IR Remote Blaster Case Front and Back

There are no screws holding the case together, I had to pry it open, which was no match for my flat head screwdriver and gave up without a fight.

This device handles Zigbee communication by a Tuya ZS3L Module [Datasheet], which is based on a 32-bit low-power Arm Cortex-M33 core, 768-KB flash memory, and 64-KB RAM, with rich peripherals. This module operates on channels 11 – 26@2.400-2.483GHz, 250 Kbit/s air interface rate.

This Tuya Module also operates a few other Tuya devices that I’ve reviewed, such as the excellent Tuya ZY-M100 Human Presence Sensor, the Tuya Single Clamp Energy Meter PJ-MGW1203 and the Tuya 4-Button Touch Remote S011.

Tuya Zigbee IR Remote Blaster Case Open

Removing and flipping over the PCB, reveals a cluster of IR Diodes spread out to cover a 360° angle. They are angled slightly upwards, so they send IR signals in the correct direction, considering this device is meant to be laid out on a flat surface. Very neat, clean and good looking PCB.

Tuya Zigbee IR Remote Blaster Diodes Cluster

Top and bottom view of the main PCB, if for whatever reason you decide to buy the Wi-Fi version of this device, the ZS3L would be replaced with an equivalent Wi-Fi module by Tuya.

Tuya Zigbee IR Remote Blaster Top and Bottom of PCB

Home Assistant Integration

The Tuya ZS06 Zigber IR Blaster Remote is compatible with Zigbee2MQTT and ZHA with a custom quirk. Learning and sending codes is easy with Zigbee2MQTT, but it is a little more involved with ZHA.

To pair the device, simply hold the button for ~5 seconds until the LED indicator starts flashing.


Tuya Zigbee IR Remote Blaster Zigbee2MQTT

In Zigbee2MQTT, it is identified as model ZS06 and manufacturer _TZ3290_7v1k4vufotpowp9z. Those gibberish numbers are a unique identifier for the device in Z2M. The device is also a router, capable or relaying Zigbee traffic to your coordinator. It exposes the following entities in Home Assistant:

Tuya Zigbee IR Remote Blaster Zigbee2MQTT Entities

  • switch: learn_id_code
    • Put’s the device in code learning mode
  • sensor: learned_ir_code
    • Remembers the last code it learned
  • Linkquality: Signal quality in LQI

Learning and Sending Codes

Right from the Zigbee2MQTT dashboard, we can learn and send IR codes. Follow this procedure to test it:

  • Click the ON button on the learn_ir_code entity
    • The LED on the device should light up blue
  • Point your remote to the device and click the button you want to clone ONCE
  • The code will appear in the learned_ir_code field
  • Copy-paste the code in the ir_code_to_send field to test it (Click away to trigger)
  • If it works, save it in a document somewhere and label it
  • We will use it to create a script which we will use to send codes through the dashboard or automation

Once you’ve confirmed the code works, navigate to Settings > Automations & Scenes > Scripts > + Add Script:

#Replace Device ID (Friendly name from Zigbee2MQTT) and IR Code
alias: "AC Remote: Turn ON" #Zigbee2MQTT Script
  - service: mqtt.publish
      payload: >-  #Replace IR Code
        {"ir_code_to_send": "De0R7REwApEG9gEwAjACAHC8AZEGgAsJMAIwApEG9gGRBoAHAT=="} 
      topic: zigbee2mqtt/Tuya ZS06 IR Remote/set #Replace Device ID
mode: single

Let’s assume your device fires two different codes for ON/OFF: First code turns ON the device, the second code turns OFF the device. We can create a template switch, which will be toggleable in Home Assistant, thus turning the device on/off by firing the correct code:

#Replace Device ID (Friendly name from Zigbee2MQTT) and IR Codes
  - platform: template
          service: mqtt.publish
            payload: >- #Replace IR Code
              {"ir_code_to_send": "De0R7REwApEG9gEwAjACAHC8AZEGgAsJMAIwApEG9gGRBoAHAT=="} 
            topic: zigbee2mqtt/Tuya ZS06 IR Remote/set #Replace Device ID
          service: mqtt.publish
            payload: >- #Replace IR Code
              {"ir_code_to_send": "pEG9gEwAjACAHC8AZEGgAEGgAsJMAIwApEGsJMiofEG9gGR6AT=="} 
            topic: zigbee2mqtt/Tuya ZS06 IR Remote/set #Replace Device ID


The Tuya ZS06 and the battery operated version UFO-R11 are not officially supported in ZHA. However, a custom quirk has been developed by someone on the Github device request page which works fine. Setting it up is a little involved, but If you must use ZHA this the only way currently.

To apply this custom quirk in ZHA:
1. Download the quirk
2. Place it in config/custom_zha_quirks (create the folder)
3. Add the path to your configuration.yaml file
4. Reboot Home Assistant

  custom_quirks_path: /config/custom_zha_quirks/

Learning and Sending Codes

Learning mode must be set by clicking Manage Zigbee Device, selecting the custom cluster and issuing the Zigbee Command:

Tuya Zigbee IR Remote Blaster ZS06 VS Broadlink RM4 Pro

I happen to have a Broadlink RM4 Pro lying around, I used to employ it as an AC controller a while back. Ever since I changed my air conditioner with a smarter one, I have no real use for it now and it’s been lying in a box for months. Some general specs comparing the two:

SpecsBroadlink RM4 ProTuya IR ZS06
Blaster Type:IR + RFIR
Infrared Frequency:38KHz38KHz
Infrared Range:10m12m
Infrared Direction:360°360°
Learning Mode:YesYes

The table compares the applicable specs of the Broadlink in relation to the Tuya ZS06. The Broadlink RM4 Pro is superior in almost every other aspect and equipped with a 315/433MHz RF Blaster with up to 50m of range. But it’s also 2 times the price and size!

To the test the IR blaster capabilities of both, I placed them on a bookcase in my living room. I setup the Broadlink through it’s official integration in Home Assistant and used Zigbee2MQTT for the Tuya ZS06. I cloned a few buttons of various IR appliances and blasted away.

The Broadlink has a maximum declared range of 10 meters, while the Tuya is specced at 12 meters, which may be a bit of an overstatement. Tinkering with their blaster I came to the conclusion that neither IR Blaster is superior, they both executed my codes without issues at ~10 meters. That said, the Broadlink feels like the more premium device.

It’s important to note, the Broadlink RM4 Pro is a higher end device, hence the $50 price tag. Broadlink also offers a cheaper variant without an RF radio at half the price ($25), Broadlink RM4 Mini.


The Tuya ZS06 is a capable little infrared blaster remote. Integration in Zigbee2MQTT is seamless and easy, I wish the same can be said about ZHA. A custom quirk is required to use the device in ZHA, and learning and sending codes is a little more involved, but doable. In summary:


  • Incredibly small
    • Can be easily hidden
  • Operates as a Zigbee router
  • Capable IR Blaster
    • Tested at ~10 meters
  • Device independent code learning
    • You don’t need a database of pre-learned codes
  • Unlimited codes
    • Since codes are stored in your Home Assistant database, you can record as many as you want


  • Not officially supported in ZHA
    • Custom quirk is required
    • Learning and sending codes is more difficult
  • 5V1A adapter not included

Two things stand out to me from the capabilities of the ZS06.

1. It’s Zigbee instead of Wi-Fi, which means It’s completely local by design
2. It’s incredibly small, which makes hiding it somewhere really easy

What’s also great, there is a battery operated version of the Tuya ZS06, version white labelled UFO-R11 sold by Moes. It’s identical to the Tuya ZS06, but relies on 2xAAA batteries instead of USB delivered 5V1A. The device looks almost identical, carrying the same IR Blaster but is a tad bigger on account of the batteries.

If you are looking to deploy a couple of these, I would suggest going for the battery operated version. It will spend it’s life sleeping and consuming very little power, essentially lasting 6-12 months. Plus, no cables means a more hidden, concealed and versatile installation with the included sticker.

Where to buy?

If you are looking to automate an old IR operated device, the ZS06 is a really cost effective option. If you don’t want to deal with cabling and adapters, go for the battery operated version UFO-R11.

NOTE: The ZS06 Model is only available as a Wi-Fi version on Amazon, so I suggest buying the Zigbee one from AliExpress instead. The battery operated UFO-R11 Zigbee version is available both on Amazon and AliExpress:

Tuya Zigbee IR Blaster ZS06 ~ $14-16
Tuya Zigbee IR Remote Blaster ZS06 Buy SmartHomeScene

AliExpress | AliExpress | AliExpress

(Wi-Fi ONLY)
United States | Canada | United Kingdom
Germany | Netherlands | Sweden | Spain
France | Italy | Poland | Australia
*If links fail to open, try disabling your AdBlocker.

Tuya Zigbee IR Blaster UFO-R11 ~ $17.99
Tuya Zigbee IR Remote Blaster UFO-R11 Buy SmartHomeScene

AliExpress | AliExpress | AliExpress | AliExpress

United States | Canada | United Kingdom
Germany | Netherlands | Sweden | Spain
France | Italy | Poland | Australia
*If links fail to open, try disabling your AdBlocker.

38 thoughts on “Tuya Zigbee IR Blaster Remote ZS06 Review”

  1. Hi, I wonder if you tried to learn codes for many different devices? I encountered that some devices can’t be learned. Those devices have “paired” remotes, so the remote is paired to the device first when you set it up. So in my case the device was useless since it could not learn the remotes I wanted it for.

    • Hi,

      That has nothing to do with the Zigbee remote. This is capable of learning any IR code from the 38KHz band you throw at it. What you are encountering most likely, is something called rolling codes.
      Each new press is generating a new code, which only the receiver understands. So you memorize one code, but the receiver expect the next one in line, not the same one.

      Since codes can be easily cloned, this is done for protection (eg. garage doors).


  2. Hi,

    Just checking here as this is the main place I’ve seen these discussed.

    1) I’m not sure if I have a faulty unit, but every time I use the “learn” mode the string/code is different. I’m using the MQTT2Zigbee method.

    2) I have been using a BroadLink RM4 Mini. It’s worked okay, but keep disconnecting from the WiFi, hence wanting to change. Does anyone know of a method to convert the BroadLink RM IR codes to the Moes/Tuya format? I found codes for discrete options, and I’d really like to re-use them (convert) if I can.

    • Hello James,

      This has nothing to do with the IR blaster. You are almost certainly encountering something called Rolling Codes.
      What this is, is the original remote fires a different code from a pool of, let’s say, a 1000 codes which only the receiver can understand. This is a security measure for many devices, garage doors, car keys etc. so they cannot be cloned easily.

      The way IR blasters such as the Broadlink RM Pro deal with this is in two ways:
      1. They either send a partial code, which may or may not work (usually doesn’t)
      2. If it’s a popular device, they may send rolling codes from the same pool (extremely rare!)

      Is the remote the same you are trying to clone like with the Broadlink RM Pro?
      The IR blaster on the Broadlink is more powerful, covering a longer range, but the learning capabilities of both devices is the same.

      I would suggest holding the button on the remote just a tad bit longer when learning, see if that helps and ensure it’s not a rolling code.

      Hope I’m being clear.

      • Hi,

        Thanks for that and I’ll give it a try.

        The devices I’m trying to use are a Sony Receiver/TV etc so I don’t think it’s a rolling code issue. These aren’t security devices.

        I also tried using the Broadlink RM 4 Mini to send the code and for the Tuya to use these to learn. The Tuya seemed to get significantly different codes each time.

        I grabbed a number of these codes from the Sony IR DB originally, and converted them to the Broadlink format.

        I’ll try more and look at Google more.

  3. I’m struggling to get the custom quirk working. I’ve installed it, it says they’re being loaded, but it isn’t actually showing the right options.
    the device is showing in HA as “TS1201 by _TZ3290_7v1k4vufotpowp9z” – I added _TZ3290_7v1k4vufotpowp9z to the quirk because it wasn’t there, but it still isn’t showing up… any ideas?

    • for anyone else who ends up here – a) it IS there, it’s just farther down the code in a different section. b) it was added! it worked! I was just looking at the wrong place in the config – you need to change the cluster from the default to ZosungIRControl Endpoint ID1

  4. Hi, trying to do script with two different codes for ON/OFF, if i do that i get error “Message malformed: extra keys not allowed @ data[‘switch’]” what i do wrong?

    - platform: template
    service: mqtt.publish
    payload: >-
    {"ir_code_to_send": "De0R7REwApEG9gEwAjACAHC8AZEGgAsJMAIwApEG9gGRBoAHAT=="}
    topic: zigbee2mqtt/Tuya ZS06 IR Remote/set
    service: mqtt.publish
    payload: >-
    {"ir_code_to_send": "pEG9gEwAjACAHC8AZEGgAEGgAsJMAIwApEGsJMiofEG9gGR6AT=="}
    topic: zigbee2mqtt/Tuya ZS06 IR Remote/set

    • The code you copying is correct, but that error code is telling me you are doing something wrong. Paste your full code and I’ll try to help you.


      • I get the same error “Message malformed: extra keys not allowed @ data[‘switch’]” what i do wrong?

        • Not OP but I got the same error. Here is my full code

          alias: New Script
          sequence: #Replace Device ID (Friendly name from Zigbee2MQTT) and IR Codes
          - platform: template
          service: mqtt.publish
          payload: >- #Replace IR Code
          topic: zigbee2mqtt/IR zigbee/set #Replace Device ID
          service: mqtt.publish
          payload: >- #Replace IR Code
          topic: zigbee2mqtt/IR zigbee/set #Replace Device ID

    • did you get this to work? also having the same problem… even tried the 1st script and its not working try to make mqtt listen and received the message but its still not working 🙁

    • Figured out this issue we have. Silly actually, the template coding should be in the configuration.yaml file. Not created as a script. Paste this code that SHS provided into that file and edit it to your needs and it should work.

      Although I have an issue now, I can turn OFF a device but cannot turn it ON. Could it be because of the last “learned code” that was in Z2M?
      But it works if I create a separate script for both ON and OFF.

  5. I got the single script (on and off) to work, but the combined on /off did not work. I could not figure out what the @ data[‘switch’ error is.

  6. I bought a battery one, and noticed it’s very slow to send the command, how fast the commands gets sent in this product? My battery moes varies from 0.5-1s. That time makes impossible to send two fast commands.

    • That’s expected from the battery-powered version.
      It’s always sleeping, so you wake it up with the command and than it sends it’s payload.
      Always powered ver doesn’t have this prob, it’s always online and acting like a router.

  7. Hi,
    maybe someone here has an idea what else I can try?
    I was able to pair the UFO-R11 via Zigbee2MQTT without any problems.
    Now when I click ON on ‘learn_ir_code’, the LED lights up but no IR code is detected. I have already tested 3 different remotes. ‘learned_ir_code’ stays on N/A (or None as status of HA entity).

  8. Do you think if there is a reason that there’s no device like this (Zigbee) but with RF too? Or just a matter of time? It’s a pity that it only covers IR, although it’s good progress compared to Tuya Wifi only like all the rest…

  9. Excellent description! Exactly what I needed … but … after successfully connecting with my ZS06 with Zigbee2MQTT, it seems that I cannot send any “Learn Ir Code” instruction through the Z2MQTT dashboard nor through lovelace. I see “OFF ? ON”. When clicking on ON, no led is lighting up, and no code is read. How can this be resolved? If I need to program via code, it would be nice if you could indicate where I should do this (I am rather junior to HA). Thanks.

  10. Related to my previous comment: after waiting for some hours, I can read my IR instructions. So my issue has been resolved by … waiting. Thanks.

  11. What about climate/thermostat card support? for AC control
    you can set thermostat card for broadlink + smartir..
    can you also do it for Tuya IR ZS06?

    • Yes, the Broadlink or the Tuya have nothing to do with any card for ac or thermostat.
      They are just IR Blasters, they execute commands you’ve saved.
      How you execute those commands is totally up to you (script, automation, service call etc)
      So you could clone any AC/Thermostat command you want and execute it from your dashboard without issues.

      I hope I’m being clear.

      • you need to have an entite for the remote. that is what smartir does for broadlink.
        otherwise it will not work with the climate card?
        do you work with climate card in HA?

          • Thank you, I am not familiar how to convert the codes to entity and built my own template climate entity. do you have a tutorial on YouTube I can learn from?
            I am to good in writing lines of codes.
            I wanted to find a straightforward solution with built in codes like smartir does for broadlink. because AC has many codes to record compared to other devices.

  12. Great write up, but I can’t get the script to work. If I send the learned code in the Exposes tab in Zigbee2MQTT it works perfecty. But running the script exactly as you have laid out in this post does nothing. Is something wrong with the script?

    alias: Back Room Panasonic Power IR
    - service: mqtt.publish
    payload: >-
    topic: zigbee2mqtt/IRBackRoom/set
    qos: "0"
    retain: false
    mode: single

  13. Is there any solution to the rolling code? With every press being different code, not sure how to go about automating things, especially trying to changing AC temperature up and down, any idea?

    • No solution, you cannot clone rolling codes unless you know the algorithm that generates them.
      Think of it this way: if it were easy, every car’s key could be cloned on the fly.

      You can solder dry contacts on the buttons of the original remote you are trying to clone or find other ways to automate it.


  14. Does a code have to be learned, before it can be sent by the device? If I already have the list of codes, can I just pop one in the IR code to send box?

    • Yes, you can send codes directly.
      The learning function is just capturing the code and saving it for later.
      So if you have the codes already, you can just send them with the service call.

Comments are closed.