make-all / tuya-local

Local support for Tuya devices in Home Assistant
MIT License
1.18k stars 482 forks source link

Request support for ROYAL FRESH Full DC EU Inverter #1652

Closed evd1ser closed 4 months ago

evd1ser commented 6 months ago

Information about DPS mappings

{
  "modelId": "000003lxwx",
  "services": [
    {
      "actions": [],
      "code": "",
      "description": "",
      "events": [],
      "name": "默认服务",
      "properties": [
        {
          "abilityId": 1,
          "accessMode": "rw",
          "code": "Power",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_power",
            "attribute": "1"
          },
          "name": "开关",
          "typeSpec": {
            "type": "bool",
            "typeDefaultValue": false
          }
        },
        {
          "abilityId": 2,
          "accessMode": "rw",
          "code": "temp_set",
          "description": "摄氏:16~31\n华氏:61~88",
          "extensions": {
            "iconName": "icon-dp_temp"
          },
          "name": "设置温度",
          "typeSpec": {
            "max": 880,
            "min": 160,
            "scale": 1,
            "step": 5,
            "type": "value",
            "typeDefaultValue": 160,
            "unit": "℃"
          }
        },
        {
          "abilityId": 3,
          "accessMode": "ro",
          "code": "temp_current",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_sun"
          },
          "name": "当前温度",
          "typeSpec": {
            "max": 100,
            "min": -20,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": -20,
            "unit": "℃"
          }
        },
        {
          "abilityId": 4,
          "accessMode": "rw",
          "code": "mode",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_mode"
          },
          "name": "工作模式",
          "typeSpec": {
            "range": [
              "cold",
              "hot",
              "wet",
              "wind",
              "auto"
            ],
            "type": "enum",
            "typeDefaultValue": "cold"
          }
        },
        {
          "abilityId": 5,
          "accessMode": "rw",
          "code": "windspeed",
          "description": "强劲/高风/中高风/中风/中低风/低风/静音/自动",
          "extensions": {
            "iconName": "icon-dp_wind"
          },
          "name": "风速",
          "typeSpec": {
            "range": [
              "strong",
              "high",
              "mid_high",
              "mid",
              "mid_low",
              "low",
              "mute",
              "auto"
            ],
            "type": "enum",
            "typeDefaultValue": "strong"
          }
        },
        {
          "abilityId": 18,
          "accessMode": "rw",
          "code": "humidity_current",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_wet"
          },
          "name": "当前湿度",
          "typeSpec": {
            "max": 100,
            "min": 0,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 0,
            "unit": "%"
          }
        },
        {
          "abilityId": 20,
          "accessMode": "ro",
          "code": "Fault",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_warming",
            "scope": "fault"
          },
          "name": "Fault",
          "typeSpec": {
            "label": [
              "E0",
              "E1",
              "E2",
              "E3",
              "E4",
              "E5",
              "E6",
              "E7",
              "E8",
              "E9",
              "EA",
              "Eb",
              "EC",
              "EE",
              "EF",
              "EP",
              "EU",
              "EH",
              "EJ",
              "En",
              "Ey",
              "F9",
              "FA",
              "H1",
              "H2",
              "bd"
            ],
            "maxlen": 26,
            "type": "bitmap",
            "typeDefaultValue": 0
          }
        },
        {
          "abilityId": 101,
          "accessMode": "ro",
          "code": "pm25",
          "description": "",
          "name": "PM2.5",
          "typeSpec": {
            "max": 3000,
            "min": 0,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 0,
            "unit": ""
          }
        },
        {
          "abilityId": 102,
          "accessMode": "rw",
          "code": "fresh_air",
          "description": "",
          "name": "新风",
          "typeSpec": {
            "range": [
              "auto",
              "low",
              "mid",
              "strong",
              "off"
            ],
            "type": "enum",
            "typeDefaultValue": "auto"
          }
        },
        {
          "abilityId": 103,
          "accessMode": "ro",
          "code": "freshair_filter",
          "description": "新风标识位为1时生效",
          "name": "新风脏堵",
          "typeSpec": {
            "type": "bool",
            "typeDefaultValue": false
          }
        },
        {
          "abilityId": 104,
          "accessMode": "ro",
          "code": "SN_SW_ver",
          "description": "20210816:固件上报即可,面板暂不解析。预留功能。",
          "name": "SN及软件版本",
          "typeSpec": {
            "maxlen": 128,
            "type": "raw"
          }
        },
        {
          "abilityId": 105,
          "accessMode": "rw",
          "code": "sleep",
          "description": "无、标准、老人、儿童",
          "name": "睡眠",
          "typeSpec": {
            "range": [
              "off",
              "normal",
              "old",
              "child"
            ],
            "type": "enum",
            "typeDefaultValue": "off"
          }
        },
        {
          "abilityId": 110,
          "accessMode": "ro",
          "code": "markbit",
          "description": "用以表示是否有该功能。\n0、除湿模式下温度是否可调 \n1、送风模式下温度是否可调 \n2、自动模式下温度是否可调 \n3、新风量标识 \n4、矢量送风 \n5、左右扫风 \n6、光敏 \n7、智能除湿防霉变 \n8、湿度传感器 \n9、蒸发器清洁 \n10、省钱看得见 \n11、电量统计 \n12、发电机模式 \n13、高温风/凉感风 \n14、空气质量检测功能 \n15、置为空(原:湿度功能) \n16、置为空(原:设备运行省钱看得见,温度曲线展示) \n17、8℃制热 \n18、滤网脏堵功能 \n20、PM2.5有无\n21、温标切换,1为华氏度,0为摄氏度\n22、柔风\n23、左右广角送风\n24、新风功能有无\n",
          "extensions": {
            "scope": "fault"
          },
          "name": "标识位",
          "typeSpec": {
            "label": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9",
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "16",
              "17",
              "18",
              "19",
              "20",
              "21",
              "22",
              "23",
              "24"
            ],
            "maxlen": 25,
            "type": "bitmap",
            "typeDefaultValue": 0
          }
        },
        {
          "abilityId": 113,
          "accessMode": "rw",
          "code": "up_down_sweep",
          "description": "无/上下送风/上送风/下送风",
          "name": "上下扫风",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 114,
          "accessMode": "rw",
          "code": "left_right_sweep",
          "description": "无/左右送风/左送风/中送风/右送风/偏左送风/偏右送风/广角送风",
          "name": "左右扫风",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 115,
          "accessMode": "ro",
          "code": "totalN",
          "description": "",
          "extensions": {
            "trigger": "direct"
          },
          "name": "电量整数",
          "typeSpec": {
            "max": 1000000,
            "min": 0,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 0,
            "unit": ""
          }
        },
        {
          "abilityId": 116,
          "accessMode": "ro",
          "code": "totalP",
          "description": "",
          "extensions": {
            "trigger": "direct"
          },
          "name": "电量小数",
          "typeSpec": {
            "max": 1000000,
            "min": 0,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 0,
            "unit": ""
          }
        },
        {
          "abilityId": 119,
          "accessMode": "rw",
          "code": "money",
          "description": "无/默认省电/定额省电/定温省电",
          "name": "省钱看的见",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 120,
          "accessMode": "rw",
          "code": "energy",
          "description": "",
          "name": "发电机模式",
          "typeSpec": {
            "range": [
              "off",
              "L1",
              "L2",
              "L3"
            ],
            "type": "enum",
            "typeDefaultValue": "off"
          }
        },
        {
          "abilityId": 122,
          "accessMode": "ro",
          "code": "fault2",
          "description": "预留",
          "extensions": {
            "scope": "fault"
          },
          "name": "故障报警2",
          "typeSpec": {
            "label": [
              "P6",
              "P7",
              "P8",
              "P9",
              "PA",
              "F0",
              "F1",
              "F2",
              "F3",
              "F4",
              "F5",
              "F6",
              "F7",
              "F8",
              "Fb",
              "FC",
              "FE",
              "FF",
              "FH",
              "FP",
              "FU",
              "Fj",
              "Fn",
              "Fy",
              "bf",
              "bc",
              "bj"
            ],
            "maxlen": 27,
            "type": "bitmap",
            "typeDefaultValue": 0
          }
        },
        {
          "abilityId": 123,
          "accessMode": "rw",
          "code": "boolCode",
          "description": "两个字节,\n第一个字节:\nbit0:eco,\nbit1:智能除湿防霉变, \nbit2:蒸发器清洁, \nbit3:灯光, \nbit4:蜂鸣,\nbit5:健康,\nbit6:空(原清洁,重复),\nbit7:光敏。\n\n第二个字节:\nbit0:干燥,\nbit1:空(原来是高温风/凉感风),\nbit2:空(原来是水平风摆),\nbit3:空(原来是垂直风摆) \nbit4: 8℃制热 \nbit5:滤网检测\nbit6:华氏加1标志位\nbit7:柔风",
          "name": "布尔型",
          "typeSpec": {
            "maxlen": 255,
            "type": "string",
            "typeDefaultValue": ""
          }
        },
        {
          "abilityId": 125,
          "accessMode": "ro",
          "code": "airquality",
          "description": "优/良/中/差/很差/非常差",
          "name": "空气质量",
          "typeSpec": {
            "range": [
              "great",
              "good",
              "middle",
              "bad",
              "verybad",
              "veryverybad"
            ],
            "type": "enum",
            "typeDefaultValue": "great"
          }
        },
        {
          "abilityId": 126,
          "accessMode": "rw",
          "code": "up_down_freeze",
          "description": "当前位置定格/上定格/偏上定格/中定格/偏下定格/下定格/",
          "name": "上下定格",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 127,
          "accessMode": "rw",
          "code": "left_right_freeze",
          "description": "当前位置定格/左定格/偏左定格/中定格/偏右定格/右定格/广角定格/左广角定格/右广角定格",
          "name": "左右定格",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5",
              "8",
              "6",
              "7"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 128,
          "accessMode": "ro",
          "code": "style",
          "description": "挂机/柜机",
          "name": "机型",
          "typeSpec": {
            "range": [
              "0",
              "1"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 129,
          "accessMode": "rw",
          "code": "kwh",
          "description": "可选1~5kwh",
          "name": "功率",
          "typeSpec": {
            "range": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "enum",
            "typeDefaultValue": "1"
          }
        },
        {
          "abilityId": 130,
          "accessMode": "rw",
          "code": "savemoney_temp",
          "description": "用于省钱看得见中的定温省电的温度设置",
          "name": "定温温度",
          "typeSpec": {
            "max": 31,
            "min": 26,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 26,
            "unit": "℃"
          }
        },
        {
          "abilityId": 131,
          "accessMode": "ro",
          "code": "dirty_filter",
          "description": "",
          "name": "滤网脏堵",
          "typeSpec": {
            "type": "bool",
            "typeDefaultValue": false
          }
        },
        {
          "abilityId": 132,
          "accessMode": "rw",
          "code": "hot_cold_wind",
          "description": "",
          "name": "高温风/凉感风",
          "typeSpec": {
            "type": "bool",
            "typeDefaultValue": false
          }
        },
        {
          "abilityId": 133,
          "accessMode": "rw",
          "code": "wind",
          "description": "0:水平垂直关    \n1:水平开 垂直关\n2:水平关 垂直开\n3:水平垂直开",
          "name": "水平摆风/垂直摆风",
          "typeSpec": {
            "range": [
              "0",
              "1",
              "2",
              "3"
            ],
            "type": "enum",
            "typeDefaultValue": "0"
          }
        },
        {
          "abilityId": 134,
          "accessMode": "ro",
          "code": "work_time",
          "description": "",
          "name": "运行状态时间",
          "typeSpec": {
            "maxlen": 255,
            "type": "string",
            "typeDefaultValue": ""
          }
        },
        {
          "abilityId": 135,
          "accessMode": "ro",
          "code": "run_time",
          "description": "用于运行时间累计,每2分钟上报1次。因此运行时间是2*次数",
          "name": "运行时间",
          "typeSpec": {
            "max": 65525,
            "min": 0,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 0,
            "unit": "次"
          }
        },
        {
          "abilityId": 136,
          "accessMode": "rw",
          "code": "temp_set_f",
          "description": "",
          "name": "温度设置-℉",
          "typeSpec": {
            "max": 88,
            "min": 61,
            "scale": 0,
            "step": 1,
            "type": "value",
            "typeDefaultValue": 61,
            "unit": "℉"
          }
        }
      ]
    }
  ]
}

Product ID

"product_id": "mcnywzjlugvvvnjj",

Information about how the device functions

my example yaml:

name: royal fresh airconditioner
products:
  - id: mcnywzjlugvvvnjj
    name: ROYAL FRESH Full DC EU Inverter
primary_entity:
  entity: climate
  translation_key: aircon_extra
  dps:
    - id: 1
      name: hvac_mode
      type: boolean
      mapping:
        - dps_val: false
          value: "off"
          icon: "mdi:hvac-off"
        - dps_val: true
          constraint: mode
          conditions:
            - dps_val: auto
              icon: "mdi:hvac"
              value: heat_cool
            - dps_val: cold
              icon: "mdi:snowflake"
              value: cool
            - dps_val: hot
              icon: "mdi:fire"
              value: heat
            - dps_val: wind
              icon: "mdi:fan"
              value: fan_only
            - dps_val: wet
              icon: "mdi:water"
              value: dry
    - id: 2
      name: temperature
      type: integer
      range:
        min: 160
        max: 310
      mapping:
        - scale: 10
          step: 5
          constraint: mode
          conditions:
            - dps_val: wet
              invalid: true
            - dps_val: wind
              invalid: true
    - id: 3
      name: current_temperature
      type: integer
    - id: 4
      name: mode
      type: string
      hidden: true
    - id: 5
      name: fan_mode
      type: string
      mapping:
        - dps_val: auto
          value: auto
        - dps_val: mute
          value: quiet
        - dps_val: low
          value: low
        - dps_val: mid_low
          value: medlow
        - dps_val: mid
          value: medium
        - dps_val: mid_high
          value: medhigh
        - dps_val: high
          value: high
        - dps_val: strong
          value: strong
    - id: 20
      name: fault_code
      type: bitfield
    - id: 105
      name: sleep_mode
      type: string
    - id: 110
      name: flags
      type: bitfield
    - id: 113
      name: swing_mode
      type: string
      mapping:
        - dps_val: "0"
          constraint: horizontal_swing
          conditions:
            - dps_val: "0"
              value: "off"
            - dps_val: "1"
              value: horizontal
            - value: horizontal
        - dps_val: "1"
          constraint: horizontal_swing
          conditions:
            - dps_val: "0"
              value: vertical
            - dps_val: "1"
              value: both
            - value: both
        - dps_val: "2"
          constraint: horizontal_swing
          conditions:
            - dps_val: "0"
              value: vertical
            - value: both
        - dps_val: "3"
          constraint: horizontal_swing
          conditions:
            - dps_val: "0"
              value: vertical
            - value: both
    - id: 114
      name: horizontal_swing
      type: string
      hidden: true
    - id: 119
      name: electricity_management
      type: string
    - id: 120
      name: gen_mode
      type: string
    - id: 123
      name: flags_2
      type: hex
    - id: 126
      name: vertical_flow_position
      type: string
    - id: 127
      name: horizontal_flow_position
      type: string
    - id: 128
      name: model_code
      type: string
    - id: 129
      name: energy
      type: string
    - id: 130
      name: eco_temp
      type: integer
    - id: 132
      name: hot_cool
      type: boolean
    - id: 133
      name: swing_action
      type: string
    - id: 134
      name: statistics
      type: json
secondary_entities:
  - entity: sensor
    category: diagnostic
    class: humidity
    dps:
      - id: 18
        name: sensor
        type: integer
        unit: "%"
        class: measurement
  - entity: sensor
    class: pm25
    dps:
      - id: 101
        name: sensor
        class: measurement
        type: integer
        unit: ugm3
  - entity: sensor
    name: Air Quality
    class: enum
    icon: "mdi:factory"
    dps:
      - id: 125
        type: string
        name: sensor
        mapping:
          - dps_val: "great"
            value: "Great"
          - dps_val: "good"
            value: "Good"
          - dps_val: "middle"
            value: "Middle"
          - dps_val: "bad"
            value: "Bad"
          - dps_val: "verybad"
            value: "Very bad"
          - dps_val: "veryverybad"
            value: "Very very bad"
  - entity: select
    name: Fresh air
    category: config
    icon: "mdi:air-filter"
    dps:
      - id: 102
        type: string
        name: option
        mapping:
          - dps_val: "auto"
            value: "auto"
          - dps_val: "low"
            value: "low"
          - dps_val: "mid"
            value: "mid"
          - dps_val: "strong"
            value: "strong"
          - dps_val: "off"
            value: "off"
  - entity: binary_sensor
    name: Freshair filter
    class: problem
    category: diagnostic
    icon: "mdi:air-filter"
    dps:
      - id: 103
        type: boolean
        name: sensor
  - entity: select
    name: Vertical swing
    category: config
    icon: "mdi:arrow-up-down-bold"
    dps:
      - id: 113
        type: string
        name: option
        mapping:
          - dps_val: "0"
            value: "Off"
          - dps_val: "1"
            value: Full
          - dps_val: "2"
            value: Upper
          - dps_val: "3"
            value: Lower
  - entity: select
    name: Vertical position
    category: config
    icon: "mdi:unfold-more-horizontal"
    dps:
      - id: 126
        type: string
        name: option
        mapping:
          - dps_val: "0"
            value: Unknown
          - dps_val: "1"
            value: Top
          - dps_val: "2"
            value: Slightly Up
          - dps_val: "3"
            value: Middle
          - dps_val: "4"
            value: Slightly Down
          - dps_val: "5"
            value: Bottom
  - entity: select
    name: Horizontal swing
    category: config
    icon: "mdi:arrow-left-right-bold"
    dps:
      - id: 114
        type: string
        name: option
        mapping:
          - dps_val: "0"
            value: "Off"
          - dps_val: "1"
            value: Full
          - dps_val: "2"
            value: Left
          - dps_val: "3"
            value: Center
          - dps_val: "4"
            value: Right
          - dps_val: "5"
            value: "right air supply"
          - dps_val: "6"
            value: "wide angle air supply"
          - dps_val: "7"
  - entity: select
    name: Horizontal freeze position
    category: config
    icon: "mdi:unfold-more-vertical"
    dps:
      - id: 127
        type: string
        name: option
        mapping:
          - dps_val: "0"
            value: Unknown
          - dps_val: "1"
            value: Left Fix
          - dps_val: "2"
            value: A Bit left Fix
          - dps_val: "3"
            value: Middle Fix
          - dps_val: "4"
            value: A bit Right Fix
          - dps_val: "5"
            value: Right Fix
  - entity: select
    name: Sleep mode
    category: config
    icon: "mdi:weather-night"
    dps:
      - id: 105
        type: string
        name: option
        mapping:
          - dps_val: "off"
            value: "Off"
          - dps_val: "normal"
            value: Standard
          - dps_val: "old"
            value: "Elderly"
          - dps_val: "child"
            value: "Child"
  - entity: select
    name: Electricity Management
    category: config
    icon: "mdi:lightning-bolt-outline"
    dps:
      - id: 119
        type: string
        name: option
        mapping:
          - dps_val: "0"
            value: "None"
          - dps_val: "1"
            value: Default power saving
          - dps_val: "2"
            value: "Quota power saving"
          - dps_val: "3"
            value: "Fixed temperature power saving"
  - entity: switch
    name: Display
    category: config
    icon: "mdi:lightbulb-on-outline"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "0008"
  - entity: switch
    name: Soft wind
    category: config
    icon: "mdi:weather-windy"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "8000"
  - entity: switch
    name: Anti-mildew
    category: config
    icon: "mdi:water-off-outline"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "0100"
  - entity: switch
    name: Health
    category: config
    icon: "mdi:heart-outline"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "0020"
  - entity: switch
    name: Anti-freeze
    category: config
    icon: "mdi:radiator"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "1000"
  - entity: switch
    name: Eco mode
    category: config
    icon: "mdi:leaf"
    dps:
      - id: 123
        type: hex
        name: switch
        mapping:
          - scale: 1
            mask: "0001"
  - entity: binary_sensor
    name: Fault
    class: problem
    category: diagnostic
    dps:
      - id: 20
        type: bitfield
        name: sensor
        mapping:
          - dps_val: 0
            value: false
          - value: true
  - entity: binary_sensor
    name: Dirty filter
    class: problem
    category: diagnostic
    dps:
      - id: 131
        type: boolean
        name: sensor

  - entity: sensor
    name: energy
    class: energy
    category: diagnostic
    dps:
      - id: 129
        type: integer
        name: sensor
        unit: kWh
make-all commented 5 months ago

Seems like a duplicate of PR #1703