Forum: PC-Programmierung Node-Red: Dashboard Fragen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bot N. (botnec)


Lesenswert?

Ich benutze das allererste mal Node-Red für ein Hobbyprojekt und bin
eigentlich erstaunt dass ich es soweit geschafft habe. Aber jetzt
scheine ich in eine Sackgasse gekommen zu sein, aus der ich vermutlich
nicht ohne Hilfe herauskomme.

Ich möchte gerne aus einem Datenstrom, der aus mehreren gleichen Teilen
besteht, eine Liniengraphik erstellen. Dabei habe ich jetzt zwei
Probleme.

1. Der Datenstrom ist als Buffer vorhanden und enthält viele gleiche
   Teile, die wiederum je aus der Epochtime, Wert A und Wert B
   bestehen. Ich kann die 3 Werte des allerersten Teils des Buffers
   extrahieren und mit Debug richtig darstellen.
   Mein Problem hier ist, wie kann man mittels einer loop o.ä.
   nacheinander alle anderen Teile des Buffers auf gleiche Weise
   extrahieren ? Diese Daten sollen dann als Input für die Liniengraphik
   dienen.

2. Wie könnte man dann mittels Dashboard eine Liniengraphik aus den
   extrahierten Daten erstellen, bei der die Abszisse die Epochtime
   enthält und die Ordinate den zugehörigen Wert A oder B ?
   Geht das überhaupt? Für mich gibt das der Chart Node so nicht her.

Wäre für Hilfe sehr dankbar. Wenn nötig kann ich gerne noch das eine
oder andere Detail mitteilen.

von Harry L. (mysth)


Lesenswert?


von Sascha W. (sascha-w)


Lesenswert?

Hallo,

wie hast du denn die Werte aktuell aus dem Buffer herausgelöst?
Man könnte den Buffer splitten und die Einzelteile separat verarbeiten, 
oder was in vielen Fällen einfacher ist die Aufgabe selbst in Javascript 
innerhalb einer Function-Node lösen. Das letztere setzt natürlich 
entsprechende Kenntnisse voraus. Man kann durchaus auch mit Nodes 
Schleifen bauen, sollte aber gut überlegen was mann tut.

Sascha

von Bot N. (botnec)


Angehängte Dateien:

Lesenswert?

Danke für die Antwort.

Hier ein Auszug des Parsers den ich verwende.
Mir wäre erst mal geholfen wenn ich wüsste wie ich den Buffer
in die Portionen zerlegen könnte  über die ich dann den obigen
Parser laufen lassen würde.

Vergessen zu erwähnen. Von Java habe ich keine Ahnung!

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Bot N. schrieb:
> über die ich dann den obigen
> Parser laufen lassen würde.

Den brauchst du für dein Vorhaben nicht!

Bot N. schrieb:
> Von Java habe ich keine Ahnung!

Javascript != Java!

Schau dir doch einfach das Tutorial an!
https://noderedguide.com/tutorial-node-red-dashboards-multiple-lines-on-a-chart/

: Bearbeitet durch User
von Bot N. (botnec)


Angehängte Dateien:

Lesenswert?

Harry L. schrieb:
> Schau dir doch einfach das Tutorial an!
> https://noderedguide.com/tutorial-node-red-dashboards-multiple-lines-on-a-chart/

Sri, ich stehe irgendwie daneben. Momentan sehe ich keine Verbindung
zu dem was ich möchte und dem Link. Wie kann man beim Node Chart
die in meinem Fall mitgelieferte Epochtime auf die x-Achse bringen?

Habe mal ein vereinfachtes Beispiel (Bild oben) erstellt zur
Verdeutlichung was ich bisher habe. Kann auch gerne den Flow
posten.

von Sascha W. (sascha-w)


Lesenswert?

Hallo Bot N.

du kannst den eingehenden Buffer per Split-Node in gleich große Häppchen 
zerteilen, was mit deinen 13 Byte klappen sollte.
Am Ausgang erhälst du dann n-Nachrichten die du auf deinen Parser geben 
kannst. Da die Nachrichten ja nacheinander kommen, fallen auch die 
Ergebnisse des Parsers in der richtigen Reihenfolge raus.

In der Hilfe zur Chart-Node 
https://github.com/node-red/node-red-dashboard/blob/master/Charts.md 
findest du den Hinweis wie du Daten mit Zeitstempel in den Chart 
bringst.
Du musst ein Object übergben das die entsprechenden Daten beinhaltet.
{topic:"temperature", payload:22, timestamp:1520527095000}
An sonsten wird als Zeit immer die der eingehen Nachricht verwendet.

Du kannst gern das deinen Flow hier einstellen und auch die Daten.


Gruß sascha

von Bot N. (botnec)


Lesenswert?

Danke sehr Sascha W.!

Werde das mit dem Split-Node mal probieren.

Den Hinweis auf die Github Doku hatte ich vor paar Minuten auch
gefunden. Dort wird die Darstellung gespeicherten Daten etwas erläutert.

Wenn ich nicht selber weiterkomme werde ich den Test-Flow hier mal
einstellen und nochmals um Hilfe bitten.

: Bearbeitet durch User
von Bot N. (botnec)


Angehängte Dateien:

Lesenswert?

Das mit dem Split-Node hat geklappt.

Was ich aber nicht hinbekomme ist die so selektierten Daten in die
nötige Struktur für die Charts. Muss ja irgendwie so was sein:

var chart = [{
    "series": ["Temperature ="],
    "data": dataarray,
    "labels": [""]
}];

Ich hänge mal meinen Beispielflow mit 3 Datensätzen an. Vielleicht
kann da mal jemand drüber schauen und mir sagen wie es weiter gehen 
müsste.

Danke sehr.

: Bearbeitet durch User
von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

Hallo Bot N.

der Flow tut erst mal was er soll, du musst für die Charts nur ein 
Dashboard anlegen.

Den Split darfst du nicht auf Stream stellen, da sonst das letzte Byte 
in der Node hängenbleibt (40Byte geht ja nicht auf) und dann durch das 
nächste Paket ergänzt wird was zu einem Versatz führt. Da ohne Stream 
das letzte Byte einzeln ausgegeben wird und zu einem Fehler im 
anschließenden Parser führt habe ich eine Function dazwischen gehangen 
die nur Nachrichten mit 13 Byte durchlässt.

Im oberen Teil hab ich den Parser belassen. Und die Daten mit 
Changenodes für den Chart aufbereitet.

Im mittleren Teil ist die Aufbereitung des Datensatzes in eine Function 
gepackt. Die Ausgänge kannst du alternativ mit den Eingängen der Charts 
verbinden.

Im unteren Teil ist alles in einer Function vereint.
Das ist natürlich am übersichtlichsten, aber prinzipiell ist NR ja dazu 
gedacht alles einfach aus Bausteinen zusammen zu setzen.

Die epochtime aus deinen Daten muss man mit 1000 multiplizieren da der 
Chart die Zeit in ms haben will.

Gruß Sascha

PS:
Das von dir oben erwähnte Inputformat für den Chart würde sich nur aus 
der 3. Variante mit Function-Node erstellen lassen, da alle Chartdaten 
auf ein Mal übergeben werden müssen. So wie es jetzt ist kannst du den 
Chart beliebig oft mit neunen Daten ergänzen. Darum auch die Insernode 
zum löschen der Charts

: Bearbeitet durch User
von Bot N. (botnec)


Lesenswert?

Hallo Sascha,

tausend Dank für die Arbeit und die Erklärungen dazu!

Es funktioniert SUPER. Ich habe jetzt erst mal auf die Schnelle
deinen Split-FullData Node in meine eigentliche Applikation eingesetzt.
Das hat sofort die gewünschte Anzeige gebracht.

Ich betreibe damit einen ESP01S der mir Daten von 3 Shelly H&TGen3 WLAN
Sensoren in einem Ringbuffer speichert. Diesen lese ich dann
gelegentlich  aus und wollte ihn zur Anzeige bringen. Dank deiner Hilfe
klappt das jetzt sehr gut.

Da ich heute sehr viele Video Clips und Dokumente zu dem NR Chart Thema
angesehen habe und damit aber auch nicht weitergekommen bin, werde ich
mir dann erst morgen mal deinen Flow genauer ansehen und versuchen zu
verstehen wie du das erledigt hast.

Eigentlich bin dir jetzt was schuldig, denn du hast mir sehr viel Zeit
erspart. Vielleicht hätte ich es gar nicht hinbekommen!

Vielen Dank noch mal.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.