Mental model
Think of each widget as having a radio receiver tuned to its widget ID. Any message addressed to the dashboard whose payload names that ID is picked up by that widget — and depending on which keys the payload carries, the widget changes its value, its visibility, or even its position, size, and rotation on the canvas, live. The firmware helpers (updateWidget, updateWidgetPosition, …) are just
conveniences that build these payloads for you — a device can also send them raw.
The envelope
A device sends the standard message envelope; the dashboard reads the payload:payload.
Payload reference
Value update — value
No The Attitude Indicator receives
value key? The whole payload becomes the value. If the payload has other
keys (besides widgetId and the transform keys), they’re passed to the widget as
an object — this is how structured widgets receive rich data:{ roll: 12.5, pitch: -3.2 }. The 3D Viewer
accepts { roll, pitch, yaw, modelUrl, modelColor, autoRotate, zoom, … } the
same way.Visibility — v
1 shows the widget, 0 hides it — reveal an alert panel or hide controls from
the device side.
Position, size, rotation — x y w h r
Countdown control — hr min sec
Toast notification — no widget ID
visibility_time ms (min 2s, default 5s).
For richer dialogs, use the firmware
dialog helpers.
How the firmware helpers map to these messages
| Firmware call (Arduino) | Payload it sends |
|---|---|
updateWidget(target, "id", 27.4) | { "widgetId": "id", "value": 27.4 } |
updateWidget(target, "id", "text") | { "widgetId": "id", "value": "text" } |
updateWidgetPosition(target, "id", x, y, w, h, r) | { "widgetId": "id", "x", "y", "w", "h", "r" } |
updateCountdown(target, "id", "0", "5", "30") | { "widgetId": "id", "hr", "min", "sec" } |
updateFlightAttitude(target, "id", roll, pitch) | { "widgetId": "id", "roll", "pitch" } |
sendTo(target, builder) | Any raw payload you build — full control |
hyperwisor_update_widget_* functions produce the same shapes.
Worked examples
Change a label’s text from the device
Move and rotate a widget from the device
Reveal an alert panel when something goes wrong
Test it with no hardware
Open the LiveLink Simulator, connect the Device side, and send any of the JSON payloads above from the Send from Device panel — watch the widget react on the dashboard.Typed message variants
Devices can also send typed messages ("type" + widget-specific key); the
dashboard processes these too:
type | Key it reads |
|---|---|
widget_update | value (any) |
widget_status | status (string) |
widget_gauge / widget_slider | value (number) |
widget_switch | checked (boolean) |
widget_button | action (+ optional value) |
widget_heatmap | value (array of points) |
widget_text_to_speech | value (text to speak) |
Binding data
The widget-ID contract these messages ride on.
LiveLink Simulator
Fire these payloads with no hardware.

