Be Smart, Go Local.

MoesHouse ZigBee Smart Knob Review

AliExpress Reviews: MoesHouse ZigBee Smart Knob/Scene Switch ERS-10TZBVK-AA. Small, intelligent and convenient gadget for controlling your smart home scenes.

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.

This Tuya based Zigbee smart dimmer knob can be bought from AliExpress or Amazon for ~$15.

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.

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

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

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'

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

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.

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. With its two operation modes, you can control a large number of devices by binding them in Z2M or creating automations.

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.

Moes Smart Knob Remote ERS-10TZBVK-AA ~ $14
Moes Smart Zigbee Knob 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.

2 thoughts on “MoesHouse ZigBee Smart Knob Review”

  1. Does this device support Zigbee binding via ZHA? If you’re using it to dim a Zigbee device, that might let you get much more responsive dimming functionality

Comments are closed.