HowTo: Node Red – Systemdaten des Raspberry Pi’s auf dem Dashboard anzeigen

Neben den spannenden Daten die ein SmartHome erzeugt sollte man sich auch ein wenig um den Status des Herzstückes des SmartHome kümmern. Habt Ihr Eure NodeRed-Installation auf einem RaspberrypPi(oder anderem Linux-System) installiert so könnt Ihr euch mit dem nachfolgendem Beispiel ein paar der wichtigsten Informationen des RaspberryPi auf dem Dashboard anzeigen lassen.

Was Ihr dazu machen müsst ist im folgenden Artikel erklärt.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Damit Ihr neue Nodes installieren könnt sollte NodeRed natürlich schon installiert sein.
Wie ihr einen RaspberryPi dazu vorbereitet und dann NodeRed darauf installiert ist in den folgenden Artikeln beschrieben.

Die folgenden drei Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPi – Die Erste Konfiguration!
RaspberryPi – Den RaspberryPi über SSH steuern
NodeRed – Installation von NodeRed auf dem RaspberryPi
NodeRed – Neue Nodes installieren
NodeRed – Mit Dashboard-Nodes eine Benutzeroberfläche erstellen

Benötigtes Material:
-keins-

Benötigtes Material:

In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.


In die NodeRed Konfigurationsoberfläche einloggen

Bevor Ihr eure NodeRed Konfiguration bearbeiten könnt müsst Ihr Euch - falls aktiviert - zunächst in die NodeRed Konfigurationsoberfläche einloggen.

Ansicht des Login Dialogs. Hier müsst Ihr die Login Daten eingeben die Ihr während der Konfiguration des Logins angegeben habt. Infos dazu findet Ihr im Artikel NodeRed - Benutzerlogin einrichten.

Node-Code

Für diese Anzeige werden neben der Dashboard-Node nur Standard-Nodes und entsprechende Linux-Befehle genutzt. Fügt dazu einfach nachfolgenden Node-Code ein und vergesst danach nicht die Dashboard-Elemente auf Eurem Dashboard korrekt zu positionieren.

Informationen dazu findet Ihr auch in dem Artikel NodeRed – Mit Dashboard-Nodes eine Benutzeroberfläche erstellen.

So kann Euer Dashboard mit den RaspberrryPi-Informationen aussehen.
Ansicht der verknüpften Nodes.

Node-Code:

[{
"id": "fbbafb8d.8c3818",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "vcgencmd measure_temp",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "RPi Temperatur",
"x": 440,
"y": 200,
"wires": [
["17fa85a3.c0a5fa"],
[],
[]
]
}, {
"id": "610a759f.da34ec",
"type": "inject",
"z": "ae220e4a.3c49d",
"name": "aktualisierung 10sek",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "10",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 200,
"y": 200,
"wires": [
["fbbafb8d.8c3818", "6b5302eb.fe0fbc", "f8494c08.39fe8"]
]
}, {
"id": "17fa85a3.c0a5fa",
"type": "function",
"z": "ae220e4a.3c49d",
"name": "cutString",
"func": "str = msg.payload\r\nmsg.payload = str.substring(5,9);\r\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 660,
"y": 200,
"wires": [
["e8f154dc.299398", "71f38a1c.ca6f64"]
]
}, {
"id": "4070b9bd.5796b8",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "sudo reboot",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "Neustarten",
"x": 430,
"y": 540,
"wires": [
[],
[],
[]
]
}, {
"id": "77a93271.11eabc",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "sudo shutdown -h now",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "Herunterfahren",
"x": 440,
"y": 620,
"wires": [
[],
[],
[]
]
}, {
"id": "6b5302eb.fe0fbc",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "top -d 1 -b -n2 | grep ",
"s": "|tail -n 1 | awk '{print $2 + $4}'",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "CPU Last",
"x": 420,
"y": 280,
"wires": [
["97612f41.a7f6e"],
[],
[]
]
}, {
"id": "f8494c08.39fe8",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "free | grep Mem | awk '{print 100*(($3+$5)/$2)}'",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "RAM",
"x": 410,
"y": 360,
"wires": [
["6ce43c7.2c89bc4"],
[],
[]
]
}, {
"id": "7b744c14.050354",
"type": "exec",
"z": "ae220e4a.3c49d",
"command": "df -h",
"addpay": false,
"append": "",
"useSpawn": "",
"timer": "",
"oldrc": false,
"name": "Speicherplatz",
"x": 440,
"y": 440,
"wires": [
["403e1890.2fbab8"],
[],
[]
]
}, {
"id": "403e1890.2fbab8",
"type": "function",
"z": "ae220e4a.3c49d",
"name": "modifyString",
"func": "var re = /([0-9]{2})%/\r\nvar idx = msg.payload.search(re);\r\nvar str = msg.payload;\r\nif (idx >=0) {\r\n str = msg.payload.substring(idx, idx + 2);\r\n}\r\nmsg.payload = str;\r\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 670,
"y": 440,
"wires": [
["f574e160.da0f1"]
]
}, {
"id": "da61973.d30f268",
"type": "inject",
"z": "ae220e4a.3c49d",
"name": "aktualisierung 1min",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "60",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 200,
"y": 440,
"wires": [
["7b744c14.050354"]
]
}, {
"id": "37bde909.05a676",
"type": "ui_button",
"z": "ae220e4a.3c49d",
"name": "",
"group": "5fe5a9b.a8a6158",
"order": 3,
"width": 0,
"height": 0,
"passthru": false,
"label": "Neu starten",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "",
"x": 230,
"y": 540,
"wires": [
["4070b9bd.5796b8"]
]
}, {
"id": "12fa2be3.80e824",
"type": "ui_button",
"z": "ae220e4a.3c49d",
"name": "",
"group": "5fe5a9b.a8a6158",
"order": 4,
"width": 0,
"height": 0,
"passthru": false,
"label": "Herunterfahren",
"color": "",
"bgcolor": "red",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "",
"x": 240,
"y": 620,
"wires": [
["77a93271.11eabc"]
]
}, {
"id": "e8f154dc.299398",
"type": "ui_gauge",
"z": "ae220e4a.3c49d",
"name": "",
"group": "5fe5a9b.a8a6158",
"order": 1,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "CPU Temperatur",
"label": "C",
"format": "{{value}}",
"min": 0,
"max": "100",
"colors": ["#00b500", "#e6e600", "#ca3838"],
"seg1": "",
"seg2": "",
"x": 910,
"y": 180,
"wires": []
}, {
"id": "638024a7.6ca05c",
"type": "ui_gauge",
"z": "ae220e4a.3c49d",
"name": "",
"group": "6b432a4a.06ad54",
"order": 1,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "CPU",
"label": "CPU",
"format": "{{value}}%",
"min": 0,
"max": "100",
"colors": ["#00b500", "#e6e600", "#ca3838"],
"seg1": "",
"seg2": "",
"x": 870,
"y": 300,
"wires": []
}, {
"id": "d80d6326.88202",
"type": "ui_gauge",
"z": "ae220e4a.3c49d",
"name": "",
"group": "6b432a4a.06ad54",
"order": 1,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "Speicher",
"label": "RAM",
"format": "{{value}}%",
"min": 0,
"max": "100",
"colors": ["#00b500", "#e6e600", "#ca3838"],
"seg1": "",
"seg2": "",
"x": 880,
"y": 360,
"wires": []
}, {
"id": "f574e160.da0f1",
"type": "ui_gauge",
"z": "ae220e4a.3c49d",
"name": "",
"group": "6b432a4a.06ad54",
"order": 1,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "Disk",
"label": "Speicherplatz",
"format": "{{value}}%",
"min": 0,
"max": "100",
"colors": ["#00b500", "#e6e600", "#ca3838"],
"seg1": "",
"seg2": "",
"x": 870,
"y": 440,
"wires": []
}, {
"id": "71f38a1c.ca6f64",
"type": "ui_chart",
"z": "ae220e4a.3c49d",
"name": "",
"group": "5fe5a9b.a8a6158",
"order": 2,
"width": 0,
"height": 0,
"label": "CPU Temperatur Verlauf",
"chartType": "line",
"legend": "false",
"xformat": "HH:mm:ss",
"interpolate": "linear",
"nodata": "",
"dot": false,
"ymin": "",
"ymax": "",
"removeOlder": "24",
"removeOlderPoints": "",
"removeOlderUnit": "3600",
"cutout": 0,
"useOneColor": false,
"colors": ["#1f77b4", "#aec7e8", "#ff7f0e", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5"],
"useOldStyle": true,
"x": 930,
"y": 240,
"wires": [
[],
[]
]
}, {
"id": "6ce43c7.2c89bc4",
"type": "function",
"z": "ae220e4a.3c49d",
"name": "deleteWhitespace",
"func": "var str = msg.payload\r\nstr = str.trim();\r\nvar nr=parseInt(str);\r\nmsg.payload = nr.toFixed(1);\r\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 690,
"y": 360,
"wires": [
["d80d6326.88202"]
]
}, {
"id": "97612f41.a7f6e",
"type": "function",
"z": "ae220e4a.3c49d",
"name": "deleteWhitespace",
"func": "str = msg.payload\r\nmsg.payload = str.trim();\r\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 690,
"y": 280,
"wires": [
["638024a7.6ca05c"]
]
}, {
"id": "75f679fd.1125a8",
"type": "inject",
"z": "ae220e4a.3c49d",
"name": "Herunterfahren",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 260,
"y": 680,
"wires": [
["77a93271.11eabc"]
]
}, {
"id": "5fe5a9b.a8a6158",
"type": "ui_group",
"z": "ae220e4a.3c49d",
"name": "2",
"tab": "7e8708a2.0fc408",
"order": 2,
"disp": false,
"width": "6",
"collapse": false
}, {
"id": "6b432a4a.06ad54",
"type": "ui_group",
"z": "ae220e4a.3c49d",
"name": "1",
"tab": "7e8708a2.0fc408",
"order": 1,
"disp": false,
"width": "6",
"collapse": false
}, {
"id": "7e8708a2.0fc408",
"type": "ui_tab",
"z": "ae220e4a.3c49d",
"name": "Raspi Daten",
"icon": "dashboard",
"order": 1
}]

Viel Spaß mit dem Projekt

Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com       

6 Kommentare

  1. Hi, sehr schöner Flow. Ich bin Anfänger mit node-red und kann damit viel lernen.
    CPU-Temperatur und -Verlauf laufen. Beim node RAM habe ich “mem” durch “Speicher” ersetzt (deutsches Raspian :-), läuft auch. Aber die Kommandos bei “Speicherplatz” und “CPU” funktionieren nicht und meine Kenntnisse reichen leider nicht für eine Änderung. Könntest Du das für eine deutsche Version anpassen?
    Danke und Gruß, Hajo.

    1. Hi Hajo,
      ich habe das ganze gerade nochmal getestet. “Leider” funktioniert bei mir alles. Kannst du mir ein paar mehr Infos geben was bei dir nicht funktioniert? 🙂
      Beste Grüße
      Fabian

  2. Hallo Nerdy,
    habe (bin auch noch Anfänger) den Flow heruntergeladen und installiert.
    Hat super funktioniert …

    Nachdem ich nun das System von der SD-Karte auf eine HD übertragen habe werden in CPU, Speicher und Disk keine Werte mehr angezeigt …
    CPUTempertur funktioniert.

    Hast mglw. einen Tip für mich?

    Beste Grüsse

    Jürgen

    1. Hi Jürgen,
      ja das liegt sehr wahrscheinlich daran, dass die Festplatte einen anderen Mountpoint/Pfad hat als die SD Karte.
      Kannst du mir mal die Ausgabe von “df -h” (einfach in die Konsole eingeben) schicken? Dann kann ich dir sagen wie der aktuelle Mountpoint lautet und wir können den NodeRed Code entsprechend anpassen. 🙂
      Beste Grüße
      Fabian

  3. Hallo, leider hat sich im Node CPU-Last ein Fehler eingeschlichen:
    Der korrekte Befehl im exec Node muss wie folgt aussehen:
    top -d 1 -b -n2 | grep “%Cpu” | tail -n 1 | awk ‘{print $2 + $4}’
    So hat die Anzeige funktioniert

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.