tuya-local icon indicating copy to clipboard operation
tuya-local copied to clipboard

Request support for Homend Royaltea

Open ErsinErce opened this issue 6 months ago • 2 comments

Log message

2025-06-07 13:33:51.450 INFO (SyncWorker_2) [custom_components.tuya_local.device] Creating device: 
2025-06-07 13:33:51.451 DEBUG (SyncWorker_0) [custom_components.tuya_local.helpers.device_config] Loaded device config homend_kettle.yaml
2025-06-07 13:33:51.452 DEBUG (SyncWorker_5) [custom_components.tuya_local.helpers.device_config] Loaded device config homend_kettle.yaml
2025-06-07 13:33:51.452 DEBUG (SyncWorker_1) [custom_components.tuya_local.helpers.device_config] Loaded device config homend_kettle.yaml
2025-06-07 13:33:51.453 DEBUG (MainThread) [custom_components.tuya_local.helpers.config] Adding sensor for sensor_status
2025-06-07 13:33:51.453 DEBUG (MainThread) [custom_components.tuya_local.device] Starting monitor loop for Royaltea Smart
2025-06-07 13:33:51.453 DEBUG (MainThread) [custom_components.tuya_local.device] Setting protocol version for Royaltea Smart to 3.3
2025-06-07 13:33:51.453 DEBUG (MainThread) [custom_components.tuya_local.helpers.config] Adding water_heater for water_heater_kettle
2025-06-07 13:33:51.471 DEBUG (MainThread) [custom_components.tuya_local.device] Royaltea Smart received {"1": true, "2": 101, "4": "90", "14": 120, "16": "temp_boiling", "101": "off", "104": "AR5", "full_poll": true}

Product ID

ixclh0ml02riwbdz

Product Name

Royaltea Smart

DPS information

{
	"model": {
		"modelId": "000003rdbm",
		"services": [{
			"actions": [],
			"code": "",
			"description": "",
			"events": [],
			"name": "默认服务",
			"properties": [{
				"abilityId": 1,
				"accessMode": "rw",
				"code": "start",
				"description": "【必选】控制设备启动暂停开关",
				"extensions": {
					"iconName": "icon-dp_play",
					"attribute": "1024"
				},
				"name": "工作开关",
				"typeSpec": {
					"type": "bool"
				}
			}, {
				"abilityId": 2,
				"accessMode": "ro",
				"code": "temp_current",
				"description": "【非必选】当前温度显示,该DP点用于温标为摄氏度使用,未选择该DP点则不展示该功能",
				"extensions": {
					"iconName": "icon-dp_c",
					"attribute": "1024"
				},
				"name": "Water Temperature",
				"typeSpec": {
					"type": "value",
					"max": 999,
					"min": 0,
					"scale": 0,
					"step": 1,
					"unit": "℃"
				}
			}, {
				"abilityId": 4,
				"accessMode": "rw",
				"code": "temp_setting_quick_c",
				"description": "【非必选】快速选择加热到目标温度选项,该DP点枚举值可增、减、改,但修改枚举值名称仅支持为数字,未选则不展示该功能。 如需要修改代表名称,可以前往第四步的拓展中心,多语言管理修改代表值,新增的枚举值所代表的的内容也是在多语言中修改代表值。",
				"extensions": {
					"iconName": "icon-set",
					"attribute": "1024"
				},
				"name": "Mod",
				"typeSpec": {
					"type": "enum",
					"range": ["50", "65", "85", "90"]
				}
			}, {
				"abilityId": 8,
				"accessMode": "rw",
				"code": "temp_set",
				"description": "【非必选】选择加热到目标温度选项,该DP点数值范围可修改,未选则不展示该功能。",
				"extensions": {
					"iconName": "icon-set",
					"attribute": "1024"
				},
				"typeSpec": {
					"type": "value",
					"max": 100,
					"min": 0,
					"scale": 0,
					"step": 1,
					"unit": "℃"
				}
			}, {
				"abilityId": 14,
				"accessMode": "rw",
				"code": "warm_time",
				"description": "suyun sıcak tutma süresi",
				"extensions": {
					"iconName": "icon-dp_time3",
					"attribute": "1024"
				},
				"name": "Warm Time",
				"typeSpec": {
					"type": "value",
					"max": 180,
					"min": 15,
					"scale": 0,
					"step": 15,
					"unit": "min"
				}
			}, {
				"abilityId": 15,
				"accessMode": "ro",
				"code": "status",
				"description": "【必选】设备上报工作状态,该DP点枚举值可增减,但不可修改枚举值名称,例如可以删除9,但是不能把9改为其他词,可以增加,仅支持增加数字,未选则不展示该功能。 默认: 1代表:待机中 2代表:加热中 3代表:冷却中 4代表:保温中 5代表:加热到目标温度 6代表:沸腾后冷却到目标温度 7代表:预留1 8代表:预留2 9代表:预留3 如需要修改代表名称,可以前往第四步的拓展中心,多语言管理修改代表值,新增的枚举值所代表的的内容也是在多语言中修改代表值。",
				"extensions": {
					"iconName": "icon-zhuangtai",
					"attribute": "1024"
				},
				"name": "工作状态",
				"typeSpec": {
					"type": "enum",
					"range": ["standby", "heating", "cooling", "warm", "heating_temp", "boiling_temp", "reserve_1", "reserve_2", "reserve_3"]
				}
			}, {
				"abilityId": 16,
				"accessMode": "rw",
				"code": "work_type",
				"description": "【必选】不可修改、删除、增加枚举值。该DP点用于明确当前工作模式是什么,与所使用的温度设置DP点绑定上报。 例如: 用户选择了90℃直接加热快捷键 APP会下发:该DP点的setting_quick和对应温度的DP点; MCU需要上报:该DP点的setting_quick和对应温度的DP点;",
				"extensions": {
					"iconName": "icon-dp_mode",
					"attribute": "1024"
				},
				"name": "Mode",
				"typeSpec": {
					"type": "enum",
					"range": ["temp_setting", "temp_boiling", "temp_baby"]
				}
			}, {
				"abilityId": 101,
				"accessMode": "rw",
				"code": "relay_status",
				"description": "",
				"extensions": {
					"iconName": "icon-zhuangtai",
					"attribute": "4096"
				},
				"name": "Voice",
				"typeSpec": {
					"type": "enum",
					"range": ["off", "on"]
				}
			}, {
				"abilityId": 102,
				"accessMode": "rw",
				"code": "calisma_modu",
				"description": "",
				"name": "Modu",
				"typeSpec": {
					"type": "enum",
					"range": ["isit", "sogut"]
				}
			}, {
				"abilityId": 103,
				"accessMode": "ro",
				"code": "use_time",
				"description": "",
				"extensions": {
					"iconName": "icon-dp_time3",
					"attribute": "4096"
				},
				"name": "使用时间",
				"typeSpec": {
					"type": "value",
					"max": 999999999,
					"min": 0,
					"scale": 0,
					"step": 1,
					"unit": "min"
				}
			}, {
				"abilityId": 104,
				"accessMode": "rw",
				"code": "alarm_ringtone",
				"description": "",
				"extensions": {
					"iconName": "icon-baojing",
					"attribute": "4096"
				},
				"name": "Alarm Ringtone",
				"typeSpec": {
					"type": "enum",
					"range": ["AR0", "AR1", "AR2", "AR3", "AR4", "AR5", "AR6", "AR7", "AR8", "AR9"]
				}
			}]
		}]
	}
}

Information about how the device functions

https://www.homend.com.tr/urun/homend-royaltea-1708-konusan-cay-makinesi

There are 3 buttons to select temperature; 65 for heating Baby bottles, 85 for keeping tea warm, 90 for boiling Other temperature set points doesn't work (50C off default)

You can select boiling first then keeping at selected temperature or just heat to selected temperature

It has function to select 15 mins to 180 mins keeping warm

It has alarm sound if you decide to use or turn off completely

ErsinErce avatar Jun 07 '25 10:06 ErsinErce

The modelId is not the same as product id (I don't know why tuya has so many "id"s). Product id is found in the same API calls that return the local key and other device info, but not the calls that return dps data.

make-all avatar Jun 07 '25 11:06 make-all

Sorry for the mistake.

Query Device Details in Bulk result is like this; "result": [ { "category": "bh", "custom_name": "", "icon": "smart/icon/bay1630936140785RLyb/a2ec7926220750eea76503b96e550476.png", "id": "", "ip": "", "is_online": true, "lat": "", "local_key": "", "lon": "", "model": "", "name": "Royaltea Smart ", "product_id": "ixclh0ml02riwbdz", "product_name": "Royaltea Smart ", "sub": false, "time_zone": "+03:00", "update_time": 1734433490, "uuid": "" } ]

ErsinErce avatar Jun 08 '25 02:06 ErsinErce

These are currently all working and all available configurations. (Syncs with app too) There is some misleading unused DPS data, unfortunately.

This configuration has a problem while turning it off. We can select kettle mode (id4) to turn it on for a specific mode, but to turn it off, we need to use operation mode. I tried to make it like the fan speed selector style, but I'm not good with this config style, so I'm stuck. No need for temperature selection ui btw, if we can use just kettle mode (id4) it will be nice

name: Kettle
products:
  - id: ixclh0ml02riwbdz
    manufacturer: Homend
    model: Royaltea
entities:
  - entity: water_heater
    translation_key: kettle
    dps:
      - id: 1
        type: boolean
        name: operation_mode
        mapping:
          - dps_val: false
            value: "off"
          - dps_val: true
            value: electric
      - id: 2
        type: integer
        name: current_temperature
  - entity: select
    translation_key: kettle_mode
    dps:
      - id: 4
        type: string
        name: option
        mapping:
          - dps_val: "50"
            value: "off"
          - dps_val: "65"
            value: "infant_formula"
          - dps_val: "85"
            value: "green_tea"
          - dps_val: "90"
            value: "black_tea"
      - id: 16
        type: string
        name: temp_mode
        hidden: true
  - entity: number
    name: Keep warm time
    translation_key: timer
    class: duration
    category: config
    dps:
      - id: 14
        type: integer
        name: value
        unit: min
        range:
          min: 15
          max: 180
        mapping:
          - step: 15
  - entity: select
    name: Operation Mode
    translation_key: kettle_mode
    dps:
      - id: 16
        type: string
        name: option
        mapping:
          - dps_val: temp_setting
            value: Heat to Target
          - dps_val: temp_boiling
            value: Cool after Boil
  - entity: switch
    name: Voice
    icon: "mdi:account-voice"
    category: config
    dps:
      - id: 101
        type: string
        name: switch
        mapping:
          - dps_val: "off"
            value: false
          - dps_val: "on"
            value: true
  - entity: sensor
    translation_key: status
    class: enum
    dps:
      - id: 104
        type: string
        name: sensor
        mapping:
          - dps_val: AR0
            value: Unknown 0
          - dps_val: AR1
            value: Unknown 1
          - dps_val: AR2
            value: Ready
          - dps_val: AR3
            value: Cooling
          - dps_val: AR4
            value: Unknown 4
          - dps_val: AR5
            value: Heated Water Reminder
          - dps_val: AR6
            value: Turned Off
          - dps_val: AR7
            value: Unknown 7
          - dps_val: AR8
            value: Unknown 8
          - dps_val: AR9
            value: At Target Temperature

ErsinErce avatar Jun 25 '25 20:06 ErsinErce