Ladezustands Anzeige im Dashboard

Hallo, ich möchte einen Text im Dashboard erscheinen lassen, wenn geladen wird.
D.h. die Power zunimmt.

Irgendwie bekomme ich das nicht hin.
Hier mein Node:

var check = global.get(“pkwshuntvolt”);
var check1 = global.get(“pkwshuntamps”);

msg.payload = check*check1;

if (msg.payload >= 1)
msg.payload == “Laden”;

if (msg.payload) <= 0)
msg.payload == “Entladen”;

return msg;

Hey,

nach den if-Abfragen brauchst du nur ein einfaches = für eine Zuweisung, == und === nimmt man für Vergleiche. (Difference Between =, ==, and === in JavaScript [Examples]) Und da ist einmal Klammer zu ) zu viel bei der zweiten if-Abfrage nach msg.payload.

var check = global.get("pkwshuntvolt");
var check1 = global.get("pkwshuntamps");

msg.payload = check*check1;

if (msg.payload >= 1)
msg.payload = "Laden";

if (msg.payload <= 0)
msg.payload = "Entladen";

return msg;

Danke dir, jetzt würde ich noch gerne die Farbe ändern, bekomme das leider auch nicht hin.
Habe es auch mit geschweiften Klammern versucht,…
Kannst du mir bitte nochmal helfen ?

var check = global.get(“pkwshuntvolt”);
var check1 = global.get(“pkwshuntamps”);

msg.payload = check * check1;

if (msg.payload >= 1)
msg.payload = “Laden”;
msg.color “green”;

if (msg.payload <= 0)
msg.payload = “Entladen”;
msg.color “red”;

return msg;

Du musst msg.color den Wert mit einem = zuweisen. Und bei if-Abfragen ohne geschweifte Klammern wird nur die nächste Zeile ausgeführt. Wenn mehr Zeilen ausgeführt werden sollen brauchst du die geschweiften Klammern zwangsläufig.

var check = global.get("pkwshuntvolt");
var check1 = global.get("pkwshuntamps");

msg.payload = check * check1;

if (msg.payload >= 1) {
    msg.payload = "Laden";
    msg.color = "lime";
}

if (msg.payload <= 0) {
    msg.payload = "Entladen";
    msg.color = "red";
}

return msg;

Das mit dem “=” war mir eigentlich klar, habe ich aber total vergessen auch ein zu tragen … Danke.
Daher hat das auch mit den geschweiften klammern nicht funktioniert.

Es klappt nun, besten Dank auch.

Wenn ich solche Änderungen vornehme, sollte ich diese in ein extra Flow schreiben, damit sie bei einem Update nicht überschrieben werden, oder was schlägst du vor?

Gruss, Stefan

Hi Stefan,
Das ist eine gute Idee.
Ich programmiere alles was nicht original ist auf seperaten Seiten.
Dann kannst du all deine Seiten vor dem Update exportieren, und nach dem Update wieder importieren. So wenig wie möglich auf den original Seiten rumstricken, und wenn, dann in einer Kommentar node aufschreiben was im original dringend geändert werden muss, Bzw. welche Paletten du wieder einbinden musst.
Gruß Arno

2 Likes

Richtig, wie Arno gesagt hat ist es das beste alles auf seperaten Flows zu machen und diese dann zu exportieren.
Es gibt auch die Möglichkeit eine zweite NR Instanz zu starten mit einer Backup Datei, also die NR .json Datei, die die Flows beinhaltet.
Wenn man im Update Bereich auf “Manually Create Backupfile” klickt, wird die aktuelle .json Datei als Backup in den Ordner /home/pi/pekaway/nrbackups kopiert. Dann gibt es ab v1.1.0 unter “Load Backup File” den Button “Start 2nd NR Instance”, damit wird mit der ausgewählten Backupfile eine neue NR Instanz auf dem nächsten freien Port gestartet, also idr Port 1881.
Es kann sein, dass die zweite Instanz nicht als laufend angezeigt wird, weil ich den Timer, der die aktuell laufenden Instanzen abfragt zu kurz eingestellt habe. Ihr könnt dann einfach in der Konsole den Befehl

sudo netstat -tulpn | grep node-red | awk ‘{print $4}’

eingeben, der zeigt euch die laufenden NR-Prozesse bzw. die entsprechenden Ports an.

Es wird dafür die Standard package.json im ~/.node-red Ordner verwendet, es müssen dementsprechend alle packages dort installiert sein, wenn ihr welche extra hinzugefügt habt.

Wenn man auf einem komplett neuen Image ist, muss man also die alte Flowfile in diesen Ordner kopieren und die originale package.json entsprechend anpassen.

Das ist aber wirklich nur da um die Flows zu vergleichen, einige Sachen wie z.B. die UART Ports sollten dann nicht in beiden Instanzen funktionieren.
Alle Funktionen, die ihr dann evtl. im Dashboard der zweiten Instanz benutzt werden für die Hauptinstanz ausgeführt, also da bitte aufpassen!

1 Like

@Vincent
Das hört sich ja nicht schlecht an. Muss ich auf jeden fall mal ausprobieren.
Wäre das auch eine Möglichkeit ein 2. abgespecktes Daschbord zu bauen, das dann mit einem anderen Port aufgerufen wird. (Experten Modus / User Modus)
bzw. PC- / Handy- Modus.
Gruß Arno

Hört sich im ersten Moment kompliziert an.
Aber so wie du es beschrieben hast Arno wäre es eine gute Möglichkeit (zwei dashboards).
Mal testen….

Ja man könnte damit einfach ein zweites Dashboard bauen, aber dafür würde ich vielleicht eher eine komplett neue Datei nehmen. Mit

node-red /path/to/nr2_flows.json -p 1885

kann man einfach eine neue Instanz auf Port 1885 starten. Diese greift wie gesagt wieder auf die originale package.json zu. Dafür könnte man in der Hauptinstanz eine Inject Node einstellen, dass sie einmal beim Start von der Hauptinstanz ausgeführt wird und damit eine Exec Node triggert, die den oben genannten Befehl enthält. Oder man erstellt einen neuen Service dafür, der direkt beim Bootvorgang gestartet wird.
Dann muss man nur dafür sorgen, dass man diese neue Datei auch speichert bei einem Update.

Von der neuen Instanz kann man dann ziemlich viel über die HTTP oder MQTT Api von der Hauptinstanz abfragen und steuern.