BetterFrame/nodered/src/bf-config-get.html
Mitchell R bd48c853e6 feat: restructure Node-RED nodes + server event emission
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
2026-05-13 02:26:08 +02:00

54 lines
2 KiB
HTML

<script type="text/javascript">
RED.nodes.registerType("bf-config-get", {
category: "BetterFrame",
color: "#a6d4ff",
defaults: {
name: { value: "" },
config: { value: "", type: "bf-server-config", required: true },
type: { value: "cameras", required: true },
id: { value: "" },
},
inputs: 1,
outputs: 1,
icon: "betterframe.svg",
label: function () {
return this.name || ("bf get " + (this.type || ""));
},
paletteLabel: "Get Config",
});
</script>
<script type="text/html" data-template-name="bf-config-get">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" />
</div>
<div class="form-row">
<label for="node-input-config"><i class="fa fa-cog"></i> BF</label>
<input type="text" id="node-input-config" />
</div>
<div class="form-row">
<label for="node-input-type"><i class="fa fa-list"></i> Type</label>
<select id="node-input-type">
<option value="displays">displays</option>
<option value="kiosks">kiosks</option>
<option value="cameras">cameras</option>
<option value="layouts">layouts</option>
<option value="entities">entities</option>
<option value="display-by-id">display-by-id</option>
<option value="kiosk-by-id">kiosk-by-id</option>
<option value="camera-by-id">camera-by-id</option>
<option value="layout-by-id">layout-by-id</option>
<option value="entity-by-id">entity-by-id</option>
</select>
</div>
<div class="form-row">
<label for="node-input-id"><i class="fa fa-hashtag"></i> ID</label>
<input type="text" id="node-input-id" placeholder="(only for *-by-id)" />
</div>
<div class="form-tips">
Fetches BetterFrame state via admin API. Override <code>msg.type</code> or
<code>msg.id</code> per-message. Result lands on <code>msg.payload</code>.
Credential fields are stripped server-side.
</div>
</script>