node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
103 lines (102 loc) • 3.57 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEnvironmentData = getEnvironmentData;
const axios_1 = __importDefault(require("axios"));
const promises_1 = __importDefault(require("fs/promises"));
const os_1 = __importDefault(require("os"));
const globals_1 = require("../globals");
const homeAssistant_1 = require("../homeAssistant");
const version_1 = __importDefault(require("../version"));
let addonVersionCached;
let isDockerCached;
async function hasDockerEnv() {
try {
await promises_1.default.stat('/.dockerenv');
return true;
}
catch (_a) {
return false;
}
}
async function hasDockerCGroup() {
try {
return (await promises_1.default.readFile('/proc/self/cgroup', 'utf8')).includes('docker');
}
catch (_a) {
return false;
}
}
async function isRunningInDocker() {
isDockerCached !== null && isDockerCached !== void 0 ? isDockerCached : (isDockerCached = (await hasDockerEnv()) || (await hasDockerCGroup()));
return isDockerCached;
}
function getHomeAssistantServers() {
const servers = [];
for (const [id, ha] of homeAssistant_1.homeAssistantConnections) {
const server = {
serverId: id,
version: ha.version,
integrationVersion: ha.integrationVersion,
};
if (!ha.isConnected) {
server.version = 'unknown';
}
if (!ha.isHomeAssistantRunning) {
server.integrationVersion = 'unknown';
}
servers.push(server);
}
return servers;
}
function getHomeAssistantVersionText() {
const servers = getHomeAssistantServers();
if (servers.length === 0) {
return 'No Home Assistant server configured\n';
}
if (servers.length === 1) {
const server = servers[0];
return (`Home Assistant version: ${server.version}\n` +
`Companion version: ${server.integrationVersion}\n`);
}
let content = `Home Assistant instances: ${servers.length}\n`;
for (const server of servers) {
content +=
`Server: ${server.serverId}\n` +
`Home Assistant version: ${server.version}\n` +
`Companion version: ${server.integrationVersion}\n`;
}
return content;
}
async function getAddonVersion() {
if (addonVersionCached || !process.env.SUPERVISOR_TOKEN)
return addonVersionCached;
try {
const response = await axios_1.default.get('http://supervisor/addons/self/info', {
headers: {
Authorization: `Bearer ${process.env.SUPERVISOR_TOKEN}`,
},
});
addonVersionCached = response.data.data.version;
return addonVersionCached;
}
catch (err) {
return 'error fetching version';
}
}
async function getEnvironmentData() {
var _a;
const content = `Version: ${version_1.default}\n` +
`\n` +
`${getHomeAssistantVersionText()}` +
`\n` +
`Node-RED version: ${globals_1.RED.version()}\n` +
`Docker: ${(await isRunningInDocker()) ? 'yes' : 'no'}\n` +
`Add-on: ${(_a = (await getAddonVersion())) !== null && _a !== void 0 ? _a : 'no'}\n` +
`\n` +
`Node.js version: ${process.version} ${process.arch} ${process.platform}\n` +
`OS: ${os_1.default.type()} ${os_1.default.release()} ${os_1.default.arch()}\n`;
return content;
}
;