Bêta précoce (0.1.0), pas encore pour un process critique. Voir la roadmap
PNeX logo

Flows

Automatisation visuelle avec un runtime Node-RED-like full-Rust

PNeX automatise les pipelines de données et les réactions avec des flows : des graphes visuels édités en glissant des nœuds sur un canvas et en les câblant — le modèle Node-RED, mais le runtime entier est Rust et supervisé par le serveur.

L'éditeur

L'éditeur est dessiné par l'app elle-même — un canvas WebAssembly pur avec drag & drop, pan/zoom, inspecteur par nœud, validation locale avant save et versionnage append-only avec rollback en un clic. Chaque save utilise la concurrence optimiste : une édition conflictuelle renvoie 409 et propose recharger ou écraser.

Canvas de flow : inject, lecture appareil, fonction, écriture appareil, notification, debug et métrique

Inspecteur du nœud de lecture appareil

Inspecteur du nœud de notification

Le runtime

Déployer un flow compile le graphe typé au format du runtime et hot-reloade un binaire Rust headless (EdgeLink vendored) supervisé par le serveur, avec restart automatique et backoff. La version déployée est celle qui tourne ; l'état de l'éditeur n'est pas le produit déployé.

Feed de debug live pendant l'appui sur le bouton FLASH

Catalogue de nœuds

NœudRôle
injectDéclencheur intervalle ou cron
pnex-control-sourceÉmet quand un interrupteur, un curseur ou un bouton d'un tableau ou d'une annotation est actionné — voir Contrôles
pnex-weatherConditions actuelles et prévisions d'un lieu (MET Norway ou Open-Meteo) — voir Cartes maison
pnex-memory-write / pnex-memory-readGarder et lire des valeurs live (sans historique) affichées par les cartes des tableaux
debugCapture des messages dans le feed de debug
pnex-sqlRequête SQL en lecture seule sur PostgreSQL
pnex-device-readLecture des dernières valeurs de pins d'un appareil (cache live d'abord)
pnex-device-writeÉcriture des pins de sortie digital ou PWM via le downlink
pnex-calcÉvaluation d'expressions sur les clés du payload
pnex-valueÉmission d'un payload fixe ou aléatoire
json-split / json-mergeSplit et merge structurels du JSON, ports nommés
pnex-metricÉcrit le résultat comme métrique de télémétrie
pnex-coolpropPropriétés thermophysiques de fluides et mélanges, in-process
pnex-notifyNotification multi-canaux depuis un template
pnex-functionExécute une fonction utilisateur versionnée (JavaScript ou Starlark)
pnex-http-fetchNœud client HTTP avec options auth et proxy
pnex-displaySonde transparente affichée en live dans l'éditeur
pnex-reg-*Cartes de régulation (tout-ou-rien chaud/froid, PID à relais temporel), destinées à être castées sur les appareils autonomes — voir plus bas
pnex-anomalyDétection d'anomalie par série (z-score robuste, bande de prévision, changement de régime) — voir Maintenance prédictive
pnex-forecastPrévision d'une série et date de franchissement d'un seuil
camera-sourceÉmet un message par image de caméra (une référence, jamais les octets)
video-recordEnregistre les images en segments MJPEG-AVI — voir Caméras & vision
vision-detectDétection d'objets avec un modèle ONNX du registre, calque de détection optionnel
event-logStocke le payload comme événement JSON cherchable (page Événements)

Le kind red est une porte de secours pour les types de nœuds compatibles Node-RED.

Trois façons de piloter les appareils

ModeFonctionnementSi le serveur tombeÉtat
ConnectéUn flow lit un appareil, décide sur le serveur, écrit sur un appareil (appareil → serveur → appareil)La logique s'arrête ; les appareils gardent leur dernière sortieDisponible — pour les usages non critiques
AutonomeLes cartes de régulation (pnex-reg-tt-heat, pnex-reg-tt-cool, pnex-reg-pid) sont authorées dans un flow, puis leur config est castée sur l'appareil, qui régule seul depuis sa flashContinue de réguler et garde ses métriques jusqu'au retour du serveurÀ venir
Mesh (M2M)La topologie est configurée dans PNeX ; les appareils se parlent directementLe mesh continue de tourner entre appareilsPlus tard, en conception

Voir la roadmap pour les dates.

Gates de déploiement : un pin déjà assigné à un autre flow est refusé (409), et le serveur ne pousse jamais une écriture de pin de sa propre initiative — seul le flow ou l'opérateur écrit.

On this page