mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-26 20:16: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
56 lines
2.1 KiB
HTML
56 lines
2.1 KiB
HTML
<script type="text/javascript">
|
|
RED.nodes.registerType("bf-config-set", {
|
|
category: "BetterFrame",
|
|
color: "#a6d4ff",
|
|
defaults: {
|
|
name: { value: "" },
|
|
config: { value: "", type: "bf-server-config", required: true },
|
|
type: { value: "kiosk.enabled", required: true },
|
|
id: { value: "" },
|
|
value: { value: "" },
|
|
},
|
|
inputs: 1,
|
|
outputs: 1,
|
|
icon: "betterframe.svg",
|
|
label: function () {
|
|
return this.name || ("bf set " + (this.type || ""));
|
|
},
|
|
paletteLabel: "Set Config",
|
|
});
|
|
</script>
|
|
|
|
<script type="text/html" data-template-name="bf-config-set">
|
|
<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="display.default-layout">display.default-layout</option>
|
|
<option value="kiosk.enabled">kiosk.enabled</option>
|
|
<option value="camera.enabled">camera.enabled</option>
|
|
<option value="layout.priority">layout.priority</option>
|
|
<option value="entity.name">entity.name</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="entity id" />
|
|
</div>
|
|
<div class="form-row">
|
|
<label for="node-input-value"><i class="fa fa-pencil"></i> Default value</label>
|
|
<input type="text" id="node-input-value" placeholder="(or use msg.payload)" />
|
|
</div>
|
|
<div class="form-tips">
|
|
Mutates BetterFrame state. Override <code>msg.type</code>, <code>msg.id</code>,
|
|
or <code>msg.payload</code> per-message. <code>msg.payload</code> is the new
|
|
value; the static <em>Default value</em> field is only used when payload is
|
|
absent. Response (updated entity, passwords stripped) replaces
|
|
<code>msg.payload</code>.
|
|
</div>
|
|
</script>
|