mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-27 01:46:35 +00:00
Renames:
- bf-config → bf-server-config (config node clarity)
- bf-event-in → bf-kiosk-camera-event (specific camera trigger)
New trigger nodes (input-only, under "BetterFrame Triggers"):
- bf-trigger-display-power, bf-trigger-layout-changed,
bf-trigger-kiosk-changed, bf-trigger-camera-changed
New flow nodes:
- bf-config-get: query state by type (displays/kiosks/cameras/layouts/
entities, or by-id)
- bf-config-set: mutate via typed setters (default-layout, enabled,
priority, name)
Server-side event emission:
- shared/strip-secrets.ts: recursive password scrub
- New JSON admin endpoints: GET/POST /api/admin/{displays,kiosks,
layouts,entities}[/:id]
- Coordinator-ws fires kiosk.changed on connect/disconnect/heartbeat
- Layout/power/camera routes call nodered.forward() on state change
38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
/**
|
|
* bf-trigger-camera-changed — fires when a camera entity is created, updated,
|
|
* or deleted in admin.
|
|
*
|
|
* Topic filter: `camera.changed`. Server emits these from the admin camera
|
|
* routes (manual create, ONVIF import, edit, delete, enable/disable).
|
|
*
|
|
* Output msg.payload: { camera_id, event: "created" | "updated" | "deleted" }
|
|
*/
|
|
module.exports = function (RED) {
|
|
function BfTriggerCameraChangedNode(config) {
|
|
RED.nodes.createNode(this, config);
|
|
const node = this;
|
|
|
|
node.on("input", function (msg, send, done) {
|
|
const body = (msg && msg.payload && typeof msg.payload === "object") ? msg.payload : {};
|
|
const topic = msg.topic || body.topic || "camera.changed";
|
|
if (String(topic) !== "camera.changed") {
|
|
return done && done();
|
|
}
|
|
const out = {
|
|
topic: "camera.changed",
|
|
payload: {
|
|
camera_id: body.camera_id !== undefined ? body.camera_id : null,
|
|
event: body.event || null,
|
|
},
|
|
};
|
|
node.status({
|
|
fill: "green",
|
|
shape: "dot",
|
|
text: String(out.payload.camera_id || "") + " " + (out.payload.event || ""),
|
|
});
|
|
send(out);
|
|
done && done();
|
|
});
|
|
}
|
|
RED.nodes.registerType("bf-trigger-camera-changed", BfTriggerCameraChangedNode);
|
|
};
|