From e5ed67a282a0abe69b95d1c76ae3dec99d3cdb78 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Sat, 15 Aug 2026 02:48:45 -0700 Subject: [PATCH] flow: add Dual Outlet - Couch to single-press button automation Dual plug only responds to per-channel state_1/state_2 commands, not the shared {state:TOGGLE} payload. Route single-filter through a couch-mapper that emits {"state_1":"TOGGLE","state_2":"TOGGLE"} so both outlets flip. Also adds state-in node, /set out node, and dashboard widget showing state_1/state_2. Verified E2E + 567 Rego checks pass. Refs: david/nr-flow-validator#2 --- flows/zigbee-monitor.yaml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/flows/zigbee-monitor.yaml b/flows/zigbee-monitor.yaml index 14ad8c9..043677d 100644 --- a/flows/zigbee-monitor.yaml +++ b/flows/zigbee-monitor.yaml @@ -10,6 +10,7 @@ single_plugs: - Squiggle - Sideboard Lamp - Bamboo Lights + - Dual Outlet - Couch # Plugs toggled on press-hold-release (action: "release" after a "hold") hold_plugs: @@ -53,6 +54,12 @@ flows: topic: zigbee2mqtt/DJ Booth qos: 0 + - id: zigbee-state-couch + type: mqtt in + broker: mosquitto + topic: zigbee2mqtt/Dual Outlet - Couch + qos: 0 + - id: button-in type: mqtt in broker: mosquitto @@ -113,6 +120,18 @@ flows: broker: mosquitto topic: zigbee2mqtt/DJ Booth/set + - id: couch-mapper + type: function + name: Toggle both outlets + code: | + msg.payload = { state_1: 'TOGGLE', state_2: 'TOGGLE' }; + return msg; + + - id: plug-out-couch + type: mqtt out + broker: mosquitto + topic: zigbee2mqtt/Dual Outlet - Couch/set + - id: text-squiggle type: ui-text group: Plugs @@ -141,6 +160,13 @@ flows: format: "{{msg.payload.state}}" order: 4 + - id: text-couch + type: ui-text + group: Plugs + label: Dual Outlet - Couch + format: "{{msg.payload.state_1}} / {{msg.payload.state_2}}" + order: 6 + - id: permit-btn type: ui-button group: Plugs @@ -160,7 +186,9 @@ flows: zigbee-state-sideboard: [text-sideboard] zigbee-state-bamboo: [text-bamboo] zigbee-state-djbooth: [text-djbooth] + zigbee-state-couch: [text-couch] button-in: [single-filter, hold-filter] - single-filter: [plug-out-squiggle, plug-out-sideboard, plug-out-bamboo] + single-filter: [plug-out-squiggle, plug-out-sideboard, plug-out-bamboo, couch-mapper] + couch-mapper: [plug-out-couch] hold-filter: [plug-out-djbooth] permit-btn: [mqtt-out]