httpStatic mit einer ioBroker Node-RED Installation konfigurieren

Inzwischen lässt sich httpStatic über die Konfiguration in ioBroker festlegen. (Adapterversion 3.2.0)

Um Bilder, welche man mit Node-RED verarbeitet hat, auch über Node-RED Dashboard z.B. in einem Template-Node ausgeben zu können, muss man diese irgendwo ablegen. Um nicht einen extra Webserver dafür betreiben zu müssen, bietet Node-RED in der settings.js die httpStatic Option an.

// When httpAdminRoot is used to move the UI to a different root path, the 
// following property can be used to identify a directory of static content 
// that should be served at http://localhost:1880/. 
//httpStatic: '/home/nol/node-red-static/',

Leider bietet der iobroker.node-red Adapter diese Einstell-Möglichkeit noch nicht an, sodass man selbst aktiv werden muss. Ein entsprechendes Issue liegt schon vor – wann es umgesetzt wird, ist aber noch nicht ersichtlich.

Achtung: diese Einstellung muss man nach jedem Update des iobroker.node-red Adapters erneut vornehmen.

Der Adapter iobroker.node-red generiert die settings.js des Node-RED über ein gleichnamiges Script, welches sich bei mir an diesem Ort befindet:
/opt/iobroker/node_modules/iobroker.node-red/settings.js

Die Option httpStatic ist hier aktuell hart auskommentiert – ändert man sie entsprechend, findet sie beim nächsten Speichern der Einstellungen im ioBroker auch Eingang in die generierte Node-RED settings.js.

(Bei mir läuft der Node-RED Prozess über den User iobroker – der entsprechende httpStatic-Ordner sollte also für diesen User les- und schreibbar sein, damit es funktioniert.)

Update 17.11.2021: Nachdem ich wieder selbst reingefallen bin, nochmal: Diese Einstellung muss man nach jedem Update des iobroker.node-red Adapters erneut vornehmen.

Update 18.01.2022: In einem der nächsten Releases des iobroker.node-red Adapters wird die Einstell-Möglichkeit vrstl. vorhanden sein.

Update 27.02.2022: Menno, ich möchte bitte einmal direkt dran denken, dass man diese Einstellung nach jedem Update des iobroker.node-red Adapters vornehmen muss.

Update 16.04.2022: Inzwischen lässt sich httpStatic über die Konfiguration in ioBroker festlegen. (Adapterversion 3.2.0)

Ein flexibler Benachrichtigungsbereich in Node-RED Dashboard

Vorgeschichte

Als das SmartHome immer weiter wuchs, kam ich irgendwann an den Punkt, dass ich mir eine einheitliche Vorgehensweise für Benachrichtigungen überlegen musste. Viele Informationen braucht man nur, wenn sie akut sind. Diese über das ganze Dashboard zu verteilen und abzuklappern, wäre unpraktisch, denn Benachrichtigungen entstanden an immer mehr Stellen (der Versuch einer Sammlung):

  • Unwetterwarnungen
  • Meldung von technischen Problemen bei Schnittstellen
  • Meldung von technischen Problemen bei Sensoren
  • Update-Benachrichtigungen für Geräte-Firmware
  • Batterie-Meldungen von Sensoren
  • Indoor und Outdoor Temperaturwarnungen
  • Türklingel
  • Warnung bei hoher CPU Auslastung
  • Verkehrsmeldungen aus dem ÖPNV
  • Warnmeldungen zum Warmwasservorrat
  • Müll-Entsorgungsankündigungen
  • Geöffnete Türen oder Fenster (mit KWL kommt das nicht so häufig vor)
  • tägliche Niederschlagsmenge (ab einem bestimmten Grenzwert)
Ein flexibler Benachrichtigungsbereich in Node-RED Dashboard weiterlesen

Verflixtes 1-Wire

Da meine Heizung und Solarpumpe ziemlich un-smart sind, greife ich im Heizraum verschiedene Temperaturen mittels DSB18B20 Sensoren über 1-Wire selbst ab. Doch das 1-Wire zickte immer ziemlich rum. Sensoren waren teilweise vorhanden, dann wieder verschwunden. Unterschiedliche Kabellängen zu den Sensoren wirkten sich massiv auf die Zuverlässigkeit aus.

Der mutmaßliche Grund: der PullUp Widerstand war viel zu hochohmig. In vielen Anleitungen im Netz stehen Werte von 4K7 (4,7 KΩ) für den nötigen PullUp Widerstand. Ich hatte bereits „nur“ einen 3K2 verbaut – trotzdem zu viel, wie ich inzwischen herausgefunden habe. Denn der 4K7 Widerstand bezieht sich auf eine Spannung von 5V. Betreibt man 1-Wire am Raspberry Pi mit nur 3,3V muss der PullUp Widerstand deutlich geringer bemessen werden.

Ein interessantes Dokument zum Thema empfiehlt bei 3,3V einen Widerstand zwischen 725Ω bis 1000Ω. Und schon funktioniert es (zumindest bei mir).

Achtung Nutzt man einen zu geringen Widerstand bei einer Spannung von 5V können Sensoren und Raspberry Pi Schaden nehmen!

Hier der Link zum Dokument: https://pdfserv.maximintegrated.com/en/an/AN4255.pdf

Sensorwerte selbst erheben

Noch ein Wort zum selber „abgreifen“ der Sensorwerte. Das funktioniert tatsächlich super! Im Speicher fand ich für die Sensoren Platz in den gleichen Messöffnungen, wo auch die Hausgeräte ihre Werte messen. Während zwischen meiner Messung und der Messung der Solarpumpe keine Abweichung erkennbar ist, liegt die Gastherme bei einer Abweichung von 1,3 Kelvin, was sich über ein Offset ganz einfach ausbalancieren lässt. Über den Parser-Adapter des ioBroker kommen die Werte der Sensoren ganz einfach ins SmartHome.

POST-HTTP Request mit Daten

Da ich mich sehr dumm angestellt habe und ewig brauchte, um mit Node-RED einen HTTP Request inkl. Daten zu versenden, dokumentiere ich hier – nur für mich (weil sich bestimmt niemand so umständlich anstellt) – die funktionierende Lösung.

Der simple Aufbau, ein Function-Node und ein HTTP-Request-Node:

Im Function-Node werden die zu übermittelnden Daten in msg.payload als JSON geschrieben. Außerdem wird
msg.headers["Content-Type"] = "application/x-www-form-urlencoded";
gesetzt.

Der HTTP-Request ist dann kaum zu konfigurieren. Methode = POST eintragen, dann noch die URL und fertig.

Kaputt gespielt – Backup und Wiederherstellung

Was soll ich sagen, irgendwie habe ich mein Raspberry Pi OS (Raspbian) kaputt gespielt. Es fing damit an, dass ich nicht per VNC auf das System kam (für deCONZ). Zeitweise ging nicht mal raspi-config. Und: jedes mal ging nach ein paar Betriebsstunden die CPU Last massiv in die Höhe – ausgelöst durch einen Fehler mit oder durch kworker. Also fiel die Entscheidung: neu aufsetzen. Ein praktischer Präzedenzfall für Backup & Restore.

In meinem Setup waren drei, oder besser vier Dinge zu sichern und zu überspielen. Da ich noch einen Raspberry Pi 4 herumliegen hatte, konnte ich die Systeme parallel laufen lassen, und musste nicht ständig zwischen alt und neu wechseln, sofern mir noch Infos fehlten. Auch konnte ich so die Vollständigkeit der Daten gut prüfen.

Zum Kopieren der Daten zwischen den Raspberrys nutze ich immer WinSCP.

1. deCONZ/Phoscon

Bei Phoscon einfach über die Weboberfläche unter „Gateway“ ein Backup ziehen und an gleicher Stelle auf dem neuen System wieder einspielen. Das Einspielen des Backups habe ich jedoch erst gemacht, als die microSD-Karte mit dem neuen System auch im Raspberry Pi mit dem Conbee II steckte, um mögliche Probleme zu vermeiden.

2. InfluxDB

Hier sollte man zwingend mit den Backup & Restore Befehlen von influxd arbeiten, ein Kopieren der Datenordner führte (zumindest bei mir) nicht zum Erfolg.

Es müssen sowohl der META-STORE als auch die Datenbank(en) gesichert werden.

$ influxd backup <speicherort-fuer-backup>
$ influxd backup -database iobroker <speicherort-fuer-backup>

Das Wiederherstellen ist ähnlich leicht.

$ influxd restore -metadir /var/lib/influxdb/meta <speicherort-des-backups>
$ influxd restore -database iobroker -datadir /var/lib/influxdb/data <speicherort-des-backups>     

Anschließend muss man ggf. noch die Benutzerrechte des Ordners anpassen.

$ sudo chown -R influxdb:influxdb /var/lib/influxdb

3. ioBroker

Bei ioBroker kann man ein komplettes Backup sehr leicht über die Kommandozeile erstellen:

$ cd /opt/iobroker
$ sudo iobroker stop
$ sudo iobroker backup
$ sudo iobroker start

Das Backup liegt dann unter /opt/iobroker/backups/.

Ebenso einfach ist das Wiederherstellen. Das Backup-Archiv muss man dazu in den gleichen Ordner auf dem neuen System kopieren.

$ sudo iobroker stop 
$ sudo iobroker restore 0
$ sudo iobroker start all
$ sudo iobroker start
$ sudo iobroker upload all

(der Befehl „sudo iobroker upload all“ lädt die Webseiten aus den Ordnern „www“ und „admin“ aus den Adaptern in den ioBroker-Dateispeicher hoch)

Nun dauert es je nach Umfang der ioBroker-Installation einige Minuten, bis automatisch wieder alle Adapter installiert sind. Über die Weboberfläche – Instanzen kann man den Prozess rudimentär beobachten.

4. Node-RED

Die Flows werden beim ioBroker-Backup (3.) mitgesichert. Allerdings werden die zusätzlich installierten Node-Module (über „Palette verwalten“) beim Wiedereinspielen nicht automatisch installiert. Hier hilft ein Screenshot der Liste oder eine kurze Notiz der installierten Node-Module. Aber: zur Not lassen sich die auch anhand der Auflistung fehlender Nodes recherchieren und rekonstruieren.

Probleme

Probleme gab es eigentlich gar nicht. Einzig der ioBroker PING Adapter ändert den Objektpfad anhand des Hostnames – wählt man hier bei der neuen Installation einen anderen, muss man sämtliche Pfadangaben des PING Adapters z.B. im Node-RED korrigieren.

Nachtrag 23.06.2021

Inzwischen (?) kann man im PING Adapter einstellen, dass der Hostname nicht im Zustandsnamen verwendet werden soll. Wenn man bei der Einrichtung darauf achtet, kann man beim Backup & Restore dieses Problem umschiffen.

Messungen in einer InfluxDB löschen

Manchmal gibt es Messungen in einer InfluxDB, die zerstören das schöne Bild – verursacht durch Messfehler, Programmierfehler oder Schnittstellenproblemen. Bei mir sind das manchmal fehlerhafte 0-Werte.

Leider gestaltet sich das Löschen von einzelnen Messungen aus einer InfluxDB nicht so einfach, wie der ein oder andere es vielleicht von anderen Datenbanken gewohnt ist, da die Zeit das einzig zugelassene Identifikationsmerkmal einer DELETE Operation ist.

Update 02.10.2022: Inzwischen unterstützt der ioBroker InfluxDB Adapter das Löschen von Messwerten. Dazu einfach den Datensatz auswählen und das Löschicon betätigen.

Hier meine Vorgehensweise (unter Windows):

  1. Über die Software InfluxDB Studio (nur für Windows) mit der Datenbank verbinden.
  2. Über folgenden Befehl und das Anpassen der Zeit (und der Datenbank) die zu löschenden Werte identifizieren.
    SELECT * FROM „coronavirus-statistics.0.Germany.cases“ WHERE time > now() – 5d – 19h AND time < now() – 5d – 17h

    Dabei steht „5d“ für fünf Tage, „19h“ für 19 Stunden, und so weiter.
  3. Werden bei dem SELECT nur noch die Messungen angezeigt, welche gelöscht werden sollen, das “ SELECT * “ durch “ DELETE “ ersetzen und den Befehl ausführen.
  4. Fertig.

Ich übernehme keine Garantie für ungewollte Datenverluste.

delete measurment influxdb

Schnelles Smartphone UI

Ich mag ioBroker, ich mag Node-RED – aber ein User Interface, welches innerhalb von drei Sekunden auf dem Smartphone zur Verfügung steht, ist weder mit vis noch mit Node-RED UI / Dashboad möglich. Vielleicht liegt es am eingesetzten Raspberry PI und eine Monster-Hardware würde es schneller ermöglichen – so ist die Ladezeit je nach Verbindungsqualität (WLAN, VPN) jedoch belastend – gerade für den schnellen Blick auf die Haustechnik (z.B. Solarthermie) oder die Straßenbahn-Abfahrtszeiten.

Einzige Lösung kann eine native App fürs Smartphone sein, dachte ich mir. Doch weder für vis noch für Node-RED UI gibt es entsprechende perfomante Ansätze. Also musste eine weitere Lösung her. Erste Tests mit MQTT Dashboard-Apps waren verheißungsvoll, doch offenbarten sie dann Probleme. Denn bei MQTT muss die App weitgehend online sein, um die aktuellen Werte empfangen zu können. Frisst Akku und Leistung auf Seiten des Smartphones. Ein Abrufen der Werte nach einer längeren Offline-Phase ist nicht ohne weiteres möglich.

Covergestaltung

Dann stolperte ich über die App IOT Dashboard, welche mich gerade sehr begeistert. Die App von Ciprian Savastre ermöglicht es, via REST im JSON-Format Daten abzurufen, und auch Befehle zu senden. Ein paar Nodes in Node-RED ermöglichen sowohl die Auslieferung der Daten an die App, als auch das Empfangen von Befehlen aus der App.

  • Ja, die App ist funktionell noch ausbaufähig. Der Entwickler ist aber nett und ansprechbar für Bugs und Ideen.
  • Ja, es ist nur eine Ergänzung zu einem ausgefeilten UI via vis oder Node-RED Dashboard.
  • Ja, man muss auf dem Smartphone einigen Konfigurationsaufwand betreiben.

Dafür hat man aber in atemberaubender Geschwindigkeit den aktuellen Stand des Smart-Homes auf dem Schirm.

Und so sieht es gerade bei mir aus:

Aktuell benutze ich noch keine Steuerungsfunktionen, sondern nur das reine Auslesen von Werten. Daher sieht es im Node-RED auch bisher sehr einfach aus.

Die Steuerung realisiere ich bisher über Node-RED UI / Dashboard – einige häufig genutzte Funktionen werde ich aber sicher auch in der App IOT Dashboard abbilden – außer es läuft mir etwas besseres über den Weg.

NodeRed UI Design

Das Design von NodeRed Dashboard braucht meiner Meinung nach noch ein wenig „Nachhilfe“. Hier die drei wichtigsten Styles meiner „Nachhilfe“, welche ich über ein ui_template Node in die <head> Section einfüge.

<style>
body {
        font-size:0.8em;
        background-color:#E6F7FF !important;
    }
md-card {
        border-bottom: 1px solid #F2F2F2;
    }
.nr-dashboard-cardpanel > p {
        margin-top: 3px !important;
        margin-bottom: 3px !important;
        min-height: 23px !important;
    }
</style>

Das Ergebnis:

Gedanken zur KWL

Kontrollierte Wohnraumlüftungen (kurz KWL) sind eine feine Sache. Man stelle sich vor, man müsste tagsüber mehrmals lüften … Klar: sie ist keine Klimaanlage. Und doch sollte man nicht nur beim Thema „wärmen“, bzw. Wärme erhalten im Winter (was sie über die Wärmerückgewinnung ja macht) ein paar Dinge beachten.

Standort

Wer die Gelegenheit hat, den Standort des KWL Geräts zu bestimmen, tue dies weise. So sollten sie klar innerhalb der thermischen Hülle des Hauses stehen – für die entsprechende Effizienz im Winter. Erfahrungen zeigen aber auch: der Heizraum ist meist nicht der geeignete Ort für das Gerät – gerade in einer Kombination mit Solarthermie. Die steht im Sommer schließlich fast unbegrenzt zur Verfügung und hebt die Temperatur im Heizraum (wo in der Standardausführung meist auch der Warmwasser-Speicher steht) auf unschöne Höhen. Jegliche Kaltluft, die möglicherweise in der Nacht die KWL dank Bypass ohne Wärmerückgewinnung passieren könnte, wird so stark durch die Heizraumtemperatur beeinflusst, dass nicht mal eine minimale Abkühlung der Räume über die KWL stattfindet. Also: vielleicht gibt es einen Wäscheraum oder einen Kellerraum – sofern man über einen solchen verfügt – in dem die KWL besser aufgehoben ist.

Funktionen / Abhilfe

Eine wichtige Funktion für ein angenehmes Raumklima ist der schon erwähnte Sommer-Bypass. Er leistet – wenn nicht von der Raumtemperatur beeinflusst – einen Beitrag für ein angenehmes kühles Raumklima im Sommer, indem er die Wärmerückgewinnung umgeht. Interessant und wichtig – auch für alle, die das gleiche Dilemma der Interaktion zwischen Solarthermie und Lüftung haben – ist der Fensterlüftungsmodus. Bei ihm wird die Zuluft komplett abgeschaltet, sodass die KWL nur absaugt und das Zuströmen kalter Luft (in der Nacht) durch die Fenster unterstützt.

Beispiel: Pluggit

Bei meinem Lüftungsgerät von Pluggit Avent P310 lässt sich der Fensterlüftungsmodus über die Modbus Schnittstelle aktivieren:

modbus.0.holdingRegisters.40169_prmRamIdxUnitMode

Manuel = 4 / Wochenprogramm = 8 / Start Sommer = 2048 / Ende Sommer = 2048

Leider ist es ein Toggle – sprich man sendet sowohl zum Einschalten, als auch zum Ausschalten „2048“.

UI-Performance – Diagramme von Flot

Auch wenn ich das Node-RED Dashboard sehr mag, eines ging mir gehörig auf den Keks: die Performance. Ursache dafür waren bei mir (diesmal) die Diagramme (chart), die den Ladevorgang eines Tabs teils um 10 Sekunden verlängerten. Daher bin ich auf die Diagramme von Flot umgestiegen, welche als iframe (template Node) eingebunden werden und damit asynchron laden. Das Ergebnis: Der Seitenaufbau ist schnell, das Diagramm braucht halt vielleicht noch kurz …

Um die Flot Diagramme an das Dashboard anzupassen nutze ich folgende Einstellungen:

Die Legende ist sicher je nach Anwendungsfall nötig oder nicht nötig. Auch die Höhe des Diagramms sollte je nach Art der Werte angepasst werden.

Das Ergebnis kann sich sehen lassen.

Ladevorgang läuft …
Geladen.

Die Nutzung von Flot hat noch weitere Vorteile:

  • auch nach einem Neustart von Node-RED habe ich noch „volle“ Diagramme
  • die Farben der Linien bleiben auch nach einem Neustart gleich
  • es lassen sich einfach zusätzliche Linien/Marken in die Diagramme einzeichnen
  • man kann die Kurven falls nötig leicht glätten