Das Node-Red hat von Haus aus einige nette grafische Elemente zum Visualisieren und Manipulieren von Werten, die auf unterschiedlichste Weise generiert und eingesammelt wurden. Manchmal hätte man aber gerne etwas mehr:
Wenn du schon eine Weile mit Node-Red gearbeitet hast, wist du festgestellt haben, dass Node-Red schlagartig alle bisher aufgelaufenen Diagrammwerte vergisst, wenn Node-Red oder der Server neu gestartet werden. Das ist unschön. Auch Werte, die vor einiger Zeit angefallen sind (z.B. Verbrauchsdaten) werden von Node-Red nicht so einfach für weitere Analysen vorgehalten. Dasselbe mit allen Werten, die links aus einem Node-Red Diagramm rausgelaufen sind.
Hier brauchen wir eine Datenbank! Aber welche? Man könnte sich jetzt ein System aus MySQL basteln oder textbasierten Dateien. Da wir es bei unseren Anwendungsfällen meist um Zeitreihen handelt, ist Influx die erste Wahl, da diese Datenbank speziell für diesen Zweck entwickelt wurde.
Um es vorweg zu sagen, ich beschäftige mich in diesem Artikel mit Influx zur Erzeugung von Diagrammen ausschließlich in Node-Red. Es gibt auch andere, leistungsfähigere Diagrammlösungen wie Grafana. Die dabei zu durchlaufende Lernkurve ist allerdings sehr steil und außerdem haben wir anschließend ein weiteres System an der Hand, so dass wir zwischen Diagrammen und Einstellungen immer hin- und herspringen müssen. Ich finde, Analysen und Befehle auf einer einzigen User-Interfaceschicht besser. Auch wenn Node-Red, was Diagramme angeht, nicht so viel kann, für den Hausgebrauch reicht es. Ein weiterer Vorteil von Node-Red ist, dass die Darstellung auf mobilen Endgeräten besser ist.
Solarthermie: Ertrag ohne Wärmemengenmesser ausrechnen
Obwohl die Viessmann API in der Lage ist, den Solarertrag anzuzeigen, ist das entsprechende API Feature heating.solar.power.cumulativeProduced in machem (leider auch in meinem) Fall leer.
Das liegt daran, dass die Solarinstallation mit einem Wärmemengenmesser ausgerüstet sein muss. Dieses Gerät vergleicht die Solar-Vorlauftemperatur mit der Solar-Rücklauftemperatur und misst zusätzlich den Durchfluss. Bei moderneren Wohnungen wird über solche Geräte die Heizkostenabrechnung gemacht.
Wie finde ich nun heraus, wieviel Energie von meinen Solarthermiepanels erzeugt wird wenn ich kein Calorimeter habe?
Im Laufe der Zeit baut man immer wieder kleine Verbesserungen in die Flows ein, um Performance, Transparenz oder Betriebssicherheit zu steigern. In loser Folge sind hier meine Erkenntnisse dazu zu finden.
Kommunikationsfehler abfangen
Leider sind die Viessmann Server alles andere als zuverlässig. So kommt es immer wieder zu Timeouts, fehlgeschlagenen Authentifizierungen oder Komplettausfällen. Okay, als User des kostenfreien Basisangebots will ich mich nicht all zu laut beschweren.
Kommunikationsfehler könnte man durch jeweils einen debug Node hinter einem http request Node anzeigen lassen. Angezeigt werden sollte dabei das "komplettte Nachrichtenobjekt". Das ist zum Testen ganz okay, aber auch flüchtig.
Um solche Fehler in ein Log zu schreiben, brauchst du einen switch node, der z.B. bei leerem Refresh Token zu einem write file Node verzweigt und die Payload dort hineinschreibt. Den write file Node muss man eventuell über die Palettenverwaltung nachinstallieren. Das funktioniert ganz gut, ist aber umständlich, da ich den Switch hinter jedem http request Node einbauen muss und dann unter Umständen viele Spaghettis zu dem write file Node ziehen muss. Bei Autentifizierungsfehlern ist das aber die beste Möglichkeit der Fehlerbehandlung (siehe unten).
Eine schöne Möglichkeit bietet der catch Node: Der catch Node ist eine Art Mülleimer für alle Arten von Fehlern. Ich stelle ihn so ein, dass er alle gewünschten Nodes, in diesem Fall alle http request Nodes überwacht, das Ergebnis anschließend angereichert und mit dem write file Node in ein Log (Textdatei) geschrieben wird.
Der Flow sieht so aus:
Die Nodes simpletime (über Palettenverwaltung nachinstallieren) und create error msg function Node erzeugen einen aussagekräftigen Eintrag im Log. Siehe JSON
Wichtig ist ferner, den oder die http Request Nodes so einzustellen, dass sie mit "Only send non-2xx responses to Catch node" alle Kommunikationsfehler an den catch Node weiterleiten:
In der Console eures Rechners (bei mir ein Raspberry Pi) sieht das so aus:
Bei mir immer wieder "Keine Antwort vom Server" oder etwas kryptischer "getaddrinfo EAI_AGAIN api.viessmann.com" was aber auch ein Fehler auf der Viessmann Seite sein dürfte. So habt ihr zumindest etwas in der Hand um bei den Friendly Moderators bei Viessmann nachzufragen.
Wichtig: Leider fängt der Catch Node Fehler der Art "INVALID TOKEN" oder "TOKEN EXPIRED" nicht ab.
Hier muss explizit über die Abfrage der Rückgabewerte msg.payload.message, msg.payload.errorType, msg.payload.error oder msg.payload.statusCode gearbeitet werden. Diese Werte sind null, wenn alles okay ist.
Der direkt hinter einem http request einzubauende switch Node sieht dann so aus:
Ausgang 1 wird benutzt wenn die Abfrage ordnungsgemäß durchgelaufen ist, Ausgang 2 sobald in msg.payload.message (oder msg.payload.error etc.) etwas drin steht also ein Fehler aufgetreten ist.
Cookies nerven!
Trotzdem: Diese Website verwendet Cookies ausschließlich für die internen Wordpress Funktionen. Werbebanner oder sonstigen Marketingkram wirst du hier nicht finden, ebensowenig wie Tracking Cookies. Solltest du die hier gesetzten Cookies ablehnen, kann es sein, dass die Seite nicht ordnungsgemäß funktioniert.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Dauer
Beschreibung
cookielawinfo-checkbox-advertisement
1 year
Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
CookieLawInfoConsent
1 year
Records the default button state of the corresponding category & the status of CCPA. It works only in coordination with the primary cookie.
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.