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

Request support for Yuposl Dual Band Wi-Fi Feeder

Open TrustyTristan opened this issue 6 months ago • 2 comments

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

Yuposl Automatic Cat Feeder

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

Image

TrustyTristan avatar Jun 02 '25 10:06 TrustyTristan

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

TrustyTristan avatar Jun 02 '25 11:06 TrustyTristan

I just created a custom card to handle meal_plan for my cleveri pf100. This device look similar.

FredrikM97 avatar Jun 20 '25 09:06 FredrikM97