tuya-local
tuya-local copied to clipboard
Request support for Yuposl Dual Band Wi-Fi Feeder
Log message
Cloud device spec: [{"id": 1, "name": "meal_plan", "type": "Raw", "format": "{}", "enumMap": {}}, {"id": 3, "name": "manual_feed", "type": "Integer", "format": "{\"unit\":\"\",\"min\":1,\"max\":50,\"scale\":0,\"step\":1}", "enumMap": {}}, {"id": 4, "name": "feed_state", "type": "Enum", "format": "{\"range\":[\"standby\",\"feeding\",\"done\"]}", "enumMap": {}}, {"id": 10, "name": "battery_percentage", "type": "Integer", "format": "{\"unit\":\"%\",\"min\":0,\"max\":100,\"scale\":0,\"step\":1}", "enumMap": {}}, {"id": 14, "name": "feed_report", "type": "Integer", "format": "{\"unit\":\"\",\"min\":0,\"max\":150,\"scale\":0,\"step\":1}", "enumMap": {}}, {"id": 16, "name": "voice_times", "type": "Integer", "format": "{\"unit\":\"\u6b21\",\"min\":0,\"max\":5,\"scale\":0,\"step\":1}", "enumMap": {}}, {"id": 17, "name": "light", "type": "Boolean", "format": "{}", "enumMap": {}}]
DPS: {"updated_at": 1748860517.0250163, "3": 3, "4": "standby", "6": "enough", "10": 0, "13": 0, "14": 3, "16": 0, "17": true, "101": 1, "110": "no", "130": "normal"}
Product ID
eb3olqllh0l0hvwz
Product Name
Dual Band Wi-Fi Feeder - enyxp8
DPS information
{
"result": {
"model": "{\"modelId\":\"enyxp8\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[
{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"meal_plan\",\"description\":\"同步到设备端本地,即使设备离线,扔能正常喂食出粮,喂食计划最多支持10个\\n\\nraw格式约定:按照周期+时间+喂食份数来实现本地定时,具体如下\\n\\n1,前7个比特位代表周一到周日,二进制转十六进制,占用一个字节,0代表未设置,1代表设置,如0000001,表示周日生效,转换为16进制就是01\\n\\n2,时间按照小时分钟格式,占用2个字节,分钟和小时,十进制转16进制,如18:50,转为16进制为1232\\n\\n3,喂食份数,占用1个字节,十进制转16进制,如12,转为16进制为0c\\n\\n4,开关,占用1个字节,00表示关闭,01表示开启\\n\\n上述举例,对于APP端时间下发的结果为0112320c01,表示周日,18:50,喂食12份,开启。\",\"extensions\":{\"iconName\":\"icon-dp_mode\"},\"name\":\"喂食计划\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},
{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"manual_feed\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_mode\",\"scope\":\"\"},\"name\":\"手动喂食\",\"typeSpec\":{\"type\":\"value\",\"max\":50,\"min\":1,\"scale\":0,\"step\":1,\"unit\":\"\"}},
{\"abilityId\":4,\"accessMode\":\"ro\",\"code\":\"feed_state\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-zhuangtai\"},\"name\":\"喂食状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"standby\",\"feeding\",\"done\"]}},
{\"abilityId\":6,\"accessMode\":\"ro\",\"code\":\"status\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-zhuangtai\"},\"name\":\"余粮状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"enough\",\"insufficient\",\"run_out\"]}},
{\"abilityId\":10,\"accessMode\":\"ro\",\"code\":\"battery_percentage\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_battery\",\"attribute\":\"1152\",\"trigger\":\"direct\"},\"name\":\"电池电量\",\"typeSpec\":{\"type\":\"value\",\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"%\"}},
{\"abilityId\":13,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_notice\",\"scope\":\"fault\",\"attribute\":\"1024\",\"trigger\":\"direct\"},\"name\":\"故障告警\",\"typeSpec\":{\"type\":\"bitmap\",\"label\":[\"pet_food_jam\",\"pet_food_shortages\",\"pet_food_run_out\",\"desiccant_exhausted\",\"battery_low\",\"device_stuck\",\"device_offline\"],\"maxlen\":7}},
{\"abilityId\":14,\"accessMode\":\"ro\",\"code\":\"feed_report\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_upload\",\"scope\":\"\",\"attribute\":\"1152\",\"trigger\":\"direct\"},\"name\":\"喂食结果上报\",\"typeSpec\":{\"type\":\"value\",\"max\":150,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},
{\"abilityId\":16,\"accessMode\":\"rw\",\"code\":\"voice_times\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_0\",\"attribute\":\"1248\"},\"name\":\"语音播放次数\",\"typeSpec\":{\"type\":\"value\",\"max\":5,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"次\"}},
{\"abilityId\":17,\"accessMode\":\"rw\",\"code\":\"light\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_light2\",\"attribute\":\"1152\"},\"name\":\"指示灯\",\"typeSpec\":{\"type\":\"bool\"}},
{\"abilityId\":101,\"accessMode\":\"rw\",\"code\":\"button_feed_mount\",\"description\":\"\",\"extensions\":{\"scope\":\"\"},\"name\":\"按钮喂食份数\",\"typeSpec\":{\"type\":\"value\",\"max\":20,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},
{\"abilityId\":110,\"accessMode\":\"ro\",\"code\":\"battery_low_alarm\",\"description\":\"\",\"extensions\":{\"trigger\":\"direct\"},\"name\":\"电池电量\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"high\",\"low\",\"no\"]}},
{\"abilityId\":130,\"accessMode\":\"ro\",\"code\":\"food_stuck_alarm\",\"description\":\"\",\"extensions\":{\"trigger\":\"direct\"},\"name\":\"卡粮状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"normal\",\"stuck\"]}}]}]}"
}
}
Information about how the device functions
I couldn't figure out how to use a select with the integer types? The number slider is pretty terrible. Is it possible to create a custom button? like:
- entity: button
name: Quick Feed
icon: "mdi:food-drumstick"
dps:
- id: 3
name: value
type: integer
mapping:
- dps_val: 1
value: true
Also not sure if the meal plan one is possible?
name: Pet feeder
products:
- id: eb3olqllh0l0hvwz
manufacturer: Yuposl
model: Dual Band Wi-Fi Feeder
model_id: enyxp8
entities:
# Manual Feeding - 手动喂食
- entity: number
name: Manual Feeding
icon: "mdi:food-drumstick"
dps:
- id: 3
name: value
type: integer
unit: portions
range:
min: 1
max: 50
# Indicator Light - 指示灯
- entity: light
category: config
name: Indicator light
translation_key: indicator
dps:
- id: 17
type: boolean
name: switch
# Button Feed Portions - 按钮喂食份数
- entity: number
category: config
name: Button feed portions
icon: "mdi:gesture-tap-button"
dps:
- id: 101
name: value
type: integer
unit: portions
range:
min: 0
max: 20
# Voice Playback Count - 语音播放次数
- entity: number
category: config
name: Voice playback count
dps:
- id: 16
name: value
type: integer
range:
min: 0
max: 5
# Feeding Status - 喂食状态
- entity: sensor
category: diagnostic
name: Feeding status
icon: "mdi:valve"
class: enum
dps:
- id: 4
name: sensor
type: string
mapping:
- dps_val: standby
value: Standby
- dps_val: feeding
value: Feeding
- dps_val: done
value: Done
# Remaining Food Status - 余粮状态
- entity: sensor
category: diagnostic
name: Remaining food status
icon: "mdi:gauge"
class: enum
dps:
- id: 6
name: sensor
type: string
mapping:
- dps_val: enough
value: Enough
- dps_val: insufficient
value: Insufficient
- dps_val: run_out
value: Run out
# Battery Level - 电池电量
- entity: sensor
category: diagnostic
name: Battery level
class: battery
dps:
- id: 10
type: integer
name: sensor
unit: "%"
class: measurement
optional: true
# Feeding Report Upload - 喂食结果上报
- entity: sensor
category: diagnostic
name: Dispensed feeding portions
dps:
- id: 14
name: sensor
type: integer
class: measurement
optional: true
# Battery Low Alarm - 电池电量告警
- entity: sensor
category: diagnostic
name: Battery status
icon: "mdi:battery"
class: enum
dps:
- id: 110
name: sensor
type: string
mapping:
- dps_val: high
value: High
- dps_val: low
value: Low
- dps_val: "no"
value: None
# Food Jam Status - 卡粮状态
- entity: binary_sensor
category: diagnostic
name: Food Jam Status
class: problem
dps:
- id: 130
name: sensor
type: string
mapping:
- dps_val: normal
value: false
- dps_val: stuck
value: true
# Fault Alarm - 故障告警
- entity: binary_sensor
category: diagnostic
class: problem
dps:
- id: 13
type: bitfield
name: sensor
mapping:
- dps_val: 0
value: false
- dps_val: null
value: false
- value: true
- id: 13
type: bitfield
optional: true
name: fault_code
# Feeding Plan - 喂食计划 DPs 1
I've added DPS
DPS: {"updated_at": 1748860517.0250163, "3": 3, "4": "standby", "6": "enough", "10": 0, "13": 0, "14": 3, "16": 0, "17": true, "101": 1, "110": "no", "130": "normal"}
I also had questions
I just created a custom card to handle meal_plan for my cleveri pf100. This device look similar.