MoesHouse ZigBee Smart Knob Review

On our AliExpress Reviews channel we’ve tested all kinds of ZigBee devices: switches, dimmers, plugs, motion sensors, door sensor, smoke sensor etc. Today we are writing about a different kind of gadget, the MoesHouse ZigBee Smart Knob/Button, model ERS-10TZBVK-AA. It retails from $12~$14 depending on your location and shipping options.

This device is manufactured by Eardatek, the same company who makes one of the best smart dimmer with a touch panel. It is branded and sold in the Tuya ecosystem by MoesHouse. In this review, we are going to pry open the device, pair it to Home Assistant and see what it can do.

Technical Specification

  • Model: ERS-10TZBVK-AA
  • Connectivity: ZigBee 3.0
  • Power: Button Battery CR2032 3V DC
  • Working Temperature: -10°C – 45°C
  • Working Humidity: <90% RH
  • Dimensions: 40x40x29mm

What’s Inside?

This little smart scene switch device arrives with a metal plate, a sticker and a small pin for resetting the gadget. The metal plate can be mounted anywhere using 2 screws and the knob snaps in place firmly onto into using a magnet placed on its backside.

Note: It operates using a CR2032 button battery, which is NOT INCLUDED! This battery is used in many ZigBee devices, such as the Tuya Door Sensor TS0203 and is fairly easy to find.

The body of the smart knob is made from high quality PU plastic, it feel slick and premium. On the backside, there are two holes in which the metal plate snaps in place for mounting, a small hole for resetting the device and a screw which reveals the battery slot. Two rubber pads are also placed on the sides to avoid the knob from slipping when rotating it on a table for example.

Once the back plate is unscrewed, the battery slot can be seen. It holds a CR2032 battery which, again, is NOT included in the package. You would have to supply it from somewhere else. On the plate itself, there is a small but very powerful neodymium magnet which clings firmly to any metal surface.

Advertisement Advertisement

Behind the battery slot, lies the reset button accessible with the hairpin. ZigBee communication is handled by a G21 A02011 chip, which is a ZigBee 3.0 capable module developed by Silicon Labs.

The device is fully disassembled when removing the main PCB. A metal rotary encoder is mounted in the middle, which is operated by a plastic molded shell. The encoder doubles as a button as well, which gives a nice clicky feedback when pressed.

The knob itself is a generic LJV rotary encodercommonly used is cars audio systems to control volume. It can be found developed and sold by many different Chinese suppliers. Good thing is its completely metal and the grooves can be clearly felt when rotating the knob.

Integration Compatibility

As of this moment, this Moes ZigBee Smart Knob is compatible with ZHA and ZigBee2MQTT only. To pair the MoesHouse ZigBee Smart Knob, you plug the hairpin in the small hole on the back and hold for a couple of seconds until the LED starts flashing. The LED will keep flashing until paired. If the LED flashes a few times and then stops, it means the battery is weak (<3 volts) and needs to be replaced.

ZigBee2MQTT

Once added to ZigBee2MQTT, it exposes the following entities to Home Assistant:

  • operation_mode: command/event. Command is used for group control, event for button clicks
  • action: Acquires triggered action as a state (e.g click, rotate_left)
  • action_step_size: 0-255 values, used for brightness, volume control
  • action_transition_time: Action transition time in seconds
  • action_rate: 0-255 values, rate of action event to be published
  • battery: Remaining battery in %
  • linkquality: Signal quality in LQI

    Important: The action event toggle can turn off an unsuspecting ZigBee device on your network. This is a known issue, because Tuya groups various devices in group 0 by default. To bypass this issue, simply create a new group with different ID (1 for example) within Z2M and add the smart knob in this group. This will isolate it from other Tuya devices on your network and potentially avoid problems.

ZHA

Paired in ZHA, it exposed the same entities as in ZigBee2MQTT. A custom quirk for this smart knob was added on March 5th, see more HERE. It supports most of the actions available:

Command mode:
SHORT_PRESS, BUTTON
LONG_PRESS, BUTTON
LONG_RELEASE, BUTTON
ROTATED_SLOW, RIGHT (one step)
ROTATED_SLOW, LEFT (one step)
(HA automation is triggering it false positive but the quirk is making it OK).
ROTATED_FAST, RIGHT (3 steps)
ROTATED_FAST, LEFT (3 steps)

Event mode:
SHORT_PRESS, BUTTON_1
DOUBLE_PRESS, BUTTON_1
LONG_PRESS, BUTTON_1
ROTATED, RIGHT
ROTATED, LEFT

You can quickly switch between operating modes (command and event) by triple clicking the button.

Testing

To initially test this MoesHouse smart knob, we can create a simple automation which will trigger on a button click event:

#Toggle Action Event alias: MoesHouse SmartKnob Toggle Switch description: "MoesHouse SmartKnob Toggle Switch" mode: single trigger: - platform: state entity_id: - sensor.moeshouse_smart_knob_action to: toggle condition: [] action: - service: switch.toggle data: {} target: entity_id: switch.wall_light_1
Code language: YAML (yaml)

To reduce light brightness for example, we can create a simple automation which will trigger on events rotate_left or rotate_right:

#Rotate Action Event alias: MoesHouse SmartKnob Brightness Increase description: MoesHouse SmartKnob Brightness Increase mode: single trigger: - platform: state entity_id: - sensor.moeshouse_smart_knob_action to: rotate_right condition: [] action: - service: light.turn_on data: brightness_step: 10 target: entity_id: light.bar_lights
Code language: YAML (yaml)

Advertisement Advertisement

If you follow this pattern, and create simple automations based on button events you can create loads of automations. This is the simple and easy way to utilize this smart knob as a button or a simple dial for various devices. However, this is underutilizing the knob itself, as it’s capable of so much more.

You could develop complex automations by testing each and every action or operation mode yourself, which is tedious work. Luckily, the community has developed a blueprint for this smart knob, both for ZigBee2MQTT and ZHA.

Blueprints

ZigBee2MQTT

We could streamline this process by using this blueprint by user rdeangel.

#Operation Mode: Event Blueprint blueprint: name: Zigbee2MQTT - Tuya Moes Smart Knob (Operation Mode = event) description: Automate your Tuya Smart Knob - ERS-10TZBVK-AA domain: automation input: switch: name: Tuya Smart Knob description: Tuya Smart Knob used as Button selector: entity: integration: mqtt domain: sensor multiple: false button_short_press: name: Single Press description: Action to run on single press (careful not to turn knob instead) default: [] selector: action: {} button_double_press: name: Double Press description: Action to run on double press (careful not to turn knob instead) default: [] selector: action: {} button_long_press: name: Long Press description: Action to run on long press (at least 4 seconds - careful not to turn knob instead) default: [] selector: action: {} button_rotate_right: name: Rotate Right description: Action to run when Smart Knob is rotated right default: [] selector: action: {} button_rotate_left: name: Rotate Left description: Action to run when Smart Knob is rotated left default: [] selector: action: {} source_url: https://community.home-assistant.io/t/zigbee2mqtt-tuya-moes-smart-knob-ers-10tzbvk-aa/419989 mode: restart max_exceeded: silent trigger: - platform: state entity_id: !input 'switch' attribute: action action: - variables: command: '{{ trigger.to_state.state }}' - choose: - conditions: - '{{ command == ''single'' }}' sequence: !input 'button_short_press' - conditions: - '{{ command == ''double'' }}' sequence: !input 'button_double_press' - conditions: - '{{ command == ''hold'' }}' sequence: !input 'button_long_press' - conditions: - '{{ command == ''rotate_right'' }}' sequence: !input 'button_rotate_right' - conditions: - '{{ command == ''rotate_left'' }}' sequence: !input 'button_rotate_left'
Code language: YAML (yaml)

Than you can create an automation by defined desired actions per event.

ZHA

A similar blueprint could be imported when using ZHA, shared by user jory. This one is a little more complex, and uses both operations modes: command and event. It streamlines the process of turning this smart knob into a light dimmer. You could use the Import Blueprint button or copy it’s contents directly

#Full ZHA Blueprint blueprint: name: ZHA - Tuya - TS004F Rotating Knob - Custom Actions description: >- This automation adds triggers for all actions of the Tuya TS004F rotating knob remote. It can be used in both Command/Dimmer and Event/Scene mode. Both modes have their own actions. In Command/Dimmer mode the config is mostly internal except for pressing the button. In Event/Scene mode you can select your own actions. To switch modes you can press the button 3 times fast. Sold on AliExpress by brands like Moes, Girier etc. domain: automation input: mode: name: Automation Mode description: "https://www.home-assistant.io/docs/automation/modes/" default: restart selector: select: mode: dropdown options: - single - restart - queued - parallel max: name: Automation Max Queue description: The maximum number of runs that can be executing and/or queued up at a time. default: 10 selector: number: mode: box min: 1 max: 100 remote: name: Tuya - TS004F Rotating Knob description: Select the remote control you wish to use. selector: device: integration: zha manufacturer: _TZ3000_4fjiwweb model: TS004F light: name: Light (Command/Dimmer mode) selector: target: entity: domain: light toggle: name: Toggle (Command/Dimmer mode) selector: action: default: [] press_short: name: Short Press (Event/Scene mode) selector: action: default: [] press_double: name: Double Press (Event/Scene mode) selector: action: default: [] press_long: name: Long Press (Event/Scene mode) selector: action: default: [] rotate_left: name: Rotate Left (Event/Scene mode) selector: action: default: [] rotate_right: name: Rotate Right (Event/Scene mode) selector: action: default: [] mode: !input mode max: !input max max_exceeded: silent trigger: - platform: event event_type: zha_event event_data: device_id: !input remote action: - variables: light: !input light command: "{{ trigger.event.data.command }}" cluster_id: "{{ trigger.event.data.cluster_id }}" endpoint_id: "{{ trigger.event.data.endpoint_id }}" args: "{{ trigger.event.data.args }}" direction: "{% if trigger.event.data.args[0] == 0 %} 0 {% elif trigger.event.data.args[0] == 1 %} 1 {% elif trigger.event.data.args[0] == 3 %} 3 {% endif %}" value: "{% if trigger.event.data.args[1] %} {{ trigger.event.data.args[1] / 2 }} {% endif %}" speed: "{% if trigger.event.data.args[2] == 1 %} 0.5 {% else %} 0 {% endif %}" - choose: # Command Mode - conditions: - "{{ command == 'toggle' }}" - "{{ cluster_id == 6 }}" - "{{ endpoint_id == 1 }}" sequence: !input toggle # Command Mode: Dimming - conditions: - "{{ command == 'step' }}" - "{{ cluster_id == 8 }}" - "{{ endpoint_id == 1 }}" - "{{ direction == 0 }}" sequence: - repeat: while: - condition: template value_template: "{{ repeat.index < 2 }}" sequence: - service_template: light.turn_on target: !input light data_template: brightness_step_pct: "{{ value }}" transition: "{{ speed }}" - conditions: - "{{ command == 'step' }}" - "{{ cluster_id == 8 }}" - "{{ endpoint_id == 1 }}" - "{{ direction == 1 }}" sequence: - repeat: while: - condition: template value_template: "{{ repeat.index < 2 }}" sequence: - service_template: light.turn_on target: !input light data_template: brightness_step_pct: "{{ - value }}" transition: "{{ speed }}" # Command Mode: Color Temperature - conditions: - "{{ command == 'step_color_temp' }}" - "{{ cluster_id == 768 }}" - "{{ endpoint_id == 1 }}" - "{{ direction == 1 }}" sequence: - repeat: while: - condition: template value_template: "{{ repeat.index < 2 }}" sequence: - service_template: light.turn_on target: !input light data_template: color_temp: "{{ ( state_attr( light.entity_id, 'color_temp' ) or 300 ) + value }}" transition: "{{ speed }}" - conditions: - "{{ command == 'step_color_temp' }}" - "{{ cluster_id == 768 }}" - "{{ endpoint_id == 1 }}" - "{{ direction == 3 }}" sequence: - repeat: while: - condition: template value_template: "{{ repeat.index < 2 }}" sequence: - service_template: light.turn_on target: !input light data_template: color_temp: "{{ ( state_attr( light.entity_id, 'color_temp' ) or 300 ) - value }}" transition: "{{ speed }}" # Command Mode: Color Hue - conditions: - "{{ command == 'move_hue' }}" - "{{ cluster_id == 768 }}" - "{{ endpoint_id == 1 }}" sequence: - repeat: while: - condition: template value_template: "{{ repeat.index < 24 }}" sequence: - service_template: light.turn_on target: !input light data_template: hs_color: - "{{ ( value + (state_attr( light.entity_id , 'hs_color' )[0] or 0)) % 360 }}" - 100 transition: 0.5 - delay: hours: 0 minutes: 0 seconds: 1 milliseconds: 0 - conditions: - "{{ command == 'stop_move_step' }}" - "{{ cluster_id == 768 }}" - "{{ endpoint_id == 1 }}" sequence: # Event mode: Short Press - conditions: - "{{ command == 'remote_button_short_press' }}" sequence: !input press_short # Event mode: Double Press - conditions: - "{{ command == 'remote_button_double_press' }}" sequence: !input press_double # Event mode: Long Press - conditions: - "{{ command == 'remote_button_long_press' }}" sequence: !input press_long # Event mode: Rotate Left - conditions: - "{{ command == 'left' }}" sequence: !input rotate_left # Event mode: Rotate Right - conditions: - "{{ command == 'right' }}" sequence: !input rotate_right
Code language: YAML (yaml)

Once imported, you can create a very detailed automation in command/event mode. In command mode, you can setup the knob to control a light’s brightness, color or hue.

Verdict

The MoesHouse Tuya Smart Knob is a great little battery operated gadget which can be used to control any device within your Home Assistant server. It pairs easily and has so much potential for triggering automations and scenes.

It’s worth noting that battery life will not be great when used frequently, but this should present no issue as the CR2032 battery is dirt cheap and can be replaced easily.

IMPORTANT thing to remember when using this device as a dimmer: The ZigBee payload will be sent to the end device only when released. Meaning, it will not continuously dim if you rotate continuously. So, do not expect to experience a perfectly smooth transition which follows your rotating actions. This is just the way things are setup when using a ZigBee mesh network with Home Assistant, it is not a limitation of this smart knob.

The best way to dim using this knob is to go up/down in small increments. The step can be fine-tuned for a better experience.

If you would like to test this MoesHouse Tuya Smart Knob yourself, consider using one of our affiliate links bellow to help the maintenance of this blog.


You can support this blog by buying us a coffee!

Leave a Comment

Your email address will not be published.

DISCLOSURE
SmartHomeScene.com is a participant in the Amazon Services LLC Associates Program and AliExpress Portals Affiliate Program. These programs are designed to provide means for websites to earn revenue by linking affiliate products through their content. We are compensated for referring traffic and business to these websites.
SmartHomeScene.com

Scroll to Top