Remote-Knoten (ESP-NOW)

Übersicht

Ein Remote node ist eine kleine ESP32-Platine mit eigenen rbAmp-Modulen. Er misst dort, wo ein I2C-Kabel vom Hub nicht hinreicht: eine Garage, eine Poolpumpe, ein Warmwasserspeicher im Keller, eine Unterverteilung in einem Nebengebäude. Er sendet seine Messwerte per Funk über ESP-NOW an den Hub. Der Node ist nicht in Ihrem WLAN und hat keine eigene Adresse: Er spricht nur mit seinem Hub. Seine Kanäle werden auf dem Hub zu gewöhnlichen Points mit Live-Werten, Verlauf und Kosten wie jeder andere Point.

Diese Seite ist die vollständige Dokumentation der Nodes: Platine und Module, Verkabelung, Flashen, Koppeln, wie ein Node Zeit und Energie hält, was die App zeigt, die API und MQTT-Topics des Hubs und was zu tun ist, wenn etwas nicht stimmt. Remote nodes brauchen Hub-Firmware v1.1.7 oder neuer und Web-App 1.1.7 oder neuer. Auf einem Hub mit älterer Firmware zeigt die App gar keinen Abschnitt Nodes; „Remote nodes are not available in this hub firmware.“ erscheint nur bei einem Hub, dessen Firmware-Image keine Nodes ausführen kann.

Ein Node ist ein Sender. Er hat kein Display, keine Webseite und keinen Verlauf, den Sie lesen können, und kein Update über die Luft: Sie flashen ihn über USB. Ab Firmware 1.5 behält er abgeschlossene 15-Minuten-Perioden im eigenen Flash, bis der Hub sie hat – das ist eine Warteschlange, kein Protokoll, das Sie öffnen können. Den Rest erledigt der Hub.

Für jede Arbeit innerhalb eines Elektrokastens wenden Sie sich an einen qualifizierten Elektriker.

Was Sie brauchen

Anforderung
Node-Platine Ein originales ESP32-Modul mit 4 MB Flash. PSRAM wird nicht benötigt. Auf v1.1.7 ist die Node-Firmware nur für den originalen ESP32 gebaut und getestet: ESP32-S2-, S3- und C3-Platinen sind nicht gebaut und nicht getestet.
rbAmp-Module am Node Bis zu drei Module am I2C-Bus des Nodes, auf den Adressen 0x50, 0x51 und 0x52 (eigene Einstellung des Moduls); SDA ist GPIO 25 und SCL ist GPIO 26. Der Hub verwendet bis zu vier Stromkanäle je Node.
Ein Spannungseingang am Node Auf v1.1.7 erfasst ein Node Energie nur, wenn eines seiner Module Spannung misst. Ein Modul nur für Strom liefert am Node Live-Strom, aber keine 15-Minuten-Perioden, also keinen Verlauf und keine Kosten. Verbauen Sie ein einphasiges rbAmp-Set mit Spannungseingang.
Phasen Auf v1.1.7 misst ein Node nur einphasige Points. Es gibt am Node keine Phasengruppierung und kein „als Dreiphaseneingang verwenden“: Das gilt für ein Modul am Hub. Ein STD-U3I3 am Node ist nicht getestet.
Der Hub Firmware v1.1.7 oder neuer, mit Ihrem WLAN verbunden. Das Funkmodul des Hubs für Nodes läuft auf demselben Kanal wie Ihr Router; ein Hub ohne WLAN kann keine Nodes betreiben. Ein Hub nimmt bis zu sechs Nodes auf.
Verlaufsplätze Node-Points teilen sich die bestehenden 12 Verlaufsplätze des Hubs mit den eigenen Points des Hubs; sie kommen nicht hinzu. Der Abschnitt Nodes zeigt vor dem Koppeln „History: used of 12 points in use“.
Ein Computer mit USB Zum Flashen des Nodes und für jedes spätere Update der Node-Firmware.
Stromzangen Wie bei einem Modul am Hub; das Zangenmodell wird je Kanal am Hub eingestellt (siehe Node settings).

Den Node verkabeln

Ein Node wird wie ein kleiner Hub verdrahtet: Seine rbAmp-Module sitzen am I2C-Bus des Nodes, und die Stromzangen kommen an die Module.

  • I2C: vier Adern zwischen der ESP32-Platine und den Modulen, SDA an GPIO 25, SCL an GPIO 26, GND und 3.3 V. Die Modul-Adressen 0x50, 0x51, 0x52 werden an den Modulen eingestellt; der Node liest beim Start, welche vorhanden sind, bis zu drei. Der Bus wird durch die Pull-up-Widerstände auf den Modulen hochgezogen; bei bis zu drei Modulen an kurzen Kabeln lassen Sie sie, wie sie sind. Kabellänge und Pull-ups für andere Fälle stehen im rbAmp-Verkabelungsleitfaden, wie für Module am Hub.
  • Spannungseingang: Auf v1.1.7 muss ein Modul des Nodes seinen Spannungseingang an das Netz anschließen, das es misst; ohne das hat der Node Live-Strom, erfasst aber keine Energie (siehe What you need). Der Spannungseingang gibt dem Node außerdem die Richtung jedes Stroms, Bezug oder Einspeisung.
  • Zangen: eine je Stromkanal, an dem Leiter, den Sie messen wollen, mit der Pfeilmarkierung, wie es die rbAmp-Modul-Dokumentation beschreibt. Das Zangenmodell wird je Kanal am Hub eingestellt (siehe Node settings); ein falsches Modell skaliert die Werte falsch.
  • Stromversorgung: die übliche Versorgung der ESP32-Platine, etwa ihr USB-Anschluss oder ein 5-V-Netzteil am Eingang der Platine. Der Node hat keinen Akku und keine Überbrückung: Ein Stromausfall stoppt ihn, und die Energie der gerade offenen Periode geht verloren.
  • Standort: dort, wo er dauerhaft bleibt. Ein Node muss zum Koppeln nicht in der Nähe des Hubs stehen; die Verbindung wird dort geprüft, wo er steht (siehe Checking the link). Vermeiden Sie möglichst Metallgehäuse zwischen Node und Hub.

Für jede Arbeit innerhalb eines Elektrokastens wenden Sie sich an einen qualifizierten Elektriker.

Node-Firmware flashen

Die Node-Firmware wird mit jedem Hub-Release auf der Seite RBgrid Releases auf GitHub veröffentlicht: rbgrid-node_vX.Y.Z.bin (nur die Anwendung) und rbgrid-node_vX.Y.Z_full.zip (Bootloader, Partitionstabelle und Anwendung). Verwenden Sie die Version, die zu Ihrem Hub passt, oder eine neuere.

Versetzen Sie die Platine in den Download-Modus, installieren Sie esptool (pip install esptool) und schreiben Sie den vollständigen Satz:

python -m esptool --chip esp32 -p <PORT> -b 460800 write_flash 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 rbgrid-node_vX.Y.Z.bin

⚠️ Ein Update eines Nodes auf Firmware 1.5 schreibt alle drei Dateien, nicht nur die Anwendung. 1.5 ergänzt die Flash-Partition, in der die aufbewahrten Perioden liegen. Ein Node, dem nur die neue Anwendung gegeben wird, läuft mit 1.5, hat aber keinen Platz dafür und fällt auf acht Perioden im Speicher zurück, und die Karte sagt das nicht. Alle drei zu schreiben ist auch für jedes spätere Update richtig: Es kostet nichts, und ein unter 1.4 gekoppelter Node muss nicht neu gekoppelt werden.

Den Node-Firmware selbst zu bauen und die Pins zu ändern, falls Ihre Platine I2C anders verdrahtet, steht in node/README.md im RBgrid-Repository.

Der Node braucht keine Schlüsseldatei und keine Kanaleinstellung. Er bekommt seinen Schlüssel beim Koppeln vom Hub und findet den Kanal des Hubs selbstständig.

Die Node-Firmware selbst bauen

Der Quellcode liegt im Ordner node/ des RBgrid-Repositorys, unter derselben Lizenz wie die Hub-Firmware. Er wird mit ESP-IDF 5.5.1 gebaut (5.4.1 baut ebenfalls):

cd node
idf.py set-target esp32
idf.py build
idf.py -p <PORT> flash

Die rbAmp-Bibliothek wird zur Build-Zeit geladen (dependencies.lock fixiert ihre Version). Verdrahtet Ihre Platine I2C an anderen Pins, bauen Sie mit -DRBN_I2C_SDA=<n> -DRBN_I2C_SCL=<n>. Eine Schlüsseldatei ist nicht nötig. Die Entwicklungsvarianten im Quellcode (RBN_ROLE_MASTER, RBN_FREERUN, RBN_OUTPUT_NODE) sind nicht Teil des Releases und werden nicht unterstützt.

Einen Node koppeln

Nodes verwalten Sie unter Management → Points, im Abschnitt Remote nodes (ESP-NOW). Die Kopfzeile zeigt „n of 6 nodes“ und den Zustand des Funkmoduls für Nodes, „radio on“ oder „radio off“. Auf einem Hub, der Nodes betreiben kann, steht der Abschnitt oben auf der Seite, über rbAmp modules, und der Einrichtungsassistent bekommt einen optionalen Schritt ESP-NOW nodes („Step 5 of 8“, nach Sensors und vor Tariff).

  1. Stellen Sie den Node dort auf, wo er dauerhaft bleibt, mit eingebauten Modulen und Zangen, aber ohne Strom.
  2. Wählen Sie in der App die Pairing time (in Minuten) und drücken Sie Pair a node. Der Abschnitt sagt: „Power the node up now. It shows up below in a few seconds.“ und zählt herunter: „Waiting for a node… time left“. Stop pairing schließt das Fenster vorzeitig.
  3. Schalten Sie den Node ein (oder setzen Sie ihn zurück). Er sucht die WLAN-Kanäle nach dem Hub ab, tauscht Schlüssel mit ihm aus und erscheint in der Liste, markiert mit new. Seine Points werden sofort hinzugefügt: „Paired in this window: n. Their points are already added; no restart needed.“

Der Abschnitt Remote nodes mit geöffnetem Kopplungsfenster: «Waiting for a node… 1:56 left» und «Stop pairing», darüber die zwei Node-Karten

⚠️ Solange das Kopplungsfenster offen ist, wird jeder RBgrid-Node in Reichweite gekoppelt, der fragt. Es gibt keine PIN. Dazu gehört ein Node, der jemand anderem gehört, dessen eigener Hub verstummt ist: Ein gekoppelter Node, der etwa 150 Sekunden lang keine Antwort bekommt, fragt selbstständig nach einer neuen Kopplung. Öffnen Sie das Fenster nur, wenn Sie gleich einen Node einschalten, halten Sie es kurz und schließen Sie es mit Stop pairing, sobald Ihr Node in der Liste steht; prüfen Sie dann, dass die Liste nur die Nodes enthält, die Sie erwarten.

Die Schlüssel werden auf dem Node und auf dem Hub gespeichert. Nach einem Neustart oder nachdem das Funkmodul aus war, verbindet sich der Node selbstständig neu; Sie koppeln ihn einmal.

Prüfen Sie vor dem Koppeln die beiden Kapazitätszeilen im Abschnitt: „n of 6 nodes“ (ist der Hub voll, wird der Knopf durch „The hub takes up to 6 nodes. Remove one to pair another.“ ersetzt) und „History: used of 12 points in use. Points beyond 12 show live values only.“ (oder „History: all 12 points are in use. A new node's points will show live values only.“). Ist das Funkmodul aus, steht dort „Turn the radio for nodes on to pair one.“

Jeder Node bringt bis zu vier Points mit. Sie werden nach dem Node und seinen Kanälen benannt; benennen Sie sie um und vergeben Sie Rollen auf ihren eigenen Seiten, wie bei jedem anderen Point (siehe Points). Node-Points lassen sich nicht von Hand binden oder lösen: Ein in den Einstellungen des Nodes ausgeschalteter Kanal misst nicht mehr, und das Entfernen des Nodes entfernt seine Points.

Die Node-Karte

Der Abschnitt Remote nodes: das Funkmodul auf Kanal 6, die Kopplungssteuerung und zwei Node-Karten – eine online mit Signal, Uhrsynchronisation und zwei empfangenden Kanälen, eine seit 90 Minuten offline

Jeder gekoppelte Node hat eine Karte im Abschnitt.

Auf der Karte Was es bedeutet
online / offline Der Hub hat den Node in den letzten 15 Sekunden gehört oder nicht. Ein Node, der ausgeschaltet ist (siehe unten), zeigt off.
new Im aktuellen Kopplungsfenster gekoppelt.
Last heard „now“, „n s ago“, „n min ago“, „n h ago“ oder „not heard since the hub started“.
Signal Die Stärke des letzten Frames des Nodes in dBm, wie das Funkmodul des Hubs sie gesehen hat.
Lost packets, last minute Der Anteil der Hub-Baken, die der Node in der letzten Minute verpasst hat, in Prozent. Es zeigt „measuring (1 min)“, bis eine volle Minute vergangen ist.
Clock sync Wie genau die Uhr des Nodes der des Hubs folgt: „±n µs · n ppm“.
Firmware Die Node-Firmware-Version, sobald der Node sie gemeldet hat.
Period „15 min“. Die Periode ist fest; der Dialog Settings sagt es: „Energy records: every 15 min, fixed.“
Waiting to send Wo der Hub es meldet: die Zahl der abgeschlossenen 15-Minuten-Perioden, die der Node zurückhält, weil der Hub nicht erreichbar war (siehe How a node keeps time and energy). Hub-Firmware v1.1.7 meldet es nicht, deshalb erscheint die Zeile dort nicht.
Channel n Jeder Stromkanal des Nodes: der Point, den er speist (sein Name, ein Link zur Seite des Points; „Point key“, solange der Point noch keinen Namen hat), und sein Zustand: „receiving“, „no data“ oder „off (Settings)“.
settings not applied yet / settings not applied Einstellungen wurden an den Node gesendet, und er hat sie noch nicht bestätigt oder hat sie abgelehnt.
Signal, lost packets und clock sync fehlen Ein Node, der seit dem Start des Hubs nicht gehört wurde, hat keine davon: Die Karte lässt die drei Zeilen weg, und Last heard zeigt „not heard since the hub started“. Sie erscheinen mit dem ersten Frame des Nodes.

Die Karte hat drei Schaltflächen: Settings, Turn off / Turn on und Delete.

Die Karte eines Nodes vollständig: die MAC mit ihrem Online-Abzeichen, Last heard, Lost packets in the last minute, Clock sync, Signal, Firmware 1.5 und die 15-Minuten-Periode, mit den zwei Kanälen des Nodes an benannte Points gebunden

Node-Einstellungen

Settings öffnet „Node mac: settings“. Für jeden Kanal zeigt es Channel n measures (ein oder aus) und Current clamp, das Zangenmodell, das an diesem Kanal sitzt. „Pick the clamp actually fitted to each channel: a wrong one scales its readings wrongly. A channel turned off stops measuring.“ Mindestens ein Kanal muss eingeschaltet bleiben.

Send to the node sendet die Einstellungen über den Hub: „Sent. The node applies the settings on its next contact; the card shows «settings not applied yet» until it confirms.“ Ist der Node offline, behält der Hub die Einstellungen und übergibt sie, sobald der Node zurück ist („The node is offline. It takes the settings when it's back.“).

Die Energieperiode eines Nodes ist fest auf 15 Minuten eingestellt („Energy records: every 15 min, fixed.“); sie lässt sich nicht ändern.

Einen Node aus- und einschalten

Turn off lässt den Node gekoppelt, bewirkt aber, dass der Hub seine Daten verwirft. Die App fragt vorher: „The hub discards the node's data while it's off: that energy won't be in History or the totals, and turning it back on doesn't bring it back. To pause a node and keep its energy, leave it on.“ Solange er aus ist, zeigt die Karte off, und seine Points zeigen keine Live-Werte. Turn on nimmt den Betrieb wieder auf.

Nutzen Sie das, wenn ein Node eine Zeit lang etwas misst, das nicht mitgezählt werden soll. Um einen Node dauerhaft zu stoppen, entfernen Sie ihn.

Das Funkmodul für Nodes

Die Zeile Radio for nodes in der Kopfzeile des Abschnitts zeigt einen von drei Zuständen:

  • „On, channel n: the same as your Wi-Fi router's.“ Das Funkmodul des Hubs für Nodes läuft. Es arbeitet auf dem WLAN-Kanal des Hubs, den Ihr Router wählt; wechselt der Router den Kanal, folgen Hub und seine Nodes.
  • „Starts by itself when a node is paired (factory setting).“ Noch läuft nichts; das Funkmodul startet mit der ersten Kopplung oder wenn bereits ein Node gekoppelt ist.
  • „Off. Nodes can't send data.“ Sie haben es ausgeschaltet.

Ausschalten fragt vorher: „The nodes stop sending live values. They keep their 15-minute energy records and send them when the radio is on again (up to 2 hours on node firmware 1.4, about 5 days on 1.5). The hub remembers this after a restart.“ Jeder Node geht sofort offline. Die Live-Werte dieser Zeit werden nicht behalten; die Aufzeichnungen schon, solange die Firmware des Nodes sie halten kann.

Einen Node entfernen

Delete fragt „Remove node mac?“: „The node and its points (channels: n) are removed, with their stored history, for good. Download the history first in History (CSV) if you need it. To use the node again, pair it again.“

⚠️ Das Entfernen eines Nodes löscht seine Points und ihren gesamten gespeicherten Verlauf. Wenn Sie die Aufzeichnungen womöglich brauchen, laden Sie sie vorher unter History herunter.

Der Hub nimmt die Daten des Nodes sofort nicht mehr an und bestätigt: „Node removed, with its points: n.“ Um den Node wieder zu nutzen, koppeln Sie ihn erneut: Öffnen Sie ein Kopplungsfenster und setzen Sie den Node zurück (oder warten Sie etwa 2½ Minuten: Ein Node, der 150 Sekunden lang keine Antwort von seinem Hub bekommt, fragt selbstständig nach einer Kopplung).

Einen Node zu einem anderen Hub umziehen

Ein gekoppelter Node fragt weiter seinen Hub; sobald er 150 Sekunden lang keine Antwort hatte, markiert er sich als ungekoppelt und fragt erneut nach einer Kopplung, und nach einem Reset fragt er sofort. Einen Node zu einem anderen Hub umzuziehen oder einen gebrauchten Node in Betrieb zu nehmen, ist also eine Kopplung:

  1. Delete ihn auf dem alten Hub (falls Sie darauf Zugriff haben).
  2. Öffnen Sie auf dem neuen Hub ein Kopplungsfenster und setzen Sie den Node zurück (oder warten Sie etwa 2½ Minuten). Der Node übernimmt den Schlüssel des neuen Hubs.

Den Flash des Nodes vorher zu löschen (python -m esptool --chip esp32 -p <PORT> erase_flash, danach die Firmware neu flashen) ist optional: ein sauberer Start, aber keine Pflicht.

Wie ein Node Zeit und Energie hält

  • Uhr. Der Hub ist die Uhr. Der Node fragt alle 5 Sekunden nach der Zeit, bis er sie hat, danach jede Minute, und hält dazwischen seinen eigenen Takt. Die Clock sync auf der Karte zeigt, wie genau er folgt.
  • Live-Werte werden etwa einmal pro Sekunde gesendet und auf den Points des Nodes angezeigt. Sie werden nicht gespeichert.
  • Energie wird in 15-Minuten-Perioden erfasst. Der Node schließt sie nach seiner eigenen Uhr an den 15-Minuten-Grenzen des Hubs, mit der Energie aus den eigenen Zählern seiner Module. Wechselt die Tarifzone, bittet der Hub jeden Node, in diesem Moment ebenfalls seine Periode zu schließen, sodass die Kosten je Zone exakt sind.
  • Eine Periode erreicht den Hub, oder sie wird behalten. Der Node sendet eine abgeschlossene Periode, bis der Hub bestätigt, dass er sie erfasst hat; so überstehen Aufzeichnungen eine schwache Verbindung besser als die Live-Ansicht. Der Hub erkennt eine Periode, die er bereits hat, und zählt sie nie doppelt.
  • Außer Reichweite. Der Node schließt die Perioden weiter pünktlich und hält die abgeschlossenen zurück, bis der Hub sie bestätigt. Ist die Verbindung wieder da, kommen sie gemeinsam an und werden nach der Zeit ihrer Messung abgelegt und bepreist, nicht nach der Ankunftszeit. Wie viel er halten kann, bestimmt die Firmware des Nodes, nicht die des Hubs:
    • Node-Firmware 1.5 schreibt sie in den eigenen Flash: etwa fünf Tage Perioden, und sie überstehen einen Stromausfall am Node.
  • Node-Firmware 1.4 behält acht davon (etwa zwei Stunden) im RAM; eine neunte verdrängt die älteste, und ein Stromausfall am Node verliert die zurückgehaltenen Perioden und die offene.

In beiden Fällen geht, sobald die Haltung voll ist, die älteste Periode verloren, und der Node meldet das in seinem Protokoll.

  • Ein Node, der ohne seinen Hub startet, schließt keine Perioden, bis er den Hub einmal gehört hat. Die Energie geht nicht verloren: Auf v1.1.7 deckt der erste Datensatz nach einem Start alles vom Boot des Nodes bis zum Ende seiner ersten vollen 15-Minuten-Periode ab, sodass diese Periode höher aussehen kann, als die Last wirklich war.

Die Firmware kennt keine Bestehensgrenze für Signal oder verlorene Pakete, und diese Seite nennt keine; der Node ist an seinem Standort entweder zuverlässig oder nicht. Der ehrliche Test ist das Verhalten:

  1. Koppeln Sie den Node dort, wo er dauerhaft bleibt, mit tatsächlich laufender Last.
  2. Beobachten Sie die Karte etwa zehn Minuten: Der Node sollte online bleiben, Lost packets, last minute sollte bei 0 bleiben und Last heard sollte auf „now“ oder wenige Sekunden stehen.
  3. Steigen die verlorenen Pakete über null oder wechselt der Node zwischen online und offline, ist die Verbindung grenzwertig. Verschieben Sie den Node oder den Hub ein wenig und beobachten Sie erneut.

Die Firmware kennt zwei Schwellen, und mehr gibt es nicht: Ein Node ist offline, nachdem 15 Sekunden kein Frame kam (der Hub veröffentlicht node_offline und node_online über MQTT), und ein Node, der 8 Sekunden lang keine Bake hört, beginnt erneut, den Kanal des Hubs zu suchen (so folgt er einem Router, der den Kanal wechselt; ein Neustart ist nicht nötig).

Eine schwache Verbindung zeigt sich als verlorene Pakete über 0 und Lücken in den Live-Werten, während die Aufzeichnungen weiter eintreffen; eine schlechtere lässt den Node flattern. Ein Node außer Reichweite und ein Node ohne Strom sehen für die App und die API gleich aus. Nur der Verlauf der Karte vor dem Ausfall unterscheidet sie: Eine schwache Verbindung driftet zuerst (steigende Verluste, fallendes Signal, Flattern), ein Stromausfall ist sauber.

Später erfahren, dass ein Node still geworden ist

Die Fünf-Tage-Haltung hilft nur, wenn Sie es innerhalb von fünf Tagen bemerken.

Ab Firmware v1.2.0 schreibt der Hub es auf. Ein still gewordener und wieder erreichbarer Node sind Zeilen im Hub-Log – espnow: node <MAC> offline und … online –, sodass ein Node, der während Ihrer Abwesenheit still wurde, eine Spur hinterlässt, die Sie danach mit ihrer Uhrzeit finden. → Events

Auf Firmware v1.1.8 kommt in der App nichts zu Ihnen: Ein Node, der nicht mehr meldet, wird auf seiner Karte und in der Liste der Nodes angezeigt, sonst nirgends. Es gibt keinen Eintrag im Journal der App und kein Element unter Needs attention – auf dieser Firmware schreibt der Hub die Zeile nur in sein eigenes serielles Protokoll.

Auf keiner der beiden Firmwares löst die App einen Alarm aus: Das Log ist ein Protokoll zum Ansehen, keine Benachrichtigung, die Sie erreicht. Dafür nutzen Sie Home Assistant.

Mit Home Assistant haben Sie einen richtigen Alarm, und er kostet eine Automation. Der Hub veröffentlicht je Node eine Online-Konnektivitätsentität über MQTT-Discovery, als Unter-Gerät des Hubs, und sie folgt dem Retained-Status des Nodes. Lösen Sie eine Automation aus, wenn diese Entität auf aus wechselt, und Sie werden innerhalb einer Minute benachrichtigt. Derselbe Übergang wird als node_offline-Ereignis auf dem Ereignis-Topic des Hubs veröffentlicht, falls Sie lieber Ereignisse beobachten.

Ohne MQTT ist die Karte alles, was es gibt. Öffnen Sie den Abschnitt Nodes ab und zu – oder werfen Sie in History einen Blick auf die Points des Nodes, wo ein stiller Node eine wachsende Lücke hinterlässt.

Was der Übergang genau ist, damit Sie die Geduld der Automation festlegen können:

  • Die Flanke löst aus, nachdem 15 Sekunden ohne einen Live-Frame vergangen sind – dieselbe Schwelle, die die Karte nutzt; und ein Node sendet etwa einen Frame pro Sekunde;
  • es gibt kein Entprellen: Jede Lücke über 15 s erzeugt ein offline/online-Paar, kürzere Lücken erzeugen nichts. Eine grenzwertige Verbindung ergibt eine Handvoll Paare, nicht Hunderte;
  • das Status-Topic wird einmal pro Minute mit Signal und Verlust aktualisiert, als Zustand statt als Ereignis – ein Dashboard, das es liest, ist also nie mehr als eine Minute veraltet.

Summen und der „unmetered“-Rest

Der Gesamtverbrauch des Hauses kann nicht doppelt gezählt werden: Die Systemsummen werden an der Netzgrenze gebildet, nur aus dem Eingangs-Point. Lastpoints, am Hub oder an einem Node, fließen nie in sie ein.

Der unmetered-Rest auf der Übersicht kann das. Er ist der Eingang minus die Summe aller Leitungspoints, und Node-Points sind Leitungspoints. Messen Sie eine Unterverteilung an einem Node und eine Last darin an einem anderen Kanal, wird diese Last doppelt abgezogen, und der Rest kann negativ werden.

Ab Firmware v1.1.8 können Sie es dem Hub mitteilen: Markieren Sie den inneren Point als innerhalb des äußeren gemessen, und er wird nicht ein zweites Mal abgezogen. Das ist die richtige Lösung für eine Werkstatt- oder Garagen-Unterspeisung, die an einem Node gemessen wird, wobei ihre Lasten dahinter gemessen werden – Sie behalten beide Werte, und der Rest bedeutet weiterhin etwas. Es ändert nichts an der Messung und nichts am Gesamtverbrauch des Hauses.

Die Einstellung finden Sie unter Management → Points → der Point → Point setup → Point settings → Measured inside, wobei None: a line of its own die Voreinstellung ist. Die Liste lässt den Eingang, den Spannungsbus, den Point selbst und alles aus, was schon innerhalb liegt; eine vom Hub abgelehnte Wahl zeigt „The hub refused that choice: the point is gone, is an input, or is already inside this one. Pick another.“ → Points

⚠️ Es gilt für eine Ebene. B innerhalb von A wird einmal gezählt. Reicht eine Kette tiefer – C innerhalb von B innerhalb von A – und der mittlere Point wird nicht gezeigt, können manche Ansichten den innersten Point weiterhin doppelt zählen.

Auf v1.1.7 gab es diese Einstellung nicht, und der Rat war, entweder die Unterverteilung oder die Lasten darin zu messen, nicht beides. Der Gesamtverbrauch des Hauses bleibt in beiden Fällen unberührt: Die Systemsummen werden am Eingang gebildet.

Wo Nodes sonst erscheinen

  • Points: Die Kanäle eines Nodes sind Points wie alle anderen, mit eigenen Seiten, Rollen und Namen (siehe Points).
  • History und Economics: nach Point, wie bei jedem Point; Node-Points teilen sich die 12 Verlaufsplätze (siehe History).
  • Events: Das Hub-Log erfasst das Koppeln eines Nodes, die bestätigten Einstellungen und FAIL-Zeilen für Frames oder Aufzeichnungen, die der Hub nicht zählen konnte. Ein Node, der offline geht oder zurückkommt, steht nicht im Log – das wird über MQTT veröffentlicht und auf der Node-Karte angezeigt (siehe Events).
  • MQTT: Der Hub veröffentlicht einen Retained-Status je Node auf rbgrid/<mac>/node/<NODEMAC>/status (online, Signal, verlorene Pakete, zuletzt gehört), jede Minute aktualisiert, und Node-Ereignisse auf rbgrid/<mac>/event; dieselben Node-Aktionen stehen über den Befehlskanal bereit (siehe MQTT broker).
  • Home Assistant: Ein Gerät je Node mit einem Sensor Online und einem Sensor Signal, per Discovery. Die Points des Nodes erscheinen wie lokale.
  • Die API des Hubs: GET /api/v1/espnow listet den Funkzustand und jeden Node mit seinem Zustand; POST /api/v1/espnow führt dieselben Aktionen aus wie die App (siehe unten).

Die API des Hubs

Alles, was die App mit Nodes tut, läuft über einen Endpunkt des Hubs, den Sie selbst nutzen können.

GET /api/v1/espnow (das read-Token, wie bei anderen Lesezugriffen) liefert das Funkmodul und das Register:

Feld Bedeutung
running, enabled Das Funkmodul läuft; enabled ist auto (startet selbstständig, wenn ein Node gekoppelt wird), on oder off
keys, key_source true auf jedem Hub-Image ab v1.1.7, und woher der Schlüssel des Hubs stammt (generated: beim ersten Start des Funkmoduls von diesem Hub erzeugt). Ein Hub ohne keys kann keine Nodes betreiben
max_nodes, max_channels_per_node 6 und 4
channel der Funkkanal, der des WLAN-Routers
pairing_open, pairing_left_s, paired_count das Kopplungsfenster, die darin verbleibenden Sekunden, die Anzahl gekoppelter Nodes
beacons_sent, rt_recv, stats_recv, periods_recv, periods_injected, periods_dropped, periods_dup Zähler seit dem Start des Hubs: gesendete Zeitbaken, empfangene Live-Frames und Perioden-Frames, aufgezeichnete Perioden, verworfene und als Wiederholung erkannte
nodes[] je Node: mac, online, disabled, last_seen_s, rssi_dbm, sync{ resid_sd_us, skew_ppm, fits, loss_pct }, channels[{ ch, ct_code, unit_id, present }], config_state (none, pending, applied, failed), config[], period_s, fw. Ein seit dem Start des Hubs nicht gehörter Node hat kein last_seen_s und kein sync{}

POST /api/v1/espnow (das admin-Token) mit { "action": … }:

action Felder Was es tut
hub_on / hub_off — das Funkmodul für Nodes ein- oder ausschalten (bleibt über Neustarts erhalten); aus setzt jeden Node sofort auf offline
pair seconds 10–600 das Kopplungsfenster öffnen; 409 ESPNOW_DISABLED, solange das Funkmodul aus ist
pair_cancel — es vorzeitig schließen
configure mac, config: { channels: [ { ch, enabled, ct_code } ] } Node-Einstellungen; der Hub sendet erneut, bis der Node bestätigt. 400 PERIOD_UNSUPPORTED für jede period_s außer 900; 400 BAD_REQUEST für einen unbekannten Kanal, einen ct_code außerhalb 1–7 oder wenn alle Kanäle aus sind
disable / enable mac einen Node aus- oder einschalten
remove mac den Node und seine Points mit ihrem Verlauf entfernen
latch — jeden Node bitten, seine aktuelle Periode jetzt zu schließen
add mac, channels: [ { ch, ct_code } ] einen Node von Hand eintragen, ohne Kopplung

Fehler kommen als { "ok": false, "error": "BAD_REQUEST" | "ESPNOW_DISABLED" | "ESPNOW_OFF" | "ESPNOW_START_FAILED" | "REGISTRY", "message": "…" } zurück. Node-Points sind in jedem anderen Endpunkt gewöhnliche Points (src: "espnow" im Live-Frame), und GET /api/system/provisioning meldet nodes_paired.

Über MQTT funktioniert dasselbe über den Befehlskanal: {"cmd":"get","section":"espnow"} liefert das GET oben, und {"cmd":"set","section":"espnow","token":"<admin>","data":{"action":"pair","seconds":60}} führt eine Aktion aus und antwortet mit der Antwort des Hubs. Der Hub veröffentlicht einen Retained-Status je Node auf rbgrid/<mac>/node/<NODEMAC>/status ({ "online", "rssi_dbm", "loss_pct", "last_seen_s" }, jede Minute aktualisiert) und Node-Ereignisse auf rbgrid/<mac>/event (paired, removed, node_online, node_offline). In Home Assistant ist jeder Node ein Gerät mit einem Sensor Online und einem Sensor Signal (dBm); ein seit dem Start des Hubs nicht gehörter Node zeigt „no data“.

Meldungen

Meldung Bedeutung
Remote nodes are not available in this hub firmware. Das Firmware-Image dieses Hubs kann keine Nodes betreiben. (Ein Hub älter als v1.1.7 zeigt gar keinen Abschnitt Nodes.)
Turn the radio for nodes on to pair one. Das Funkmodul ist aus; schalten Sie es zuerst ein.
The hub takes up to 6 nodes. Remove one to pair another. Alle sechs Node-Plätze sind belegt.
The radio for nodes is off. Turn it on first. Eine Aktion braucht das Funkmodul, und es ist aus.
The hub couldn't start the radio for nodes. Try again; if it keeps failing, restart the hub. Das Funkmodul ließ sich nicht starten.
The hub couldn't change its node list (full, or the node isn't known). Das Node-Register hat die Änderung abgelehnt.
The hub didn't accept the request. Der Hub meldet, dass die Anfrage fehlerhaft war. Laden Sie die Seite neu und versuchen Sie es erneut.
The hub refused: message Der eigene Grund des Hubs.
The hub didn't answer. Check the connection and try again. Keine Antwort vom Hub.
The hub doesn't know this node any more. Reload the page. Der Node wurde entfernt, vielleicht aus einem anderen Browser.
The hub takes only the 15-minute period. Für einen Node wird nur die 15-Minuten-Periode akzeptiert.

Fehlerbehebung

Ich habe Pair a node gedrückt, aber nichts erscheint

  • Schalten Sie den Node ein oder setzen Sie ihn zurück, während das Fenster offen ist.
  • Prüfen Sie, dass das Funkmodul für Nodes nicht aus ist und dass der Hub mit Ihrem WLAN verbunden ist.
  • Ein Node, der mit einem anderen Hub gekoppelt war, fragt erneut, sobald dieser Hub ihm 150 Sekunden lang nicht geantwortet hat, oder sofort nach einem Reset (siehe Moving a node to another hub).
  • Prüfen Sie die Stromversorgung des Nodes und dass sein Flash ohne Fehler fertig wurde.

Der Node ist offline oder wechselt ständig zwischen online und offline

  • Seit 15 Sekunden kam nichts von ihm. Prüfen Sie zuerst die Stromversorgung, dann den Standort. Siehe Checking the link.
  • Das Funkmodul für Nodes des Hubs könnte aus sein: Dann sind alle Nodes offline.

Signal, lost packets und clock sync fehlen auf der Karte

  • Der Node wurde seit dem Start des Hubs nicht gehört („Last heard: not heard since the hub started“). Die Zeilen erscheinen mit seinem ersten Frame.

Die Points des Nodes zeigen Live-Werte, aber keinen Verlauf

  • Die 12 Verlaufsplätze des Hubs waren beim Koppeln des Nodes bereits belegt: „Points beyond 12 show live values only.“ Entfernen Sie einen nicht benötigten Point und koppeln Sie den Node dann erneut, oder akzeptieren Sie Points, die nur Live-Werte zeigen.
  • Ein Node erfasst Energie nur mit einem Modul, das Spannung misst. Ein Modul nur für Strom liefert Live-Strom und eine geschätzte Live-Leistung (Ihre Nennspannung × Strom, 230 V, wenn keine eingestellt ist) – aber keine Perioden, keinen Verlauf und keine Kosten. Ab v1.1.8 bucht der Hub für einen solchen Eingang überhaupt keine Energie, statt sie aus der Nennspannung zu erfinden.

Alle Nodes sind offline, obwohl sie Strom haben und gekoppelt sind

  • GET /api/v1/espnow → inject_age_ms mit dem Wert -1 bedeutet, dass die Task des Hubs, die die Node-Daten bucht, nicht läuft. Bis v1.1.7 konnte der Hub sie beim Start still nicht starten, wenn der interne RAM knapp war, und nichts sagte es; v1.1.8 reserviert diesen Speicher zur Build-Zeit. Aktualisieren Sie den Hub.

Ab v1.2.0 müssen Sie nicht danach suchen: Der Abschnitt Remote nodes zeigt eine Warnung, wenn die Task angehalten ist, mit einer Schaltfläche Restart now daneben.

Der Abschnitt Remote nodes mit einer Warnung, dass der Hub keine Node-Daten bucht, und einer Schaltfläche «Restart now»

Ein Neustart behebt den Zustand auf einem Hub, der den Speicher hat; kommt er nach dem Neustart wieder, ist der Hub auf einer Firmware älter als v1.1.8, und die Lösung ist ein Update, nicht noch ein Neustart.

Die Uhrsynchronisation geht immer wieder verloren

  • Ein anderer RBgrid-Hub ist auf demselben WLAN-Kanal, und ein Node mit Firmware 1.4 hat die Zeitbaken beider Hubs angenommen. Aktualisieren Sie den Node auf 1.5: Dann folgt er nur dem Hub, mit dem er gekoppelt ist, und braucht kein erneutes Koppeln.

Über einen Zeitraum fehlt Energie

  • Der Node war länger außer Reichweite, als er Perioden halten kann, oder hat den Strom verloren. Auf Node-Firmware 1.5 sind das etwa fünf Tage, und ein Stromausfall verliert nicht, was er hält; auf 1.4 sind es acht Perioden, etwa zwei Stunden, und ein Stromausfall verliert sie und die offene Periode.
  • Der Node war in dieser Zeit aus (Turn off): Der Hub verwirft die Daten eines Nodes, solange er aus ist.
  • Der Node startete, während der Hub nicht erreichbar war: Auf v1.1.7 landet die Energie seit dem Boot in seiner ersten vollen 15-Minuten-Periode, daher sieht eine frühere Periode leer aus und diese hoch. Nichts geht verloren.

Mein Router hat seinen WLAN-Kanal gewechselt

  • Sie müssen nichts tun. Das Funkmodul des Hubs für Nodes folgt dem Router, und ein Node, der 8 Sekunden lang nichts hört, sucht den Hub erneut.