@wago/node-red-wdx-alarm
Version:
WAGO - Node RED - WDX Alarm
1,046 lines (833 loc) • 25.7 kB
JavaScript
/**
* 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,);
}