Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request support for Lefant N3 Robot Vacuum Cleaner #1393

Closed
mariustt opened this issue Dec 10, 2023 · 14 comments
Closed

Request support for Lefant N3 Robot Vacuum Cleaner #1393

mariustt opened this issue Dec 10, 2023 · 14 comments

Comments

@mariustt
Copy link

mariustt commented Dec 10, 2023

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"
}
@mariustt mariustt added the new device Unsupported device label Dec 10, 2023
@make-all
Copy link
Owner

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
Copy link
Author

@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
Copy link
Author

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

@make-all
Copy link
Owner

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
Copy link
Author

@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
Copy link
Author

@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.

@make-all make-all added the full_info All info needed was provided label Dec 21, 2023
@make-all make-all reopened this Dec 21, 2023
@antonio1475
Copy link

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:

  • Start --> set DP 1 to true (or DP 2 to false...)
  • Pause --> set DP 2 to true
  • Stop --> set DP 1 to false
  • Resume --> set DP 2 to false (or DP 1 to true...)
  • Dock --> set DP 3 to true

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
Copy link
Owner

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.

make-all added a commit that referenced this issue Jan 27, 2024
Leave the 1/2 combo for activate, but remove dp 3 as power, as this is
for sending the vacuum to charge.

Add the separate buttons in case the vacuum interface is not able to control
it (eg device does not like two commands sent at once).

Based on comment in #1393 about a similar vacuum with 3 booleans for power_go,
pause and switch_charge
@make-all make-all mentioned this issue Jan 27, 2024
make-all added a commit that referenced this issue Jan 27, 2024
@make-all make-all added awaiting confirmation Wating for confirmation the issue is solved unreleased Will be in next release and removed full_info All info needed was provided new device Unsupported device awaiting confirmation Wating for confirmation the issue is solved unreleased Will be in next release labels Jan 27, 2024
@antonio1475
Copy link

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:

  • As was expected, the native controls for Return to dock and Dock do not work. The auxiliar Dock button works.
  • The native Pause button stops it, so when resuming it restarts, resets maps and relocates. The auxiliar Pause button works as intended (shows Paused in Tuya, resuming works without map reset or relocation).
  • Spot cleaning doesn't work, I wouldn't expect it to work anyway.

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 added a commit that referenced this issue Jan 29, 2024
- mark 4, 6, 7, 126 as optional, as they seem to not appear for another user
- based on reported behaviour, try power_go as power, pause as activate inverted.
I think this was already tried for TTEC vacuum and did not work there, but maybe
the vacuums act differently.
- based on commands not seeming to work, make them also trigger power and switch_charge dps as appropriate.

Issue #1393
@make-all
Copy link
Owner

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

make-all added a commit that referenced this issue Jan 29, 2024
@antonio1475
Copy link

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 🙏

make-all added a commit that referenced this issue Jan 29, 2024
I had some back and forwards about including the switch_charge dp
in with commands, and which neeeded to be the primary, then forgot to
rename work_mode back to command when I returned back to that as primary.

Mark dp 2 as optional to help detection.

Issue #1393
@antonio1475
Copy link

@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
Copy link

pseudo-su commented Jul 18, 2024

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
Copy link

pseudo-su commented Jul 18, 2024

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
          }
        }
      ]
    }
  ]
}

make-all added a commit that referenced this issue Jul 18, 2024
@make-all make-all added awaiting confirmation Wating for confirmation the issue is solved unreleased Will be in next release device improvement Improvement to an existing device config labels Jul 18, 2024
@make-all make-all reopened this Jul 18, 2024
@make-all make-all removed awaiting confirmation Wating for confirmation the issue is solved unreleased Will be in next release device improvement Improvement to an existing device config labels Jul 28, 2024
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
Leave the 1/2 combo for activate, but remove dp 3 as power, as this is
for sending the vacuum to charge.

Add the separate buttons in case the vacuum interface is not able to control
it (eg device does not like two commands sent at once).

Based on comment in make-all#1393 about a similar vacuum with 3 booleans for power_go,
pause and switch_charge
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
- mark 4, 6, 7, 126 as optional, as they seem to not appear for another user
- based on reported behaviour, try power_go as power, pause as activate inverted.
I think this was already tried for TTEC vacuum and did not work there, but maybe
the vacuums act differently.
- based on commands not seeming to work, make them also trigger power and switch_charge dps as appropriate.

Issue make-all#1393
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
I had some back and forwards about including the switch_charge dp
in with commands, and which neeeded to be the primary, then forgot to
rename work_mode back to command when I returned back to that as primary.

Mark dp 2 as optional to help detection.

Issue make-all#1393
timlaing pushed a commit to timlaing/tuya-local that referenced this issue Aug 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

No branches or pull requests

4 participants