Skip to content

Commit 53d6143

Browse files
committed
feat(tuya): Add Arteco ZS-304Z soil moisture sensor
Adds support for the Arteco ZS-304Z (TS0601) soil moisture sensor (_TZE284_o9ofysmo). This device provides: - Soil moisture (DP 3) - Temperature (DP 5) - Humidity (DP 101) - Illuminance (DP 102) - Battery state (DP 14, mapped to percentage remaining) It also includes various configuration parameters: - Soil sampling interval (DP 103) - Calibration for soil, humidity, illuminance, and temperature (DPs 104-107) - Soil warning threshold (DP 110) - Water warning binary sensor (DP 111) Signed-off-by: Enrique Hernández Bello <[email protected]>
1 parent 35d1fc1 commit 53d6143

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

zhaquirks/tuya/tuya_sensor.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,81 @@ class ServerCommandDefs(TuyaMCUCluster.ServerCommandDefs):
333333
.skip_configuration()
334334
.add_to_registry()
335335
)
336+
337+
(
338+
TuyaQuirkBuilder("_TZE284_o9ofysmo", "TS0601") # Arteco ZS-304Z
339+
.tuya_soil_moisture(dp_id=3)
340+
.tuya_temperature(dp_id=5, scale=10)
341+
# DP 14 is Battery State (Enum: 0=Low, 1=Middle, 2=High).
342+
# We convert it to Zigbee percentage (0-200) for standard integration.
343+
# 0 -> 20 (10%), 1 -> 100 (50%), 2 -> 200 (100%)
344+
.tuya_dp(
345+
dp_id=14,
346+
ep_attribute=TuyaPowerConfigurationCluster2AAA.ep_attribute,
347+
attribute_name="battery_percentage_remaining",
348+
converter=lambda x: {0: 20, 1: 100, 2: 200}.get(x, 200),
349+
)
350+
.adds(TuyaPowerConfigurationCluster2AAA)
351+
.tuya_humidity(dp_id=101)
352+
.tuya_illuminance(dp_id=102)
353+
# Calibration and configuration
354+
.tuya_number(
355+
dp_id=103,
356+
attribute_name="soil_sampling",
357+
type=t.uint16_t,
358+
entity_type=EntityType.CONFIG,
359+
translation_key="soil_sampling",
360+
fallback_name="Soil sampling interval",
361+
)
362+
.tuya_number(
363+
dp_id=104,
364+
attribute_name="soil_calibration",
365+
type=t.int16s,
366+
entity_type=EntityType.CONFIG,
367+
translation_key="soil_calibration",
368+
fallback_name="Soil calibration",
369+
)
370+
.tuya_number(
371+
dp_id=105,
372+
attribute_name="humidity_calibration",
373+
type=t.int16s,
374+
entity_type=EntityType.CONFIG,
375+
translation_key="humidity_calibration",
376+
fallback_name="Humidity calibration",
377+
)
378+
.tuya_number(
379+
dp_id=106,
380+
attribute_name="illuminance_calibration",
381+
type=t.int16s,
382+
entity_type=EntityType.CONFIG,
383+
translation_key="illuminance_calibration",
384+
fallback_name="Illuminance calibration",
385+
)
386+
.tuya_number(
387+
dp_id=107,
388+
attribute_name="temperature_calibration",
389+
type=t.int16s,
390+
multiplier=0.1,
391+
step=0.1,
392+
entity_type=EntityType.CONFIG,
393+
translation_key="temperature_calibration",
394+
fallback_name="Temperature calibration",
395+
)
396+
.tuya_number(
397+
dp_id=110,
398+
attribute_name="soil_warning",
399+
type=t.uint16_t,
400+
entity_type=EntityType.CONFIG,
401+
translation_key="soil_warning",
402+
fallback_name="Soil warning threshold",
403+
)
404+
# DP 111: Water warning (0: none, 1: alarm)
405+
.tuya_binary_sensor(
406+
dp_id=111,
407+
attribute_name="water_warning",
408+
translation_key="water_warning",
409+
fallback_name="Water warning",
410+
)
411+
.skip_configuration()
412+
.add_to_registry()
413+
)

0 commit comments

Comments
 (0)