zigbee2mqtt
Version:
Zigbee to MQTT bridge using Zigbee-herdsman
62 lines • 4.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initSdNotify = initSdNotify;
const node_os_1 = require("node:os");
const logger_1 = __importDefault(require("./logger"));
/**
* Handle sd_notify protocol, @see https://www.freedesktop.org/software/systemd/man/latest/sd_notify.html
* No-op if running on unsupported platforms or without Type=notify
* Soft-fails if improperly setup (this is not necessary for Zigbee2MQTT to function properly)
*/
async function initSdNotify() {
if (!process.env.NOTIFY_SOCKET) {
return;
}
let socket;
try {
const { createSocket } = await import('unix-dgram');
socket = createSocket('unix_dgram');
}
catch (error) {
if ((0, node_os_1.platform)() !== 'win32' || process.env.WSL_DISTRO_NAME) {
// not on plain Windows
logger_1.default.error(`Could not init sd_notify: ${error.message}`);
logger_1.default.debug(error.stack);
}
else {
// this should not happen
logger_1.default.warning(`NOTIFY_SOCKET env is set: ${error.message}`);
}
return;
}
const sendToSystemd = (msg) => {
const buffer = Buffer.from(msg);
socket.send(buffer, 0, buffer.byteLength, process.env.NOTIFY_SOCKET, (err) => {
if (err) {
logger_1.default.warning(`Failed to send "${msg}" to systemd: ${err.message}`);
}
});
};
const notifyStopping = () => sendToSystemd('STOPPING=1');
sendToSystemd('READY=1');
const wdUSec = process.env.WATCHDOG_USEC !== undefined ? Math.max(0, parseInt(process.env.WATCHDOG_USEC, 10)) : -1;
if (wdUSec > 0) {
// Convert us to ms, send twice as frequently as the timeout
const watchdogInterval = setInterval(() => sendToSystemd('WATCHDOG=1'), wdUSec / 1000 / 2);
return {
notifyStopping,
stop: () => clearInterval(watchdogInterval),
};
}
if (wdUSec !== -1) {
logger_1.default.warning(`WATCHDOG_USEC invalid: "${process.env.WATCHDOG_USEC}", parsed to "${wdUSec}"`);
}
return {
notifyStopping,
stop: () => { },
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Qtbm90aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWwvc2Qtbm90aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBV0Esb0NBd0RDO0FBakVELHFDQUFpQztBQUVqQyxzREFBOEI7QUFFOUI7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxZQUFZO0lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLE9BQU87SUFDWCxDQUFDO0lBRUQsSUFBSSxNQUFtQyxDQUFDO0lBRXhDLElBQUksQ0FBQztRQUNELE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxJQUFBLGtCQUFRLEdBQUUsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4RCx1QkFBdUI7WUFDdkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsNkJBQThCLEtBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLGdCQUFNLENBQUMsS0FBSyxDQUFFLEtBQWUsQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNKLHlCQUF5QjtZQUN6QixnQkFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBOEIsS0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELE9BQU87SUFDWCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtRQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixnQkFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsR0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9ELGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV6QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuSCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNiLDREQUE0RDtRQUM1RCxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRixPQUFPO1lBQ0gsY0FBYztZQUNkLElBQUksRUFBRSxHQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hCLGdCQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsaUJBQWlCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELE9BQU87UUFDSCxjQUFjO1FBQ2QsSUFBSSxFQUFFLEdBQVMsRUFBRSxHQUFFLENBQUM7S0FDdkIsQ0FBQztBQUNOLENBQUMifQ==