node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
78 lines (77 loc) • 2.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNode = getNode;
exports.getServerConfigNode = getServerConfigNode;
exports.getConfigNodes = getConfigNodes;
exports.getExposeAsConfigNode = getExposeAsConfigNode;
exports.debugToClient = debugToClient;
const Status_1 = require("../common/status/Status");
const const_1 = require("../const");
const globals_1 = require("../globals");
const homeAssistant_1 = require("../homeAssistant");
function getNode(nodeId) {
if (!nodeId)
return;
return globals_1.RED.nodes.getNode(nodeId);
}
function getServerConfigNode(nodeId) {
if (!nodeId) {
throw new Error('Invalid server config');
}
const node = globals_1.RED.nodes.getNode(nodeId);
if (!node) {
throw new Error('Invalid server config');
}
checkValidServerConfig(node);
return node;
}
function checkValidServerConfig(serverConfigNode) {
if (serverConfigNode.config.addon) {
return;
}
if (!(0, homeAssistant_1.hasCredentials)(serverConfigNode.credentials)) {
throw new Error('Invalid server config');
}
}
function getConfigNodes(node) {
const status = {
shape: Status_1.StatusShape.Dot,
fill: Status_1.StatusColor.Red,
text: globals_1.RED._('home-assistant.status.error'),
};
const entityConfigNode = getNode(node.config.entityConfig);
if (!entityConfigNode) {
node.status(status);
throw new Error('Invalid entity config');
}
const serverConfigNode = getServerConfigNode(entityConfigNode.config.server);
if (!serverConfigNode) {
node.status(status);
throw new Error('Invalid server config');
}
checkValidServerConfig(serverConfigNode);
return {
entityConfigNode,
serverConfigNode,
};
}
function getExposeAsConfigNode(nodeId) {
return getNode(nodeId);
}
function isConfigNode(node) {
return (node.type === const_1.NodeType.DeviceConfig ||
node.type === const_1.NodeType.EntityConfig ||
node.type === const_1.NodeType.Server);
}
function debugToClient(node, message, topic) {
if (!node.config.debugenabled && !node.config.debugEnabled)
return;
const debug = {
id: node.id,
msg: message,
name: node.name,
path: isConfigNode(node) ? node.id : `${node.z}/${node.id}`,
topic,
};
globals_1.RED.comms.publish(const_1.PRINT_TO_DEBUG_TOPIC, debug, false);
}
;