UNPKG

@wago/node-red-wdx-alarm

Version:
1,046 lines (833 loc) 25.7 kB
/** * Elrest - Node RED - Runtime Node * * @copyright 2024 Elrest Automations Systeme GMBH */ module.exports = function (RED) { "use strict"; const WDXSchema = require("@wago/wdx-schema-base"); const WS_STATUS_ONLINE_COLOR = 'green'; //@todo Wago green not work as format: #6EC800 , rgb(110, 200, 0) const WS_STATUS_OFFLINE_COLOR = 'red'; const WS_STATUS_ERROR_COLOR = 'red'; const WS_STATUS_CONNECTING_COLOR = 'blue'; const WS_STATUS_CODES = { CONNECTING: 'CONNECTING', OPEN: 'OPEN', CLOSING: 'CLOSING', CLOSED: 'CLOSED' }; const NODE_STATUS = { OPEN: { fill: WS_STATUS_ONLINE_COLOR, shape: "dot", text: "Open" }, ERROR: { fill: WS_STATUS_ERROR_COLOR, shape: "dot", text: "Error" }, CLOSED: { fill: WS_STATUS_OFFLINE_COLOR, shape: "dot", text: "Closed" }, CONNECTING: { fill: WS_STATUS_CONNECTING_COLOR, shape: "dot", text: "Connecting" }, CLOSING: { fill: WS_STATUS_CONNECTING_COLOR, shape: "dot", text: "Closing" } }; //wago.wdx.alarm.list function EDesignRuntimeAlarmList(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const offset = msg.offset ?? config['offset'] ?? undefined; const limit = msg.offset ?? config['limit'] ?? undefined; const request = new WDXSchema.WDX.Schema.Message.Alarm.ListRequest( { take: limit, skip: offset, } ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingListResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmList.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.list", EDesignRuntimeAlarmList,); //wago.wdx.alarm.list-active function EDesignRuntimeAlarmListActive(config) { RED.nodes.createNode(this, config); this.status(NODE_STATUS.CONNECTING); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const offset = msg.offset ?? config['offset'] ?? undefined; const limit = msg.offset ?? config['limit'] ?? undefined; const request = new WDXSchema.WDX.Schema.Message.Alarm.ListRequest( { active: true, take: limit, skip: offset, } ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingListResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmList.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.list-active", EDesignRuntimeAlarmListActive,); //wago.wdx.alarm.list-history function EDesignRuntimeAlarmListHistory(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const offset = msg.offset ?? config['offset'] ?? undefined; const limit = msg.offset ?? config['limit'] ?? undefined; const alarmCode = msg.alarmCode ?? config['alarmCode'] ?? undefined; const request = new WDXSchema.WDX.Schema.Message.Alarm.ListHistoryRequest( { code:alarmCode, skip:offset, take: limit, } ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingListHistoryResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmList.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.list-history", EDesignRuntimeAlarmListHistory,); //wago.wdx.alarm.confirm function EDesignRuntimeAlarmConfirm(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const request = new WDXSchema.WDX.Schema.Message.Alarm.ConfirmRequest( msg.alarmId ?? config['alarmId'] ?? undefined, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingConfirmResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmConfirm.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.confirm", EDesignRuntimeAlarmConfirm,); //wago.wdx.alarm.confirm-all function EDesignRuntimeAlarmConfirmAll(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const request = new WDXSchema.WDX.Schema.Message.Alarm.ConfirmRequest(); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingConfirmResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmConfirmAll.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.confirm-all", EDesignRuntimeAlarmConfirmAll,); //wago.wdx.alarm.changes function EDesignRuntimeAlarmChanges(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { if (true === msg.subscribe) { if (undefined === this.subscription || true === this.subscription.closed) { const request = new WDXSchema.WDX.Schema.Message.Alarm.SubscribeRequest(); this.subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if ((wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingSubscribeResponse && wsMessage.uuid === request.uuid) || wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingUpdate) { msg.topic = wsMessage.topic; if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.status( { fill: "green", shape: "ring", text: "Open - Subscribed" }, ); this.send([msg, null, null,]); } } }, error: (subscribtionError) => { console.error("EDesignRuntimeAlarmChanges.input.wsMessages.error", subscribtionError); msg.payload = subscribtionError; this.send([null, msg]); }, complete: () => { this.status(NODE_STATUS.OPEN); msg.payload = "complete"; this.send([null, null, msg]); }, } ); wsClient.wsSend(request); } } else if (undefined !== this.subscription && false === this.subscription.closed) { this.subscription.unsubscribe(); this.status(NODE_STATUS.OPEN); msg.payload = "complete"; this.send([null, null, msg]); } }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.monitor", EDesignRuntimeAlarmChanges,); //wago.wdx.alarm.detail function EDesignRuntimeAlarmDetail(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarmUuid = msg.alarmUuid ?? config['alarmUuid'] ?? undefined; if (undefined === alarmUuid) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.DetailRequest( alarmUuid, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingDetailResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmDetail.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.detail", EDesignRuntimeAlarmDetail,); function EDesignRuntimeAlarmSave(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarm = msg.alarm ?? config['alarm'] ?? undefined; if (undefined === alarm) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.SetRequest( alarm, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingSetResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmSave.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmSave.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.save", EDesignRuntimeAlarmSave,); //wago.wdx.alarm.delete function EDesignRuntimeAlarmDelete(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarmUuid = msg.alarmUuid ?? config['alarmUuid'] ?? undefined; if (undefined === alarmUuid) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.DeleteRequest( alarmUuid, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingDeleteResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmDelete.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.delete", EDesignRuntimeAlarmDelete,); //wago.wdx.alarm.get-status function EDesignRuntimeAlarmGetStatus(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarmCode = msg.alarmCode ?? config['alarmCode'] ?? undefined; if (undefined === alarmCode) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.GetStatusRequest( alarmCode, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingGetStatusResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmGetStatus.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.get-status", EDesignRuntimeAlarmGetStatus,); //wago.wdx.alarm.set-active function EDesignRuntimeAlarmSetActive(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarmCode = msg.alarmCode ?? config['alarmCode'] ?? undefined; if (undefined === alarmCode) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.SetActiveRequest( alarmCode, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingSetActiveResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmSetActive.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.set-active", EDesignRuntimeAlarmSetActive,); //wago.wdx.alarm.set-inactive function EDesignRuntimeAlarmSetInactive(config) { RED.nodes.createNode(this, config); const wsClient = RED.nodes.getNode(config.client); if (wsClient) { this.status(NODE_STATUS.CONNECTING); wsClient.on('opened', (event) => { this.status(Object.assign(NODE_STATUS.OPEN, { event: "connect", _session: { type: "websocket", id: event.id } })); }); wsClient.on('erro', (event) => { this.status(Object.assign(NODE_STATUS.ERROR, { event: "error", _session: { type: "websocket", id: event.id } })); }); wsClient.on('closed', (event) => { this.status(Object.assign(NODE_STATUS.CLOSED, { event: "disconnect", _session: { type: "websocket", id: event.id } })); }); } else { this.status(NODE_STATUS.ERROR); } this.on('input', (msg, nodeSend, nodeDone) => { const alarmCode = msg.alarmCode ?? config['alarmCode'] ?? undefined; if (undefined === alarmCode) { return; } const request = new WDXSchema.WDX.Schema.Message.Alarm.SetInactiveRequest( alarmCode, ); const subscription = wsClient.wsMessages().subscribe( { next: (wsMessage) => { if (wsMessage.type === WDXSchema.WDX.Schema.Message.Type.AlarmingSetInactiveResponse && wsMessage.uuid === request.uuid) { if (undefined !== wsMessage.error) { msg.payload = wsMessage.error; this.send([null, msg]); } else { msg.payload = wsMessage.body; this.send(msg); } subscription.unsubscribe(); } }, error: (wsError) => { console.error("EDesignRuntimeAlarmSetActive.input.wsMessages.error", wsError); subscription.unsubscribe(); this.send([null, wsError]); } } ); wsClient.wsSend(request); }); this.on('close', () => { //console.log("EDesignRuntimeAlarmList.close"); this.status(NODE_STATUS.CLOSED); }); } RED.nodes.registerType("wago.wdx.alarm.set-inactive", EDesignRuntimeAlarmSetInactive,); }