Initial commit: CODESYS tree, integration docs, Node-RED scripts.
PLC application sources (NVL, rooms, boiler), HA/Node-RED integration guide, and NVL patch utilities. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
(* === DECLARATION === *)
|
||||
FUNCTION_BLOCK fb_light
|
||||
VAR_INPUT
|
||||
// Home Assistant Commands
|
||||
ha_on: BOOL; // HA command: Turn ON
|
||||
ha_off: BOOL; // HA command: Turn OFF
|
||||
|
||||
// Zigbee Switch Input
|
||||
zigbee_sw: BOOL; // Zigbee switch (edge detected)
|
||||
|
||||
// Status Feedback
|
||||
relay_status: BOOL; // Actual relay state (read from EtherCAT)
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
light_output: BOOL; // Control output to relay
|
||||
light_status: BOOL; // Status to send back (actual relay state)
|
||||
END_VAR
|
||||
VAR
|
||||
// Edge triggers
|
||||
r_trig_ha_on: R_TRIG;
|
||||
r_trig_ha_off: R_TRIG;
|
||||
r_trig_zigbee: R_TRIG;
|
||||
|
||||
// Internal state
|
||||
light_state: BOOL := FALSE;
|
||||
END_VAR
|
||||
|
||||
(* === IMPLEMENTATION === *)
|
||||
// =====================================================
|
||||
// fb_light - Implementation (per redesign)
|
||||
// =====================================================
|
||||
// Priority (highest to lowest):
|
||||
// 1. HA OFF command - Always turns light OFF
|
||||
// 2. HA ON command - Always turns light ON
|
||||
// 3. Zigbee toggle - Toggles current state
|
||||
// 4. Maintain current state
|
||||
// =====================================================
|
||||
|
||||
// Edge detection for commands
|
||||
r_trig_ha_on(CLK := ha_on);
|
||||
r_trig_ha_off(CLK := ha_off);
|
||||
r_trig_zigbee(CLK := zigbee_sw);
|
||||
|
||||
// State machine
|
||||
IF r_trig_ha_off.Q THEN
|
||||
light_state := FALSE;
|
||||
ELSIF r_trig_ha_on.Q THEN
|
||||
light_state := TRUE;
|
||||
ELSIF r_trig_zigbee.Q THEN
|
||||
light_state := NOT light_state;
|
||||
END_IF;
|
||||
|
||||
// Output assignment
|
||||
light_output := light_state;
|
||||
|
||||
// Status feedback (read from actual relay)
|
||||
light_status := relay_status;
|
||||
Reference in New Issue
Block a user