chore: clean up superproject structure
Some checks failed
CI / lint-and-test (push) Has been cancelled

Move content to correct locations:
- AGENTS.md → .agents/AGENTS.md (with orchestrator reference update)
- third_party/docs/ (8 reference docs) → wiki/concepts/
- manuals/ (12 Node-RED docs) → wiki/manuals/

Delete 23 unreferenced one-off scripts from scripts/ (keeping 5 active).
Delete stale Dockerfile.e2e, docker-compose.e2e.yml, test/e2e/.
Remove empty third_party/ directory.

Root is now: README, CLAUDE.md, LICENSE, package.json, Makefile,
Dockerfile, docker-compose.yml, docker/, scripts/ (5), nodes/, wiki/,
plus dotfiles (.agents, .claude, .gitea).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
znetsixe
2026-04-07 18:01:04 +02:00
parent bac6c620b1
commit 48f790d123
55 changed files with 21 additions and 5670 deletions

View File

@@ -0,0 +1,121 @@
# FlowFuse `ui-chart` Manual (EVOLV Reference)
Source: https://dashboard.flowfuse.com/nodes/widgets/ui-chart.html
## Chart Types
| Type | X-Axis Options | Notes |
|------|---------------|-------|
| Line | timescale, linear, categorical | Interpolation: linear, step, bezier, cubic, cubic-mono |
| Bar | categorical | Grouped (side-by-side) or stacked |
| Scatter | timescale, linear, categorical | Configurable point shape & radius |
| Pie / Doughnut | radial | Nested series for multi-layer |
| Histogram | auto-binned | Numerical bins or categorical counting |
## Properties
| Property | Type | Dynamic | Notes |
|----------|------|---------|-------|
| `group` | ref | No | Parent ui-group |
| `width` | int | No | Columns |
| `height` | int | No | Row units |
| `label` | string | No | Chart title |
| `chartType` | string | No | `"line"`, `"bar"`, `"scatter"`, `"pie"`, `"histogram"` |
| `showLegend` | bool | No | Show series legend |
| `action` | string | Yes | `"append"` or `"replace"` |
| `pointShape` | string | No | Point marker shape (scatter/line) |
| `xAxisLimit` | int | No | Max data points to keep |
| `textColor` | color | No | Override text color |
| `gridColor` | color | No | Override grid lines |
| `xAxisType` | string | No | `"time"`, `"linear"`, `"category"` |
## Series Configuration
| Source | How It Works |
|--------|-------------|
| `msg.topic` | Default — each unique topic creates a series |
| `key` | Uses a named property from data object |
| `JSON` | Array of keys for multi-series from single msg |
| (blank) | Auto-generates timestamp for x |
## Input Format
### Simple (recommended for EVOLV)
```js
{ topic: "PS West Level", payload: 2.34, timestamp: Date.now() }
```
### Object with x/y mapping
```js
{ payload: { time: 1700000000000, value: 2.34 } }
// Configure x → "time", y → "value"
```
### Nested access
X/Y keys support dot notation: `"nested.value"``payload.nested.value`
## Dynamic Properties
| Property | Path | Notes |
|----------|------|-------|
| Action | `msg.action` | `"append"` or `"replace"` |
| Chart Options | `msg.ui_update.chartOptions` | eCharts config merge |
| CSS Class | `msg.class` | Add custom class |
## eCharts Customization (`msg.ui_update.chartOptions`)
Deep-merges with existing config. Accumulates across messages.
```js
msg.ui_update = {
chartOptions: {
yAxis: { position: "right", name: "Level (m)" },
grid: { top: 60, right: 40 },
title: { text: "Basin Levels", textStyle: { fontSize: 14 } }
}
};
```
**Series colors** — must provide all series configs together:
```js
msg.ui_update = {
chartOptions: {
series: [
{ name: "PS West", type: "line", lineStyle: { color: "#2196f3" }, itemStyle: { color: "#2196f3" } },
{ name: "PS North", type: "line", lineStyle: { color: "#ff9800" }, itemStyle: { color: "#ff9800" } }
]
}
};
```
## Data Actions
| Action | How | Effect |
|--------|-----|--------|
| Append | `msg.action = "append"` (default) | Add points to existing data |
| Replace | `msg.action = "replace"` | Clear then add |
| Clear | `msg.payload = []` | Remove all data |
## Time Formatting Tokens
`{HH}:{mm}:{ss}``12:00:00`
`{yyyy}-{M}-{d}``2020-1-1`
Tokens: `{yyyy}`, `{MM}`, `{dd}`, `{HH}`, `{H}`, `{hh}`, `{h}`, `{mm}`, `{m}`, `{ss}`, `{s}`, `{eeee}` (day name)
## EVOLV Key Rules
1. Send minimal `{ topic, payload, timestamp }` — chart auto-uses topic for series.
2. Set `category: "topic"`, `categoryType: "msg"` in node config — blank category causes editor validation errors.
3. For timeseries: leave x-key blank → auto-timestamp. Supply ms timestamps if custom.
4. For multi-station overlay charts: each station sends with a different `msg.topic`.
5. Use `msg.action = "append"` (default) for streaming data; `"replace"` for snapshot updates.
6. Keep one topic per chart for simple KPIs; use multi-topic for comparison views.
7. Prefer explicit output-slot routing: `node.send([msgForChart, msgForText, ...]); return null;`
## Common Failure Modes
- Payload is not numeric (string/object without y-key config)
- Function node returns to wrong output index
- Topic churn creates unexpected series fragmentation
- Chart has stale data policy mismatch (`append` vs `replace`)
- Blank `category` field causes red node on deploy