make-all / tuya-local

Local support for Tuya devices in Home Assistant
MIT License
1.22k stars 489 forks source link

Request support for Lefant N3 Robot Vacuum Cleaner #1393

Closed mariustt closed 1 month ago

mariustt commented 9 months ago

Log Message

2023-12-21 21:45:50.800 DEBUG (MainThread) [custom_components.tuya_local.device] Refreshing device state for Test
2023-12-21 21:45:50.800 INFO (MainThread) [custom_components.tuya_local.device] Setting protocol version for Test to 3.3
2023-12-21 21:45:50.831 DEBUG (SyncWorker_18) [custom_components.tuya_local.device] Test refreshed device state: {"dps": {"1": false, "4": "smart", "5": "sleep", "6": 7, "7": 9, "8": 100, "9": "strong", "10": "high", "27": false, "28": 32, "45": true, "122": true, "125": true, "126": false}}
2023-12-21 21:45:50.831 DEBUG (SyncWorker_18) [custom_components.tuya_local.device] new state (incl pending): {"updated_at": 1703187950.8310885, "1": false, "4": "smart", "5": "sleep", "6": 7, "7": 9, "8": 100, "9": "strong", "10": "high", "27": false, "28": 32, "45": true, "122": true, "125": true, "126": false}
2023-12-21 21:45:50.838 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Loaded device config 9in1_airquality_monitor.yaml

<<<>>>

2023-12-21 21:45:52.465 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for mmWave presence sensor, missing required DPs: [{'101': 'str'}, {'2': 'int'}, {'102': 'int'}, {'104': 'int'}, {'111': 'int'}]
2023-12-21 21:45:52.465 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for mmWave presence sensor, DPs have incorrect type: [{'1': 'str'}, {'4': 'int'}, {'9': 'int'}]
2023-12-21 21:45:52.465 WARNING (MainThread) [custom_components.tuya_local.config_flow] Device matches asc_wifi_circuit_breaker with quality of 14%. DPS: {"updated_at": 1703187950.8310885, "1": false, "4": "smart", "5": "sleep", "6": 7, "7": 9, "8": 100, "9": "strong", "10": "high", "27": false, "28": 32, "45": true, "122": true, "125": true, "126": false}
2023-12-21 21:45:52.465 WARNING (MainThread) [custom_components.tuya_local.config_flow] Report this to https://github.com/make-all/tuya-local/issues/

Information about DPS mappings

Cloud -> API Explorer -> Device Control -> Query Things Data Model // v2.0/cloud/thing/{{device_id}}/model result

{
    "result": {
        "model": "{\"modelId\":\"dwzcjg\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[
{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"switch_go\",\"description\":\"清扫启动、清扫停止\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"清扫开关\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":2,\"accessMode\":\"rw\",\"code\":\"pause\",\"description\":\"暂停有效、暂停无效\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"暂停/继续\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"switch_charge\",\"description\":\"回充启动、回充停止\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"回充开关\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":4,\"accessMode\":\"rw\",\"code\":\"mode\",\"description\":\"smart - 自动清扫模式/全屋清扫模式 \\nchargego - 自动回充模式\\nzone - 划区清扫模式/矩形清扫模式\\npose - 指哪扫哪模式/定点清扫模式\\npart - 局部清扫模式\\nfastmapping - 快速建图\\nCleanModeSectorbased - 分区清扫\",\"extensions\":{\"attribute\":\"704\"},\"name\":\"工作模式\",\"typeSpec\":{\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\",\"fastmapping\",\"CleanModeSectorbased\"],\"type\":\"enum\",\"typeDefaultValue\":\"smart\"}},
{\"abilityId\":5,\"accessMode\":\"ro\",\"code\":\"status\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nstandby - 待机中\\nsmart - 自动清扫中 \\nzone_clean - 划区清扫中\\npart_clean - 局部清扫中\\ncleaning - 清扫中(备选) \\npaused - 已暂停\\ngoto_pos - 前往目标点中\\npos_arrived - 目标点已到达 \\npos_unarrive - 目标点不可达 \\ngoto_charge - 寻找充电座中 \\ncharging - 充电中\\ncharge_done - 充电完成 \\nsleep - 休眠\\nrelocating - 定位中\\nrelocating_reharge - 回充定位中\\nrecharing_paused - 回充暂停中\\nfastmaping - 快速建图中\\nfastmaping_paused - 快速建图暂停中\\n\",\"extensions\":{\"attribute\":\"706\"},\"name\":\"当前状态\",\"typeSpec\":{\"range\":[\"standby\",\"smart\",\"zone_clean\",\"part_clean\",\"cleaning\",\"paused\",\"goto_pos\",\"pos_arrived\",\"pos_unarrive\",\"goto_charge\",\"charging\",\"charge_done\",\"sleep\",\"relocating\",\"relocating_recharge\",\"recharing_paused\",\"fastmaping\",\"fastmaping_paused\"],\"type\":\"enum\",\"typeDefaultValue\":\"standby\"}},
{\"abilityId\":6,\"accessMode\":\"ro\",\"code\":\"clean_time\",\"description\":\"默认区间为0min—9999分钟(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9min\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫时间\",\"typeSpec\":{\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"type\":\"value\",\"typeDefaultValue\":0,\"unit\":\"min\"}},
{\"abilityId\":7,\"accessMode\":\"ro\",\"code\":\"clean_area\",\"description\":\"默认区间为0㎡—9999㎡(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9㎡\\n\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫面积\",\"typeSpec\":{\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"type\":\"value\",\"typeDefaultValue\":0,\"unit\":\"㎡\"}},
{\"abilityId\":8,\"accessMode\":\"ro\",\"code\":\"residual_electricity\",\"description\":\"默认区间为0%—100%(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9%\\n\",\"extensions\":{\"attribute\":\"194\"},\"name\":\"剩余电量\",\"typeSpec\":{\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"type\":\"value\",\"typeDefaultValue\":0,\"unit\":\"%\"}},
{\"abilityId\":9,\"accessMode\":\"rw\",\"code\":\"suction\",\"description\":\"默认值(可修改、删除、增加):\\nsuperstrong-超强\\nstrong - 强劲\\nnormal - 正常\\ngentle - 安静\\nclosed - 关闭\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"吸力选择\",\"typeSpec\":{\"range\":[\"closed\",\"gentle\",\"normal\",\"strong\",\"superstrong\"],\"type\":\"enum\",\"typeDefaultValue\":\"closed\"}},
{\"abilityId\":10,\"accessMode\":\"rw\",\"code\":\"cistern\",\"description\":\"默认值(可修改、删除、增加):\\nclosed-关\\nlow - 低\\nmiddle - 中\\nhigh - 高\\nclosed - 关闭\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"水量选择\",\"typeSpec\":{\"range\":[\"closed\",\"low\",\"middle\",\"high\"],\"type\":\"enum\",\"typeDefaultValue\":\"closed\"}},
{\"abilityId\":11,\"accessMode\":\"rw\",\"code\":\"seek\",\"description\":\"\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"寻找机器\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":12,\"accessMode\":\"rw\",\"code\":\"direction_control\",\"description\":\"默认值(不可修改、删除、增加),按键按下下发对应的方向值,松手下发停\",\"extensions\":{\"iconName\":\"icon-dp_compass\",\"attribute\":\"224\"},\"name\":\"清扫方向\",\"typeSpec\":{\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"],\"type\":\"enum\",\"typeDefaultValue\":\"forward\"}},
{\"abilityId\":13,\"accessMode\":\"rw\",\"code\":\"map_reset\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_loop\",\"attribute\":\"128\"},\"name\":\"重置地图\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":14,\"accessMode\":\"rw\",\"code\":\"path_data\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"路径传输\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":15,\"accessMode\":\"rw\",\"code\":\"command_trans\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"指令传输\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":16,\"accessMode\":\"rw\",\"code\":\"request\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"请求数据\",\"typeSpec\":{\"range\":[\"get_map\",\"get_path\",\"get_both\"],\"type\":\"enum\",\"typeDefaultValue\":\"get_map\"}},
{\"abilityId\":27,\"accessMode\":\"rw\",\"code\":\"break_clean\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_wash\",\"attribute\":\"1152\"},\"name\":\"断点续扫\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":28,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nedge_sweep_fault - 边刷故障\\nmiddle_sweep_fault - 滚刷故障\\nleft_wheel_fault - 左轮故障\\nright_wheel_fault - 右轮故障\\ngarbage_box_fault - 尘盒故障\\nland_check_fault - 地检故障\\ncollision_fault - 碰撞传感器故障\\n\\n可在后面增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加故障中状态,则为in_trouble\",\"extensions\":{\"scope\":\"fault\",\"attribute\":\"704\"},\"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\",\"25\",\"26\",\"27\",\"28\",\"29\"],\"maxlen\":30,\"type\":\"bitmap\",\"typeDefaultValue\":0}},
{\"abilityId\":32,\"accessMode\":\"rw\",\"code\":\"device_timer\",\"description\":\"相关数据协议及逻辑可参看协议文件\",\"extensions\":{\"attribute\":\"224\"},\"name\":\"定时\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":33,\"accessMode\":\"rw\",\"code\":\"disturb_time_set\",\"description\":\"相关数据协议及逻辑可参看开发包中激光扫地机地图协议文件\",\"extensions\":{\"iconName\":\"icon-dp_time3\",\"attribute\":\"224\"},\"name\":\"勿扰时间设置\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":45,\"accessMode\":\"rw\",\"code\":\"auto_boost\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_up\"},\"name\":\"地毯增压\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":101,\"accessMode\":\"rw\",\"code\":\"forbidden_zone\",\"description\":\"\",\"name\":\"禁区信息获取\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":102,\"accessMode\":\"rw\",\"code\":\"clean_zone\",\"description\":\"\",\"name\":\"划区信息获取\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":103,\"accessMode\":\"rw\",\"code\":\"pos_clean\",\"description\":\"\",\"name\":\"指哪扫哪获取\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":104,\"accessMode\":\"rw\",\"code\":\"all_zone\",\"description\":\"\",\"name\":\"禁区,划区,指哪扫哪状态获取\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":105,\"accessMode\":\"rw\",\"code\":\"map_zoom_android\",\"description\":\"\",\"name\":\"地图比例_Android\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":106,\"accessMode\":\"rw\",\"code\":\"map_zoom_ios\",\"description\":\"\",\"name\":\"地图比例_IOS\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":107,\"accessMode\":\"rw\",\"code\":\"dev_log_show\",\"description\":\"\",\"name\":\"设备log显示\",\"typeSpec\":{\"maxlen\":255,\"type\":\"string\",\"typeDefaultValue\":\"\"}},
{\"abilityId\":108,\"accessMode\":\"rw\",\"code\":\"clean_zone_back\",\"description\":\"\",\"name\":\"退出划区清扫\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":109,\"accessMode\":\"rw\",\"code\":\"pos_clean_back\",\"description\":\"\",\"name\":\"退出指哪扫哪\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":110,\"accessMode\":\"rw\",\"code\":\"get_device_info\",\"description\":\"\",\"name\":\"获取设备信息\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":111,\"accessMode\":\"rw\",\"code\":\"get_robot_log\",\"description\":\"\",\"name\":\"获取嵌入式日志\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":112,\"accessMode\":\"rw\",\"code\":\"switch_save_map\",\"description\":\"\",\"name\":\"地图保存开关\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":120,\"accessMode\":\"rw\",\"code\":\"voice_check\",\"description\":\"\",\"name\":\"音量调节\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":121,\"accessMode\":\"rw\",\"code\":\"robot_reboot\",\"description\":\"\",\"name\":\"死机标志位\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":122,\"accessMode\":\"rw\",\"code\":\"save_mapping\",\"description\":\"有历史地图1 没有历史地图0\",\"name\":\"地图保存标志位\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":123,\"accessMode\":\"rw\",\"code\":\"disturb_set\",\"description\":\"\",\"name\":\"勿扰设置\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":124,\"accessMode\":\"rw\",\"code\":\"appointment_clean\",\"description\":\"\",\"name\":\"预约清扫\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":125,\"accessMode\":\"rw\",\"code\":\"is_charging\",\"description\":\"在充电桩上1 \\n不在充电桩0\",\"name\":\"在桩标志\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":126,\"accessMode\":\"rw\",\"code\":\"save_map_result\",\"description\":\"地图是否保存,保存失败要弹窗为1,成功则为0\",\"name\":\"地图保存结果\",\"typeSpec\":{\"type\":\"bool\",\"typeDefaultValue\":false}},
{\"abilityId\":150,\"accessMode\":\"rw\",\"code\":\"reserved0\",\"description\":\"\",\"name\":\"预留0\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":151,\"accessMode\":\"rw\",\"code\":\"reserved1\",\"description\":\"\",\"name\":\"预留1\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":152,\"accessMode\":\"rw\",\"code\":\"reserved2\",\"description\":\"\",\"name\":\"预留2\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":153,\"accessMode\":\"rw\",\"code\":\"reserved3\",\"description\":\"\",\"name\":\"预留3\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}},
{\"abilityId\":154,\"accessMode\":\"rw\",\"code\":\"reserved4\",\"description\":\"\",\"name\":\"预留4\",\"typeSpec\":{\"maxlen\":128,\"type\":\"raw\"}}]}]}"
    },
    "success": true,
    "t": 1702221372846,
    "tid": "0e004a77976f11ee8e398adb9dc31cad"
}

Information from Tuya Cloud API Explorer -> Device Control -> Query Properties

{
  "result": {
    "properties": [
      {
        "code": "switch_go",
        "custom_name": "",
        "dp_id": 1,
        "time": 1702198104631,
        "value": false
      },
      {
        "code": "pause",
        "custom_name": "",
        "dp_id": 2,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "switch_charge",
        "custom_name": "",
        "dp_id": 3,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "mode",
        "custom_name": "",
        "dp_id": 4,
        "time": 1702197763932,
        "value": "smart"
      },
      {
        "code": "status",
        "custom_name": "",
        "dp_id": 5,
        "time": 1702198551843,
        "value": "sleep"
      },
      {
        "code": "clean_time",
        "custom_name": "",
        "dp_id": 6,
        "time": 1702197764078,
        "value": 0
      },
      {
        "code": "clean_area",
        "custom_name": "",
        "dp_id": 7,
        "time": 1702197764090,
        "value": 0
      },
      {
        "code": "residual_electricity",
        "custom_name": "",
        "dp_id": 8,
        "time": 1702198539665,
        "value": 100
      },
      {
        "code": "suction",
        "custom_name": "",
        "dp_id": 9,
        "time": 1702197764395,
        "value": "normal"
      },
      {
        "code": "cistern",
        "custom_name": "",
        "dp_id": 10,
        "time": 1702197763834,
        "value": "middle"
      },
      {
        "code": "seek",
        "custom_name": "",
        "dp_id": 11,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "direction_control",
        "custom_name": "",
        "dp_id": 12,
        "time": 1701511471632,
        "value": "forward"
      },
      {
        "code": "map_reset",
        "custom_name": "",
        "dp_id": 13,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "path_data",
        "custom_name": "",
        "dp_id": 14,
        "time": 1702197761413
      },
      {
        "code": "command_trans",
        "custom_name": "",
        "dp_id": 15,
        "time": 1702197764263,
        "value": "qgADOQIAmQ=="
      },
      {
        "code": "request",
        "custom_name": "",
        "dp_id": 16,
        "time": 1701511471632,
        "value": "get_map"
      },
      {
        "code": "break_clean",
        "custom_name": "",
        "dp_id": 27,
        "time": 1702197763261,
        "value": true
      },
      {
        "code": "fault",
        "custom_name": "",
        "dp_id": 28,
        "time": 1702197764131,
        "value": 0
      },
      {
        "code": "device_timer",
        "custom_name": "",
        "dp_id": 32,
        "time": 1702197761413
      },
      {
        "code": "disturb_time_set",
        "custom_name": "",
        "dp_id": 33,
        "time": 1702197761413
      },
      {
        "code": "auto_boost",
        "custom_name": "",
        "dp_id": 45,
        "time": 1702197763267,
        "value": true
      },
      {
        "code": "forbidden_zone",
        "custom_name": "",
        "dp_id": 101,
        "time": 1702197797235,
        "value": "qgACGwAb"
      },
      {
        "code": "clean_zone",
        "custom_name": "",
        "dp_id": 102,
        "time": 1702197823993,
        "value": "qgABKSk="
      },
      {
        "code": "pos_clean",
        "custom_name": "",
        "dp_id": 103,
        "time": 1702197823955,
        "value": "qgABFxc="
      },
      {
        "code": "all_zone",
        "custom_name": "",
        "dp_id": 104,
        "time": 1702197761413
      },
      {
        "code": "map_zoom_android",
        "custom_name": "",
        "dp_id": 105,
        "time": 1702197761413
      },
      {
        "code": "map_zoom_ios",
        "custom_name": "",
        "dp_id": 106,
        "time": 1702197761413
      },
      {
        "code": "dev_log_show",
        "custom_name": "",
        "dp_id": 107,
        "time": 1701511471632,
        "value": ""
      },
      {
        "code": "clean_zone_back",
        "custom_name": "",
        "dp_id": 108,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "pos_clean_back",
        "custom_name": "",
        "dp_id": 109,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "get_device_info",
        "custom_name": "",
        "dp_id": 110,
        "time": 1702197761413
      },
      {
        "code": "get_robot_log",
        "custom_name": "",
        "dp_id": 111,
        "time": 1702197761413
      },
      {
        "code": "switch_save_map",
        "custom_name": "",
        "dp_id": 112,
        "time": 1702197764557,
        "value": "qgACAAEC"
      },
      {
        "code": "voice_check",
        "custom_name": "",
        "dp_id": 120,
        "time": 1702197764414,
        "value": "qgACA0ZJ"
      },
      {
        "code": "robot_reboot",
        "custom_name": "",
        "dp_id": 121,
        "time": 1701511474310,
        "value": "qgACAAEB"
      },
      {
        "code": "save_mapping",
        "custom_name": "",
        "dp_id": 122,
        "time": 1702197763269,
        "value": false
      },
      {
        "code": "disturb_set",
        "custom_name": "",
        "dp_id": 123,
        "time": 1702197766190,
        "value": "qgAJAQB/FgAABgAAnA=="
      },
      {
        "code": "appointment_clean",
        "custom_name": "",
        "dp_id": 124,
        "time": 1701511471632,
        "value": false
      },
      {
        "code": "is_charging",
        "custom_name": "",
        "dp_id": 125,
        "time": 1702197823862,
        "value": true
      },
      {
        "code": "save_map_result",
        "custom_name": "",
        "dp_id": 126,
        "time": 1702198070023,
        "value": true
      },
      {
        "code": "reserved0",
        "custom_name": "",
        "dp_id": 150,
        "time": 1702197797345,
        "value": "qgACAQAB"
      },
      {
        "code": "reserved1",
        "custom_name": "",
        "dp_id": 151,
        "time": 1702197764512,
        "value": "qgACAQAB"
      },
      {
        "code": "reserved2",
        "custom_name": "",
        "dp_id": 152,
        "time": 1702197764685,
        "value": "qgACAQAB"
      },
      {
        "code": "reserved3",
        "custom_name": "",
        "dp_id": 153,
        "time": 1702197791031,
        "value": "qgACAQAB"
      },
      {
        "code": "reserved4",
        "custom_name": "",
        "dp_id": 154,
        "time": 1702197761413
      }
    ]
  },
  "success": true,
  "t": 1702219059987,
  "tid": "ab72df21976911ee82d73e55532a4cc5"
}

Information from Tuya Cloud API Explorer -> Device Control (Standard Instruction Set) -> Get the Instruction Set of the Device

{
  "result": {
    "category": "sd",
    "functions": [
      {
        "code": "power_go",
        "desc": "{}",
        "name": "清扫开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "pause",
        "desc": "{}",
        "name": "暂停开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "switch_charge",
        "desc": "{}",
        "name": "回充开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "mode",
        "desc": "{\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\"]}",
        "name": "工作模式",
        "type": "Enum",
        "values": "{\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\"]}"
      },
      {
        "code": "suction",
        "desc": "{\"range\":[\"gentle\",\"normal\",\"strong\"]}",
        "name": "吸力选择",
        "type": "Enum",
        "values": "{\"range\":[\"gentle\",\"normal\",\"strong\"]}"
      },
      {
        "code": "cistern",
        "desc": "{\"range\":[\"low\",\"middle\",\"high\"]}",
        "name": "水箱调节",
        "type": "Enum",
        "values": "{\"range\":[\"low\",\"middle\",\"high\"]}"
      },
      {
        "code": "seek",
        "desc": "{}",
        "name": "寻找机器",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "direction_control",
        "desc": "{\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"]}",
        "name": "清扫方向",
        "type": "Enum",
        "values": "{\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"]}"
      },
      {
        "code": "reset_map",
        "desc": "{}",
        "name": "重置地图",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "path_data",
        "desc": "{}",
        "name": "路径传输",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "command_trans",
        "desc": "{}",
        "name": "指令传输",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "request",
        "desc": "{\"range\":[\"get_map\",\"get_path\",\"get_both\"]}",
        "name": "请求数据",
        "type": "Enum",
        "values": "{\"range\":[\"get_map\",\"get_path\",\"get_both\"]}"
      },
      {
        "code": "break_clean",
        "desc": "{}",
        "name": "断点续扫",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "device_timer",
        "desc": "{}",
        "name": "本地定时",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "disturb_time_set",
        "desc": "{}",
        "name": "勿扰时间设置",
        "type": "Raw",
        "values": "{}"
      }
    ],
    "status": [
      {
        "code": "power_go",
        "name": "清扫开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "pause",
        "name": "暂停开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "switch_charge",
        "name": "回充开关",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "mode",
        "name": "工作模式",
        "type": "Enum",
        "values": "{\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\"]}"
      },
      {
        "code": "status",
        "name": "当前状态",
        "type": "Enum",
        "values": "{\"range\":[\"standby\",\"zone_clean\",\"part_clean\",\"cleaning\",\"paused\",\"goto_pos\",\"pos_arrived\",\"pos_unarrive\",\"goto_charge\",\"charging\",\"charge_done\",\"sleep\"]}"
      },
      {
        "code": "clean_time",
        "name": "清扫时间",
        "type": "Integer",
        "values": "{\"unit\":\"min\",\"min\":0,\"max\":9999,\"scale\":0,\"step\":1}"
      },
      {
        "code": "clean_area",
        "name": "清扫面积",
        "type": "Integer",
        "values": "{\"unit\":\"㎡\",\"min\":0,\"max\":9999,\"scale\":0,\"step\":1}"
      },
      {
        "code": "electricity_left",
        "name": "剩余电量",
        "type": "Integer",
        "values": "{\"unit\":\"%\",\"min\":0,\"max\":100,\"scale\":0,\"step\":1}"
      },
      {
        "code": "suction",
        "name": "吸力选择",
        "type": "Enum",
        "values": "{\"range\":[\"closed\",\"gentle\",\"normal\",\"strong\"]}"
      },
      {
        "code": "cistern",
        "name": "水箱调节",
        "type": "Enum",
        "values": "{\"range\":[\"closed\",\"low\",\"middle\",\"high\"]}"
      },
      {
        "code": "seek",
        "name": "寻找机器",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "direction_control",
        "name": "清扫方向",
        "type": "Enum",
        "values": "{\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"]}"
      },
      {
        "code": "reset_map",
        "name": "重置地图",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "path_data",
        "name": "路径传输",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "command_trans",
        "name": "指令传输",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "request",
        "name": "请求数据",
        "type": "Enum",
        "values": "{\"range\":[\"get_map\",\"get_path\",\"get_both\"]}"
      },
      {
        "code": "break_clean",
        "name": "断点续扫",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "fault",
        "name": "故障上报",
        "type": "Bitmap",
        "values": "{\"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\",\"25\",\"26\",\"27\",\"28\",\"29\"]}"
      },
      {
        "code": "device_timer",
        "name": "本地定时",
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "disturb_time_set",
        "name": "勿扰时间设置",
        "type": "Raw",
        "values": "{}"
      }
    ]
  },
  "success": true,
  "t": 1702202234372,
  "tid": "7ea12642974211ee86abc62998796177"
}

General Device Information

{
  "result": {
    "active_time": 1701511471,
    "category": "sd",
    "create_time": 1701511471,
    "custom_name": "",
    "icon": "smart/icon/ay1542254159262ZB6ee/20c32334a1b599462bc5586d38c49dc0.png",
    "id": "bf36aa971ef7ace8a5txqi",
    "ip": "<IP>",
    "is_online": true,
    "lat": "",
    "local_key": "<local_key>",
    "lon": "",
    "model": "03",
    "name": "Lefant N3",
    "product_id": "yn442adgwn5ffqmz",
    "product_name": "Lefant N3",
    "sub": false,
    "time_zone": "+02:00",
    "update_time": 1701511474,
    "uuid": "uuid2d9ec7d95f8997fb"
  },
  "success": true,
  "t": 1701512003061,
  "tid": "6cacb4f390fb11ee86abc62998796177"
}
make-all commented 9 months ago

The objectives of Zigbee2MQTT and this integration are different, so it is not sufficient to follow instructions of one project when making a report on the other.

mariustt commented 9 months ago

@make-all I've added the Zigbee2MQTT information to make it easier to compare dps. They are extracted from tuya cloud. There is also some other information below which is the same as the first.

Is there any missing information in this case that the issue was closed?

mariustt commented 9 months ago

@make-all I have deleted irrelevant information. I just thought that more information is more useful. :)

make-all commented 9 months ago

All of the information requested on the new device template is missing. The information you are providing is for the cloud protocol, which often resembles the local protocol, but is also often different. The specific QueryThingsDataModel API result mentioned in the template, and most importantly, Home Assistant logs or diagnostics showing the values actually received from the device are needed.

mariustt commented 9 months ago

@make-all Sorry, I missed the QueryThingsDataModel. I have added this information by editing the original information.

Please see if the information is now sufficient. Does the information from the logs have to be added? Because when I created the yaml config file for the TAMPA led system, all the functions were fully working the same as in the cloud. The only problem is that in order for tuya local to see all the cloud DPS, it has to be first triggered via the API before adding them locally.

mariustt commented 9 months ago

@make-all based on your comments, I have updated the issue description with all the necessary information regarding the new device template. I've made sure to include the specific QueryThingsDataModel API result and Home Assistant logs/diagnostics showing the values received from the device, as you suggested.

Could you please take a moment to review the updated information? Also, I would like to inquire if it's possible to reopen the current issue or would it be more appropriate for me to create a new issue with the identical information?

Looking forward to your guidance and thank you in advance for your time.

antonio1475 commented 7 months ago

Hi! I also have the Lefant N3. It has its own Lefant app, which lacks a lot of features, Scenes and conneciton to HA 😢 It's halfway supported in Tuya (it's a mess though), but it's the only way to have it in HA so...

Here's an initial (incomplete!) config file for it:

name: Lefant N3 vacuum
products:
  - id: jtna6ihybmr0mxg8
    name: Lefant N3
primary_entity:
  entity: vacuum
  dps:
    - id: 1
      name: activate
      type: boolean
    - id: 5
      name: status
      type: string
      mapping:
        - dps_val: standby
          value: standby
        - dps_val: smart
          value: cleaning
        - dps_val: zone_clean
          value: cleaning
        - dps_val: part_clean
          value: cleaning
        - dps_val: cleaning
          value: cleaning
        - dps_val: paused
          value: paused
        - dps_val: goto_pos
          value: cleaning
        - dps_val: pos_arrived
          value: paused
        - dps_val: pos_unarrive
          value: pos_unarrive
        - dps_val: goto_charge
          value: returning
        - dps_val: charging
          value: charging
        - dps_val: charge_done
          value: charged
        - dps_val: sleep
          value: sleep
        - dps_val: relocating
          value: cleaning
        - dps_val: relocating_recharge
          value: returning
        - dps_val: recharing_paused
          value: paused
        - dps_val: fastmaping
          value: fastmaping
        - dps_val: fastmaping_paused
          value: paused

secondary_entities:
  - entity: sensor
    name: Battery
    class: battery
    dps:
      - id: 8
        type: integer
        name: sensor
        unit: "%"
        class: measurement
  - entity: sensor
    name: Clean area
    category: diagnostic
    icon: "mdi:floor-plan"
    dps:
      - id: 7
        type: integer
        optional: true
        name: sensor
        unit: m2
  - entity: sensor
    name: Clean time
    category: diagnostic
    class: duration
    icon: "mdi:clock-outline"
    dps:
      - id: 6
        type: integer
        optional: true
        name: sensor
        unit: min
  - entity: select
    name: Suction
    category: config
    dps:
      - id: 9
        type: string
        name: option
        mapping:
          - dps_val: closed
            value: closed
          - dps_val: gentle
            value: gentle
          - dps_val: normal
            value: normal
          - dps_val: strong
            value: strong
          - dps_val: superstrong
            value: superstrong
  - entity: select
    name: Cistern
    category: config
    dps:
      - id: 10
        type: string
        name: option
        mapping:
          - dps_val: closed
            value: closed
          - dps_val: low
            value: low
          - dps_val: middle
            value: middle
          - dps_val: high
            value: high

image

Return to Dock currently doesn't work with that config (it worked while working on it, but not after re-adding the device. I must have deleted the part relating to Docking and it continued working through reloads, until deleting-readding)

@make-all this device works a bit different/weird... There are 3 DPs that control the device when setting them to true:

  1. DP 1 for "Power" (switch_go). When set to true it starts, set to false goes standby.
  2. DP 2 for Pause (pause). When set to true it pauses, set to false goes starts/resumes the vacuum
  3. DP 3 to dock (switch_charge). When set to true it pauses, set to false goes starts/resumes the vacuum

However, those DPs don't really update/stay updated. They always stay like this image

So they act more as buttons. Very weird, I know, but how can we set this up in the config file? Unless there's a better way (I hope there is), it would be something like:

I'm trying to understand constraints and conditions and take inspiration from some other vacuum config files like tesvor_s6, kogan_lx10 and ttec_reobipro but for now, it surpasses me.

make-all commented 7 months ago

I think TTEC Robipro has the same issue with buttons, as reported on #1545. Your info gives me a bit more to think about how to work with this.

antonio1475 commented 7 months ago

After the update, the vacuum is not matched to the config file:

2024-01-29 11:49:27.921 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Loaded device config lefant_n3_vacuum.yaml
2024-01-29 11:49:27.922 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for Robot vacuum, missing required DPs: [{'4': 'str'}, {'126': 'bool'}, {'6': 'int'}, {'7': 'int'}]

Setting those 4 to optional: true seems to work (eg. I know that 6 & 7 are Unknown/empty when setting it up so there's no match. 4 & 126 are probably the same), and all of the info is pulled: image

A few notes:

image

I suppose this cannot be easily changed so that the native controls act like the auxiliar buttons?

In any case, thank you! This vacuum is great but no connection to HA was killing me. This makes it 99% perfect (cannot control volume without Lefant app and it talks very loud)

make-all commented 7 months ago

I can only try. Let me know if this change has made it better or worse.

antonio1475 commented 7 months ago

Using the latest c67099f (dimissing a7becc1):

2024-01-29 17:55:49.971 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Loaded device config lefant_n3_vacuum.yaml
2024-01-29 17:55:49.972 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for Robot vacuum, missing required DPs: [{'2': 'bool'}]

Made DP 2 optional also, works then.

Native Pause works so the change did something 🥳 Native Return to Dock doesn't: image

fyi this is the more-info dialog now (3 buttons instead of 5, but Clean Spot was unnecessary and Dock was duplicate, so it's better like this) 👍: image

Thanks again for your support Jason 🙏

antonio1475 commented 7 months ago

@make-all with 2fef921, native Return to Dock (both buttons in more-info dialog) work.

I simply updated the config file and reloaded (haven't deleted & re-added the device), but I would assume it's fine.

Thank you so much.

pseudo-su commented 2 months ago

I have two Lefant devices and seeing some odd behavior when connecting to tuya-local, wondering if anyone can point me in the right direction on where to fix/update.

NOTE: These details were from setting up the integration w/ tuya-local via the smart life android app


I have a "Lefant N3" I can connect, but the only options for me to select as the "device type" during setup is gainsboroughlibery_entrance_lock

lefant_n3.diagnostics.json

image

image


2024-07-18 20:37:17.655 DEBUG (MainThread) [custom_components.tuya_local.config_flow] Found: {'ip': '192.168.1.154', 'version': '3.3', 'id': 'bf9abd31d0c7dc0789utlp', 'product_id': 'yn442adgwn5ffqmz', 'data': {'ip': '192.168.1.154', 'gwId': 'bf9abd31d0c7dc0789utlp', 'active': 2, 'encrypt': True, 'productKey': 'yn442adgwn5ffqmz', 'version': '3.3', 'name': '', 'key': '', 'mac': '', 'id': 'bf9abd31d0c7dc0789utlp', 'ability': 0, 'token': '', 'wf_cfg': '', 'dev_type': 'default', 'origin': 'broadcast'}}
2024-07-18 20:37:19.437 DEBUG (MainThread) [custom_components.tuya_local.device] Refreshing device state for Test
2024-07-18 20:37:19.438 INFO (MainThread) [custom_components.tuya_local.device] Setting protocol version for Test to 3.3
2024-07-18 20:37:19.464 DEBUG (SyncWorker_27) [custom_components.tuya_local.device] Test refreshed device state: {"dps": {"4": "smart", "5": "charging", "6": 0, "7": 0, "8": 27, "9": "normal", "10": "middle", "27": true, "28": 0, "45": true, "122": false, "125": true}}
2024-07-18 20:37:19.465 DEBUG (SyncWorker_27) [custom_components.tuya_local.device] new state (incl pending): {"updated_at": 1721299039.464816, "4": "smart", "5": "charging", "6": 0, "7": 0, "8": 27, "9": "normal", "10": "middle", "27": true, "28": 0, "45": true, "122": false, "125": true}

<<<>>>

2024-07-18 20:37:33.544 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Loaded device config zym201_presence_sensor.yaml
2024-07-18 20:37:33.544 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for mmWave presence sensor, missing required DPs: [{'101': 'str'}, {'1': 'str'}, {'102': 'int'}, {'104': 'int'}]
2024-07-18 20:37:33.545 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Not match for mmWave presence sensor, DPs have incorrect type: [{'4': 'int'}, {'9': 'int'}]
2024-07-18 20:37:33.555 WARNING (MainThread) [custom_components.tuya_local.config_flow] Device matches gainsboroughliberty_entrance_lock with quality of 8%. DPS: {"updated_at": 1721299039.464816, "4": "smart", "5": "charging", "6": 0, "7": 0, "8": 27, "9": "normal", "10": "middle", "27": true, "28": 0, "45": true, "122": false, "125": true}
2024-07-18 20:37:33.555 WARNING (MainThread) [custom_components.tuya_local.config_flow] Include the previous log message with any new device request to https://github.com/make-all/tuya-local/issues/

I have a "Lefant M1" that i've successfully registered in home assistant, where it lets me select the device type lefant_n3_vacuum and seems to work.

lefant_m1.diagnostics.json

image

image

pseudo-su commented 2 months ago

Following the steps in the README.md. It seemed like I needed to switch to use the Tuya Smart android app instead of the Smart Life android app, so I did that

Weirdly after doing that and trying to register the devices via tuya-local again I get both the Lefant M1 and Lefant N3 only registering the option to setup as gainsboroughlibery_entrance_lock device type

image


Lefant M1 (via Tuya Smart app)

Tuya platform "debug device > data points":

{"1":"Switch","2":"Pause / Resume","3":"Recharge","4":"Working Mode","5":"State","6":"Cleaning time","7":"Sweeping area","8":"Electricity","9":"Suction","10":"Water quantity","11":"Looking for machines","12":"Cleaning direction","13":"Reset Map","14":"Path transfer","15":"Instruction transmission","16":"Request data","27":"Breakpoint continuous scanning","28":"Fault Alarm","32":"Timing","45":"Auto Boost","101":"禁区信息获取","102":"划区信息获取","103":"指哪扫哪获取","104":"禁区,划区,指哪扫哪状态获取","105":"地图比例_Android","106":"地图比例_IOS","107":"设备log显示","108":"退出划区清扫","109":"退出指哪扫哪","110":"获取设备信息","111":"获取嵌入式日志","112":"地图保存开关","120":"音量调节","121":"死机标志位","122":"地图保存标志位","123":"勿扰设置","124":"预约清扫","125":"在桩标志","126":"地图保存结果","150":"预留0","151":"预留1","152":"预留2","153":"预留3","154":"预留4"}

Tuya platform "API Explorer > Query Things Data Model"

{
  "result": {
    "model": "{\"modelId\":\"000004x6kz\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"switch_go\",\"description\":\"清扫启动、清扫停止\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"清扫开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":2,\"accessMode\":\"rw\",\"code\":\"pause\",\"description\":\"暂停有效、暂停无效\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"暂停/继续\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"switch_charge\",\"description\":\"回充启动、回充停止\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"回充开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":4,\"accessMode\":\"rw\",\"code\":\"mode\",\"description\":\"smart - 自动清扫模式/全屋清扫模式 \\nchargego - 自动回充模式\\nzone - 划区清扫模式/矩形清扫模式\\npose - 指哪扫哪模式/定点清扫模式\\npart - 局部清扫模式\\nfastmapping - 快速建图\\nCleanModeSectorbased - 分区清扫\",\"extensions\":{\"attribute\":\"704\"},\"name\":\"工作模式\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\",\"fastmapping\",\"CleanModeSectorbased\"]}},{\"abilityId\":5,\"accessMode\":\"ro\",\"code\":\"status\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nstandby - 待机中\\nsmart - 自动清扫中 \\nzone_clean - 划区清扫中\\npart_clean - 局部清扫中\\ncleaning - 清扫中(备选) \\npaused - 已暂停\\ngoto_pos - 前往目标点中\\npos_arrived - 目标点已到达 \\npos_unarrive - 目标点不可达 \\ngoto_charge - 寻找充电座中 \\ncharging - 充电中\\ncharge_done - 充电完成 \\nsleep - 休眠\\nrelocating - 定位中\\nrelocating_reharge - 回充定位中\\nrecharing_paused - 回充暂停中\\nfastmaping - 快速建图中\\nfastmaping_paused - 快速建图暂停中\\n\",\"extensions\":{\"attribute\":\"706\"},\"name\":\"当前状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"standby\",\"smart\",\"zone_clean\",\"part_clean\",\"cleaning\",\"paused\",\"goto_pos\",\"pos_arrived\",\"pos_unarrive\",\"goto_charge\",\"charging\",\"charge_done\",\"sleep\",\"relocating\",\"relocating_recharge\",\"recharing_paused\",\"fastmaping\",\"fastmaping_paused\"]}},{\"abilityId\":6,\"accessMode\":\"ro\",\"code\":\"clean_time\",\"description\":\"默认区间为0min—9999分钟(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9min\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫时间\",\"typeSpec\":{\"type\":\"value\",\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"min\"}},{\"abilityId\":7,\"accessMode\":\"ro\",\"code\":\"clean_area\",\"description\":\"默认区间为0㎡—9999㎡(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9㎡\\n\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫面积\",\"typeSpec\":{\"type\":\"value\",\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"㎡\"}},{\"abilityId\":8,\"accessMode\":\"ro\",\"code\":\"residual_electricity\",\"description\":\"默认区间为0%—100%(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9%\\n\",\"extensions\":{\"attribute\":\"194\"},\"name\":\"剩余电量\",\"typeSpec\":{\"type\":\"value\",\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"%\"}},{\"abilityId\":9,\"accessMode\":\"rw\",\"code\":\"suction\",\"description\":\"默认值(可修改、删除、增加):\\nstrong - 强劲\\nnormal - 正常\\ngentle - 安静\\nclosed - 关闭\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"吸力选择\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"closed\",\"gentle\",\"normal\",\"strong\"]}},{\"abilityId\":10,\"accessMode\":\"rw\",\"code\":\"cistern\",\"description\":\"默认值(可修改、删除、增加):\\nclosed:关闭\\nlow - 低\\nmiddle - 中\\nhigh - 高\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"水量选择\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"closed\",\"low\",\"middle\",\"high\"]}},{\"abilityId\":11,\"accessMode\":\"rw\",\"code\":\"seek\",\"description\":\"\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"寻找机器\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":12,\"accessMode\":\"rw\",\"code\":\"direction_control\",\"description\":\"默认值(不可修改、删除、增加),按键按下下发对应的方向值,松手下发停\",\"extensions\":{\"iconName\":\"icon-dp_compass\",\"attribute\":\"224\"},\"name\":\"清扫方向\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"]}},{\"abilityId\":13,\"accessMode\":\"rw\",\"code\":\"map_reset\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_loop\",\"attribute\":\"128\"},\"name\":\"重置地图\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":14,\"accessMode\":\"rw\",\"code\":\"path_data\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"路径传输\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":15,\"accessMode\":\"rw\",\"code\":\"command_trans\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"指令传输\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":16,\"accessMode\":\"rw\",\"code\":\"request\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"请求数据\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"get_map\",\"get_path\",\"get_both\"]}},{\"abilityId\":27,\"accessMode\":\"rw\",\"code\":\"break_clean\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_wash\",\"attribute\":\"1152\"},\"name\":\"断点续扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":28,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nedge_sweep_fault - 边刷故障\\nmiddle_sweep_fault - 滚刷故障\\nleft_wheel_fault - 左轮故障\\nright_wheel_fault - 右轮故障\\ngarbage_box_fault - 尘盒故障\\nland_check_fault - 地检故障\\ncollision_fault - 碰撞传感器故障\\n\\n可在后面增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加故障中状态,则为in_trouble\",\"extensions\":{\"scope\":\"fault\",\"attribute\":\"704\"},\"name\":\"故障告警\",\"typeSpec\":{\"type\":\"bitmap\",\"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\",\"25\",\"26\",\"27\",\"28\",\"29\"],\"maxlen\":30}},{\"abilityId\":32,\"accessMode\":\"rw\",\"code\":\"device_timer\",\"description\":\"相关数据协议及逻辑可参看协议文件\",\"extensions\":{\"attribute\":\"224\"},\"name\":\"定时\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":45,\"accessMode\":\"rw\",\"code\":\"auto_boost\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_up\"},\"name\":\"地毯增压\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":101,\"accessMode\":\"rw\",\"code\":\"forbidden_zone\",\"description\":\"\",\"name\":\"禁区信息获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":102,\"accessMode\":\"rw\",\"code\":\"clean_zone\",\"description\":\"\",\"name\":\"划区信息获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":103,\"accessMode\":\"rw\",\"code\":\"pos_clean\",\"description\":\"\",\"name\":\"指哪扫哪获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":104,\"accessMode\":\"rw\",\"code\":\"all_zone\",\"description\":\"\",\"name\":\"禁区,划区,指哪扫哪状态获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":105,\"accessMode\":\"rw\",\"code\":\"map_zoom_android\",\"description\":\"\",\"name\":\"地图比例_Android\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":106,\"accessMode\":\"rw\",\"code\":\"map_zoom_ios\",\"description\":\"\",\"name\":\"地图比例_IOS\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":107,\"accessMode\":\"rw\",\"code\":\"dev_log_show\",\"description\":\"\",\"name\":\"设备log显示\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":108,\"accessMode\":\"rw\",\"code\":\"clean_zone_back\",\"description\":\"\",\"name\":\"退出划区清扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":109,\"accessMode\":\"rw\",\"code\":\"pos_clean_back\",\"description\":\"\",\"name\":\"退出指哪扫哪\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":110,\"accessMode\":\"rw\",\"code\":\"get_device_info\",\"description\":\"\",\"name\":\"获取设备信息\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":111,\"accessMode\":\"rw\",\"code\":\"get_robot_log\",\"description\":\"\",\"name\":\"获取嵌入式日志\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":112,\"accessMode\":\"rw\",\"code\":\"switch_save_map\",\"description\":\"\",\"name\":\"地图保存开关\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":120,\"accessMode\":\"rw\",\"code\":\"voice_check\",\"description\":\"\",\"name\":\"音量调节\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":121,\"accessMode\":\"rw\",\"code\":\"robot_reboot\",\"description\":\"\",\"name\":\"死机标志位\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":122,\"accessMode\":\"rw\",\"code\":\"save_mapping\",\"description\":\"\",\"name\":\"地图保存标志位\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":123,\"accessMode\":\"rw\",\"code\":\"disturb_set\",\"description\":\"\",\"name\":\"勿扰设置\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":124,\"accessMode\":\"rw\",\"code\":\"appointment_clean\",\"description\":\"\",\"name\":\"预约清扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":125,\"accessMode\":\"rw\",\"code\":\"is_charging\",\"description\":\"\",\"name\":\"在桩标志\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":126,\"accessMode\":\"rw\",\"code\":\"save_map_result\",\"description\":\"\",\"name\":\"地图保存结果\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":150,\"accessMode\":\"rw\",\"code\":\"reserved0\",\"description\":\"\",\"name\":\"预留0\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":151,\"accessMode\":\"rw\",\"code\":\"reserved1\",\"description\":\"\",\"name\":\"预留1\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":152,\"accessMode\":\"rw\",\"code\":\"reserved2\",\"description\":\"\",\"name\":\"预留2\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":153,\"accessMode\":\"rw\",\"code\":\"reserved3\",\"description\":\"\",\"name\":\"预留3\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":154,\"accessMode\":\"rw\",\"code\":\"reserved4\",\"description\":\"\",\"name\":\"预留4\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}}]}]}"
  },
  "success": true,
  "t": 1721304292759,
  "tid": "f0a155f744fd11efb20dc6731f22cc33"
}
{
  "modelId": "000004x6kz",
  "services": [
    {
      "actions": [],
      "code": "",
      "description": "",
      "events": [],
      "name": "默认服务",
      "properties": [
        {
          "abilityId": 1,
          "accessMode": "rw",
          "code": "switch_go",
          "description": "清扫启动、清扫停止",
          "extensions": {
            "attribute": "672"
          },
          "name": "清扫开关",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 2,
          "accessMode": "rw",
          "code": "pause",
          "description": "暂停有效、暂停无效\n",
          "extensions": {
            "attribute": "672"
          },
          "name": "暂停/继续",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 3,
          "accessMode": "rw",
          "code": "switch_charge",
          "description": "回充启动、回充停止\n",
          "extensions": {
            "attribute": "672"
          },
          "name": "回充开关",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 4,
          "accessMode": "rw",
          "code": "mode",
          "description": "smart - 自动清扫模式/全屋清扫模式 \nchargego - 自动回充模式\nzone - 划区清扫模式/矩形清扫模式\npose - 指哪扫哪模式/定点清扫模式\npart - 局部清扫模式\nfastmapping - 快速建图\nCleanModeSectorbased - 分区清扫",
          "extensions": {
            "attribute": "704"
          },
          "name": "工作模式",
          "typeSpec": {
            "type": "enum",
            "range": [
              "smart",
              "chargego",
              "zone",
              "pose",
              "fastmapping",
              "CleanModeSectorbased"
            ]
          }
        },
        {
          "abilityId": 5,
          "accessMode": "ro",
          "code": "status",
          "description": "默认值(不可修改删除,否则影响控制面板逻辑):\nstandby - 待机中\nsmart - 自动清扫中 \nzone_clean - 划区清扫中\npart_clean - 局部清扫中\ncleaning - 清扫中(备选) \npaused - 已暂停\ngoto_pos - 前往目标点中\npos_arrived - 目标点已到达 \npos_unarrive - 目标点不可达 \ngoto_charge - 寻找充电座中 \ncharging - 充电中\ncharge_done - 充电完成 \nsleep - 休眠\nrelocating - 定位中\nrelocating_reharge - 回充定位中\nrecharing_paused - 回充暂停中\nfastmaping - 快速建图中\nfastmaping_paused - 快速建图暂停中\n",
          "extensions": {
            "attribute": "706"
          },
          "name": "当前状态",
          "typeSpec": {
            "type": "enum",
            "range": [
              "standby",
              "smart",
              "zone_clean",
              "part_clean",
              "cleaning",
              "paused",
              "goto_pos",
              "pos_arrived",
              "pos_unarrive",
              "goto_charge",
              "charging",
              "charge_done",
              "sleep",
              "relocating",
              "relocating_recharge",
              "recharing_paused",
              "fastmaping",
              "fastmaping_paused"
            ]
          }
        },
        {
          "abilityId": 6,
          "accessMode": "ro",
          "code": "clean_time",
          "description": "默认区间为0min—9999分钟(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9min",
          "extensions": {
            "attribute": "192"
          },
          "name": "清扫时间",
          "typeSpec": {
            "type": "value",
            "max": 9999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "min"
          }
        },
        {
          "abilityId": 7,
          "accessMode": "ro",
          "code": "clean_area",
          "description": "默认区间为0㎡—9999㎡(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9㎡\n",
          "extensions": {
            "attribute": "192"
          },
          "name": "清扫面积",
          "typeSpec": {
            "type": "value",
            "max": 9999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "㎡"
          }
        },
        {
          "abilityId": 8,
          "accessMode": "ro",
          "code": "residual_electricity",
          "description": "默认区间为0%—100%(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9%\n",
          "extensions": {
            "attribute": "194"
          },
          "name": "剩余电量",
          "typeSpec": {
            "type": "value",
            "max": 100,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "%"
          }
        },
        {
          "abilityId": 9,
          "accessMode": "rw",
          "code": "suction",
          "description": "默认值(可修改、删除、增加):\nstrong - 强劲\nnormal - 正常\ngentle - 安静\nclosed - 关闭\n\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto",
          "extensions": {
            "attribute": "128"
          },
          "name": "吸力选择",
          "typeSpec": {
            "type": "enum",
            "range": [
              "closed",
              "gentle",
              "normal",
              "strong"
            ]
          }
        },
        {
          "abilityId": 10,
          "accessMode": "rw",
          "code": "cistern",
          "description": "默认值(可修改、删除、增加):\nclosed:关闭\nlow - 低\nmiddle - 中\nhigh - 高\n\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto",
          "extensions": {
            "attribute": "128"
          },
          "name": "水量选择",
          "typeSpec": {
            "type": "enum",
            "range": [
              "closed",
              "low",
              "middle",
              "high"
            ]
          }
        },
        {
          "abilityId": 11,
          "accessMode": "rw",
          "code": "seek",
          "description": "",
          "extensions": {
            "attribute": "128"
          },
          "name": "寻找机器",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 12,
          "accessMode": "rw",
          "code": "direction_control",
          "description": "默认值(不可修改、删除、增加),按键按下下发对应的方向值,松手下发停",
          "extensions": {
            "iconName": "icon-dp_compass",
            "attribute": "224"
          },
          "name": "清扫方向",
          "typeSpec": {
            "type": "enum",
            "range": [
              "forward",
              "backward",
              "turn_left",
              "turn_right",
              "stop"
            ]
          }
        },
        {
          "abilityId": 13,
          "accessMode": "rw",
          "code": "map_reset",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_loop",
            "attribute": "128"
          },
          "name": "重置地图",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 14,
          "accessMode": "rw",
          "code": "path_data",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "路径传输",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 15,
          "accessMode": "rw",
          "code": "command_trans",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "指令传输",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 16,
          "accessMode": "rw",
          "code": "request",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "请求数据",
          "typeSpec": {
            "type": "enum",
            "range": [
              "get_map",
              "get_path",
              "get_both"
            ]
          }
        },
        {
          "abilityId": 27,
          "accessMode": "rw",
          "code": "break_clean",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_wash",
            "attribute": "1152"
          },
          "name": "断点续扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 28,
          "accessMode": "ro",
          "code": "fault",
          "description": "默认值(不可修改删除,否则影响控制面板逻辑):\nedge_sweep_fault - 边刷故障\nmiddle_sweep_fault - 滚刷故障\nleft_wheel_fault - 左轮故障\nright_wheel_fault - 右轮故障\ngarbage_box_fault - 尘盒故障\nland_check_fault - 地检故障\ncollision_fault - 碰撞传感器故障\n\n可在后面增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加故障中状态,则为in_trouble",
          "extensions": {
            "scope": "fault",
            "attribute": "704"
          },
          "name": "故障告警",
          "typeSpec": {
            "type": "bitmap",
            "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",
              "25",
              "26",
              "27",
              "28",
              "29"
            ],
            "maxlen": 30
          }
        },
        {
          "abilityId": 32,
          "accessMode": "rw",
          "code": "device_timer",
          "description": "相关数据协议及逻辑可参看协议文件",
          "extensions": {
            "attribute": "224"
          },
          "name": "定时",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 45,
          "accessMode": "rw",
          "code": "auto_boost",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_up"
          },
          "name": "地毯增压",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 101,
          "accessMode": "rw",
          "code": "forbidden_zone",
          "description": "",
          "name": "禁区信息获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 102,
          "accessMode": "rw",
          "code": "clean_zone",
          "description": "",
          "name": "划区信息获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 103,
          "accessMode": "rw",
          "code": "pos_clean",
          "description": "",
          "name": "指哪扫哪获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 104,
          "accessMode": "rw",
          "code": "all_zone",
          "description": "",
          "name": "禁区,划区,指哪扫哪状态获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 105,
          "accessMode": "rw",
          "code": "map_zoom_android",
          "description": "",
          "name": "地图比例_Android",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 106,
          "accessMode": "rw",
          "code": "map_zoom_ios",
          "description": "",
          "name": "地图比例_IOS",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 107,
          "accessMode": "rw",
          "code": "dev_log_show",
          "description": "",
          "name": "设备log显示",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 108,
          "accessMode": "rw",
          "code": "clean_zone_back",
          "description": "",
          "name": "退出划区清扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 109,
          "accessMode": "rw",
          "code": "pos_clean_back",
          "description": "",
          "name": "退出指哪扫哪",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 110,
          "accessMode": "rw",
          "code": "get_device_info",
          "description": "",
          "name": "获取设备信息",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 111,
          "accessMode": "rw",
          "code": "get_robot_log",
          "description": "",
          "name": "获取嵌入式日志",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 112,
          "accessMode": "rw",
          "code": "switch_save_map",
          "description": "",
          "name": "地图保存开关",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 120,
          "accessMode": "rw",
          "code": "voice_check",
          "description": "",
          "name": "音量调节",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 121,
          "accessMode": "rw",
          "code": "robot_reboot",
          "description": "",
          "name": "死机标志位",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 122,
          "accessMode": "rw",
          "code": "save_mapping",
          "description": "",
          "name": "地图保存标志位",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 123,
          "accessMode": "rw",
          "code": "disturb_set",
          "description": "",
          "name": "勿扰设置",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 124,
          "accessMode": "rw",
          "code": "appointment_clean",
          "description": "",
          "name": "预约清扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 125,
          "accessMode": "rw",
          "code": "is_charging",
          "description": "",
          "name": "在桩标志",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 126,
          "accessMode": "rw",
          "code": "save_map_result",
          "description": "",
          "name": "地图保存结果",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 150,
          "accessMode": "rw",
          "code": "reserved0",
          "description": "",
          "name": "预留0",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 151,
          "accessMode": "rw",
          "code": "reserved1",
          "description": "",
          "name": "预留1",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 152,
          "accessMode": "rw",
          "code": "reserved2",
          "description": "",
          "name": "预留2",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 153,
          "accessMode": "rw",
          "code": "reserved3",
          "description": "",
          "name": "预留3",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 154,
          "accessMode": "rw",
          "code": "reserved4",
          "description": "",
          "name": "预留4",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        }
      ]
    }
  ]
}

Lefant N3 (via Tuya Smart app)

Tuya platform "debug device > data points":

{"1":"Switch","2":"Pause / Resume","3":"Recharge","4":"Working Mode","5":"State","6":"Cleaning time","7":"Sweeping area","8":"Electricity","9":"Suction","10":"Water quantity","11":"Looking for machines","12":"Cleaning direction","13":"Reset Map","14":"Path transfer","15":"Instruction transmission","16":"Request data","27":"Breakpoint continuous scanning","28":"Fault Alarm","32":"Timing","33":"Disturb Time_ Set","45":"Auto Boost","101":"禁区信息获取","102":"划区信息获取","103":"指哪扫哪获取","104":"禁区,划区,指哪扫哪状态获取","105":"地图比例_Android","106":"地图比例_IOS","107":"设备log显示","108":"退出划区清扫","109":"退出指哪扫哪","110":"获取设备信息","111":"获取嵌入式日志","112":"地图保存开关","120":"音量调节","121":"死机标志位","122":"地图保存标志位","123":"勿扰设置","124":"预约清扫","125":"在桩标志","126":"地图保存结果","150":"个性化清扫","151":"清扫定制开关","152":"清扫顺序","153":"设备判断存图","154":"定时任务","155":"设备mac地址","156":"预留6","157":"预留7","158":"预留8","159":"预留9","160":"预留10","161":"预留11","162":"预留12","163":"预留13","164":"预留14","165":"预留15","166":"预留16","167":"预留17","168":"预留18","169":"预留19","170":"预留20","171":"预留21","172":"预留22","173":"预留23","174":"预留24","175":"预留25","176":"预留26","177":"预留27","178":"预留28","179":"预留29","180":"预留30","181":"预留31","182":"预留32","183":"预留33","184":"预留34","185":"预留35","186":"预留36","187":"预留37","188":"预留38","189":"预留39","190":"预留40"}

Tuya platform "API Explorer > Query Things Data Model"

{
  "result": {
    "model": "{\"modelId\":\"dwzcjg\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"switch_go\",\"description\":\"清扫启动、清扫停止\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"清扫开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":2,\"accessMode\":\"rw\",\"code\":\"pause\",\"description\":\"暂停有效、暂停无效\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"暂停/继续\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"switch_charge\",\"description\":\"回充启动、回充停止\\n\",\"extensions\":{\"attribute\":\"672\"},\"name\":\"回充开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":4,\"accessMode\":\"rw\",\"code\":\"mode\",\"description\":\"smart - 自动清扫模式/全屋清扫模式 \\nchargego - 自动回充模式\\nzone - 划区清扫模式/矩形清扫模式\\npose - 指哪扫哪模式/定点清扫模式\\npart - 局部清扫模式\\nfastmapping - 快速建图\\nCleanModeSectorbased - 分区清扫\",\"extensions\":{\"attribute\":\"704\"},\"name\":\"工作模式\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"smart\",\"chargego\",\"zone\",\"pose\",\"fastmapping\",\"CleanModeSectorbased\"]}},{\"abilityId\":5,\"accessMode\":\"ro\",\"code\":\"status\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nstandby - 待机中\\nsmart - 自动清扫中 \\nzone_clean - 划区清扫中\\npart_clean - 局部清扫中\\ncleaning - 清扫中(备选) \\npaused - 已暂停\\ngoto_pos - 前往目标点中\\npos_arrived - 目标点已到达 \\npos_unarrive - 目标点不可达 \\ngoto_charge - 寻找充电座中 \\ncharging - 充电中\\ncharge_done - 充电完成 \\nsleep - 休眠\\nrelocating - 定位中\\nrelocating_reharge - 回充定位中\\nrecharing_paused - 回充暂停中\\nfastmaping - 快速建图中\\nfastmaping_paused - 快速建图暂停中\\n\",\"extensions\":{\"attribute\":\"706\"},\"name\":\"当前状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"standby\",\"smart\",\"zone_clean\",\"part_clean\",\"cleaning\",\"paused\",\"goto_pos\",\"pos_arrived\",\"pos_unarrive\",\"goto_charge\",\"charging\",\"charge_done\",\"sleep\",\"relocating\",\"relocating_recharge\",\"recharing_paused\",\"fastmaping\",\"fastmaping_paused\"]}},{\"abilityId\":6,\"accessMode\":\"ro\",\"code\":\"clean_time\",\"description\":\"默认区间为0min—9999分钟(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9min\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫时间\",\"typeSpec\":{\"type\":\"value\",\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"min\"}},{\"abilityId\":7,\"accessMode\":\"ro\",\"code\":\"clean_area\",\"description\":\"默认区间为0㎡—9999㎡(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9㎡\\n\",\"extensions\":{\"attribute\":\"192\"},\"name\":\"清扫面积\",\"typeSpec\":{\"type\":\"value\",\"max\":9999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"㎡\"}},{\"abilityId\":8,\"accessMode\":\"ro\",\"code\":\"residual_electricity\",\"description\":\"默认区间为0%—100%(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9%\\n\",\"extensions\":{\"attribute\":\"194\"},\"name\":\"剩余电量\",\"typeSpec\":{\"type\":\"value\",\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"%\"}},{\"abilityId\":9,\"accessMode\":\"rw\",\"code\":\"suction\",\"description\":\"默认值(可修改、删除、增加):\\nsuperstrong-超强\\nstrong - 强劲\\nnormal - 正常\\ngentle - 安静\\nclosed - 关闭\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"吸力选择\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"closed\",\"gentle\",\"normal\",\"strong\",\"superstrong\"]}},{\"abilityId\":10,\"accessMode\":\"rw\",\"code\":\"cistern\",\"description\":\"默认值(可修改、删除、增加):\\nclosed-关\\nlow - 低\\nmiddle - 中\\nhigh - 高\\nclosed - 关闭\\n\\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"水量选择\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"closed\",\"low\",\"middle\",\"high\"]}},{\"abilityId\":11,\"accessMode\":\"rw\",\"code\":\"seek\",\"description\":\"\",\"extensions\":{\"attribute\":\"128\"},\"name\":\"寻找机器\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":12,\"accessMode\":\"rw\",\"code\":\"direction_control\",\"description\":\"默认值(不可修改、删除、增加),按键按下下发对应的方向值,松手下发停\",\"extensions\":{\"iconName\":\"icon-dp_compass\",\"attribute\":\"224\"},\"name\":\"清扫方向\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"forward\",\"backward\",\"turn_left\",\"turn_right\",\"stop\"]}},{\"abilityId\":13,\"accessMode\":\"rw\",\"code\":\"map_reset\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_loop\",\"attribute\":\"128\"},\"name\":\"重置地图\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":14,\"accessMode\":\"rw\",\"code\":\"path_data\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"路径传输\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":15,\"accessMode\":\"rw\",\"code\":\"command_trans\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"指令传输\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":16,\"accessMode\":\"rw\",\"code\":\"request\",\"description\":\"相关数据协议及逻辑可参看协议文件\\n\",\"extensions\":{\"attribute\":\"736\"},\"name\":\"请求数据\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"get_map\",\"get_path\",\"get_both\"]}},{\"abilityId\":27,\"accessMode\":\"rw\",\"code\":\"break_clean\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_wash\",\"attribute\":\"1152\"},\"name\":\"断点续扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":28,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"默认值(不可修改删除,否则影响控制面板逻辑):\\nedge_sweep_fault - 边刷故障\\nmiddle_sweep_fault - 滚刷故障\\nleft_wheel_fault - 左轮故障\\nright_wheel_fault - 右轮故障\\ngarbage_box_fault - 尘盒故障\\nland_check_fault - 地检故障\\ncollision_fault - 碰撞传感器故障\\n\\n可在后面增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加故障中状态,则为in_trouble\",\"extensions\":{\"scope\":\"fault\",\"attribute\":\"704\"},\"name\":\"故障告警\",\"typeSpec\":{\"type\":\"bitmap\",\"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\",\"25\",\"26\",\"27\",\"28\",\"29\"],\"maxlen\":30}},{\"abilityId\":32,\"accessMode\":\"rw\",\"code\":\"device_timer\",\"description\":\"相关数据协议及逻辑可参看协议文件\",\"extensions\":{\"attribute\":\"224\"},\"name\":\"定时\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":33,\"accessMode\":\"rw\",\"code\":\"disturb_time_set\",\"description\":\"相关数据协议及逻辑可参看开发包中激光扫地机地图协议文件\",\"extensions\":{\"iconName\":\"icon-dp_time3\",\"attribute\":\"224\"},\"name\":\"勿扰时间设置\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":45,\"accessMode\":\"rw\",\"code\":\"auto_boost\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_up\"},\"name\":\"地毯增压\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":101,\"accessMode\":\"rw\",\"code\":\"forbidden_zone\",\"description\":\"\",\"name\":\"禁区信息获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":102,\"accessMode\":\"rw\",\"code\":\"clean_zone\",\"description\":\"\",\"name\":\"划区信息获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":103,\"accessMode\":\"rw\",\"code\":\"pos_clean\",\"description\":\"\",\"name\":\"指哪扫哪获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":104,\"accessMode\":\"rw\",\"code\":\"all_zone\",\"description\":\"\",\"name\":\"禁区,划区,指哪扫哪状态获取\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":105,\"accessMode\":\"rw\",\"code\":\"map_zoom_android\",\"description\":\"\",\"name\":\"地图比例_Android\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":106,\"accessMode\":\"rw\",\"code\":\"map_zoom_ios\",\"description\":\"\",\"name\":\"地图比例_IOS\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":107,\"accessMode\":\"rw\",\"code\":\"dev_log_show\",\"description\":\"\",\"name\":\"设备log显示\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":108,\"accessMode\":\"rw\",\"code\":\"clean_zone_back\",\"description\":\"\",\"name\":\"退出划区清扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":109,\"accessMode\":\"rw\",\"code\":\"pos_clean_back\",\"description\":\"\",\"name\":\"退出指哪扫哪\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":110,\"accessMode\":\"rw\",\"code\":\"get_device_info\",\"description\":\"\",\"name\":\"获取设备信息\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":111,\"accessMode\":\"rw\",\"code\":\"get_robot_log\",\"description\":\"\",\"name\":\"获取嵌入式日志\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":112,\"accessMode\":\"rw\",\"code\":\"switch_save_map\",\"description\":\"\",\"name\":\"地图保存开关\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":120,\"accessMode\":\"rw\",\"code\":\"voice_check\",\"description\":\"\",\"name\":\"音量调节\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":121,\"accessMode\":\"rw\",\"code\":\"robot_reboot\",\"description\":\"\",\"name\":\"死机标志位\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":122,\"accessMode\":\"rw\",\"code\":\"save_mapping\",\"description\":\"有历史地图1 没有历史地图0\",\"name\":\"地图保存标志位\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":123,\"accessMode\":\"rw\",\"code\":\"disturb_set\",\"description\":\"\",\"name\":\"勿扰设置\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":124,\"accessMode\":\"rw\",\"code\":\"appointment_clean\",\"description\":\"\",\"name\":\"预约清扫\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":125,\"accessMode\":\"rw\",\"code\":\"is_charging\",\"description\":\"在充电桩上1 \\n不在充电桩0\",\"name\":\"在桩标志\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":126,\"accessMode\":\"rw\",\"code\":\"save_map_result\",\"description\":\"地图是否保存,保存失败要弹窗为1,成功则为0\",\"name\":\"地图保存结果\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":150,\"accessMode\":\"rw\",\"code\":\"personalized_cleaning\",\"description\":\"\",\"name\":\"个性化清扫\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":151,\"accessMode\":\"rw\",\"code\":\"cleaning_custom_switch\",\"description\":\"\",\"name\":\"清扫定制开关\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":152,\"accessMode\":\"rw\",\"code\":\"cleaning_sequence\",\"description\":\"\",\"name\":\"清扫顺序\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":153,\"accessMode\":\"rw\",\"code\":\"device_judgment_savemap\",\"description\":\"\",\"name\":\"设备判断存图\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":154,\"accessMode\":\"rw\",\"code\":\"time_taask\",\"description\":\"\",\"name\":\"定时任务\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":155,\"accessMode\":\"rw\",\"code\":\"device_mac_address\",\"description\":\"\",\"name\":\"设备mac地址\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":156,\"accessMode\":\"rw\",\"code\":\"reserved6\",\"description\":\"\",\"name\":\"预留6\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":157,\"accessMode\":\"rw\",\"code\":\"reserved7\",\"description\":\"\",\"name\":\"预留7\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":158,\"accessMode\":\"rw\",\"code\":\"reserved8\",\"description\":\"\",\"name\":\"预留8\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":159,\"accessMode\":\"rw\",\"code\":\"reserved9\",\"description\":\"\",\"name\":\"预留9\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":160,\"accessMode\":\"rw\",\"code\":\"reserved10\",\"description\":\"\",\"name\":\"预留10\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":161,\"accessMode\":\"rw\",\"code\":\"reserved11\",\"description\":\"\",\"name\":\"预留11\",\"typeSpec\":{\"type\":\"value\",\"max\":999999999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":162,\"accessMode\":\"rw\",\"code\":\"reserved12\",\"description\":\"\",\"name\":\"预留12\",\"typeSpec\":{\"type\":\"value\",\"max\":999999999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":163,\"accessMode\":\"rw\",\"code\":\"reserved13\",\"description\":\"\",\"name\":\"预留13\",\"typeSpec\":{\"type\":\"value\",\"max\":999999999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":164,\"accessMode\":\"rw\",\"code\":\"reserved14\",\"description\":\"\",\"name\":\"预留14\",\"typeSpec\":{\"type\":\"value\",\"max\":999999999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":165,\"accessMode\":\"rw\",\"code\":\"reserved15\",\"description\":\"\",\"name\":\"预留15\",\"typeSpec\":{\"type\":\"value\",\"max\":999999999,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":166,\"accessMode\":\"rw\",\"code\":\"reserved16\",\"description\":\"\",\"name\":\"预留16\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":167,\"accessMode\":\"rw\",\"code\":\"reserved17\",\"description\":\"\",\"name\":\"预留17\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":168,\"accessMode\":\"rw\",\"code\":\"reserved18\",\"description\":\"\",\"name\":\"预留18\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":169,\"accessMode\":\"rw\",\"code\":\"reserved19\",\"description\":\"\",\"name\":\"预留19\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":170,\"accessMode\":\"rw\",\"code\":\"reserved20\",\"description\":\"\",\"name\":\"预留20\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}},{\"abilityId\":171,\"accessMode\":\"rw\",\"code\":\"reserved21\",\"description\":\"\",\"name\":\"预留21\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":172,\"accessMode\":\"rw\",\"code\":\"reserved22\",\"description\":\"\",\"name\":\"预留22\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":173,\"accessMode\":\"rw\",\"code\":\"reserved23\",\"description\":\"\",\"name\":\"预留23\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":174,\"accessMode\":\"rw\",\"code\":\"reserved24\",\"description\":\"\",\"name\":\"预留24\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":175,\"accessMode\":\"rw\",\"code\":\"reserved25\",\"description\":\"\",\"name\":\"预留25\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":176,\"accessMode\":\"rw\",\"code\":\"reserved26\",\"description\":\"\",\"name\":\"预留26\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":177,\"accessMode\":\"rw\",\"code\":\"reserved27\",\"description\":\"\",\"name\":\"预留27\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":178,\"accessMode\":\"rw\",\"code\":\"reserved28\",\"description\":\"\",\"name\":\"预留28\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":179,\"accessMode\":\"rw\",\"code\":\"reserved29\",\"description\":\"\",\"name\":\"预留29\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":180,\"accessMode\":\"rw\",\"code\":\"reserved30\",\"description\":\"\",\"name\":\"预留30\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":181,\"accessMode\":\"rw\",\"code\":\"reserved31\",\"description\":\"\",\"name\":\"预留31\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":182,\"accessMode\":\"rw\",\"code\":\"reserved32\",\"description\":\"\",\"name\":\"预留32\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":183,\"accessMode\":\"rw\",\"code\":\"reserved33\",\"description\":\"\",\"name\":\"预留33\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":184,\"accessMode\":\"rw\",\"code\":\"reserved34\",\"description\":\"\",\"name\":\"预留34\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":185,\"accessMode\":\"rw\",\"code\":\"reserved35\",\"description\":\"\",\"name\":\"预留35\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":186,\"accessMode\":\"rw\",\"code\":\"reserved36\",\"description\":\"\",\"name\":\"预留36\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":187,\"accessMode\":\"rw\",\"code\":\"reserved37\",\"description\":\"\",\"name\":\"预留37\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":188,\"accessMode\":\"rw\",\"code\":\"reserved38\",\"description\":\"\",\"name\":\"预留38\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":189,\"accessMode\":\"rw\",\"code\":\"reserved39\",\"description\":\"\",\"name\":\"预留39\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":190,\"accessMode\":\"rw\",\"code\":\"reserved40\",\"description\":\"\",\"name\":\"预留40\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}}]}]}"
  },
  "success": true,
  "t": 1721304334677,
  "tid": "09a7fc4f44fe11ef951b0ac953b99798"
}
{
  "modelId": "dwzcjg",
  "services": [
    {
      "actions": [],
      "code": "",
      "description": "",
      "events": [],
      "name": "默认服务",
      "properties": [
        {
          "abilityId": 1,
          "accessMode": "rw",
          "code": "switch_go",
          "description": "清扫启动、清扫停止",
          "extensions": {
            "attribute": "672"
          },
          "name": "清扫开关",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 2,
          "accessMode": "rw",
          "code": "pause",
          "description": "暂停有效、暂停无效\n",
          "extensions": {
            "attribute": "672"
          },
          "name": "暂停/继续",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 3,
          "accessMode": "rw",
          "code": "switch_charge",
          "description": "回充启动、回充停止\n",
          "extensions": {
            "attribute": "672"
          },
          "name": "回充开关",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 4,
          "accessMode": "rw",
          "code": "mode",
          "description": "smart - 自动清扫模式/全屋清扫模式 \nchargego - 自动回充模式\nzone - 划区清扫模式/矩形清扫模式\npose - 指哪扫哪模式/定点清扫模式\npart - 局部清扫模式\nfastmapping - 快速建图\nCleanModeSectorbased - 分区清扫",
          "extensions": {
            "attribute": "704"
          },
          "name": "工作模式",
          "typeSpec": {
            "type": "enum",
            "range": [
              "smart",
              "chargego",
              "zone",
              "pose",
              "fastmapping",
              "CleanModeSectorbased"
            ]
          }
        },
        {
          "abilityId": 5,
          "accessMode": "ro",
          "code": "status",
          "description": "默认值(不可修改删除,否则影响控制面板逻辑):\nstandby - 待机中\nsmart - 自动清扫中 \nzone_clean - 划区清扫中\npart_clean - 局部清扫中\ncleaning - 清扫中(备选) \npaused - 已暂停\ngoto_pos - 前往目标点中\npos_arrived - 目标点已到达 \npos_unarrive - 目标点不可达 \ngoto_charge - 寻找充电座中 \ncharging - 充电中\ncharge_done - 充电完成 \nsleep - 休眠\nrelocating - 定位中\nrelocating_reharge - 回充定位中\nrecharing_paused - 回充暂停中\nfastmaping - 快速建图中\nfastmaping_paused - 快速建图暂停中\n",
          "extensions": {
            "attribute": "706"
          },
          "name": "当前状态",
          "typeSpec": {
            "type": "enum",
            "range": [
              "standby",
              "smart",
              "zone_clean",
              "part_clean",
              "cleaning",
              "paused",
              "goto_pos",
              "pos_arrived",
              "pos_unarrive",
              "goto_charge",
              "charging",
              "charge_done",
              "sleep",
              "relocating",
              "relocating_recharge",
              "recharing_paused",
              "fastmaping",
              "fastmaping_paused"
            ]
          }
        },
        {
          "abilityId": 6,
          "accessMode": "ro",
          "code": "clean_time",
          "description": "默认区间为0min—9999分钟(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9min",
          "extensions": {
            "attribute": "192"
          },
          "name": "清扫时间",
          "typeSpec": {
            "type": "value",
            "max": 9999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "min"
          }
        },
        {
          "abilityId": 7,
          "accessMode": "ro",
          "code": "clean_area",
          "description": "默认区间为0㎡—9999㎡(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9㎡\n",
          "extensions": {
            "attribute": "192"
          },
          "name": "清扫面积",
          "typeSpec": {
            "type": "value",
            "max": 9999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "㎡"
          }
        },
        {
          "abilityId": 8,
          "accessMode": "ro",
          "code": "residual_electricity",
          "description": "默认区间为0%—100%(没有小数点),如果需要显示为小数点,可以修改倍数参数,例如需要支持一位小数点,则倍数参数为1,上报的数值会经过计算,保留一位小数,例如上报589,经过换算后为58.9%\n",
          "extensions": {
            "attribute": "194"
          },
          "name": "剩余电量",
          "typeSpec": {
            "type": "value",
            "max": 100,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": "%"
          }
        },
        {
          "abilityId": 9,
          "accessMode": "rw",
          "code": "suction",
          "description": "默认值(可修改、删除、增加):\nsuperstrong-超强\nstrong - 强劲\nnormal - 正常\ngentle - 安静\nclosed - 关闭\n\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto",
          "extensions": {
            "attribute": "128"
          },
          "name": "吸力选择",
          "typeSpec": {
            "type": "enum",
            "range": [
              "closed",
              "gentle",
              "normal",
              "strong",
              "superstrong"
            ]
          }
        },
        {
          "abilityId": 10,
          "accessMode": "rw",
          "code": "cistern",
          "description": "默认值(可修改、删除、增加):\nclosed-关\nlow - 低\nmiddle - 中\nhigh - 高\nclosed - 关闭\n\n选项排列与此处值的排列顺序一致,可调整排列顺序,可删减值,可增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加自动状态,则为auto",
          "extensions": {
            "attribute": "128"
          },
          "name": "水量选择",
          "typeSpec": {
            "type": "enum",
            "range": [
              "closed",
              "low",
              "middle",
              "high"
            ]
          }
        },
        {
          "abilityId": 11,
          "accessMode": "rw",
          "code": "seek",
          "description": "",
          "extensions": {
            "attribute": "128"
          },
          "name": "寻找机器",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 12,
          "accessMode": "rw",
          "code": "direction_control",
          "description": "默认值(不可修改、删除、增加),按键按下下发对应的方向值,松手下发停",
          "extensions": {
            "iconName": "icon-dp_compass",
            "attribute": "224"
          },
          "name": "清扫方向",
          "typeSpec": {
            "type": "enum",
            "range": [
              "forward",
              "backward",
              "turn_left",
              "turn_right",
              "stop"
            ]
          }
        },
        {
          "abilityId": 13,
          "accessMode": "rw",
          "code": "map_reset",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_loop",
            "attribute": "128"
          },
          "name": "重置地图",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 14,
          "accessMode": "rw",
          "code": "path_data",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "路径传输",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 15,
          "accessMode": "rw",
          "code": "command_trans",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "指令传输",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 16,
          "accessMode": "rw",
          "code": "request",
          "description": "相关数据协议及逻辑可参看协议文件\n",
          "extensions": {
            "attribute": "736"
          },
          "name": "请求数据",
          "typeSpec": {
            "type": "enum",
            "range": [
              "get_map",
              "get_path",
              "get_both"
            ]
          }
        },
        {
          "abilityId": 27,
          "accessMode": "rw",
          "code": "break_clean",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_wash",
            "attribute": "1152"
          },
          "name": "断点续扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 28,
          "accessMode": "ro",
          "code": "fault",
          "description": "默认值(不可修改删除,否则影响控制面板逻辑):\nedge_sweep_fault - 边刷故障\nmiddle_sweep_fault - 滚刷故障\nleft_wheel_fault - 左轮故障\nright_wheel_fault - 右轮故障\ngarbage_box_fault - 尘盒故障\nland_check_fault - 地检故障\ncollision_fault - 碰撞传感器故障\n\n可在后面增加其他状态值,状态值尽量是状态的英文小写单词,如需要增加故障中状态,则为in_trouble",
          "extensions": {
            "scope": "fault",
            "attribute": "704"
          },
          "name": "故障告警",
          "typeSpec": {
            "type": "bitmap",
            "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",
              "25",
              "26",
              "27",
              "28",
              "29"
            ],
            "maxlen": 30
          }
        },
        {
          "abilityId": 32,
          "accessMode": "rw",
          "code": "device_timer",
          "description": "相关数据协议及逻辑可参看协议文件",
          "extensions": {
            "attribute": "224"
          },
          "name": "定时",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 33,
          "accessMode": "rw",
          "code": "disturb_time_set",
          "description": "相关数据协议及逻辑可参看开发包中激光扫地机地图协议文件",
          "extensions": {
            "iconName": "icon-dp_time3",
            "attribute": "224"
          },
          "name": "勿扰时间设置",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 45,
          "accessMode": "rw",
          "code": "auto_boost",
          "description": "",
          "extensions": {
            "iconName": "icon-dp_up"
          },
          "name": "地毯增压",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 101,
          "accessMode": "rw",
          "code": "forbidden_zone",
          "description": "",
          "name": "禁区信息获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 102,
          "accessMode": "rw",
          "code": "clean_zone",
          "description": "",
          "name": "划区信息获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 103,
          "accessMode": "rw",
          "code": "pos_clean",
          "description": "",
          "name": "指哪扫哪获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 104,
          "accessMode": "rw",
          "code": "all_zone",
          "description": "",
          "name": "禁区,划区,指哪扫哪状态获取",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 105,
          "accessMode": "rw",
          "code": "map_zoom_android",
          "description": "",
          "name": "地图比例_Android",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 106,
          "accessMode": "rw",
          "code": "map_zoom_ios",
          "description": "",
          "name": "地图比例_IOS",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 107,
          "accessMode": "rw",
          "code": "dev_log_show",
          "description": "",
          "name": "设备log显示",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 108,
          "accessMode": "rw",
          "code": "clean_zone_back",
          "description": "",
          "name": "退出划区清扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 109,
          "accessMode": "rw",
          "code": "pos_clean_back",
          "description": "",
          "name": "退出指哪扫哪",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 110,
          "accessMode": "rw",
          "code": "get_device_info",
          "description": "",
          "name": "获取设备信息",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 111,
          "accessMode": "rw",
          "code": "get_robot_log",
          "description": "",
          "name": "获取嵌入式日志",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 112,
          "accessMode": "rw",
          "code": "switch_save_map",
          "description": "",
          "name": "地图保存开关",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 120,
          "accessMode": "rw",
          "code": "voice_check",
          "description": "",
          "name": "音量调节",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 121,
          "accessMode": "rw",
          "code": "robot_reboot",
          "description": "",
          "name": "死机标志位",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 122,
          "accessMode": "rw",
          "code": "save_mapping",
          "description": "有历史地图1 没有历史地图0",
          "name": "地图保存标志位",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 123,
          "accessMode": "rw",
          "code": "disturb_set",
          "description": "",
          "name": "勿扰设置",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 124,
          "accessMode": "rw",
          "code": "appointment_clean",
          "description": "",
          "name": "预约清扫",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 125,
          "accessMode": "rw",
          "code": "is_charging",
          "description": "在充电桩上1 \n不在充电桩0",
          "name": "在桩标志",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 126,
          "accessMode": "rw",
          "code": "save_map_result",
          "description": "地图是否保存,保存失败要弹窗为1,成功则为0",
          "name": "地图保存结果",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 150,
          "accessMode": "rw",
          "code": "personalized_cleaning",
          "description": "",
          "name": "个性化清扫",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 151,
          "accessMode": "rw",
          "code": "cleaning_custom_switch",
          "description": "",
          "name": "清扫定制开关",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 152,
          "accessMode": "rw",
          "code": "cleaning_sequence",
          "description": "",
          "name": "清扫顺序",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 153,
          "accessMode": "rw",
          "code": "device_judgment_savemap",
          "description": "",
          "name": "设备判断存图",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 154,
          "accessMode": "rw",
          "code": "time_taask",
          "description": "",
          "name": "定时任务",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 155,
          "accessMode": "rw",
          "code": "device_mac_address",
          "description": "",
          "name": "设备mac地址",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 156,
          "accessMode": "rw",
          "code": "reserved6",
          "description": "",
          "name": "预留6",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 157,
          "accessMode": "rw",
          "code": "reserved7",
          "description": "",
          "name": "预留7",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 158,
          "accessMode": "rw",
          "code": "reserved8",
          "description": "",
          "name": "预留8",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 159,
          "accessMode": "rw",
          "code": "reserved9",
          "description": "",
          "name": "预留9",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 160,
          "accessMode": "rw",
          "code": "reserved10",
          "description": "",
          "name": "预留10",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 161,
          "accessMode": "rw",
          "code": "reserved11",
          "description": "",
          "name": "预留11",
          "typeSpec": {
            "type": "value",
            "max": 999999999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": ""
          }
        },
        {
          "abilityId": 162,
          "accessMode": "rw",
          "code": "reserved12",
          "description": "",
          "name": "预留12",
          "typeSpec": {
            "type": "value",
            "max": 999999999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": ""
          }
        },
        {
          "abilityId": 163,
          "accessMode": "rw",
          "code": "reserved13",
          "description": "",
          "name": "预留13",
          "typeSpec": {
            "type": "value",
            "max": 999999999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": ""
          }
        },
        {
          "abilityId": 164,
          "accessMode": "rw",
          "code": "reserved14",
          "description": "",
          "name": "预留14",
          "typeSpec": {
            "type": "value",
            "max": 999999999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": ""
          }
        },
        {
          "abilityId": 165,
          "accessMode": "rw",
          "code": "reserved15",
          "description": "",
          "name": "预留15",
          "typeSpec": {
            "type": "value",
            "max": 999999999,
            "min": 0,
            "scale": 0,
            "step": 1,
            "unit": ""
          }
        },
        {
          "abilityId": 166,
          "accessMode": "rw",
          "code": "reserved16",
          "description": "",
          "name": "预留16",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 167,
          "accessMode": "rw",
          "code": "reserved17",
          "description": "",
          "name": "预留17",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 168,
          "accessMode": "rw",
          "code": "reserved18",
          "description": "",
          "name": "预留18",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 169,
          "accessMode": "rw",
          "code": "reserved19",
          "description": "",
          "name": "预留19",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 170,
          "accessMode": "rw",
          "code": "reserved20",
          "description": "",
          "name": "预留20",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 171,
          "accessMode": "rw",
          "code": "reserved21",
          "description": "",
          "name": "预留21",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 172,
          "accessMode": "rw",
          "code": "reserved22",
          "description": "",
          "name": "预留22",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 173,
          "accessMode": "rw",
          "code": "reserved23",
          "description": "",
          "name": "预留23",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 174,
          "accessMode": "rw",
          "code": "reserved24",
          "description": "",
          "name": "预留24",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 175,
          "accessMode": "rw",
          "code": "reserved25",
          "description": "",
          "name": "预留25",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 176,
          "accessMode": "rw",
          "code": "reserved26",
          "description": "",
          "name": "预留26",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 177,
          "accessMode": "rw",
          "code": "reserved27",
          "description": "",
          "name": "预留27",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 178,
          "accessMode": "rw",
          "code": "reserved28",
          "description": "",
          "name": "预留28",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 179,
          "accessMode": "rw",
          "code": "reserved29",
          "description": "",
          "name": "预留29",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 180,
          "accessMode": "rw",
          "code": "reserved30",
          "description": "",
          "name": "预留30",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 181,
          "accessMode": "rw",
          "code": "reserved31",
          "description": "",
          "name": "预留31",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 182,
          "accessMode": "rw",
          "code": "reserved32",
          "description": "",
          "name": "预留32",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 183,
          "accessMode": "rw",
          "code": "reserved33",
          "description": "",
          "name": "预留33",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 184,
          "accessMode": "rw",
          "code": "reserved34",
          "description": "",
          "name": "预留34",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 185,
          "accessMode": "rw",
          "code": "reserved35",
          "description": "",
          "name": "预留35",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 186,
          "accessMode": "rw",
          "code": "reserved36",
          "description": "",
          "name": "预留36",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 187,
          "accessMode": "rw",
          "code": "reserved37",
          "description": "",
          "name": "预留37",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 188,
          "accessMode": "rw",
          "code": "reserved38",
          "description": "",
          "name": "预留38",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 189,
          "accessMode": "rw",
          "code": "reserved39",
          "description": "",
          "name": "预留39",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 190,
          "accessMode": "rw",
          "code": "reserved40",
          "description": "",
          "name": "预留40",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        }
      ]
    }
  ]
}