Skip to content

Commit 9633726

Browse files
authored
Update tuya.ts (tuya smart floodlight support added )
1 parent bb0e118 commit 9633726

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

src/devices/tuya.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28614,4 +28614,64 @@ export const definitions: DefinitionWithExtend[] = [
2861428614
],
2861528615
},
2861628616
},
28617+
{
28618+
fingerprint: tuya.fingerprint("TS0601", ["_TZE284_oa1odmga"]),
28619+
model: "TS0601_floodlight",
28620+
vendor: "Tuya",
28621+
description: "Smart RGBCW floodlight",
28622+
fromZigbee: [tuya.fz.datapoints],
28623+
toZigbee: [tuya.tz.datapoints],
28624+
configure: tuya.configureMagicPacket,
28625+
exposes: [e.light().withBrightness().withColorTemp([153, 500]).withColor(["hs"])],
28626+
meta: {
28627+
tuyaDatapoints: [
28628+
[1, "state", tuya.valueConverter.onOff],
28629+
// Standard Tuya light DP layout puts a work_mode enum on DP2 -
28630+
// writing a brightness number there gets silently ignored.
28631+
[
28632+
2,
28633+
"work_mode",
28634+
tuya.valueConverterBasic.lookup({
28635+
white: tuya.enum(0),
28636+
colour: tuya.enum(1),
28637+
scene: tuya.enum(2),
28638+
music: tuya.enum(3),
28639+
}),
28640+
],
28641+
// Brightness is 0-1000 on the device but 0-254 in Z2M.
28642+
[3, "brightness", tuya.valueConverter.scale0_254to0_1000],
28643+
[4, "color_temp", tuya.valueConverter.raw],
28644+
[
28645+
5,
28646+
"color",
28647+
{
28648+
to: (value) => {
28649+
// The exposed 'hs' composite uses the property
28650+
// names 'hue' and 'saturation', not 'h' and 's'.
28651+
if (value.hue !== undefined && value.saturation !== undefined) {
28652+
const hue = Math.round(value.hue);
28653+
const sat = Math.round(value.saturation * 10); // 0-100 -> 0-1000
28654+
// Keep current brightness (V) instead of forcing full,
28655+
// fall back to full brightness if we don't know it yet.
28656+
const val = value.brightness !== undefined ? Math.round(value.brightness * 10) : 1000;
28657+
const hHex = hue.toString(16).padStart(4, "0");
28658+
const sHex = sat.toString(16).padStart(4, "0");
28659+
const vHex = val.toString(16).padStart(4, "0");
28660+
return hHex + sHex + vHex;
28661+
}
28662+
return value;
28663+
},
28664+
from: (value) => {
28665+
if (typeof value === "string" && value.length >= 12) {
28666+
const hue = Number.parseInt(value.substring(0, 4), 16);
28667+
const saturation = Number.parseInt(value.substring(4, 8), 16) / 10;
28668+
return {hue, saturation};
28669+
}
28670+
return value;
28671+
},
28672+
},
28673+
],
28674+
],
28675+
},
28676+
},
2861728677
];

0 commit comments

Comments
 (0)