Open kimme1024 opened 1 year ago
Hi, I have the exact same device (only in my case a Tonepie manufacturer) and would like to see it in HA. Standard instructions: https://developer.tuya.com/en/docs/iot/f?id=Kakg309qkmuit
"data": {
"endpoint": "https://openapi.tuyaeu.com",
"auth_type": 0,
"country_code": "7",
"app_type": "smartlife",
"mqtt_connected": true,
"disabled_by": null,
"disabled_polling": false,
"name": "Automatic Cat Litter Box",
"model": "\u5ba0\u7269\u732b\u7802\u76c6",
"category": "msp",
"product_id": "5t7esmqqh92ssbe5",
"product_name": "Automatic Cat Litter Box",
"online": true,
"sub": false,
"time_zone": "+03:00",
"active_time": "2023-02-09T14:08:21+00:00",
"create_time": "2023-02-09T14:08:21+00:00",
"update_time": "2023-02-09T14:33:54+00:00",
"function": {
"deodorization": {
"type": "Boolean",
"value": {}
}
},
"status_range": {
"cat_weight": {
"type": "Integer",
"value": {
"unit": "g",
"min": 600,
"max": 10000,
"scale": 0,
"step": 1
}
},
"excretion_times_day": {
"type": "Integer",
"value": {
"unit": "times",
"min": 0,
"max": 60,
"scale": 0,
"step": 1
}
},
"excretion_time_day": {
"type": "Integer",
"value": {
"unit": "s",
"min": 0,
"max": 1800,
"scale": 0,
"step": 1
}
},
"deodorization": {
"type": "Boolean",
"value": {}
},
"fault": {
"type": "Bitmap",
"value": {
"label": [
"motor_fault",
"program_fault",
"g_sensor_fault"
],
"maxlen": 3
}
}
},
"status": {
"cat_weight": 2793,
"excretion_times_day": 1,
"excretion_time_day": 74,
"deodorization": false,
"fault": 0
},
"home_assistant": {
"name": "Automatic Cat Litter Box",
"name_by_user": null,
"disabled": false,
"disabled_by": null,
"entities": []
}
I think i'm in the same boat? mine is a different manufacturer as well, but it looks just like that tonepie model. it also added correctly but showed no devices in HA. What would need to be updated to make it compatible?
It works when configuring it manually in local tuya. However it’s a bit of a hassle.
How do I do that
How do I do that
Install local tuya Add your device and make sensors that link to the correct numbers found on the tuya dev website.
How do I do that
Install local tuya Add your device and make sensors that link to the correct numbers found on the tuya dev website.
I got mine to show up in local Tuya. Do you have a link to where I can match the correct numbers?
How do I do that
Install local tuya Add your device and make sensors that link to the correct numbers found on the tuya dev website.
I got mine to show up in local Tuya. Do you have a link to where I can match the correct numbers?
It's easy to discover as the values can be compared with the ones from the app. I think this will be the safest way to do it as i don't know if the numbers will be the same across different brands.
For Petlux:
Number: 6: Weight 8: Excretion Time 117: Clumping Time 118: Cleaning Interval
Switch: 17: Deodorize 101: Clean 102: Empty 105: Auto 111: IR-sensor 119: Full
Heres from my generic branded (JZWLW) cat litter tray Sensor: 6: Weight 8: Excretion Time
Number: 117: Clumping Time (min: 0, max: 60) 118: Cleaning Interval (min: 0, max: 120)
Switch: 101: Clean 102: Empty 105: Auto 111: IR-sensor 114: Child lock 122: Do not disturb 120: Odourless
Binary sensor: 119: Full
I would like to add to the already existing list
here are all the ones i know
Sensor: 6: Weight 8: Excretion Time
Number: 117: Clumping Time (min: 0, max: 60) 118: Cleaning Interval (min: 0, max: 120) 127: Detection Sensitivity (min: 600, max: 1500, increment: 100) 124: Waste Bin Calibration (min: 0, max : 15) 125: Litter level setting: (min: 0, max: 6)
Switch: 101: Clean 102: Empty 105: Auto 111: IR-sensor 114: Child lock 122: Do not disturb 120: Odourless
Binary sensor: 119: Full
Adding to this, Ive got the petree as well and trying to backwards engineer the dps_string
. My values seem different to these though, heres the full output from the diagnostic:
"dps_strings": [
"5 (value: 4)",
"23 (value: False)",
"101 (value: True)",
"102 (value: True)",
"103 (value: False)",
"105 (value: False)",
"106 (value: 1350)",
"107 (value: 480)",
"108 (value: True)",
"110 (value: 1)",
"111 (value: 32)",
"112 (value: False)",
"113 (value: 0)",
"114 (value: 23)",
"115 (value: 60001)",
"116 (value: XXXXXX)", #mcu (hidden)
"117 (value: 5)",
"118 (value: 0)",
"119 (value: True)",
"120 (value: 1009)",
"121 (value: 187)",
"122 (value: 0)",
"123 (value: 1898)",
"124 (value: 0)",
"126 (value: False)",
"127 (value: 39)",
"128 (value: 1111)"
],
"entities": [
{
"id": 101,
"friendly_name": "Cleaning",
"restore_on_reconnect": false,
"is_passive_entity": false,
"platform": "switch"
},
{
"id": 119,
"friendly_name": "Full",
"state_on": "True",
"state_off": "False",
"platform": "binary_sensor"
},
{
"id": 124,
"friendly_name": "Waste Bin Calibration",
"min_value": 0.0,
"max_value": 100000.0,
"step_size": 1.0,
"restore_on_reconnect": false,
"is_passive_entity": false,
"platform": "number"
}
],
Hey i found where to get the values from, although the meaning could be a little weird.
From the Tuya cloud login > your project > devices. Find the device you want to debug from the device list and then click debug device
.
Click on the device logs tab on the top of the debug page for the device, and change the date range to the maximum you are able to. Now inspect element using the browser you are using and click on network. Drop down the drop down the DP ID
dropdown and select something from the list, then click search.
You should see the requests go out in the browser inspect network, the one you are looking for here is the list
entry, click on that and then look at the payload, it should look something like this:
{
"startRowId": "",
"pageNo": 1,
"pageSize": 10,
"code": "101",
"startTime": 1695287053764,
"endTime": 1695805453764,
"projectCode": "p1641704291064uwv7dc",
"sourceId": "eu16175080464804Nlvu",
"sourceType": "4",
"deviceId": "bf2261c924da6625101z4u",
"pageStartRow": "",
"region": "EU"
}
Match that with the text value in the dropdown from the search you executed, and volla!
In my json above, 101 is actually "Report the number of trips to the toilet at one time"
full json list
[
{
"DP ID": 5,
"DP Name": "Delay Clean Time",
"Data Type": "Value"
},
{
"DP ID": 102,
"DP Name": "LED",
"Data Type": "Bool"
},
{
"DP ID": 103,
"DP Name": "Do Not Disturb All Day",
"Data Type": "Bool"
},
{
"DP ID": 105,
"DP Name": "Do Not Disturb Mode",
"Data Type": "Bool"
},
{
"DP ID": 106,
"DP Name": "Start time of do not disturb time ",
"Data Type": "Bool"
},
{
"DP ID": 107,
"DP Name": "End timeof do not disturb time ",
"Data Type": "Bool"
},
{
"DP ID": 108,
"DP Name": "Warning Tone",
"Data Type": "Bool"
},
{
"DP ID": 110,
"DP Name": "History",
"Data Type": "Enum"
},
{
"DP ID": 111,
"DP Name": "Pop up notification mesage ",
"Data Type": "Fault"
},
{
"DP ID": 112,
"DP Name": "The trash can is full ",
"Data Type": "Bool"
},
{
"DP ID": 113,
"DP Name": "Pedal angle ",
"Data Type": "Value"
},
{
"DP ID": 114,
"DP Name": "Hardware function",
"Data Type": "Value"
},
{
"DP ID": 115,
"DP Name": "PIR_RADAR",
"Data Type": "String"
},
{
"DP ID": 116,
"DP Name": "ID of MCU",
"Data Type": "Value"
},
{
"DP ID": 117,
"DP Name": "Working Status",
"Data Type": "Enum"
},
{
"DP ID": 118,
"DP Name": "Dumping Sand",
"Data Type": "Bool"
},
{
"DP ID": 119,
"DP Name": "Power on and restart the callibration time succeded",
"Data Type": "Value"
},
{
"DP ID": 120,
"DP Name": "Magnet Number",
"Data Type": "Value"
},
{
"DP ID": 121,
"DP Name": "Temp",
"Data Type": "Value"
},
{
"DP ID": 122,
"DP Name": "Motor current value",
"Data Type": "Value"
},
{
"DP ID": 123,
"DP Name": "Temp ADC",
"Data Type": "Value"
},
{
"DP ID": 124,
"DP Name": "Clean",
"Data Type": "Enum"
},
{
"DP ID": 125,
"DP Name": "Lock",
"Data Type": "Bool"
},
{
"DP ID": 126,
"DP Name": "Clean",
"Data Type": "Bool"
},
{
"DP ID": 127,
"DP Name": "Dedorization Num",
"Data Type": "Value"
},
{
"DP ID": 128,
"DP Name": "Kill",
"Data Type": "Value"
}
]
Following @developersteve foot steps. You can use the inspect Network and there is a full list of all the id's Refresh the entire page, and look for one of the last "list" in the network.
Here from mine generic branded (JZWLW) "dpId":128, "dpName":"number" "dpId":6, "dpName":"Cat Weight" "dpId":7, "dpName":"excretion times day" "dpId":8, "dpName":"Excretion Time" "dpId":17, "dpName":"Deodorization" "dpId":22, "dpName":"Fault" "dpId":101, "dpName":"clean" "dpId":102, "dpName":"empty" "dpId":103, "dpName":"trash status" "dpId":104, "dpName":"monitoring" "dpId":105, "dpName":"auto" "dpId":106, "dpName":"clean time" "dpId":107, "dpName":"clean time switch" "dpId":108, "dpName":"\u7248\u672c\u8bc6\u522b" "dpId":109, "dpName":"\u5907\u7528\u7248\u672c\u8bc6\u522b" "dpId":110, "dpName":"not disturb" "dpId":111, "dpName":"Infrared Rador Sensor" "dpId":112, "dpName":"toilet notice" "dpId":113, "dpName":"net notice" "dpId":114, "dpName":"Kids Lock" "dpId":115, "dpName":"calibration" "dpId":116, "dpName":"unit" "dpId":117, "dpName":"Clumping Time" "dpId":118, "dpName":"Cleaning Interval" "dpId":119, "dpName":"store full notify" "dpId":120, "dpName":"Deordrizer" "dpId":121, "dpName":"Smart clean" "dpId":122, "dpName":"Non-disturbing" "dpId":123, "dpName":"Usage Times" "dpId":124, "dpName":"Waste Bin Calibration" "dpId":125, "dpName":"Litter Leveling Setting" "dpId":126, "dpName":"Auto Deordrizer Setting" "dpId":127, "dpName":"Detection Sensitivity"
I found the full description for the Petlux device. Here it is (in json):
{
"model": {
"modelId": "000003wldi",
"services": [
{
"actions": [],
"code": "",
"description": "",
"events": [],
"name": "u9ed8u8ba4u670du52a1",
"properties": [
{
"abilityId": 6,
"accessMode": "ro",
"code": "cat_weight",
"description": "u5b9au65f6u4e0au62a5u732bu54aau4f53u91cduff0cu652fu6301u591au53eau732bu54aau79f0u91cduff0cAPPu7aefu53efu9009u624bu52a8u5206u7c7bu4e0du540cu732bu54aau4e0du540cu4f53u91cdn",
"extensions": {
"iconName": "icon-dp_mode",
"attribute": "1024"
},
"name": "u732bu54aau4f53u91cd",
"typeSpec": {
"max": 10000,
"min": 600,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 600,
"unit": "g"
}
},
{
"abilityId": 7,
"accessMode": "ro",
"code": "excretion_times_day",
"description": "u732bu54aau6392u6cc4u540euff0cu8bbeu5907u7aefu4e0au62a5u5f53u5929u6392u6cc4u603bu6b21u6570uff0cAPPu7aefu8fdbu884cu5c55u793an",
"extensions": {
"iconName": "icon-dp_0",
"attribute": "1024"
},
"name": "u6bcfu5929u6392u6cc4u6b21u6570",
"typeSpec": {
"max": 60,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": "times"
}
},
{
"abilityId": 8,
"accessMode": "ro",
"code": "excretion_time_day",
"description": "u732bu54aau6392u6cc4u540euff0cu8bbeu5907u7aefu4e0au62a5u5f53u6b21u6392u6cc4u65f6u957fuff0cAPPu7aefu8fdbu884cu5c55u793au4e0du540cu65f6u95f4u7684u65f6u957fu8d8bu52bfn",
"extensions": {
"iconName": "icon-dp_time",
"attribute": "1024"
},
"name": "u5982u5395u65f6u957f",
"typeSpec": {
"max": 1800,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": "s"
}
},
{
"abilityId": 17,
"accessMode": "rw",
"code": "deodorization",
"description": "u9664u81edu6740u83ccu5f00u5173",
"extensions": {
"iconName": "icon-dp_filter",
"attribute": "1024"
},
"name": "u9664u81edu6740u83cc",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 22,
"accessMode": "ro",
"code": "fault",
"description": "motor_faultuff1au7535u673au6545u969cnprogram_faultuff1au7a0bu5e8fu9519u8befng_sensor_faultuff1au91cdu529bu4f20u611fu5668u611fu5e94u5f02u5e38n",
"extensions": {
"iconName": "icon-baojing",
"attribute": "1024"
},
"name": "u6545u969cu544au8b66",
"typeSpec": {
"label": [
"motor_fault",
"program_fault",
"g_sensor_fault"
],
"maxlen": 3,
"type": "bitmap",
"typeDefaultValue": 0
}
},
{
"abilityId": 101,
"accessMode": "rw",
"code": "Clean",
"description": "1 u5f00u59cb 0 u5173u95ed",
"name": "u4e00u952eu6e05u7406",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 102,
"accessMode": "rw",
"code": "empty",
"description": "1 u5f00u59cb 0u53d6u6d88",
"name": "u4e00u952eu6362u7802",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 103,
"accessMode": "ro",
"code": "trash_status",
"description": "0u5783u573eu6876u7a7auff0cu63d0u793au6587u5b57u6d88u5931n1u5783u573eu6876u6ee1uff0cu63d0u793au6587u5b57",
"name": "u5783u573eu6876u72b6u6001",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 104,
"accessMode": "ro",
"code": "monitoring",
"description": "u5f53u732bu8fdbu5165u540euff0c u51fau73b0u6587u5b57u63d0u793auff0c u732bu54aau79bbu5f00u540eu6d88u5931",
"name": "u6876u5185u76d1u6d4b",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 105,
"accessMode": "rw",
"code": "Induction_Clean",
"description": "",
"name": "u611fu5e94u6e05u7406",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 106,
"accessMode": "rw",
"code": "clean_time",
"description": "u6bcfu4e2au65f6u95f4u6309u7167nu5c0fu65f6u5206u949fu683cu5f0fuff0cu6bcfu4e2au5360u75282u4e2au5b57u8282uff0cu5206u949fu548cu5c0fu65f6uff0cu5341u8fdbu5236u8f6c16u8fdbu5236uff0cu598218uff1a50uff0cu8f6cu4e3a16u8fdbu5236u4e3a1232u3002nu5468u671fu4e3au4e8cu8fdbu5236 u661fu671fu6216u5355u6b21u6709u6548u3002nu6700u591au652fu6301u4e09u4e2au65f6u95f4u8bbeu7f6euff0cu672au8bbeu7f6eu7684u75280u8865u5145u3002nu4e3eu4f8buff1a12320013200000000000",
"name": "u5b9au65f6u6e05u7406",
"typeSpec": {
"maxlen": 128,
"type": "raw"
}
},
{
"abilityId": 107,
"accessMode": "rw",
"code": "clean_time_switch",
"description": "",
"name": "u5b9au65f6u6e05u7406u5f00u5173",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 108,
"accessMode": "rw",
"code": "Clean_taste",
"description": "u6bcfu4e2au65f6u95f4u6309u7167nu5c0fu65f6u5206u949fu683cu5f0fuff0cu6bcfu4e2au5360u75282u4e2au5b57u8282uff0cu5206u949fu548cu5c0fu65f6uff0cu5341u8fdbu5236u8f6c16u8fdbu5236uff0cu598218uff1a50uff0cu8f6cu4e3a16u8fdbu5236u4e3a1232u3002nu5468u671fu4e3au4e8cu8fdbu5236 u661fu671fu6216u5355u6b21u6709u6548u3002nu6700u591au652fu6301u4e09u4e2au65f6u95f4u8bbeu7f6euff0cu672au8bbeu7f6eu7684u75280u8865u5145u3002nu4e3eu4f8buff1a12320013200000000000",
"name": "u7248u672cu8bc6u522b",
"typeSpec": {
"maxlen": 128,
"type": "raw"
}
},
{
"abilityId": 109,
"accessMode": "rw",
"code": "Clean_tasteSwitch",
"description": "",
"name": "u5907u7528u7248u672cu8bc6u522b",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 110,
"accessMode": "rw",
"code": "not_disturb",
"description": "",
"name": "u514du6253u6270",
"typeSpec": {
"maxlen": 128,
"type": "raw"
}
},
{
"abilityId": 111,
"accessMode": "rw",
"code": "Clean_notice",
"description": "u7ea2u5916u529fu80fdu5f00u542fu6216u5173u95ed",
"name": "u5173u95edu7ea2u5916u4ee5u9002u5e94u732bu5c4b",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 112,
"accessMode": "rw",
"code": "toilet_notice",
"description": "",
"name": "u5982u5395u901au77e5",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 113,
"accessMode": "rw",
"code": "Net_notice",
"description": "u53eau6709u89e6u53d1u6545u969cu65f6uff0cu53efu7528u4e8eu6876u4ed3u590du4f4d",
"name": "u6876u4ed3u590du4f4d",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 114,
"accessMode": "rw",
"code": "child_lock",
"description": "",
"name": "u7ae5u9501",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 115,
"accessMode": "rw",
"code": "calibration",
"description": "calibration",
"extensions": {
"trigger": "direct"
},
"name": "u79e4u6821u51c6",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 116,
"accessMode": "rw",
"code": "unit",
"description": "",
"name": "u5355u4f4d",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 117,
"accessMode": "rw",
"code": "induction_delay",
"description": "",
"name": "u6e05u7406u7b49u5f85u65f6u95f4",
"typeSpec": {
"max": 60,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": "u5206u949fm"
}
},
{
"abilityId": 118,
"accessMode": "rw",
"code": "induction_interval",
"description": "",
"name": "u6e05u7406u95f4u9694u65f6u95f4",
"typeSpec": {
"max": 120,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": "u5206u949fm"
}
},
{
"abilityId": 119,
"accessMode": "rw",
"code": "store_full_notify",
"description": "",
"name": "u96c6u4fbfu4ed3u6ee1u901au77e5",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 120,
"accessMode": "rw",
"code": "odourless",
"description": "",
"name": "u7acbu5373u51c0u5473",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 121,
"accessMode": "rw",
"code": "smart_clean",
"description": "",
"name": "u667au80fdu6e05u7406",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 122,
"accessMode": "rw",
"code": "not_disturb_Switch",
"description": "",
"name": "u514du6253u6270u5f00u5173",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 123,
"accessMode": "rw",
"code": "usage_times",
"description": "",
"extensions": {
"trigger": "direct"
},
"name": "u4f7fu7528u6b21u6570",
"typeSpec": {
"max": 100,
"min": 1,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 1,
"unit": "times"
}
},
{
"abilityId": 124,
"accessMode": "rw",
"code": "capacity_calibration",
"description": "",
"extensions": {
"trigger": "direct"
},
"name": "u96c6u4fbfu4ed3u4fbfu6ee1u6821u51c6",
"typeSpec": {
"max": 15,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": ""
}
},
{
"abilityId": 125,
"accessMode": "rw",
"code": "sand_surface_calibration",
"description": "",
"extensions": {
"trigger": "direct"
},
"name": "u6c99u9762u6821u51c6",
"typeSpec": {
"max": 6,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": ""
}
},
{
"abilityId": 126,
"accessMode": "rw",
"code": "auto_deordrizer",
"description": "",
"name": "u81eau52a8u51c0u5473",
"typeSpec": {
"type": "bool",
"typeDefaultValue": false
}
},
{
"abilityId": 127,
"accessMode": "rw",
"code": "detection_sensitivity",
"description": "",
"extensions": {
"trigger": "direct"
},
"name": "u68c0u6d4bu7075u654fu5ea6",
"typeSpec": {
"max": 1500,
"min": 600,
"scale": 0,
"step": 100,
"type": "value",
"typeDefaultValue": 600,
"unit": "g"
}
},
{
"abilityId": 128,
"accessMode": "rw",
"code": "number",
"description": "",
"extensions": {
"trigger": "direct"
},
"name": "number",
"typeSpec": {
"max": 999999,
"min": 0,
"scale": 0,
"step": 1,
"type": "value",
"typeDefaultValue": 0,
"unit": ""
}
}
]
}
]
}
}
Device normal info
Device info (please complete the following information, which can be found in log): like this:
Nothing shows up in the logs as requested so I've added the devices diagnostics info. It connected perfectly but it shows up as unsupported so no sensors/switches are available. If you'd need more info to implement this, feel free to contact me.
Thanks in advance!