Skip to content

Commit 1dbb085

Browse files
authored
Return datetimes for Tuya timestamp sensors (#4047)
1 parent c4e2a1c commit 1dbb085

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

tests/test_tuya_valve.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ async def test_giex_02_quirk(zigpy_device_from_v2_quirk, model, manuf, use_minut
181181
async def test_giex_functions():
182182
"""Test various Giex Valve functions."""
183183
assert zhaquirks.tuya.tuya_valve.giex_string_to_td("12:01:05,3") == 43265
184-
assert zhaquirks.tuya.tuya_valve.giex_string_to_ts("--:--:--") is None
184+
assert zhaquirks.tuya.tuya_valve.giex_string_to_dt("--:--:--") is None
185185

186186
class MockDatetime:
187187
def now(self, tz: timezone):
@@ -193,11 +193,9 @@ def strptime(self, v: str, fmt: str):
193193
return datetime.strptime(v, fmt)
194194

195195
with patch("zhaquirks.tuya.tuya_valve.datetime", MockDatetime()):
196-
assert (
197-
zhaquirks.tuya.tuya_valve.giex_string_to_ts("20:12:01")
198-
== datetime.fromisoformat("2024-10-02T12:10:23+04:00").timestamp()
199-
+ zhaquirks.tuya.tuya_valve.UNIX_EPOCH_TO_ZCL_EPOCH
200-
)
196+
assert zhaquirks.tuya.tuya_valve.giex_string_to_dt(
197+
"20:12:01"
198+
) == datetime.fromisoformat("2024-10-02T20:12:01+04:00")
201199

202200

203201
@pytest.mark.parametrize(

zhaquirks/tuya/tuya_valve.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,16 +211,17 @@ def giex_string_to_td(v: str) -> int:
211211
return timedelta(hours=dt.hour, minutes=dt.minute, seconds=dt.second).seconds
212212

213213

214-
def giex_string_to_ts(v: str) -> int | None:
214+
def giex_string_to_dt(v: str) -> datetime | None:
215215
"""Convert Giex String Duration datetime."""
216216
dev_tz = timezone(timedelta(hours=4))
217217
dev_dt = datetime.now(dev_tz)
218+
218219
try:
219220
dt = datetime.strptime(v, "%H:%M:%S").replace(tzinfo=dev_tz)
220-
dev_dt.replace(hour=dt.hour, minute=dt.minute, second=dt.second)
221221
except ValueError:
222222
return None # on initial start the device will return '--:--:--'
223-
return int(dev_dt.timestamp() + UNIX_EPOCH_TO_ZCL_EPOCH)
223+
else:
224+
return dev_dt.replace(hour=dt.hour, minute=dt.minute, second=dt.second)
224225

225226

226227
gx02_base_quirk = (
@@ -273,7 +274,7 @@ def giex_string_to_ts(v: str) -> int | None:
273274
dp_id=101,
274275
attribute_name="irrigation_start_time",
275276
type=t.CharacterString,
276-
converter=lambda x: giex_string_to_ts(x),
277+
converter=lambda x: giex_string_to_dt(x),
277278
device_class=SensorDeviceClass.TIMESTAMP,
278279
translation_key="irrigation_start_time",
279280
fallback_name="Irrigation start time",
@@ -282,7 +283,7 @@ def giex_string_to_ts(v: str) -> int | None:
282283
dp_id=102,
283284
attribute_name="irrigation_end_time",
284285
type=t.CharacterString,
285-
converter=lambda x: giex_string_to_ts(x),
286+
converter=lambda x: giex_string_to_dt(x),
286287
device_class=SensorDeviceClass.TIMESTAMP,
287288
translation_key="irrigation_end_time",
288289
fallback_name="Irrigation end time",

0 commit comments

Comments
 (0)