Files
kkelomatic_home/docs/integration/ha-to-nvl-function.js
nearxos f0d883b8c2 Remove obsolete INFORMATION_NEEDED.md and streamline README.md for clarity
- Deleted the INFORMATION_NEEDED.md file as it was no longer necessary for documentation.
- Revised README.md to enhance the overview of the home automation system, focusing on how services and CODESYS connectivity work.
- Updated project structure in README.md for better organization and clarity, including links to relevant documentation.

This update simplifies the documentation and improves the overall user experience for developers and users of the home automation system.
2026-02-08 17:09:30 +02:00

32 lines
1.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Writes to state.rooms.cmd_livingroom (NVL variable cmd_livingroom).
const ROOM_NAME = 'cmd_livingroom';
const entityId = (msg.topic || '').toString();
const parts = entityId.split('_');
const last = parts[parts.length - 1] || '';
const num = parseInt(last, 10);
const lightNum = (!isNaN(num) && num >= 1) ? Math.min(6, num) : 1;
// Normalize state: HA / trigger-state can send payload as string, object with .state, or data.new_state.state
let rawState = msg.payload;
if (rawState !== null && typeof rawState === 'object' && rawState.state !== undefined) rawState = rawState.state;
if (msg.data && msg.data.new_state && msg.data.new_state.state !== undefined) rawState = msg.data.new_state.state;
const isOn = (rawState === 'on' || rawState === true);
node.warn('[HA to NVL] topic=' + entityId + ' rawState=' + JSON.stringify(rawState) + ' → lightNum=' + lightNum + ' isOn=' + isOn);
if (!flow.get('nvlInState')) flow.set('nvlInState', { rooms: {}, boiler: {} });
const state = flow.get('nvlInState');
if (!state.rooms[ROOM_NAME]) state.rooms[ROOM_NAME] = {};
const r = state.rooms[ROOM_NAME];
r['ha_l' + lightNum + '_on'] = false;
r['ha_l' + lightNum + '_off'] = false;
if (isOn) r['ha_l' + lightNum + '_on'] = true;
else r['ha_l' + lightNum + '_off'] = true;
flow.set('nvlInState', state);
node.warn('[HA to NVL] set cmd_livingroom ha_l' + lightNum + '_' + (isOn ? 'on' : 'off') + '=true, buildAndSend');
// PLC uses R_TRIG (rising edge). If "off" still doesnt work, add a flow: after this node, 80ms delay then clear ha_l*_off and buildAndSend again (pulse).
msg.payload = { buildAndSend: true };
return msg;