to your account
"os_version": "6.6.31-haos-raspi",
"supervisor": "2024.06.2",
"host_os": "Home Assistant OS 12.4",
"docker_version": "26.1.4",
"chassis": "embedded",
"run_as_root": true
"custom_components": {
"localtuya": {
"documentation": "https://github.com/rospogrigio/localtuya/",
"version": "5.2.1",
"requirements": []
"tuya_local": {
"documentation": "https://github.com/make-all/tuya-local",
"version": "2024.7.0",
"requirements": [
"tinytuya==1.15.0",
"tuya-device-sharing-sdk>=0.1.9,<=0.2.99"
"hacs": {
"documentation": "https://hacs.xyz/docs/configuration/start",
"version": "1.34.0",
"requirements": [
"aiogithubapi>=22.10.1"
"integration_manifest": {
"domain": "tuya_local",
"name": "Tuya Local",
"codeowners": [
"make-all"
"config_flow": true,
"dependencies": [],
"documentation": "https://github.com/make-all/tuya-local",
"integration_type": "device",
"iot_class": "local_push",
"issue_tracker": "https://github.com/make-all/tuya-local/issues",
"requirements": [
"tinytuya==1.15.0",
"tuya-device-sharing-sdk>=0.1.9,<=0.2.99"
"version": "2024.7.0",
"is_built_in": false
"setup_times": {},
"data": {
"name": "Pet feeder",
"type": "catit_pixi_smart_feeder",
"device_id": "**REDACTED**",
"device_cid": "",
"local_key": "**REDACTED**",
"host": "**REDACTED**",
"protocol_version": 3.3,
"tinytuya_version": "1.15.0",
"api_version_set": 3.3,
"api_version_used": 3.3,
"api_working": true,
"status": {},
"cached_state": {
"updated_at": 1722009465.5674887,
"3": 1,
"11": 70,
"12": false,
"14": 0,
"15": 1,
"19": true,
"101": "ac_power_on",
"103": "real_time_mode",
"112": 3,
"116": "94%"
"pending_state": {},
"connected": true,
"force_dps": [],
"home_assistant": {
"name": "Pet feeder",
"name_by_user": null,
"disabled": false,
"disabled_by": null,
"entities": [
"disabled": false,
"disabled_by": null,
"entity_category": "diagnostic",
"device_class": null,
"original_device_class": "problem",
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "binary_sensor.pet_feeder_food_shortage",
"state": "off",
"attributes": {
"device_class": "problem",
"friendly_name": "Pet feeder Food shortage"
"last_changed": "2024-07-26T15:54:09.575553+00:00",
"last_reported": "2024-07-26T15:57:45.569567+00:00",
"last_updated": "2024-07-26T15:54:09.575553+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": "diagnostic",
"device_class": null,
"original_device_class": "problem",
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "binary_sensor.pet_feeder_food_blockage",
"state": "off",
"attributes": {
"device_class": "problem",
"friendly_name": "Pet feeder Food blockage"
"last_changed": "2024-07-26T15:54:09.576396+00:00",
"last_reported": "2024-07-26T15:57:45.570534+00:00",
"last_updated": "2024-07-26T15:54:09.576396+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": "diagnostic",
"device_class": null,
"original_device_class": "running",
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "binary_sensor.pet_feeder_feeding",
"state": "unknown",
"attributes": {
"device_class": "running",
"icon": "mdi:paw",
"friendly_name": "Pet feeder Feeding"
"last_changed": "2024-07-26T15:54:09.576994+00:00",
"last_reported": "2024-07-26T15:57:45.571403+00:00",
"last_updated": "2024-07-26T15:54:09.576994+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": null,
"device_class": null,
"original_device_class": null,
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "button.pet_feeder_quick_feed",
"state": "unknown",
"attributes": {
"icon": "mdi:food-drumstick",
"friendly_name": "Pet feeder Quick Feed"
"last_changed": "2024-07-26T15:54:09.577699+00:00",
"last_reported": "2024-07-26T15:56:43.872576+00:00",
"last_updated": "2024-07-26T15:54:09.577699+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": "config",
"device_class": null,
"original_device_class": "restart",
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "button.pet_feeder_factory_reset",
"state": "unknown",
"attributes": {
"device_class": "restart",
"friendly_name": "Pet feeder Factory reset"
"last_changed": "2024-07-26T15:54:09.578047+00:00",
"last_reported": "2024-07-26T15:56:43.872945+00:00",
"last_updated": "2024-07-26T15:54:09.578047+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": "diagnostic",
"device_class": null,
"original_device_class": null,
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "sensor.pet_feeder_feed_report",
"state": "1",
"attributes": {
"icon": "mdi:paw",
"friendly_name": "Pet feeder Feed report"
"last_changed": "2024-07-26T15:54:09.578779+00:00",
"last_reported": "2024-07-26T15:57:45.573376+00:00",
"last_updated": "2024-07-26T15:54:09.578779+00:00"
"disabled": false,
"disabled_by": null,
"entity_category": "config",
"device_class": null,
"original_device_class": null,
"icon": null,
"unit_of_measurement": null,
"state": {
"entity_id": "number.pet_feeder_manual_feed",
"state": "1",
"attributes": {
"min": 1.0,
"max": 12.0,
"step": 1.0,
"mode": "auto",
"icon": "mdi:paw",
"friendly_name": "Pet feeder Manual feed"
"last_changed": "2024-07-26T15:54:09.579538+00:00",
"last_reported": "2024-07-26T15:57:45.574462+00:00",
"last_updated": "2024-07-26T15:54:09.579538+00:00"
2024-07-26 18:41:15.695 WARNING (MainThread) [custom_components.localtuya.common] [bfd...vrx] Disconnected - waiting for discovery broadcast
2024-07-26 18:41:37.036 DEBUG (MainThread) [custom_components.tuya_local.device] Cleverio PF100 received {"3": 1, "11": 70, "12": false, "14": 0, "15": 6, "19": true, "101": "ac_power_on", "103": "real_time_mode", "112": 3, "116": "94%", "full_poll": true}
2024-07-26 18:41:37.041 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 15 (sensor), unable to determine valid values
2024-07-26 18:41:37.042 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 15 (sensor), unable to determine valid values
2024-07-26 18:41:37.043 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 14 value from 0 to False
2024-07-26 18:41:37.044 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 14 value from 0 to False
2024-07-26 18:41:37.044 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 14 value from 0 to False
2024-07-26 18:41:37.045 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 14 value from 0 to False
2024-07-26 18:41:37.045 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 4 value from None to None
2024-07-26 18:41:37.046 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 4 value from None to None
2024-07-26 18:41:40.685 ERROR (MainThread) [homeassistant] Error doing job: Fatal error: protocol.data_received() call failed. (None)
Traceback (most recent call last):
File "/usr/local/lib/python3.12/asyncio/selector_events.py", line 1017, in _read_ready__data_received
self._protocol.data_received(data)
File "/config/custom_components/localtuya/pytuya/__init__.py", line 668, in data_received
self.dispatcher.add_data(data)
File "/config/custom_components/localtuya/pytuya/__init__.py", line 472, in add_data
msg = unpack_message(
^^^^^^^^^^^^^^^
File "/config/custom_components/localtuya/pytuya/__init__.py", line 304, in unpack_message
raise DecodeError("Not enough data to unpack header")
custom_components.localtuya.pytuya.DecodeError: Not enough data to unpack header
DPS information
"result": {
"model": "{\"modelId\":\"000004d15o\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"meal_plan\",\"description\":\"同步到设备端本地,即使设备离线,仍能正常喂食出粮,喂食计划最多支持10个\\nraw格式约定:按照“周期+时间+喂食份数+开关”来实现本地定时,具体如下\\n1,前7个比特位代表周一到周日,二进制转十六进制,占用一个字节,0代表未设置,1代表设置,如0000001,表示周日生效,转换为16进制就是01\\n2,时间按照小时分钟格式,占用2个字节,分钟和小时,十进制转16进制,如18:50,转为16进制为1232\\n3,喂食份数,占用1个字节,十进制转16进制,如12,转为16进制为0c\\n4,开关,占用1个字节,00表示关闭,01表示开启\\n上述举例,对于APP端时间下发的结果为0112320c01,表示周日,18:50,喂食12份,开启。\",\"extensions\":{\"iconName\":\"icon-dp_time3\",\"attribute\":\"1120\"},\"name\":\"喂食计划\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"manual_feed\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-icon-test13\",\"attribute\":\"1028\"},\"name\":\"手动喂食\",\"typeSpec\":{\"type\":\"value\",\"max\":20,\"min\":1,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":9,\"accessMode\":\"rw\",\"code\":\"factory_reset\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-a_nav_mode\",\"attribute\":\"1120\"},\"name\":\"恢复出厂\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":11,\"accessMode\":\"ro\",\"code\":\"battery_percentage\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_battery\",\"attribute\":\"1152\"},\"name\":\"电池电量\",\"typeSpec\":{\"type\":\"value\",\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"%\"}},{\"abilityId\":12,\"accessMode\":\"ro\",\"code\":\"charge_state\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-battery\",\"attribute\":\"1024\"},\"name\":\"充电状态\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":14,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_notice\",\"scope\":\"fault\",\"attribute\":\"1024\"},\"name\":\"故障告警\",\"typeSpec\":{\"type\":\"bitmap\",\"label\":[\"food_shortages\",\"food_jam\",\"battery_low\",\"ac_power_off\"],\"maxlen\":4}},{\"abilityId\":15,\"accessMode\":\"ro\",\"code\":\"feed_report\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_upload\",\"attribute\":\"1152\",\"id\":15,\"trigger\":\"direct\"},\"name\":\"喂食结果上报\",\"typeSpec\":{\"type\":\"value\",\"max\":20,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":19,\"accessMode\":\"rw\",\"code\":\"light\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_light2\",\"attribute\":\"1153\"},\"name\":\"指示灯开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":101,\"accessMode\":\"ro\",\"code\":\"power_state\",\"description\":\"\",\"name\":\"适配器状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"no_adapter\",\"ac_power_off\",\"ac_power_on\"]}},{\"abilityId\":103,\"accessMode\":\"ro\",\"code\":\"mode\",\"description\":\"\",\"name\":\"工作模式\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"real_time_mode\",\"eco_mode\"]}},{\"abilityId\":112,\"accessMode\":\"rw\",\"code\":\"mfeed_speech_volume\",\"description\":\"\",\"extensions\":{\"attribute\":\"4\"},\"name\":\"音量\",\"typeSpec\":{\"type\":\"value\",\"max\":3,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":116,\"accessMode\":\"ro\",\"code\":\"battery_capacity\",\"description\":\"\",\"name\":\"电量\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}}]}]}"
"success": true,
"t": 1722009723583,
"tid": "662d97774b6811ef8c0d0631c72af00f"
Product ID
bfd0273e59494eb34esvrx
Product Name
Cleverio PF100
Information about how the device functions
Cat feeder. The tuya-local misslabeled the Cleverio to be a Catit cat feeder.
There is nothing to do here. I am not going to make duplicate configs for every rebranding of the same device just so you can see a filename that matches your branding.
If the product id was correctly supplied, I could maybe add a products entry for this device, but you have given the device id instead, which is not suitable for a config that goes out to all users.
Hi! There seem to be some difference between the models. I find errors in the logs.I Where can I find the product id? Is it on the tuya development portal?
[custom_components.tuya_local.helpers.device_config] Catit Pixi smart fountain: Mapped dps 12 value from level_3 to Full
2024-07-29 18:33:53.006 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] sensor values: ['Low', 'Medium', 'Full']
2024-07-29 18:33:53.007 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 11 (sensor), unable to determine valid values
2024-07-29 18:33:53.007 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 11 (sensor), unable to determine valid values
2024-07-29 18:33:59.921 DEBUG (MainThread) [custom_components.tuya_local.device] Cleverio PF100 received {"3": 1, "11": 90, "12": false, "14": 0, "15": 2, "19": true, "101": "ac_power_on", "103": "real_time_mode", "112": 3, "116": "99%", "full_poll": true}
2024-07-29 18:33:59.926 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 15 (sensor), unable to determine valid values
2024-07-29 18:33:59.927 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] No mapping for dpid 15 (sensor), unable to determine valid values
2024-07-29 18:33:59.929 DEBUG (MainThread) [custom_components.tuya_local.helpers.device_config] Pet feeder: Mapped dps 14 value from 0 to False
2024-07-29 18:33:59.929 DEBUG
Sorry for late reply. I found the product id!
"name": "Cleverio PF100",
"product_id": "wfkzyy0evslzsmoi",
"product_name": "Cleverio PF100",
Is it possible to see the meal_plan and update it? Did a little script to how it is decoded.
import base64
base64_input = "fwQAAgF/BgABAX8JAAEBfw8AAQF/FQACAX8XAAEBKBIAAQE="
decoded_bytes = base64.b64decode(base64_input)
meal_plan = []
for i in range(0, len(decoded_bytes), 5):
command_id = decoded_bytes[i]
time_hour = decoded_bytes[i+1]
time_minute = decoded_bytes[i+2]
portion_size = decoded_bytes[i+3]
meal_time = f"{time_hour:02}:{time_minute:02}"
meal_plan.append({
"time": meal_time,
"portion": portion_size
meal_plan
I also found the data that is queried if that helps.
"result": {
"properties": [
"code": "meal_plan",
"custom_name": "",
"dp_id": 1,
"time": 1724421493038,
"type": "raw",
"value": "fwQAAgF/BgABAX8JAAEBfw8AAQF/FQACAX8XAAEBKBIAAQE="
"code": "manual_feed",
"custom_name": "",
"dp_id": 3,
"time": 1724233083861,
"type": "value",
"value": 1
"code": "factory_reset",
"custom_name": "",
"dp_id": 9,
"time": 1674401358259,
"type": "bool",
"value": false
"code": "battery_percentage",
"custom_name": "",
"dp_id": 11,
"time": 1724182263332,
"type": "value",
"value": 90
"code": "charge_state",
"custom_name": "",
"dp_id": 12,
"time": 1724182533436,
"type": "bool",
"value": false
"code": "fault",
"custom_name": "",
"dp_id": 14,
"time": 1724182260557,
"type": "bitmap",
"value": 0
"code": "feed_report",
"custom_name": "",
"dp_id": 15,
"time": 1724420759868,
"type": "value",
"value": 1
"code": "light",
"custom_name": "",
"dp_id": 19,
"time": 1724182260496,
"type": "bool",
"value": true
"code": "power_state",
"custom_name": "",
"dp_id": 101,
"time": 1724182260563,
"type": "enum",
"value": "ac_power_on"
"code": "mode",
"custom_name": "",
"dp_id": 103,
"time": 1724182260500,
"type": "enum",
"value": "real_time_mode"
"code": "mfeed_speech_volume",
"custom_name": "",
"dp_id": 112,
"time": 1724182260524,
"type": "value",
"value": 3
"code": "battery_capacity",
"custom_name": "",
"dp_id": 116,
"time": 1724369945707,
"type": "string",
"value": "97%"
"success": true,
"t": 1724424066595,
"tid": "bacaac97615d11ef883136d89ae34f8e"
and some data model
"result": {
"model": "{\"modelId\":\"000004d15o\",\"services\":[{\"actions\":[],\"code\":\"\",\"description\":\"\",\"events\":[],\"name\":\"默认服务\",\"properties\":[{\"abilityId\":1,\"accessMode\":\"rw\",\"code\":\"meal_plan\",\"description\":\"同步到设备端本地,即使设备离线,仍能正常喂食出粮,喂食计划最多支持10个\\nraw格式约定:按照“周期+时间+喂食份数+开关”来实现本地定时,具体如下\\n1,前7个比特位代表周一到周日,二进制转十六进制,占用一个字节,0代表未设置,1代表设置,如0000001,表示周日生效,转换为16进制就是01\\n2,时间按照小时分钟格式,占用2个字节,分钟和小时,十进制转16进制,如18:50,转为16进制为1232\\n3,喂食份数,占用1个字节,十进制转16进制,如12,转为16进制为0c\\n4,开关,占用1个字节,00表示关闭,01表示开启\\n上述举例,对于APP端时间下发的结果为0112320c01,表示周日,18:50,喂食12份,开启。\",\"extensions\":{\"iconName\":\"icon-dp_time3\",\"attribute\":\"1120\"},\"name\":\"喂食计划\",\"typeSpec\":{\"type\":\"raw\",\"maxlen\":128}},{\"abilityId\":3,\"accessMode\":\"rw\",\"code\":\"manual_feed\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-icon-test13\",\"attribute\":\"1028\"},\"name\":\"手动喂食\",\"typeSpec\":{\"type\":\"value\",\"max\":20,\"min\":1,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":9,\"accessMode\":\"rw\",\"code\":\"factory_reset\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-a_nav_mode\",\"attribute\":\"1120\"},\"name\":\"恢复出厂\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":11,\"accessMode\":\"ro\",\"code\":\"battery_percentage\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_battery\",\"attribute\":\"1152\"},\"name\":\"电池电量\",\"typeSpec\":{\"type\":\"value\",\"max\":100,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"%\"}},{\"abilityId\":12,\"accessMode\":\"ro\",\"code\":\"charge_state\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-battery\",\"attribute\":\"1024\"},\"name\":\"充电状态\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":14,\"accessMode\":\"ro\",\"code\":\"fault\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_notice\",\"scope\":\"fault\",\"attribute\":\"1024\"},\"name\":\"故障告警\",\"typeSpec\":{\"type\":\"bitmap\",\"label\":[\"food_shortages\",\"food_jam\",\"battery_low\",\"ac_power_off\"],\"maxlen\":4}},{\"abilityId\":15,\"accessMode\":\"ro\",\"code\":\"feed_report\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_upload\",\"attribute\":\"1152\",\"id\":15,\"trigger\":\"direct\"},\"name\":\"喂食结果上报\",\"typeSpec\":{\"type\":\"value\",\"max\":20,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":19,\"accessMode\":\"rw\",\"code\":\"light\",\"description\":\"\",\"extensions\":{\"iconName\":\"icon-dp_light2\",\"attribute\":\"1153\"},\"name\":\"指示灯开关\",\"typeSpec\":{\"type\":\"bool\"}},{\"abilityId\":101,\"accessMode\":\"ro\",\"code\":\"power_state\",\"description\":\"\",\"name\":\"适配器状态\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"no_adapter\",\"ac_power_off\",\"ac_power_on\"]}},{\"abilityId\":103,\"accessMode\":\"ro\",\"code\":\"mode\",\"description\":\"\",\"name\":\"工作模式\",\"typeSpec\":{\"type\":\"enum\",\"range\":[\"real_time_mode\",\"eco_mode\"]}},{\"abilityId\":112,\"accessMode\":\"rw\",\"code\":\"mfeed_speech_volume\",\"description\":\"\",\"extensions\":{\"attribute\":\"4\"},\"name\":\"音量\",\"typeSpec\":{\"type\":\"value\",\"max\":3,\"min\":0,\"scale\":0,\"step\":1,\"unit\":\"\"}},{\"abilityId\":116,\"accessMode\":\"ro\",\"code\":\"battery_capacity\",\"description\":\"\",\"name\":\"电量\",\"typeSpec\":{\"type\":\"string\",\"maxlen\":255}}]}]}"
"success": true,
"t": 1724424334748,
"tid": "5aa0aaef615e11ef883136d89ae34f8e"