- flow/nodes/device.py: `device` node with params `device` and `config`;
provides the device's `in` ports, requires its `out` ports without
waking anything, never run (Node.passive), down "Offline" from presence
- DeviceDef.io and DevicePort go; GET /devices/{id} computes `io` and
`bindings` from the device nodes of published flows, in a fixed order,
cached by FlowStore.revision; the credential's scope comes from them
- issues `unknown_device` and `device_port` (wired twice; against a report
the wrong direction or dtype, or unlisted as advisory), rechecked when a
device is created or deleted; ValidationIssue.advisory is a field
- a device publishing on a bound port is credited to its node by the
server; the panel endpoint kind is gone from `_endpoints` and the canvas
- a rebuild that moves a device's bindings sends `dashboard_changed` with
an empty name, which the firmware refetches on
- startup moves each device's `io` rows into device nodes in the flows
declaring their messages, draft and published, one commit; rows no
flow declares are logged and left out
- frontend: Device node settings (device, Publishes, Follows, a port
picker from a report), palette shortcuts per reported port, DeviceDetail
lists bindings with "Use in flow" in place of the I/O editor
- docs: devices, flow editor, node types, issues, API
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""Built-in node types.
|
|
|
|
Split by the outside world each one talks to. Importing from
|
|
``fluksio.flow.nodes`` keeps working, which is what every caller does.
|
|
"""
|
|
|
|
from fluksio.flow.nodes.base import RESERVED_SETTINGS, Node
|
|
from fluksio.flow.nodes.debounce import DebounceNode
|
|
from fluksio.flow.nodes.delay import DelayNode
|
|
from fluksio.flow.nodes.device import DeviceNode
|
|
from fluksio.flow.nodes.exec import ExecNode
|
|
from fluksio.flow.nodes.file import FileNode
|
|
from fluksio.flow.nodes.http import HttpNode
|
|
from fluksio.flow.nodes.influx import InfluxDbNode
|
|
from fluksio.flow.nodes.inject import InjectNode
|
|
from fluksio.flow.nodes.logic import ChangeNode, JoinNode, RbeNode, SwitchNode
|
|
from fluksio.flow.nodes.mlp import MLPNode
|
|
from fluksio.flow.nodes.mqtt import MqttNode
|
|
from fluksio.flow.nodes.ntfy import NtfyNode
|
|
from fluksio.flow.nodes.websocket import WebSocketNode
|
|
from fluksio.flow.nodes.wren import WrenNode
|
|
|
|
__all__ = [
|
|
"ChangeNode",
|
|
"DebounceNode",
|
|
"DelayNode",
|
|
"DeviceNode",
|
|
"ExecNode",
|
|
"FileNode",
|
|
"HttpNode",
|
|
"InfluxDbNode",
|
|
"InjectNode",
|
|
"JoinNode",
|
|
"MLPNode",
|
|
"MqttNode",
|
|
"Node",
|
|
"NtfyNode",
|
|
"RESERVED_SETTINGS",
|
|
"RbeNode",
|
|
"SwitchNode",
|
|
"WebSocketNode",
|
|
"WrenNode",
|
|
]
|