From 903b0611b22fe66ad2d5877cd6a2a69a40f4adc5 Mon Sep 17 00:00:00 2001 From: Thiago Zenaro Date: Fri, 10 Jul 2026 14:30:44 -0300 Subject: [PATCH] Add Nova Digital NFZB-2 support --- src/devices/index.ts | 2 ++ src/devices/nova_digital.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/devices/nova_digital.ts diff --git a/src/devices/index.ts b/src/devices/index.ts index e581882771e68..777dadd943431 100644 --- a/src/devices/index.ts +++ b/src/devices/index.ts @@ -230,6 +230,7 @@ import {definitions as nodieby} from "./nodieby"; import {definitions as nodon} from "./nodon"; import {definitions as nordtronic} from "./nordtronic"; import {definitions as nous} from "./nous"; +import {definitions as novaDigital} from "./nova_digital"; import {definitions as novo} from "./novo"; import {definitions as nue3a} from "./nue_3a"; import {definitions as nyce} from "./nyce"; @@ -606,6 +607,7 @@ const definitions: DefinitionWithExtend[] = [ ...nordtronic, ...nous, ...nobo, + ...novaDigital, ...novo, ...nue3a, ...nyce, diff --git a/src/devices/nova_digital.ts b/src/devices/nova_digital.ts new file mode 100644 index 0000000000000..3e20c39f7648c --- /dev/null +++ b/src/devices/nova_digital.ts @@ -0,0 +1,35 @@ +import * as reporting from "../lib/reporting"; +import * as tuya from "../lib/tuya"; +import type {DefinitionWithExtend} from "../lib/types"; + +export const definitions: DefinitionWithExtend[] = [ + { + fingerprint: tuya.fingerprint("TS0002", ["_TZ3210_5ksufhqi"]), + model: "NFZB-2", + vendor: "Nova Digital", + description: "2-Gang switch with backlight, countdown and inching", + extend: [ + tuya.modernExtend.tuyaBase(), + tuya.modernExtend.tuyaOnOff({ + powerOutageMemory: true, + backlightModeOffOn: true, + indicatorMode: true, + onOffCountdown: true, + inchingSwitch: true, + endpoints: ["l1", "l2"], + }), + tuya.clusters.addTuyaCommonPrivateCluster(), + ], + endpoint: () => { + return {l1: 1, l2: 2}; + }, + meta: {multiEndpoint: true}, + configure: async (device, coordinatorEndpoint) => { + await tuya.configureMagicPacket(device, coordinatorEndpoint); + await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]); + await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ["genOnOff"]); + await reporting.onOff(device.getEndpoint(1)); + await reporting.onOff(device.getEndpoint(2)); + }, + }, +];