<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Node-Red Archive - Smart home Ratgeber</title>
	<atom:link href="https://homeitems.de/category/node-red/feed/" rel="self" type="application/rss+xml" />
	<link>https://homeitems.de/category/node-red/</link>
	<description>Einfache Lösungen für zuhause mit Smart home items</description>
	<lastBuildDate>Mon, 18 May 2026 08:58:52 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://homeitems.de/wp-content/uploads/2020/10/cropped-wpicon_homeitems-32x32.jpg</url>
	<title>Node-Red Archive - Smart home Ratgeber</title>
	<link>https://homeitems.de/category/node-red/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Mit Node-RED auf die HMIP Home Control Unit (HCU) zugreifen Teil 1</title>
		<link>https://homeitems.de/mit-node-red-auf-die-hmip-home-control-unit-hcu-zugreifen/</link>
					<comments>https://homeitems.de/mit-node-red-auf-die-hmip-home-control-unit-hcu-zugreifen/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Sun, 17 May 2026 18:33:21 +0000</pubDate>
				<category><![CDATA[HCU]]></category>
		<category><![CDATA[Homematic IP]]></category>
		<category><![CDATA[Node-Red]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=4639</guid>

					<description><![CDATA[<p>Nach der Einführung der neuen HMIP-Zentrale HCU (Home Control Unit) hat eQ-3 eine API veröffentlicht, mit der man eigene Plugins erstellen und auf die HMIP-Daten zugreifen kann. Im Herbst 2025 wurde angekündigt, dass die auch von mir genutzte CCU3 vom eQ-3 nicht weiterentwickelt, sondern in dem freien Modell OpenCCU (ehemals Raspberrymatic) durch  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/mit-node-red-auf-die-hmip-home-control-unit-hcu-zugreifen/">Mit Node-RED auf die HMIP Home Control Unit (HCU) zugreifen Teil 1</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-1"><p>Nach der Einführung der neuen HMIP-Zentrale HCU (Home Control Unit) hat eQ-3 eine API veröffentlicht, mit der man eigene Plugins erstellen und auf die HMIP-Daten zugreifen kann. Im Herbst 2025 wurde angekündigt, dass die auch von mir genutzte CCU3 vom eQ-3 nicht weiterentwickelt, sondern in dem freien Modell OpenCCU (ehemals Raspberrymatic) durch die Community weitergepflegt werden soll.</p>
<p>Ich habe auf der CCU3 viel programmiert und mit Node-RED auf die CCU3-Geräte zugegriffen. Jetzt will ich prüfen, wie gut man die HCU in Node-RED einbinden kann, um langfristig von der CCU auf die HCU zu wechseln.</p>
<p>Im ersten Schritt möchte ich eine Verbindung zwischen Node-RED und der HCU aufbauen und erste Daten von HMIP-Geräten empfangen. Ich nehme vorweg, das Ganze funktioniert einfacher als erwartet. In den folgenden Kapiteln beschreibe ich dazu detailliert die Vorgehensweise. Das wesenliche Dokument für alle folgenden Schritte ist dabei die <a href="https://github.com/homematicip/connect-api/releases/download/1.0.1/connect-api-documentation-1.0.1.html">Homematic IP Connect API Dokumentation</a>.</p>
<h2><strong>HCU Entwicklermodus freischalten</strong></h2>
<p>Damit die HCU API-Zugriffe akzeptiert, muss der Entwickler-Modus aktiviert werden. In diesem Modus kann man eigene Plugins direkt auf der HCU laden. Oder man kann mit Plugins auf anderen Systemen (z. B. Node-RED) über eine Websocket-Verbindung kommunizieren.</p>
<p>Die Vorgehensweise zur Freischaltung ist gut in der API-Dokumentation beschrieben, so dass ich nur auf folgendes hinweise:</p>
<ol>
<li>Aktiviere den Entwicklermodus und gebe sofort die Websockets frei (Häkchen setzen)</li>
<li>Warte mit der Erstellung des Aktivierungsschlüssels bis zum nächsten Schritt!</li>
</ol>
</div><div class="fusion-text fusion-text-2"><h2><strong>Authentication Token vereinbaren</strong></h2>
<p>Jedes Plugin braucht für die Kommunikation eine eindeutige ID.  eQ-3 empfiehlt zur Namensfindung die "Reverse Domain Name Notation". Ich habe diesen Namen für die folgenden Tests benutzt:</p>
<p><em>de.spike.grass.plugin.example1</em></p>
<p>Damit die Kommunikation zwischen der HCU und einem anderen Gerät sicher, aber einfach ist, brauche ich außerdem ein Token. Dieser Authentication Token ist wie ein Passwort. Zur Erstellung des Tokens muss man mit der HCU über API-Requests kommunizieren.</p>
<p>Ich empfehle das Tool <a href="https://www.postman.com/">Postman</a> zu verwenden, da es einfach zu bedienen ist.</p>
<p>Ich verweise hier auch auf die Anleitung in Kapitel 2.4 (Step 2) und ergänze noch ein paar Hinweise::</p>
<ul>
<li>Wähle in Postman die Methode "POST" aus. Trage dahinter als Adresse <em>https://hcu1-XXXX.local:6969/hmip/auth/requestConnectApiAuthToken ein </em>(Setze anstelle von hcu1-XXXX den lokalen Netzwerknamen ein)</li>
<li>Ergänze unter dem Tab "Headers" das Feld "VERSION" mit dem Wert "12"</li>
<li>Gehe nun zuerst zurück in den Entwicklermodus der HCU und generiere einen Aktivierungsschlüssel (dieser ist nur kurzzeitig gültig)</li>
<li>Kopiere in den Tab "body" den body-example Code aus Kapitel 2.4 Step 2</li>
<li>Tausche den Aktivierungsschlüssel gegen den soeben generierten Schlüssel aus</li>
<li>Tausche die plugin_id gegen die von dir gewählte ID aus (siehe oben)</li>
</ul>
<pre class="rouge highlight"><a href="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1.webp"><img fetchpriority="high" decoding="async" class="alignnone wp-image-4645 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-1024x271.webp" alt="" width="1024" height="271" srcset="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-200x53.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-300x79.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-400x106.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-600x159.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-768x203.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-800x211.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-1024x271.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-1200x317.webp 1200w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU1-1536x406.webp 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></pre>
<p>Drücke auf Send und man sollte ein solches Feedback erhalten (Wert für spätere Verwendung speichern):<code data-lang="json"></code></p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_1" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_1" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_1" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="application/json">{
    "authToken": "B23FB0DC7FDAA140CDF679D5F78F047C16CEF349691A3E9B425DE16E291E51DF"
}</textarea></div><div class="fusion-alert alert custom alert-custom fusion-alert-left awb-alert-native-link-color" style="--awb-background-color:#fcf8e3;--awb-accent-color:#808080;--awb-border-size:1px;--awb-border-top-left-radius:8px;--awb-border-top-right-radius:8px;--awb-border-bottom-left-radius:8px;--awb-border-bottom-right-radius:8px;" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="fa-exclamation-triangle fas" aria-hidden="true"></i></span><span class="fusion-alert-content">Erscheint hier der Fehler "Could not generate response.  SSL Error: Self signed certificate", dann braucht man nur die angebotene Option "Disable SSL Verification" zu bestätigen und schon funktioniert es.</span></div></div><div class="fusion-text fusion-text-3"><p>Nun muss der Erhalt dieses Schlüssels noch bestätigt werden. Gehe dazu wie folgt in Postman vor:</p>
<ul>
<li>Drücke oben in der Tabzeile auf "New Request"</li>
<li>Ergänze unter dem Tab "Headers" das Feld "VERSION" mit dem Wert "12"</li>
<li>Wähle in Postman die Methode "POST" aus. Trage dahinter als Adresse <em>https://hcu1-XXXX.local:6969/hmip/auth/confirmConnectApiAuthToken</em> (Setze anstelle von hcu1-XXXX den lokalen Netzwerknamen ein)</li>
<li>Kopiere in den Tab "body" den body-example Code aus Kapitel 2.4 Step 3</li>
<li>Tausche den Aktivierungsschlüssel gegen den eben generierten aus</li>
<li>Tausche den authToken gegen den im vorigen Schritt erhaltenen authToken aus.</li>
</ul>
<p>Drücke auf Send und du solltest eine client_id in der folgenden Form erhalten (Wert für spätere Verwendung speichern):</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_2" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_2" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_2" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="application/json">{
    "clientId": "9fa276c2-b410-456d-bfde-4202918e8ce4"
}</textarea></div><div class="fusion-alert alert custom alert-custom fusion-alert-left awb-alert-native-link-color" style="--awb-background-color:#fcf8e3;--awb-accent-color:#808080;--awb-border-size:1px;--awb-border-top-left-radius:8px;--awb-border-top-right-radius:8px;--awb-border-bottom-left-radius:8px;--awb-border-bottom-right-radius:8px;" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="fa-exclamation-triangle fas" aria-hidden="true"></i></span><span class="fusion-alert-content">Wenn es bei einem der beiden Request-Aufrufe zu dem Fehler "Invalid Request" kommt, dann kann das daran liegen, dass der Aktivierungsschlüssel abgelaufen ist. Dann generiert einfach einen Neuen, tauscht diesen in den body-Bereich aus und für die Requests erneut durch.</span></div></div><div class="fusion-text fusion-text-4"><h2>Websocket Verbindung testen</h2>
<p>Nun kann getestet werden, ob eine Websocket-Verbindung zur HCU mit den gerade erzeugten Daten aufgebaut werden kann. Ich empfehle hierzu auch wieder das Tool Postman zu verwenden.</p>
<p>Hier gibt es allerdings mit der freien und unregistrierten Version eine Einschränkung: In dieser Version kann man keine Self-Signed-Socket Verbindungen aufbauen, die wir aber für die Kommunikation mit der HCU benötigen.</p>
<p>Man löst das Ganze, indem man sich einen (kostenlosen) Postman-Account erstellt und sich dann mit dem Account in der App anmeldet. Anschließend ist die Kommunikation mit den Self- Signed- Zertifikaten möglich.</p>
<p>Folgende Schritte sind anschließend in Postman durchzuführen:</p>
<ul>
<li>In der Adressleiste wird folgende Adresse eingetragen: wss://<em>hcu1-XXXX.local</em>:9001 (Setze anstelle von hcu1-XXXX den lokalen Netzwerknamen ein)</li>
<li>Auf das Plus-Zeichen links oben im Workspace drücken und "Websocket" auswählen.</li>
<li>Unter Headers wird ein neuer Key "authtoken" mit dem eben generierten Wert eingetragen.</li>
<li>Unter Headers wird ein weiterer neuer Key "plugin-id" mit der generierten Plugin-ID eingetragen.</li>
</ul>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2.webp"><img decoding="async" class="alignnone wp-image-4651 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-1024x295.webp" alt="" width="1024" height="295" srcset="https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-200x58.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-300x86.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-400x115.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-600x173.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-768x221.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-800x230.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-1024x295.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2-1200x345.webp 1200w, https://homeitems.de/wp-content/uploads/2026/05/Postman-HCU2.webp 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Nach Betätigen von Connect sollte die Meldung "<em>connected to .local:9001</em>" erscheinen.</p>
<p>Und in der HCU im Plugins Menü sollte die Verbindung ebenfalls auftauchen!</p>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1.webp"><img decoding="async" class="alignnone wp-image-4652 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-1024x384.webp" alt="" width="1024" height="384" srcset="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-200x75.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-300x113.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-400x150.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-600x225.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-768x288.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-800x300.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-1024x384.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-1200x451.webp 1200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1-1536x577.webp 1536w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed1.webp 1614w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
</div><div class="fusion-text fusion-text-5"><h1>Mit Node-RED HCU-Daten abfragen</h1>
<p>Jetzt kann eine Websocket Verbindung zur HCU aus Node-RED aufgebaut werden. Die Sockets-Nodes in Node-RED unterstützen allerdings keine Self-Signed Zertifikate. Stattdessen verwende ich die Palette <a href="https://flows.nodered.org/node/node-red-contrib-dynamic-websocket">node-red-contrib-dynamic-websocket</a>, die ich in Node-RED installiert habe. Darin befindet sich ein Websocket-Node, der viel mehr Möglichkeiten als die Standard-Nodes bietet.</p>
</div><div class="fusion-alert alert notice alert-warning fusion-alert-left awb-alert-native-link-color" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="awb-icon-cog" aria-hidden="true"></i></span><span class="fusion-alert-content"><p>Für die Angabe von Serveradressen gibt es zwei Möglichkeiten.</p>
<ol>
<li>eQ3 verwendet https://hcu1-XXX.local:9001 oder wss://hcu1-XXXX.local:9001, wobei das XXXX durch die letzten 4 Zeichen der Seriennummer ersetzt werden.</li>
<li>Alternativ kann man https://192.177.156.43:9001 oder wss://192.177.156.43:9001 verwenden (d.h. man adressiert die HCU über die IP-Adresse und den Port)</li>
</ol>
<p>Ich habe in Node-Red immer die zweite Variante verwendet, da ich mit der Namensauflösung erheblich Schwierigkeiten hatte. Diese Variante funktioniert auch für alle vorherigen Schritte.</p></span></div></div><div class="fusion-text fusion-text-6"><p>In Node-RED wird nun der Dynamic-Websocket-Node eingefügt und in den Eigenschaften folgende Daten eingetragen:</p>
<ul>
<li>Default-Url "wss://"</li>
<li>"Allow Self Signed Certificates"-Häkchen setzen</li>
</ul>
<p>Unter Custom Headers wird anschließend folgender JSON-Eintrag ergänzt:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_3" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_3" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_3" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">{
  "authtoken": "<das Authentication Token>",
  "plugin-id": "<die selbstgewählte Plugin ID (bei mir: de.spike.grass.plugin.example1)>",
  "hmip-system-events": "true"
}</textarea></div><div class="fusion-text fusion-text-7"><p>Im Code wird die eigene Plugin-ID sowie das eigene Authentication Token eingetragen. Mit der Zeile "hmip-system-events":"true" wird die HCU so eingestellt, dass alle Änderungen an HMIP-Zuständen (Basisstation, Geräte, Gruppen, etc.=) sofort an Node-Red übermittelt werden (siehe auch API-Dokumentation).</p>
<p><img decoding="async" class="alignnone wp-image-4668 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-1024x733.webp" alt="" width="1024" height="733" srcset="https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-200x143.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-300x214.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-400x286.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-600x429.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-768x549.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-800x572.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755-1024x733.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-Websocket1-e1779039776755.webp 1188w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>Alle Websocket-Nachrichten können durch einen Debug-Node am ersten Ausgang des Websocket-Nodes im Debug-Fenster ausgegeben werden. Nach dem deployen des Flows sollte das Ergebnis wie folgt aussehen. In den Objekten sind bereits alle Informationen zu den HMIP-Geräte enthalten.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2.webp"><img decoding="async" class="alignnone wp-image-4666 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-1024x206.webp" alt="" width="1024" height="206" srcset="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-200x40.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-300x60.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-400x80.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-600x121.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-768x155.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-800x161.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-1024x206.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-1200x241.webp 1200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2-1536x309.webp 1536w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed2.webp 1630w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
</div><div class="fusion-text fusion-text-8"><h2>Weitere Funktionen ergänzen</h2>
<p>Ich erweitere den Flow jetzt noch um Funktionen, die bei den weiteren Tests hilfreich sind. Hierzu gehört auch, dass die HCU zwischenzeitlich abfragt, ob mein Plugin einsatzbnereit ist. Hierzu sendet die HCU an Node-Red unter payload.type einen "PLUGIN_STATE_REQUEST". Sobald ich diesen erhalte schicke ich eine PLUGIN_STATE_RESPOND Message zurück. Die Nodes, die ich ergänze sind in folgender Tabelle aufgeführt.</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left"><strong>Node</strong></th>
<th align="left"><strong>Beschreibung</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Inject Node ("Close Connection")</td>
<td align="left">Mit diesem Node kann ich die Websocket-Verbindung schließen. Dazu braucht als Parameter nur in "msg.close" gleich "true" angegeben zu werden.</td>
</tr>
<tr>
<td align="left">Inject Node ("Open Connection")</td>
<td align="left">Mit diesem Node kann ich die Websocket-Verbindung wieder aufbauen. Dazu braucht als Parameter nur in "msg.url" als String die Serveradresse "wss://" angegeben zu werden.</td>
</tr>
<tr>
<td align="left">Switch Node ("Event Types unterscheiden")</td>
<td align="left">Hier löse ich die Event-Types auf, die von der HCU übermittelt werden (wird später noch weiter ausgebaut).</p>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1.webp"><img decoding="async" class="alignnone wp-image-4678 size-medium" src="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1-300x221.webp" alt="" width="300" height="221" srcset="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1-200x147.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1-300x221.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1-400x295.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1-600x442.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change1.webp 676w" sizes="(max-width: 300px) 100vw, 300px" /></a></td>
</tr>
<tr>
<td align="left">Switch Node ("PLUGIN_STATE_RESPONS Message")</td>
<td align="left">Über diesen Node erstelle ich die JSON-Nachricht, die ich per Websocket an die HCU schicke. In dem folgenden Screenshot müssen die PluginID sowie die ClientID durch die eigenen Werte ersetzt werden.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2.webp"><img decoding="async" class="alignnone wp-image-4679 size-medium" src="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-300x144.webp" alt="" width="300" height="144" srcset="https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-200x96.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-300x144.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-400x192.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-600x288.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-768x369.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2-800x385.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/HCU-NodeRed_Change2.webp 878w" sizes="(max-width: 300px) 100vw, 300px" /></a></td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-9"><p>Der Flow sieht anschließend wie folgt aus und bietet jetzt eine solide Basis für die Kommunikation mit der HCU.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1.webp"><img decoding="async" class="alignnone wp-image-4680 size-large" src="https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-1024x159.webp" alt="" width="1024" height="159" srcset="https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-200x31.webp 200w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-300x47.webp 300w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-400x62.webp 400w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-600x93.webp 600w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-768x119.webp 768w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-800x124.webp 800w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-1024x159.webp 1024w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-1200x187.webp 1200w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1-1536x239.webp 1536w, https://homeitems.de/wp-content/uploads/2026/05/Node-Red-HCU-Flow1.webp 1904w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Im nächsten Beitrag werde ich mir die Nachrichtenformate der HCU näher anschauen und entscheiden, wie ich diese am besten auswerte. Anregungen und Ergänzungen sind herzlich willkommen.</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/mit-node-red-auf-die-hmip-home-control-unit-hcu-zugreifen/">Mit Node-RED auf die HMIP Home Control Unit (HCU) zugreifen Teil 1</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/mit-node-red-auf-die-hmip-home-control-unit-hcu-zugreifen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aus Leistung den Zählerstand berechnen</title>
		<link>https://homeitems.de/aus-leistung-den-zaehlerstand-berechnen/</link>
					<comments>https://homeitems.de/aus-leistung-den-zaehlerstand-berechnen/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 17:23:34 +0000</pubDate>
				<category><![CDATA[influxdb]]></category>
		<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Photovoltaik]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=4107</guid>

					<description><![CDATA[<p>Viele Wechselrichter oder Messsteckdosen liefern Momentanwerte der Leistung, beispielsweise 350 W. Ich benötige jedoch häufig nur die kumulierten Werte in Form von Zählerständen, d. h. die kumulierte Energie über einen bestimmten Zeitraum in Kilowattstunden. Dazu braucht man im Prinzip nur die Leistungswerte mit einem Zeitstempel. Im folgenden Artikel beschreibe ich, wie ich  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/aus-leistung-den-zaehlerstand-berechnen/">Aus Leistung den Zählerstand berechnen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-10"><p>Viele Wechselrichter oder Messsteckdosen liefern Momentanwerte der Leistung, beispielsweise 350 W. Ich benötige jedoch häufig nur die kumulierten Werte in Form von Zählerständen, d. h. die kumulierte Energie über einen bestimmten Zeitraum in Kilowattstunden.</p>
<p>Dazu braucht man im Prinzip nur die Leistungswerte mit einem Zeitstempel.</p>
<p>Im folgenden Artikel beschreibe ich, wie ich das mit Node-Red gelöst habe. Das Prinzip ist auf viele andere Geräte übertragbar, die keine Zählerstände liefern.</p>
<h2>Grundprinzip</h2>
<p>Ein Zendure-Hyper-2000-Wechselrichter liefert über die Cloud nur die erzeugte Leistung per MQTT zu einem bestimmten Zeitpunkt, nicht aber einen Zählerstand, anhand dessen ich die erzeugte Energie beispielsweise an einem Tag ablesen könnte.</p>
<p>Dabei lassen sich Energie und Zählerstand recht einfach aus der Leistung berechnen. Die dazu benötigten Werte lassen sich physikalisch wie folgt beschreiben (vereinfacht):</p>
<ul data-spread="false">
<li><strong>Leistung (Watt) </strong>= Spannung * Stromstärke (z.B. in Watt)</li>
<li><strong>Energie (kWh)</strong> = Leistung * Zeit in einem Zeitintervall (z.B. in Kilowattstunden)</li>
<li><strong>Zählerstand </strong>=  Summe der Energiewerte in Zeitintervallen (z.B. in Kilowattstunden)</li>
</ul>
<p>Eine Lampe, die eine Stunde lang eingeschaltet ist und 500 Watt benötigt, verbraucht somit eine Energie von 0,5 kWh. Wäre die Lampe dimmbar und würde sie nach einer halben Stunde auf 250 Watt gedimmt werden, würde sie in der ersten halben Stunde 0,25 kWh und in der zweiten halben Stunde 0,125 kWh, also insgesamt 0,375 kWh, verbrauchen.</p>
<p>Ein Wechselrichter produziert in relativ kurzen Zeitabständen unterschiedliche Leistungen, sodass ich die Energie für viele kleine Zeitintervalle berechnen und aufsummieren muss. Mathematisch entspricht dies einer Integralfunktion über ein Rechteck. Da jeder übermittelte Leistungswert einen Zeitstempel besitzt, können die erforderlichen Daten schnell ermittelt werden.</p>
</div><div class="fusion-text fusion-text-11"><h2>Voraussetzungen</h2>
<p>Ich realisiere die Berechnung in Node-Red und speichere die Zählerstände in eine InfluxDB-Datenbank. Grundsätzlich speichere ich nur die resultierenden Zählerstände in der Datenbank ab, indem ich die Energie des letzten Zeitraums hinzufüge.</p>
<p>Im Programm benutze ich einige Flow-Variablen, das heißt, diese speichern Werte zwischen, die beim nächsten Programmdurchlauf verwendet werden, wenn ein neuer Leistungswert geliefert wird. Diese Variablen sind:</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">Variablenname in Node-Red</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">f_letzterZeitstempel</td>
<td align="left">In der Variablen wird der Zeitstempel der letzten Leistungsmessung gespeichert. Wenn eine neue Leistung gemessen wird, kann ich den Zeitraum für die Energieberechnung aus der Differenz der Zeitstempel ermitteln.</td>
</tr>
<tr>
<td align="left">f_letzteEnergeWh</td>
<td align="left">In dieser Variablen wird die letzte Leistung zwischengespeichert. Mein Wechselrichter liefert Wattstunden. Würden kWh geliefert, müssten diese mit 1000 multipliziert werden, um Wattstunden zu erhalten.</td>
</tr>
<tr>
<td align="left">f_LetzterZaehlerstand</td>
<td align="left">In dieser Variable speichere ich den letzten Zählerstand, sodass ich bei der Berechnung nicht jedes Mal die Datenbank abfragen muss. Eine Datenbankabfrage erfolgt nur, wenn die erste Leistung vorliegt, da der Wert sonst 0 ist.</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-alert alert custom alert-custom fusion-alert-left awb-alert-native-link-color" style="--awb-background-color:#fcf8e3;--awb-accent-color:#808080;--awb-border-size:1px;--awb-border-top-left-radius:8px;--awb-border-top-right-radius:8px;--awb-border-bottom-left-radius:8px;--awb-border-bottom-right-radius:8px;" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="fa-info-circle fas" aria-hidden="true"></i></span><span class="fusion-alert-content"><p>Zum Thema Zeitstempel und Zeit habe ich noch folgende Hinweise:</p>
<p>Ich benutze keine Zeitstempel, die mir zusammen mit der Leistung geliefert werden (z. B. von MQTT). Stattdessen nutze ich die Systemzeit zum Zeitpunkt der Datenverarbeitung durch das Programm. Alternativ kann man auch die Zeitstempel des Geräts verwenden, welches die Leistung liefert.</p>
<p>Da die meisten Systeme eine Zeitauflösung im Millisekundenbereich liefern, ergibt die Differenz der verwendeten Zeitstempel ebenfalls Millisekunden. Um diese in Stunden umzurechnen, muss man sie durch 1000 (für Sekunden) und durch 3600 (für Stunden) dividieren.</p>
<p>Bei der Übermittlung von Leistungswerten über eine Cloud (wie bei der Zendure-Lösung) ist eine Zeitverzögerung durch die Laufzeit der Informationen sehr wahrscheinlich. Da diese Laufzeiten schwanken können, ist die Genauigkeit der Energieberechnung bei einer Cloudlösung nicht so hoch wie bei einer Direktabfrage über das lokale Netzwerk. Ich habe jedoch festgestellt, dass die Abweichungen für mich nicht groß genug sind, um die Berechnung zu verändern.</p></span></div></div><div class="fusion-text fusion-text-12"><h2>Flowbeschreibung</h2>
<p>Die Verarbeitung und Speicherung der Daten erfolgt durch einen Flow, dessen Struktur wie folgt ist:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-scaled.webp"><img decoding="async" class="alignnone wp-image-4427 size-medium" src="https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-300x40.webp" alt="" width="300" height="40" srcset="https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-200x27.webp 200w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-300x40.webp 300w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-400x53.webp 400w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-600x80.webp 600w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-768x102.webp 768w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-800x107.webp 800w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-1024x137.webp 1024w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-1200x160.webp 1200w, https://homeitems.de/wp-content/uploads/2025/12/NodeRed-Flow-Zaehlerstand_berechnen-1536x205.webp 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Von meinem Wechselrichter erhalte ich per MQTT-Abfrage eine Vielzahl von Werten als Input. Aus diesen extrahiere ich im nächsten Function-Node zuerst die aktuelle Leistung.</p>
<p>In der Funktion „Energie berechnen” ermittele ich die Energie im letzten Zeitintervall. Mit dem anschließenden Switch-Node teste ich, ob die Variable „f_Zaehlerstand” vorhanden ist (Bedingung für Ausgang 1: „ist nicht Null”, für Ausgang 2: „ansonsten”). Warum mache ich das?</p>
<p>Für die Zählerstandsermittlung hole ich mir initial immer den Zählerstand aus der Datenbank und rechne dann mit Flow-Variablen in Node-Red weiter. Dadurch spare ich mir bei jedem Durchlauf die Datenbankabfrage des letzten Zählerstandes, die nur Zeit kostet. Allerdings muss ich am Anfang (nach einem Neustart von Node-Red) den Zählerstand einmal in die Variable laden. Dies stelle ich mit dem Switch-Node fest, der einfach prüft, ob die Variable „f_Zaehlerstand” einen Wert größer 0 liefert. Falls nicht, führe ich eine Abfrage der InfluxDB-Datenbank mit dem „influxdb in“-Node „Letzten Zählerstand auslesen“ und dem Function Node „Letzten Zählerstand zwischenspeichern“ aus. In diesem speichere ich den letzten Zählerstand aus der Datenbankabfrage in der Variablen „f_Zaehlerstand”.</p>
<p>Liefert der Switch-Node das Ergebnis „&gt;0”, wurde eine korrekte Energieberechnung durchgeführt. Im nächsten Funktionsknoten „Zähler hochsetzen” addiere ich die beiden Variablen „f_letzterZaehlerstand” und „f_energiekWh” und erhalte somit den neuen Zählerstand, den ich im anschließenden „InfluxDB Out”-Knoten in die Datenbank schreibe.</p>
</div><div class="fusion-text fusion-text-13"><h2>Berechnung</h2>
<p>Im Folgenden ist die Vorgehensweise bei der Berechnung in dem Function-Node "Energie berechnen" kurz beschrieben:</p>
<ol>
<li>Zunächst wird die Leistung ausgelesen und ein Zeitstempel erzeugt.</li>
<li>Anschließend werden die Flow-Variablen ausgelesen und zwischengespeichert.</li>
<li>Nun erhalten die Flow-Variablen die aktuelle Leistung und den aktuellen Zeitstempel.</li>
<li>Danach wird geprüft, ob es sich um die erste Messung handelt. Dies kann mittler der Variablen f_Zaehlerstand erfolgen, die bei der ersten Messung noch nicht ermittelt ist (z. B. nach einem Neustart von Node-Red). Falls ja, wird die Funktion abgebrochen (die</li>
<li>Erläuterung erfolgt weiter hinten).</li>
<li>Anschließend wird die Zeitdifferenz zwischen dem letzten und dem aktuellen Zeitwert berechnet (auch in Stunden).</li>
<li>Schließlich kann die Energie in Wattstunden berechnet werden.</li>
<li>Das Ergebnis wird von der Funktion zurückgeliefert.</li>
</ol>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_4" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_4" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_4" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">let leistung = msg.payload; // in Watt
let jetzt = Date.now(); // aktueller Zeitstempel in Millisekunden

let letzterZeitstempel = flow.get("f_letzterZeitstempel") || 0; //letzte Auslesung
let letzteEnergieWh=flow.get("f_letzteEnergieWh") || 0; //letzter Energiewert bei Auslesung

// Ausgelesene Leistung und Zeitstempel sofort speichern
flow.set("f_letzterZeitstempel", jetzt);
flow.set("f_letzteEnergieWh", leistung);

// Falls dies die erste Messung ist, dann Abbruch der Funktion
if (!letzterZeitstempel) {
    return msg;
}

let deltaMillis = jetzt - letzterZeitstempel;
let deltaStunden = deltaMillis / (1000 * 3600); // in Stunden

let energieWh = letzteEnergieWh * deltaStunden;

let energiekWh = energieWh/1000;

flow.set("f_EnergiekWh", energiekWh);

msg.payload = energiekWh;

return msg;</textarea></div><div class="fusion-text fusion-text-14"><p>Der gesamte Ablauf kann selbstverständlich noch vereinfacht werden. Ebenso sind Erweiterungen denkbar. So habe ich beispielsweise eine kleine Absicherung eingebaut, falls die Datenbank nicht beschrieben werden kann (z. B. aufgrund eines Connection-Errors). In diesem Fall werden die Energiewerte zwischengespeichert, bis ein erneutes Schreiben möglich ist.</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/aus-leistung-den-zaehlerstand-berechnen/">Aus Leistung den Zählerstand berechnen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/aus-leistung-den-zaehlerstand-berechnen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zendure Batteriespeicher mit Node-RED abfragen</title>
		<link>https://homeitems.de/zendure-batteriespeicher-mit-node-red-abfragen/</link>
					<comments>https://homeitems.de/zendure-batteriespeicher-mit-node-red-abfragen/#comments</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 12:03:31 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Photovoltaik]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=4221</guid>

					<description><![CDATA[<p>Neben den großen Batteriespeichern für fertige PV-Anlagen setzen sich zunehmend modulare Hybridsysteme mit AC/DC- und DC/AC-Wandlern durch. Diese ermöglichen das Laden mit Gleichstrom aus den Solarpanels sowie das Laden mit überschüssigem Wechselstrom aus dem Hausnetz. Damit kann der Strom aus alten Solaranlagen, die aus der Förderung fallen, ebenso wie der Strom aus  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/zendure-batteriespeicher-mit-node-red-abfragen/">Zendure Batteriespeicher mit Node-RED abfragen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-15"><p>Neben den großen Batteriespeichern für fertige PV-Anlagen setzen sich zunehmend modulare Hybridsysteme mit AC/DC- und DC/AC-Wandlern durch. Diese ermöglichen das Laden mit Gleichstrom aus den Solarpanels sowie das Laden mit überschüssigem Wechselstrom aus dem Hausnetz. Damit kann der Strom aus alten Solaranlagen, die aus der Förderung fallen, ebenso wie der Strom aus Balkonkraftwerken, der sonst meist kostenlos ins Netz geht, einfach für den Eigenverbrauch genutzt werden.</p>
<p>Ein großer und seit Jahren aktiver Hersteller ist die Firma<a href="https://www.zendure.de"> Zendure</a> aus dem Silicon Valley.</p>
<p>Für viele Speichermodelle bietet Zendure eine API an, mit der über die Hersteller-Cloud auf Daten des Speichers zugegriffen werden kann. Nach Aussagen des Herstellers funktioniert das für die folgenden Speichertypen</p>
<ul>
<li>SuperBase V (6400, 4600)</li>
<li>Satellite Battery (6400, 4600) und</li>
<li>SolarFlow (800, 800 Pro, 2400 AC, Hyper 2000) und</li>
<li>SuperBase V (6400, 4600).</li>
</ul>
<p>Wer möchte, kann die Cloud auch komplett aussperren. Dies ist beispielsweise in folgendem <a href="https://tbsch.de/post/2025-06-15-zendure-solarflow-lokal-%C3%BCber-mqtt-steuern/">Beitrag von Tobias Schulz</a> beschrieben. Dann hat man jedoch keinen Zugang zur gut gemachten App sowie zur KI-basierten Speicherverwaltung. In diesem Beitrag zeige ich wie ich einen Zendure Hyper 2000 mit Speicher über die Hersteller Cloud mit Node-RED abfrage. Zendure stellt hierzu eine kleine <a href="https://github.com/Zendure/developer-device-data-report?tab=readme-ov-file">Dokumentation</a> unter github zur Verfügung.</p>
</div><div class="fusion-text fusion-text-16"><h2>Cloud Verbindung herstellen</h2>
<p>Für die Inbetriebnahme eines Geräts (Wechselrichter und Batteriespeicher) ist das Anlegen eines Accounts in der Cloud des Herstellers und die Registrierung der Geräte erforderlich (<a href="https://www.zendure.de/account/register">Link</a>). Ebenso muss die Zendure-App installiert werden, um die Geräte anzumelden und notwendige Firmware-Updates auf Speicher und Wechselrichter einzuspielen. Darüber hinaus ermöglicht der Zugang über die App den Abruf sämtlicher Statusdaten und Statistiken der registrierten Geräte. Die App hat mittlerweile einen sehr guten Entwicklungsstand erreicht, der eine komfortable Steuerung und Auswertung der Leistungsdaten ermöglicht. Für weitere Informationen verweise ich auf die Webseite des Herstellers.</p>
<p>Nach der Registrierung und Inbetriebnahme des Hyper2000-Wechselrichters über die App kann durch Klicken auf das Zahnradsymbol oben rechts die Seriennummer des Geräts aufgerufen werden. Diese steht sowohl unter dem Gerätenamen als auch unter dem Menüpunkt „Gerätedaten“.</p>
<p>Grundsätzlich kommunizieren die Zendure Geräte über einen MQTT-Broker, der in meinem Fall in der Zendure-Cloud liegt. Für diesen brauche ich Zugangsdaten, damit ich Daten von meinen Geräten abfragen kann.  Mit der Seriennummer und dem Accountnamen kann nun ein Request an die Zendure-Cloud gesendet werden, um die Zugangsinformationen für eine sichere Abfrage aus Node-Red zu erhalten.</p>
<p>Die Abfrage kann beispielsweise mit einem cURL-Befehl durchgeführt werden. Ich verwende stattdessen eine Abfrage mit Node-RED.Hierzu benötige ich nur 3 Nodes.</p>
<p>Im inject-Node gebe ich als JSON-Objekt die Seriennummer sowie den Accountnamen wie folgt an:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-5 > .CodeMirror, .fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-5 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_5" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_5" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_5" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">{
    "snNumber": "PL1LIKTUN208476",
    "account": "zendure&#64;homeitems&#46;de"
}</textarea></div><div class="fusion-text fusion-text-17"><p>Diesen Inhalt schicke ich nun an einen HTTP-Request-Node, und zwar als POST-Befehl an die Adresse https://app.zendure.tech/eu/developer/api/apply.<br />
Für den Output verwende ich einen Debug-Node.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten.webp"><img decoding="async" class="alignnone wp-image-4231 size-medium" src="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-300x80.webp" alt="" width="300" height="80" srcset="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-200x54.webp 200w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-300x80.webp 300w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-400x107.webp 400w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-600x161.webp 600w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-768x206.webp 768w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-800x214.webp 800w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-1024x274.webp 1024w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten-1200x321.webp 1200w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Zugangsdaten.webp 1240w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nun erhälte ich im Node-RED Debug-Fenster einen String zurück, der wie folgt aussieht:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-6 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><label for="fusion_syntax_highlighter_6" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_6" data-readOnly="nocursor" data-lineNumbers="" data-lineWrapping="1" data-theme="default" data-mode="text/txt">"{"code":200,"success":true,"data":{"appKey":"qTIo702u","secret":"450EF4C1D34B526D8493C2E723D51AD4","mqttUrl":"mqtt-eu.zen-iot.com","port":1883},"msg":"Successful operation"}"</textarea></div><div class="fusion-text fusion-text-18"><p>Hiervon sind folgende Teile wichtig:</p>
<ul>
<li><strong>appKey</strong>: Der Accountname für die Anmeldung in der Cloud</li>
<li><strong>secret</strong>: Das Passwort für die Anmeldung  in der Cloud</li>
<li><strong>mqttUrl</strong>: Die URL des MQTT-Servers für die Datanabfrage</li>
</ul>
<p>Nun sind alle Daten vorhanden, die man für eine weitere Abfrage benötigt.</p>
<p>von dem folgende Daten wichtig sind:</p>
</div><div class="fusion-text fusion-text-19"><h2>Daten abfragen</h2>
<p>Um die Daten für das Gerät aus der Zendure-Cloud empfangen zu können, muss eine Abfrage beim MQTT-Server von Zendure erfolgen.</p>
<p>Dazu verwendet man einen MQTT-In-Node, für den man zunächst eine Verbindung mit den folgenden Daten einrichtet:</p>
<ul>
<li>Name: beliebig</li>
<li>Server: mqtt-eu.zen-iot.com</li>
<li>Port: 1883</li>
<li>Connect automatically</li>
<li>Protokoll: MQTT V3.1.1</li>
<li>Bereinigte Sitzung verwenden</li>
</ul>
<p>Unter dem Reiter „Sicherheit” werden folgende Daten angegeben:</p>
<ul>
<li>Benutzername: appkey (Der Accountname, den man von Zendure erhalten hat</li>
<li>Passwort: secret (Das Passwort, was man von Zendure erhalten hat)</li>
</ul>
</div><div class="fusion-alert alert custom alert-custom fusion-alert-left awb-alert-native-link-color" style="--awb-background-color:#fcf8e3;--awb-accent-color:#808080;--awb-border-size:1px;--awb-border-top-left-radius:8px;--awb-border-top-right-radius:8px;--awb-border-bottom-left-radius:8px;--awb-border-bottom-right-radius:8px;" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="fa-exclamation-triangle fas" aria-hidden="true"></i></span><span class="fusion-alert-content">Bitte aufpassen, dass man hier aus Versehen nicht die Anmeldedaten für den Zendure Cloudzugang eingibt</span></div></div><div class="fusion-text fusion-text-20"><p>Im MQTT-IN Node werden folgende Eigenschaften eingetragen:</p>
<ul>
<li>Action: Subscribe to single topic</li>
<li>Topic: <em>appkey</em>/#       <em>(z.B. rtP7zHkq/#)</em></li>
<li>QoS: 2</li>
<li>Ausgang: Auto-Erkennung (parsed JSON Objekt, string oder buffer)</li>
</ul>
</div><div class="fusion-alert alert custom alert-custom fusion-alert-left awb-alert-native-link-color" style="--awb-background-color:#fcf8e3;--awb-accent-color:#808080;--awb-border-size:1px;--awb-border-top-left-radius:8px;--awb-border-top-right-radius:8px;--awb-border-bottom-left-radius:8px;--awb-border-bottom-right-radius:8px;" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="fa-exclamation-triangle fas" aria-hidden="true"></i></span><span class="fusion-alert-content">Bitte denkt unbedingt daran, für das Topic den appkey gefolgt von einem „/#“ anzugeben, damit alle Werte von einem Gerät gesendet werden. Ohne den Slash und den Hashtag liefert die Angabe des appkey keine Ergebnisse.</span></div></div><div class="fusion-text fusion-text-21"><p>Nun sollte der Empfang funktionieren und die ersten Wert per payload-Objekt geliefert werden.</p>
<h2>Daten auswerten</h2>
<p>Beim Auswerten der empfangenen Daten stellt man schnell fest, dass immer nur Daten empfangen werden, die sich seit dem letzten Mal verändert haben. Damit enthält die payload immer eine unbestimmte Zahl von Einträgen mit jeweils unterschiedlichen Attributen.  Ebenso kann es durch die Cloudabfrage auch einen Zeitverzug ergeben (der für mich aber irrelevant ist). Ich habe festgestellt, dass für eine Hyper2000 neben der Seriennummer folgende Daten übertragen werden:</p>
<ul>
<li>remainOutTime ( Remaining discharge time in min = verbleibende Entladezeit)</li>
<li>packInputPower (pack input power)</li>
<li>electricLevel (Device battery percentage = Ladezustand der Batterie)</li>
<li>solarPower1 (Solar1 Input Power in Watt = Leistung aus erstem Wechselrichter)</li>
<li>solarPower2 (Solar2 Input Power in Watt = Leistung aus zweiten Wechselrichter)</li>
<li>outputHomePower (output to home power in Watt = abgebene Leistung ins Hausnetz)</li>
<li>hyperTmp (hyperTmp</li>
<li>solarInputPower (solarInputPower = Leistung die gerade durch solarPanels in Speicher geladen wird)</li>
<li>packState (packState = Gibt an, ob in Batterie gerade nichts passiert (0), geladen(1) oder entladen(2) wird)</li>
</ul>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p>Das sind weniger Informationen, als in der App angeboten werden, so dass man ansonsten auf die Cloud-freie Lösung umschwenken muss.</p>
<p>Um die Daten auszuwerten kann man nun mit einer ganz einfache Lösung starten:</p>
</div>
<p>Für jeden Datentyp extrahiert jeweils ein Function Node die Daten aus der payload. Die kann wie folgt aussehen:</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-7 > .CodeMirror, .fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-7 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_7" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_7" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_7" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">msg.payload = msg.payload.remainOutTime
return msg;</textarea></div><div class="fusion-text fusion-text-22"><p>Da es möglich ist, dass der Wert gar nicht geliefert wurde, muss man in einem anschließenden Switch-Node prüfen, ob das Ergebnis NULL ist. Anschließend kann der Wert weiterverarbeitet werden (z. B. in InfluxDB etc.)</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung.webp"><img decoding="async" class="alignnone wp-image-4251 size-medium" src="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-300x106.webp" alt="" width="300" height="106" srcset="https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-200x71.webp 200w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-300x106.webp 300w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-400x141.webp 400w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-600x212.webp 600w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-768x271.webp 768w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-800x282.webp 800w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-1024x361.webp 1024w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung-1200x423.webp 1200w, https://homeitems.de/wp-content/uploads/2025/09/Node-Red-Zendure-Datenauswertung.webp 1356w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Dies ist eine sehr einfache Lösung für die Auswertung, die natürlich durch eine effizientere Lösung mit weniger Redundanz ersetzt werden kann.</p>
<p>Interessant ist, dass Zendure keinen Zähler übergibt, der die Menge des von einer direkt angeschlossenen Photovoltaikanlage erzeugten Stroms in kWh misst. In der App ist ein solcher Zähler allerdings vorhanden. Zendure liefert stattdessen die jeweilige Leistung der PV-Module. In einem nächsten Beitrag zeige ich, wie sich aus der Leistung trotzdem Zählerstände berechnen lassen.</p>
</div><div class="fusion-alert alert error alert-danger fusion-alert-center awb-alert-native-link-color" role="alert"><div class="fusion-alert-content-wrapper"><span class="alert-icon"><i class="awb-icon-exclamation-triangle" aria-hidden="true"></i></span><span class="fusion-alert-content"><p>Beim <strong>Solarflow 2400AC</strong> scheint die beschriebene Vorgehensweise mit dem MQTT-Server nicht zu funktionieren. Hier hat Martin stattdessen folgende Lösung gefunden:</p>
<div class="plain_line"><em>Wenn man im Browser: http://ipAdressedesdesSolarflow/properties/report eingibt, z.B.</em></div>
<div class="plain_line"></div>
<div class="plain_line"><em>http://192.168.177.96/properties/report</em></div>
<div class="plain_line"></div>
<div class="plain_line"><em>bekommt man einen schönen Datenstring auf den Bildschirm. </em><em>Diesen hole ich in Node-RED über einen http Request Node und "GET" rein und parse in einem Function-Node z.B. nach der Batteriekapazität, die heisst da "socLevel". Dessen Wert kann ich im Function-Node einem Ausgang zuführen. Das hilft mir für meine Anwendung weiter und der Weg über MQTT ist für mich dann überflüssig.</em></div>
<div class="plain_line"></div></span></div></div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/zendure-batteriespeicher-mit-node-red-abfragen/">Zendure Batteriespeicher mit Node-RED abfragen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/zendure-batteriespeicher-mit-node-red-abfragen/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Velux Rollladen mit Somfy und Node-RED steuern</title>
		<link>https://homeitems.de/velux-solar-rollladen-mit-tahoma-und-nodered-steuern/</link>
					<comments>https://homeitems.de/velux-solar-rollladen-mit-tahoma-und-nodered-steuern/#comments</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Sat, 03 May 2025 17:49:22 +0000</pubDate>
				<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Somfy / Tahoma]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=3705</guid>

					<description><![CDATA[<p>Seit vielen Jahren bietet Velux für seine Dachfensterlösungen die Nachrüstung von Rollläden an. Egal, ob man sich für Solarrollladen oder kabelgebundene Rollläden entscheidet, kann man diese in sein Smart Home einbinden. In vielen Fällen wird hierzu das KLF-200-Interface verwendet. Wer hingegen bereits eine Somfy-Basisstation (Tahoma Switch) besitzt, kann sich den Kauf des  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/velux-solar-rollladen-mit-tahoma-und-nodered-steuern/">Velux Rollladen mit Somfy und Node-RED steuern</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-23"><p>Seit vielen Jahren bietet Velux für seine Dachfensterlösungen die Nachrüstung von Rollläden an. Egal, ob man sich für Solarrollladen oder kabelgebundene Rollläden entscheidet, kann man diese in sein Smart Home einbinden. In vielen Fällen wird hierzu das KLF-200-Interface verwendet. Wer hingegen bereits eine Somfy-Basisstation (Tahoma Switch) besitzt, kann sich den Kauf des KLF 200 sparen. Im folgenden Artikel zeige ich, wie sich die Rollläden mit Somfy und Node-RED einfach in eine Smart-Home-Lösung integrieren lassen.</p>
<h2>Rollladen anlernen</h2>
<p>Zunächst wird der neue Velux-Rollladen über die Somfy-App angelernt. Hierzu ist keine Zusatzhardware von Velux oder Somfy erforderlich, sofern der Tahoma Switch vorhanden ist.</p>
<p>Dazu wählt man in der Somfy-App das Haussymbol und „Produkt hinzufügen“ aus. Anschließend wählt man „Fenster und Sonnenschutz“ und dann „Außensonnenschutz“ aus. Bei der Art des Außensonnenschutzes wird „Rollläden“ und bei der Fernbedienung „Wandsensor“ ausgewählt. Nun sollte der „Velux-Wandsensor“ erscheinen, den man anklickt.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1816.png"><img decoding="async" class="alignnone wp-image-3707 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1816.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1817.png"><img decoding="async" class="alignnone wp-image-3708 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1817.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1818.png"><img decoding="async" class="alignnone wp-image-3709 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1818.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1820.png"><img decoding="async" class="alignnone wp-image-3711 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1820.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1819.png"><img decoding="async" class="alignnone wp-image-3710 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1819.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a></p>
<p>Nun muss die SET-Taste des Velux-Wandsensors gedrückt werden. Am unteren Gehäuserand befinden sich zwei Öffnungen: Die linke ist mit einem Zahnrad versehen und stellt die SET-Taste dar, die rechte ist mit zwei übereinanderliegenden Fenstern versehen. Mit einem spitzen Gegenstand wird die linke Taste mit dem Zahnradsymbol so lange gedrückt, bis sich der Rollladen zu bewegen beginnt. Anschließend wird in der App auf „Weiter“ gedrückt. Die App sucht im Hintergrund nach dem VELUX-Empfänger und meldet nach kurzer Zeit, dass ein Rollladen gefunden wurde.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1821.png"><img decoding="async" class="alignnone wp-image-3712 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1821.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1823.png"><img decoding="async" class="alignnone wp-image-3714 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1823.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a><a href="https://homeitems.de/wp-content/uploads/2025/05/IMG_1824.png"><img decoding="async" class="alignnone wp-image-3715 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-138x300.png" alt="" width="138" height="300" srcset="https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-138x300.png 138w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-200x434.png 200w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-400x867.png 400w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-472x1024.png 472w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-600x1301.png 600w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-709x1536.png 709w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-768x1665.png 768w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-800x1734.png 800w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824-945x2048.png 945w, https://homeitems.de/wp-content/uploads/2025/05/IMG_1824.png 1179w" sizes="(max-width: 138px) 100vw, 138px" /></a></p>
<p>Der neue Rollladen ist jetzt in der Tahoma-App angelernt und kann darüber bedient werden. Die Option „Diskret“ reduziert das Geräusch der Rolladenbewegung durch langsameres Rollen. Ich empfehle dringend, dem Rollladen im folgenden Dialog noch einen sprechenden Namen zu geben, da wir diesen in Node-Red noch benötigen werden.</p>
<p>Ich nenne meinen Rollladen „DG Rollladen Mitte“.</p>
<p><em>Hinweis: In der Tahoma-App wird zwar der Name des Rollladen in der richtigen Länge angezeigt, bei der späteren Nutzung in Node-Red kann es aber sein, dass der Name nur gekürzt wiedergegeben wird.</em></p>
<h2>Mit Node-RED Gerätedaten auslesen</h2>
<p>Wie man den Tahoma Switch mit Node-Red ausliest, habe ich bereits im Beitrag <a href="https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/">Weinor Markisen mit NodeRed und Somfy API steuern </a>beschrieben. Als Ergebnis des Beitrags erhalte ich neben der Adresse für den Switch auch den Token (Passwort), mit dem ich in den folgenden Schritten die Geräte abfragen kann.</p>
<p>Zunächst frage ich alle Geräte auf dem Tahoma Switch ab. Dazu muss ich den Befehl „Get Devices“ mit der Adresse der API des Tahoma Switches an die Zentrale schicken. Dies ist im oben genannten Artikel genau beschrieben. Ich habe mir diese Abfrage in Node-Red so eingerichtet, dass ich jederzeit alle Geräte abfragen kann. Nach dem Absetzen des GET-Befehls über einen „http-request“-Node erhalte ich im Debug-Fenster ein Objekt mit allen auf dem Tahoma Switch registrierten Geräten, deren Status und Befehlen. Bitte daran denken, den Bearer-Token immer neu einzugeben. Durch Aufklappen der Objektdetails kann ich nach meinem Rollladen „DG Rollladen Mitte“ suchen.</p>
<p>Da ich den Namen meines neuen Geräts kenne, fällt es mir nun leicht, es im Objektbaum zu finden. Kurz darunter steht die IO-Adresse, die ich zum Senden von Befehlen brauche. Im Array „Commands“ steht, dass ich die Befehle „up“, „close“ und „stop“ benutzen kann, um den Rollladen zu bewegen.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux.webp"><img decoding="async" class="alignnone wp-image-3720 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-300x169.webp" alt="" width="300" height="169" srcset="https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-200x113.webp 200w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-300x169.webp 300w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-400x225.webp 400w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-600x338.webp 600w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-768x432.webp 768w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-800x450.webp 800w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-1024x576.webp 1024w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux-1200x675.webp 1200w, https://homeitems.de/wp-content/uploads/2025/05/Abfrage-NodeRed-Velux.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nun habe ich alle erforderlichen Details, um das Gerät zu steuern.</p>
<h3>Velux Rollladen steuern</h3>
<p>Um einen Steuerbefehl absetzen zu können, muss ich Daten als POST-Request an die API-Funktion „exec” schicken.</p>
<p>Die Befehlszeile dazu sieht wie folgt aus:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-8 > .CodeMirror, .fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-8 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_8" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_8" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_8" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">https://gateway-2029-7239-2937:8443/enduser-mobile-web/1/enduserAPI/exec/apply</textarea></div><div class="fusion-text fusion-text-24"><p>Diese Befehlszeile, die ich mit einem HTTP-Request-Node absetze, benötigt als Input noch ein Datenobjekt, in dem ich angebe, welches Gerät ich mit welchem Befehl ansprechen möchte. Hier wird dann die IO-Adresse meines „DG Rollladen Mitte” verwendet.</p>
<p>Für das Runterfahren sieht das Datenobjekt wie folgt aus:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-9 > .CodeMirror, .fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-9 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_9" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_9" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_9" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/x-sh">{
    "label": "DG Rollladen Mit",
    "actions": [
        {
            "commands": [
                {
                    "name": "close"
                }
            ],
            "deviceURL": "io://2029-7239-2937/1749362"
        }
    ]
}</textarea></div><div class="fusion-text fusion-text-25"><p>Dabei besteht die IO-Adresse immer aus der Adresse des Tahoma Switches, gefolgt von der siebenstelligen Geräteadresse des eigentlichen Geräts. Der Name des Gerätes ist für den Befehl nicht wichtig, da das Gerät eindeutig durch seine IO-Adresse bestimmt wird.</p>
<p>In Node-RED sieht das dann wie folgt aus:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close.webp"><img decoding="async" class="alignnone wp-image-3722 size-medium" src="https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-300x29.webp" alt="" width="300" height="29" srcset="https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-200x20.webp 200w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-300x29.webp 300w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-400x39.webp 400w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-600x59.webp 600w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-768x75.webp 768w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-800x78.webp 800w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-1024x100.webp 1024w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close-1200x117.webp 1200w, https://homeitems.de/wp-content/uploads/2025/05/Nodered-Flow_Velux-close.webp 1414w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
</div><div class="fusion-text fusion-text-26"><p>Möchte man hingegen den Status abfragen, erhält man diesen mit einem Get-Befehl, der die API-Funktion /setup/devices/ aufruft. Bei der IO-Adresse muss man im Get- (oder Post-)Befehl daran denken, dass Sonderzeichen in HTML-UTF8-HEX-Zeichen umgewandelt werden müssen (d. h. aus :// wird %3A%2F%2F und aus / wird %2F).</p>
<p>Die Befehlszeile zur Abfrage des Status meines Rollladens lautet dann wie folgt:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-10 > .CodeMirror, .fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-10 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_10" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_10" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_10" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/javascript">https://gateway-2029-7239-2937:8443/enduser-mobile-web/1/enduserAPI/setup/devices/io%3A%2F%2F2029-7239-2937%2F1749362</textarea></div><div class="fusion-text fusion-text-27"><p>Zurück erhalte ich ein Objekt, in dem sich ausschließlich die Daten meines Rollladens befinden. Mithilfe dieses Objekts kann ich beispielsweise feststellen, wie weit der Rollladen heruntergefahren wurde.</p>
</div><div class="fusion-text fusion-text-28"><p><em>Nachtrag vom 14.5.25</em></p>
<h2>Bestimmte Position anfahren</h2>
<p>Für das Anfahren einer bestimmten Position findet man in der command-Liste des Gerätes den Befehl "setClosure". Als Parameter wird die Position in Prozent angegeben, wobei 0% eingefahren und 100% ausgefahren bedeutet. Das an den Befehl zu übergebende Datenobjekt sieht wie folgt aus:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-11 > .CodeMirror, .fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-11 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_11" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_11" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_11" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/x-sh">{
    "label": "DG Rollladen Mit",
    "actions": [
        {
            "commands": [
                {
                    "name": "setClosure",
                    "parameters": [
                        "50"
                    ]
                }
            ],
            "deviceURL": "io://2029-7239-2937/1749362"
        }
    ]
}</textarea></div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/velux-solar-rollladen-mit-tahoma-und-nodered-steuern/">Velux Rollladen mit Somfy und Node-RED steuern</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/velux-solar-rollladen-mit-tahoma-und-nodered-steuern/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Stromüberschuss mit Klimaanlage nutzen</title>
		<link>https://homeitems.de/stromueberschuss-mit-klimaanlage-nutzen/</link>
					<comments>https://homeitems.de/stromueberschuss-mit-klimaanlage-nutzen/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Mon, 17 Jun 2024 13:06:26 +0000</pubDate>
				<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Photovoltaik]]></category>
		<category><![CDATA[Tado]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=3165</guid>

					<description><![CDATA[<p>Mit einer Photovoltaikanlage wird vor allem in den warmen Monaten mehr Strom erzeugt als gespeichert oder verbraucht werden kann. Da es sich kaum lohnt, den Strom zu verkaufen, ist es besser, ihn zu verbrauchen. Was liegt da näher, als die Räume im Sommer mit Klimaanlagen kostenlos zu kühlen. Der folgende Beitrag zeigt,  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/stromueberschuss-mit-klimaanlage-nutzen/">Stromüberschuss mit Klimaanlage nutzen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-29"><p>Mit einer Photovoltaikanlage wird vor allem in den warmen Monaten mehr Strom erzeugt als gespeichert oder verbraucht werden kann. Da es sich kaum lohnt, den Strom zu verkaufen, ist es besser, ihn zu verbrauchen. Was liegt da näher, als die Räume im Sommer mit Klimaanlagen kostenlos zu kühlen. Der folgende Beitrag zeigt, wie man mit einfachen Mitteln eine Split-Klimaanlage in das Smarthome-System Node-Red integrieren und den Stromüberschuss zum Kühlen nutzen kann.</p>
<h2>Klimaanlage extern steuern</h2>
<p>Die grundsätzliche Frage ist, wie eine Klimaanlage in ein Smarthome-System eingebunden werden kann. Sofern der Hersteller keine spezielle Schnittstelle zur Verfügung stellt (z.B. Modbus, etc.), ist die einfachste Möglichkeit, die Infrarotschnittstelle zur Fernbedienung des Klimagerätes zu nutzen. Die meisten Geräte verfügen über eine Infrarot-Fernbedienung, die bestimmte Infrarotsignale aussendet, um verschiedene Befehle an die Klimaanlage zu senden. Einige Fernbedienungen sind sogar bidirektional, d.h. sie können auch Statusinformationen von der Klimaanlage empfangen. In diesem Beispiel ist eine unidirektionale Fernbedienung ausreichend. Benötigt wird also ein Gerät, das  Signal der Klimaanlagen-Fernbedienung senden und über eine API von außen gesteuert werden kann. Mittlerweile gibt es eine Vielzahl von Geräten, die jedoch nicht mit allen Klimaanlagen funktionieren. Dazu habe ich einige Versuche unternommen.</p>
<h3>1. Versuch</h3>
<p>Als erstes Gerät habe ich den <a href="https://de.elv.com/elv-smart-home-bausatz-ir-sender-elv-sh-irs8-powered-by-homematic-ip-158404?fs=553251246">ELV Smart Home Bausatz IR-Sender ELV-SH-IRS8</a> getestet, da dieser direkt von einer HMIP-CCU angelernt werden kann. Leider stellte sich im Nachhinein heraus, dass meine Mitsubishi Heavy Industries Anlage nicht unterstützt wird. Außerdem muss man etwas Löterfahrung mitbringen, um das Gerät zusammenbauen zu können. Insgesamt ist die Auswahl der unterstützten Klimagerätehersteller überschaubar.</p>
<h3>2. Versuch</h3>
<p>Dann habe ich das <a href="https://www.amazon.de/Broadlink-Universal-Fernbedienung-Infrarot-Controller-Kompatibel/dp/B07DPHG521">BroadLink RM mini 3</a> getestet. Das Gerät heißt nicht nur so, sondern ist auch mini. Allerdings ist die Einrichtung ziemlich kompliziert. Um das WLAN einzurichten und die Klimaanlage anlernen zu können musste ich mehrere Apps benutzen, die teilweise nicht gut gepflegt waren. Die Anleitung selbst war nicht optimal und die blaue Status-LED am Gerät kaum erkennbar. Auch brach die WLAN-Verbindung zwischendurch immer wieder ab. Positiv war, dass eine große Anzahl von Klimaanlagen unterstützt wird. Allerdings habe ich keine brauchbare Node-Palette für Node-Red gefunden, mit der man das Gerät mit Node-Red steuern kann.</p>
<h3>3. tado bietet die bisher beste Lösung</h3>
<p>Schließlich bin ich bei tado gelandet. Diese bieten die <a href="https://www.tado.com/de-de/smarte-klimaanlagen-steuerung">Smarte Klimaanlagen Steuerung V3+</a> an. Um zu prüfen, ob mein Gerät überhaupt unterstützt wird, habe ich vor dem Kauf den Support (gelber Button unten rechts auf der Webseite) kontaktiert, da tado keine Kompatibilitätsliste veröffentlicht hat. Innerhalb kurzer Zeit hat jemand meine Angaben zur Fernbedienung und zum Hersteller der Klimaanlage aufgenommen und nach einem Tag hatte ich die Rückmeldung, dass meine Anlage unterstützt wird.  Die tado Lösung ist eine Cloud-Lösung, d.h. man muss auf jeden Fall einen Account anlegen und eine App installieren. Für Node-Red gibt es  zusätzliche Nodes, um dieses und andere Geräte steuern zu können.</p>
<p>tado legt großen Wert auf Design und einfache Bedienung, was man schon beim Auspacken merkt. Die Einrichtung ist komplett menügeführt und für den  Notfall gibt es auf der Webseite eine Anleitung. Folgende Tipps kann ich noch geben:</p>
<ul>
<li>Sowohl tado als auch broadlink wollen das Gerät mit dem 2,4 GHz WLAN verbinden. Wer sowohl ein 2,4 GHz als auch ein 5 GHz LAN mit dem gleichen Namen nutzt, dem empfehle ich das 5GHz LAN kurzzeitig zu deaktivieren, damit der Verbindungsaufbau fehlerfrei funktioniert.</li>
<li>Bei tado wollte mein Gerät nach Aufbau der WLAN-Verbindung ein Update installieren. Dies funktionierte aber nicht, das Gerät blieb ständig im Installationsmodus. Nach mehreren Stunden kontaktierte ich erneut die tado-Hotline (gelber Button), die aus der Ferne die Installation starten konnte.</li>
</ul>
<p>Danach konnte das Klimagerät mit einem einfachen Tastendruck auf der Fernbedienung identifiziert und automatisch eingerichtet werden. So sollte es sein!</p>
<p>Wer weitere einfach einzurichtende Verbindungen für Klimaanlage kennt, kann diese gerne hier posten!</p>
</div><div class="fusion-text fusion-text-30"><h2>Stromverbrauch auslesen</h2>
<p>Um die Klimaanlage nur bei Stromüberschuss einschalten zu können benötige ich zunächst den jeweils aktuellen Stand meines  Saldos aus Stromverbrauch und Stromerzeugung am Zähler. Wie das geht, habe ich in dem folgenden Artikel beschrieben: <a href="https://homeitems.de/smartmeter-mit-tasmota-auslesen/">SmartMeter mit Tasmota auslesen</a>. Dieser Wert wird automatisch an den MQTT-Broker gesendet. Diesen rufe ich mit Node-Red bei jeder Änderung ab und speichere ihn zwischen. Wie man die Daten von einem MQTT-Server abruft habe ich im folgenden Beitrag <a href="https://homeitems.de/mit-node-red-influxdb-und-grafana-daten-auf-einem-synology-nas-sammeln-und-visualisieren-teil-2-2/">Mit Node-Red, InfluxDB und Grafana Daten auf einem Synology NAS sammeln und visualisieren (Teil 2/2)</a> im Kapitel <strong>MQTT-Nachrichten mit Node-Red auslesen und in influxDB speichern </strong>beschrieben.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern.webp"><img decoding="async" class="alignnone wp-image-3179 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-300x40.webp" alt="" width="300" height="40" srcset="https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-66x9.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-177x24.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-200x27.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-300x40.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-320x43.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-400x53.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-460x61.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-540x72.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-600x80.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-669x89.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-700x93.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-768x102.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-800x107.webp 800w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-940x125.webp 940w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-1024x137.webp 1024w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern-1200x160.webp 1200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed-Flow-SVerbrauch-speichern.webp 1229w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Der Code im Function-Node sieht wie folgt aus:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-12 > .CodeMirror, .fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-12 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_12" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_12" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_12" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/x-sh">msg.payload = msg.payload.MT175.Power_curr
flow.set('f_stromverbrauch', msg.payload);
return msg;</textarea></div><div class="fusion-text fusion-text-31"><p>Ich extrahiere den relevanten Wert aus dem MQTT-Objekt und speichere ihn in einer Flow-Variablen. So kann ich auf diesen Wert zugreifen, ohne den MQTT-Broker erneut zu fragen. Das Ergebnis gebe ich zur Kontrolle mit einem Debug-Node im Debug-Fenster aus.</p>
<h2>Anmelden bei tado</h2>
<p>Um das tado-Gerät von Node-Red aus steuern zu können, installiere ich die Erweiterung <a href="https://flows.nodered.org/node/node-red-contrib-tado-client">node-red-contrib-tado-client</a>. Ich rufe den neu installierten Tado-Node auf und gebe als erstes unter "Tado Config" meine Anmeldedaten für die Tado Cloud ein, da ich dort zuvor mein Gerät angelegt habe.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/tado-config-node.webp"><img decoding="async" class="alignnone wp-image-3185 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-300x193.webp" alt="" width="300" height="193" srcset="https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-66x42.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-177x114.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-200x129.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-300x193.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-320x206.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-400x257.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-460x296.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-540x347.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-600x386.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-669x430.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-700x450.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node-768x494.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/tado-config-node.webp 792w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2>Wichtige Ergänzung (Juni 2025)</h2>
<p>Tado hat mittlerweile die Authentifizierung geändert und nutzt nun das OAuth2-Verfahren, um einen Zugriff auf die Rest-API zu ermöglichen. Nähere Infos dazu findet man unter:</p>
<p><a href="https://support.tado.com/en/articles/8565472-how-do-i-authenticate-to-access-the-rest-api">https://support.tado.com/en/articles/8565472-how-do-i-authenticate-to-access-the-rest-api</a></p>
<p><a href="https://datatracker.ietf.org/doc/html/rfc6749#page-48">https://datatracker.ietf.org/doc/html/rfc6749#page-48</a></p>
<p>Wer die alte Version der Library noch installiert hat, muss mindestens auf die Version V1.1.4 updaten. Ich empfehle ebenfalls das Lesen der Library-Informationen bzgl. weiterer Neuerungen.</p>
<p>Zur Nutzung sollte der Beispielflow <a href="https://github.com/mattdavis90/node-red-contrib-tado-client/blob/master/examples/tado.json">tado.json</a> von der Library aus GitHub in NodeRed geladen werden, denn hier befinden sich auch weitere Erläuterungen zur Einrichtung.</p>
<p>Auf der Beispiel-Flow-Seite befinden sich nun drei Bereiche:  "Authentication Flow", "Persistent Auth" und "Testing".</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library.webp"><img decoding="async" class="alignnone wp-image-3941 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-300x153.webp" alt="" width="300" height="153" srcset="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-200x102.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-300x153.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-400x204.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-600x306.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-768x391.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-800x408.webp 800w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-1024x522.webp 1024w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-1200x612.webp 1200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado_Library-1536x783.webp 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Durch Drücken des „Inject“-Nodes im Authentication Flow wird ein Debug Output erzeugt. In diesem steht ein Link. Diesen ruft man in einen beliebigen Browser auf. Wenn man noch nicht bei tado angemeldet ist, dann gibt man zuerst seinen Login-Namen und sein Passwort an. Anschließend bestätigt man nur den angezeigten Code und tado meldet „Erfolgreich verbunden“. Nun steht im Debug-Fenster in NodeRed der "Refresh_Token", mit dem man die weiteren API-Aufrufe vornehmen kann (hierzu empfehle ich, das nächste Kapitel zu lesen).</p>
<p>Ein Refresh-Token ist allerdings maximal nur 300 Sekunden gültig, so dass man dann einen Neuen erzeugen müsste (dies wird z.B. auch durch einen Deploy in NodeRed ausgelöst, da der Token dann aus dem Speicher gelöscht wird.</p>
<p>Damit das nicht passiert und der Token erhalten bleibt bzw. automatisch erneuert wird hat der Autor der Library den Beispiel-Flow „Persistent Auth“ beigefügt.</p>
<p>Zur Nutzung werden die Nodes in dem Flow zuerst aktiviert. Anstelle des Nodes „unknown: tado-token“ wird der tado-Node eingetragen und verbunden. In diesem wird für die Eigenschaft "Tado-config" nur die Auswahl "Tado-config" getroffen. Für alle weiteren Abfragen verwende ich ab jetzt nur noch "Tado-config" und nicht mehr "Tado-Cloud" (die folgenden Bilder wurden noch mit der alten Authentifizierungsmethode erstellt).</p>
<p>Parallel dazu wird im NodeRed Data-Verzeichnis eine Datei /data/tado.json angelegt und dort im JSON-Format der letzte verwendete Refresh-Token eingetragen.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication.webp"><img decoding="async" class="alignnone wp-image-3942 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-300x50.webp" alt="" width="300" height="50" srcset="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-200x33.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-300x50.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-400x67.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-600x100.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-768x129.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-800x134.webp 800w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-1024x172.webp 1024w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-1200x201.webp 1200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication-1536x257.webp 1536w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_tado_Persistent_Authentication.webp 1612w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Anschließend sollte der Flow ohne Probleme laufen. Dieser erneuert nun automatsch den Refresh-Token. Laut Angaben des Autors der Library wird der Refresh-Token maximal innerhalb von 30 Tage automatisch erneuert, wenn man nicht auf die API zugreift, bevor man einmal manuell eine Erneuerung auslösen muss. Alternativ reicht es aus, dass innerhalb von 30 Tagen einmal ein API-Zugriff erfolgt. Ich vermute, dass dies auch eine Sicherheitseinstellung von tado ist.</p>
<h2>tado Parameter auslesen</h2>
<p>Für die weiteren API-Aufrufe benötige ich meine Home ID. Diese erhalte ich, wenn ich den API-Aufruf "Get the current user" auswähle und den resultierenden Aufruf mit einem Inject-Node vorne und einem Debug Node hinten ergänze und ausführe. Als Ergebnis erhalte ich im Debug-Fenster ein Datenobjekt, das wie folgt aussieht:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1.webp"><img decoding="async" class="alignnone wp-image-3187 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-300x246.webp" alt="" width="300" height="246" srcset="https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-66x54.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-177x145.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-200x164.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-300x246.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-320x262.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-400x328.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-460x377.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-540x443.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-600x492.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-669x548.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-700x574.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-768x629.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-800x656.webp 800w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-940x770.webp 940w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1-1024x839.webp 1024w, https://homeitems.de/wp-content/uploads/2024/06/tado_Datenobjekt1.webp 1048w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Hier brauche ich nun die Zahl, die unter "homes" im Array[0] hinter "id" steht. 2359335 ist meine Home-ID, die ich für die weiteren API-Aufrufe benötige (das Objekt lässt sich durch Klicken auf die Pfeile auf- und zuklappen).</p>
<p>Zusätzlich frage ich noch die Zone ab, in der sich mein Gerät im Tado-Universum befindet (zur Erklärung von Zonen sollte man sich bei tado informieren).</p>
<p>Dazu öffne ich einen neuen tado-Node, wähle diesmal die API-Funktion "Get all zones" und gebe die eben gefundene Home-ID an. Mit Inject und Debug-Node erhalte ich wieder ein Datenobjekt, indem ich durch Aufklappen der Datenstruktur irgendwo den Namen meiner Klimaanlage finde, den ich beim Setup angegeben habe. Die Nummer hinter dem Feldnamen id des Objekteintrags darüber ist die Nummer, die ich brauche.</p>
<p>Wenn ihr nur eine Klimaanlage eingerichtet habt, werdet ihr höchstwahrscheinlich die Nummer "1" als Ergebnis erhalten.</p>
<p>Jetzt habe ich alles zusammen, um die Klimaanlage mit Node-Red ein- und auszuschalten.</p>
<h2>Klimaanlage mit Node-Red steuern</h2>
<p>Um die Klimaanlage einzuschalten, ruft man wieder einen Tado-Node auf und wählt die Funktion "Set a Zone's Overlay". Mit den folgenden Parametern schalte ich die Klimaanlage bei mir ein:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten.webp"><img decoding="async" class="alignnone wp-image-3189 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-199x300.webp" alt="" width="199" height="300" srcset="https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-66x100.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-177x267.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-199x300.webp 199w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-200x302.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-300x453.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-320x483.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-400x604.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-460x695.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-540x815.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-600x906.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-669x1010.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-678x1024.webp 678w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-700x1057.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten-768x1160.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/NodeRed_Tado-Klimaanlage_einschalten.webp 798w" sizes="(max-width: 199px) 100vw, 199px" /></a></p>
<p><em>Hinweis: Da ich keine bidirektional sendende Fernbedienung habe, kann Tado nicht erkennen, ob ich die Klimaanlage manuell ein- oder ausgeschaltet habe. Ich kann die von Tado eingeschaltete Anlage zwar mit der Fernbedienung ausschalten, Tado hat intern aber immer noch den Status "ein" gespeichert. Auch die "Auto-"Funktion beim AC-Mode funktioniert bei mi nicht.  Ich gehe ebenfalls davon aus, dass dazu eine bidirektionale Fernbedienung erforderlich ist, die auch Temperaturwerte übermittelt. </em></p>
<p>Analog schalte ich die Klimaanlage aus, wenn ich in die Eigenschaft des Schalters "Heating On/Off" einfach auf "Off" stelle.</p>
</div><div class="fusion-text fusion-text-32"><p>Nun kann ich ein einfaches "Programm" in Node-Red erstellen, das in der folgenden Grafik zu sehen ist:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern.webp"><img decoding="async" class="alignnone wp-image-3191 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-300x91.webp" alt="" width="300" height="91" srcset="https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-66x20.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-177x54.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-200x61.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-300x91.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-320x97.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-400x121.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-460x139.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-540x164.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-600x182.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-669x203.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-700x212.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-768x233.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-800x243.webp 800w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-940x285.webp 940w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-1024x310.webp 1024w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-1200x364.webp 1200w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern-1536x466.webp 1536w, https://homeitems.de/wp-content/uploads/2024/06/Node-Red-Flow-Klimaanlage-steuern.webp 1801w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Oben habe ich bereits beschrieben, dass ich den aktuellen Zählerstand immer vom MQTT-Server hole und in einer Variablen zwischenspeichere. Nun füge ich nur noch einen Inject-Node hinzu und stelle dort ein, dass dieser in der Zeit von 8:00 bis 20:00 Uhr an jedem Tage und zu jeder Viertelstunde ein Ereignis auslöst.</p>
<p>Dann prüfe ich im nächsten Switch-Knoten, ob mein aktueller Stromverbrauch (Saldo) einen Überschuss von 400 Watt und mehr aufweist oder darunter liegt. Im ersten Fall schalte ich die Klimaanlage mit dem Tado-Node ein oder mit dem anderen Tado-Node aus. Der Inhalt des switch-Knotens sieht wie folgt aus:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage.webp"><img decoding="async" class="alignnone wp-image-3192 size-medium" src="https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-300x208.webp" alt="" width="300" height="208" srcset="https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-66x46.webp 66w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-177x123.webp 177w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-200x139.webp 200w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-300x208.webp 300w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-320x222.webp 320w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-400x277.webp 400w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-460x319.webp 460w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-540x374.webp 540w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-600x416.webp 600w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-669x464.webp 669w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-700x485.webp 700w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage-768x532.webp 768w, https://homeitems.de/wp-content/uploads/2024/06/Switch-Node-Klimaanlage.webp 782w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Dieses einfache Beispiel kann nun leicht erweitert werden, indem man weitere Klimaanlagen hinzufügt und z.B. die Temperatur vorher kontrolliert.</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/stromueberschuss-mit-klimaanlage-nutzen/">Stromüberschuss mit Klimaanlage nutzen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/stromueberschuss-mit-klimaanlage-nutzen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Strommessung mit Shelly Plus PM Mini und Node-RED</title>
		<link>https://homeitems.de/strommessung-mit-shelly-plus-pm-mini-und-node-red/</link>
					<comments>https://homeitems.de/strommessung-mit-shelly-plus-pm-mini-und-node-red/#comments</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Mon, 15 Apr 2024 08:05:15 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Shelly]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2740</guid>

					<description><![CDATA[<p>Mit dem kleinen Shelly Plus PM Mini wird eine günstige Möglichkeit geboten, eine Leistungsmessung durchzuführen. Das Gerät ist nur ca. 28 x 32 x 16 mm (HxBxT) groß und passt in viele UP-Dosen z.B. hinter einer Steckdose. Das Gerät unterstützt dabei eine Messung bis zu 16A Leistung (ist leider nicht bei allen  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/strommessung-mit-shelly-plus-pm-mini-und-node-red/">Strommessung mit Shelly Plus PM Mini und Node-RED</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-33"><p>Mit dem kleinen Shelly Plus PM Mini wird eine günstige Möglichkeit geboten, eine Leistungsmessung durchzuführen. Das Gerät ist nur ca. 28 x 32 x 16 mm (HxBxT) groß und passt in viele UP-Dosen z.B. hinter einer Steckdose. Das Gerät unterstützt dabei eine Messung bis zu <strong>16A</strong> Leistung (ist leider nicht bei allen Shelly Geräten so), so dass man mit dem Gerät theoretisch die Leistung eines Balkonkraftwerks, von Lichtschaltern oder Steckdosen messen kann.</p>
<p>Im folgenden Beitrag beschreibe ich, wie man das PM Mini auch ohne Shelly-App über WLAN und MQTT einbinden und die Daten in Node-Red weiterverarbeiten kann.</p>
<p>Grundsätzlich erfolgt hier der Hinweise, dass das Arbeiten an Elektroleitungen immer nur von Fachleuten (Elektrikern) durchgeführt werden und immer die fünf Sicherheitsregeln der Elektrotechnik berücksichtigt werden sollten.</p>
<h2>Gerät ins Netzwerk einbinden</h2>
<p>Ich möchte auf die Shelly Cloud sowie das Einrichten der Shelly App verzichten, sondern nur eine lokale Nutzung mittels WLAN umsetzen. Nach der Stomversorgung spannt das PM Mini ein eigenes Netz auf (Access Point), mit dem man sich verbinden muss. Das WLAN erkennt man an dem Namen, der mit "ShellyPMMini..." beginnt. Um anschließend in den Shelly-WebAdmin-Oberfläche zu kommen, gibt man im Browser die Adresse "192.168.33.1" ein und schon sollte die administrative Weboberfläche  erscheinen. Bitte berücksichtigt, dass auch die Shelly-Geräte nur das 2,4 GHz WLAN unterstützen. Die Optionen und Anzeigen  in der WebAdmin-Oberfläche sind unter diesem <a href="https://kb.shelly.cloud/knowledge-base/shelly-plus-pm-mini">Link</a> super erklärt.</p>
<p>Nun geht man auf "Configure Wifi-Setting", wählt "Enable Wifi-network" und gibt die SSID (Name des WLANs) sowie das Passwort für das WLAN an und speichert die Einstellungen. Theoretisch kann man das Gerät nun neu starten und es sollte dann unter einer eigenen IP-Adresse in der Netzwerkliste des Routers erscheinen.</p>
<h2>Generelle Einstellungen</h2>
<p>Da es bei älteren Shelly-Firmwareversionen zu Problemen mit der korrekten Leistungsmessung kam, sollte unbedingt die aktuelle Firmware für das PM Mini aufgespielt werden.  Dazu geht man auf "Settings" und "Firmware". Shelly prüft nun automatisch, ob eine neue Version verfügbar ist und bietet an, diese online zu installieren.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small.webp"><img decoding="async" class="alignnone wp-image-3043 size-medium" src="https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-300x208.webp" alt="" width="300" height="208" srcset="https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-200x138.webp 200w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-300x208.webp 300w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-400x277.webp 400w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-600x415.webp 600w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-768x532.webp 768w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small-800x554.webp 800w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_Firmware_Update-small.webp 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nach dem Drücken von "Update" wird die Firmware aufgespielt und das Gerät neu gestartet. Nun sollten folgende Einstellungen vorgenommen werden:</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">Menü</th>
<th align="left">Wert</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">"Settings" und "Device Name"</td>
<td align="left">Sprechender Name des Gerätes</td>
<td align="left">Hilft später bei der Identifikation im Netzwerk und ist gleichzeitig der Topic-Name für MQTT</td>
</tr>
<tr>
<td align="left">"Settings" und "Bluetooth"</td>
<td align="left">"Enable Bluetooth" und "Enable RPC": Haken entfernen</td>
<td align="left">Da nur das WLAN benötigt wird</td>
</tr>
<tr>
<td align="left">"Settings" "Eco"</td>
<td align="left">"Enable Eco Mode": Haken setzen</td>
<td align="left">Aktiviert den Eco-Modus</td>
</tr>
<tr>
<td align="left">"Setting" "Authentication"</td>
<td align="left">Eigenes Passwort setzen</td>
<td align="left">Sperrt den freien Zugang auf die Weboberfläche</td>
</tr>
<tr>
<td align="left">"Settings" und "Access Point"</td>
<td align="left">"Enable AP-Network": Haken entfernen</td>
<td align="left">Deaktiviert den Access Point</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-34"><h2>MQTT-Settings</h2>
<p>Für das erfolgreiche Senden von Nachrichten an einen MQTT-Broker müssen folgende Einstellungen vorgenommen werden:</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">Menü</th>
<th align="left">Wert</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">"Settings" und "MQTT-Settings"</td>
<td align="left">
<ol>
<li>"Enable MQTT-Network": Haken setzen</li>
<li>"Connection Type" :  No-SSL</li>
<li>"Enable MQTT Control": Haken setzen</li>
<li>"Generic status updat over MQTT": Haken setzen</li>
<li>"Enable RPC over MQTT": Haken entfernen</li>
<li>"RPC Status notification over MQTT": Haken entfernen</li>
<li>"Server": "IP-Adresse des MQTT-Servers: 1883"</li>
</ol>
</td>
<td align="left">
<ol>
<li>MQTT aktivieren, damit Daten gesendet werden</li>
<li>Nur wenn man SSL nicht aktiviert hat, ansonsten das richtige Protokoll wählen</li>
<li>Gibt die Möglichkeit, per MQTT auch Befehle zu senden</li>
<li>Muss gesetzt werden, da sonst nichts vom PM Mini gesendet wird.</li>
</ol>
</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-35"><p><a href="https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small.webp"><img decoding="async" class="alignnone wp-image-3044 size-medium" src="https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-300x199.webp" alt="" width="300" height="199" srcset="https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-200x133.webp 200w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-300x199.webp 300w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-400x266.webp 400w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-600x398.webp 600w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-768x510.webp 768w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small-800x531.webp 800w, https://homeitems.de/wp-content/uploads/2024/04/Shelly_MQTT_Settings_small.webp 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nach dem Speichern der Settings ist das Gerät vollständig konfiguriert und kann über "Settings" "Reboot-Device" neu gestartet werden. Anschließend kann man z.B. mit dem <a href="http://mqtt-explorer.com/">MQTT-Explorer</a> prüfen, welche Informationen an den MQTT-Broker gesendet werden.</p>
<p><em>Tipp: Bei mir wurden zuerst keine Nachrichten gesendet. Erst als ich in den MQTT-Settings den Punkt „Generic Status update over MQTT“  enabled und dann wieder disabled habe, hat es funktioniert.</em></p>
<h2>Daten in Node-Red weiterverarbeiten</h2>
<p>Die Daten können jetzt in Node-Red weiterverarbeitet werden. In meinem Fall speichere ich diese direkt in einer InfluxDB ab.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow.webp"><img decoding="async" class="alignnone wp-image-3040 size-medium" src="https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-300x56.webp" alt="" width="300" height="56" srcset="https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-200x38.webp 200w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-300x56.webp 300w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-400x75.webp 400w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-600x113.webp 600w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-768x145.webp 768w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-800x151.webp 800w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-1024x193.webp 1024w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow-1200x226.webp 1200w, https://homeitems.de/wp-content/uploads/2024/04/Node-Red-Shelly-Flow.webp 1376w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Im mqtt-in-Node frage ich erst einmal das Topic vom MQTT-Server ab. Dieses findet man unter dem Namen, den man dem Shelly-Gerät  gegeben hat (siehe oben), gefolgt von einem "/pm1:0", also in meinem Fall heißt das Topic "EM-Licht/pm1:0". Als Ausgabe wird "Ein analysiertes (parsed) JSON-Objekt." gewählt.</p>
<p>Im Function-Node wird nun die Leistung aus dem JSON-Objekt extrahiert:</p>
<p>Der Code dazu lautet:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-13 > .CodeMirror, .fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-13 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_13" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_13" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_13" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="text/x-sh">msg.payload=msg.payload.aenergy.total;
return msg;</textarea></div><div class="fusion-text fusion-text-36"><p>Das bedeutet, dass sich unter "aenergy.total" der benötigte Wert im payload-Objekt befindet.</p>
<p>Zuletzt speichere ich diesen Wert noch mit einem influxdb-out-Node in die Datenbank. Mit dieser Vorgehensweise kann man auch andere Shelly-Geräte ohne Shelly-App abfragen und deren Daten weiterverarbeiten.</p>
<p>Wie man Node-Red, MQTT und InfluxDB installiert und Daten austauscht steht unter anderem in meinen Beiträgen <a href="https://homeitems.de/mit-node-red-influxdb-und-grafana-daten-auf-einem-synology-nas-sammeln-und-visualisieren-teil-1-2/">Mit Node-Red, InfluxDB und Grafana Daten auf einem Synology NAS sammeln und visualisieren (Teil 1/2)</a> und  <a href="https://homeitems.de/mit-node-red-influxdb-und-grafana-daten-auf-einem-synology-nas-sammeln-und-visualisieren-teil-2-2/">Mit Node-Red, InfluxDB und Grafana Daten auf einem Synology NAS sammeln und visualisieren (Teil 2/2)</a></p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/strommessung-mit-shelly-plus-pm-mini-und-node-red/">Strommessung mit Shelly Plus PM Mini und Node-RED</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/strommessung-mit-shelly-plus-pm-mini-und-node-red/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Pixelclock als Statusanzeige für smart home</title>
		<link>https://homeitems.de/pixelclock-als-statusanzeige-fuer-smarthome/</link>
					<comments>https://homeitems.de/pixelclock-als-statusanzeige-fuer-smarthome/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Sat, 23 Dec 2023 17:40:54 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[Node-Red]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2515</guid>

					<description><![CDATA[<p>Neulich bin ich wieder auf die die Ulanzi TC001 Pixelclock gestoßen und beschreibe im folgenden Beitrag, wie sich mit dem Display eigene Werte über Node-Red von beliebigen Smart Home Systemen darstellen lassen. Ich habe die Pixelclock direkt bei Ulanzi bestellt. Innerhalb kurzer Zeit wurde sie geliefert. Sie besitzt ein Matrixdisplay aus 256  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/pixelclock-als-statusanzeige-fuer-smarthome/">Pixelclock als Statusanzeige für smart home</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-37"><p>Neulich bin ich wieder auf die die Ulanzi TC001 Pixelclock gestoßen und beschreibe im folgenden Beitrag, wie sich mit dem Display eigene Werte über Node-Red von beliebigen Smart Home Systemen darstellen lassen.</p>
<p>Ich habe die Pixelclock direkt bei <a href="https://www.ulanzi.de/products/ulanzi-pixel-smart-uhr-2882">Ulanzi</a> bestellt. Innerhalb kurzer Zeit wurde sie geliefert. Sie besitzt ein Matrixdisplay aus 256 LEDs und versprüht damit einen gewissen Retro Charme. Sie ist mit einem Akku ausgestattet und über einen USB-C Anschluss kann man das Gerät aufladen oder auch mit einem Netzteil betreiben. Ich verwende dazu ein Netzteil, welches ich normalerweise für einen Raspberry PI benutze (5V, 1A).</p>
<p>Auf der Oberseite befinden sich neben einem Lichtsensor drei Tasten, die zur Bedienung der internen Einstellungen dienen. Die Pixelclock zeigt bereits fünf eigene Apps an, zu denen ein Kalender oder die Akkuanzeige gehören.</p>
<h2>Neue Firmware aufspielen</h2>
<p>Um eigene Werte auf der Pixelclock anzeigen zu können, muss eine andere Firmware aufgespielt werden. Diese wird der blueforcer AWTRIX LIGHT Gruppe gepflegt und über diese <a href="https://blueforcer.github.io/awtrix-light/#/flasher">Webseite</a> mit einem Online-Flasher bereitgstellt. Nach dem Anschluss des Gerätes über das mitgelieferte USB-C-Kabel kann das Gerät über die Webseite geflasht werden.  Während dieses Vorgangs piept das Gerät kontinuierlich.</p>
<p><em>ACHTUNG: Der Online Flasher funktioniert lt. Hersteller nur mit Google Chrome und Microsoft Edge. Bei mir hat nur Google Chrome unter OSX funktioniert.</em></p>
<p>Nach erfolgreicher Installation meldet sich die Pixelclock mit einer bunten Anzeige, auf der "AWTRIX sowie die Versionsnummer der Firmware und "AP MODE" angezeigt werden. Dies bedeutet, dass die Pixelclock noch keine Verbindung ins WLAN hat. Da sie in diesem Modus ein eigene WLAN aufspannt kann man sich mit einem beliebigen Gerät mit diesem WLAN verbinden (Name i.d.R. "awtrix....").</p>
<p>Nach Eingabe der SSID und der Passwortes startet das System neu und sollte nun nach dem Versionsschriftzug eine IP-Adresse anzeigen. Unter dieser IP-Adresse ist das AWTRIX-Webinterface ab sofort erreichbar.</p>
<p><em>TIPP: Wer später eine aktuellere Firmware aufspielen möchte kann diese unter folgendem <a href="https://github.com/Blueforcer/awtrix3/releases">Link</a> herunterladen und auf dem Webinterface </em><em>der Pixelclock </em><em>über den Menüpunkt "Update" installieren.</em></p>
<h2>AWTRIX konfigurieren</h2>
<p>Zur Anzeige eigener Werte ist ein MQTT-Broker erforderlich. In meinem Beitrag <a href="https://homeitems.de/mqtt-broker-mosquitto-als-docker-image-auf-nas-installieren/">MQTT-Broker Mosquitto als Docker Image auf einem NAS installieren</a> ist beschrieben, wie man diesen installieren kann.</p>
<p>Ich empfehle, folgende Einstellungen vorzunehmen:</p>
<ul>
<li>Unter "MQTT" die IP-Adresse des MQTT-Brokers (der Port kann i.d.R. auf 1883 bleiben, wenn man den nicht geändert hat)</li>
<li>Unter "Prefix" den Namen, unter dem Daten für das Gerät zu finden sein sollen. In meinem Beispiel verwende ich "awtrix_test"</li>
<li>(optional) Unter "Auth" einen Usernamen und ein Passwort für den Zugriff auf das Webinterface.</li>
</ul>
<p>Nach Änderungen ist es sinnvoll, diese zu sichern.  Das kann man über den Menüpunkt "Backup" erledigen und kann somit später Konfigurationen einfach wiederherstellen.</p>
<p>Auf dem Gerät sollte man darüber hinaus alle Applikationen deaktivieren, die man nicht braucht. Bei mir ist nur der Kalender übrig geblieben. Dazu drückt man etwas länger die mittlere Taste und wählt über die links- oder rechts-Taste das Menü "APPS"  aus. Ein erneutes Drücken der mittleren Taste bietet anschließend die Möglichkeit, mit den Pfeiltasten die vorinstallierten Apps anzuwählen. Diese können über die mittlere Taste auf "ON" oder "OFF" gestellt werden.  Das jeweilige Untermenü verlässt man über das längere Drücken der mittleren Taste.</p>
<p><em>HINWEIS: Man kann auf dem Gerät nur die vorinstallierten Apps aktivieren oder deaktivieren. Eigene Apps werden hier nicht angezeigt, sondern werden nur über die MQTT-Nachrichten gesteuert. </em></p>
</div><div class="fusion-text fusion-text-38"><h2>Icons installieren</h2>
<p>Eigene Daten kann man mit vorangestellten Icons anzeigen lassen. Hierzu gibt es bereits eine riesige Auswahl auf der Seite <a href="https://developer.lametric.com/icons">Lametric</a>. Wunderschön sind insbesondere die animierten Icons z.B. für Stromverbrauch oder Stromerzeugung. Wer hier nichts findet, kann sogar selber eigene Icons erstellen. Ich wähle für mein Beispiel das Icon mit der Nummer 21256 aus.</p>
<p>Nach dem Wechsel in das AWRTIX-Webinterface kann man unter dem Menüpunkt "Icons" durch die Angabe der Icon-Nummer von der Lametric-Seite ein oder mehrere Icons auf die Pixelclock laden.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon.webp"><img decoding="async" class="wp-image-2531 size-medium" src="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-300x244.webp" alt="" width="300" height="244" srcset="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-200x163.webp 200w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-300x244.webp 300w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-400x326.webp 400w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-600x488.webp 600w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-768x625.webp 768w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-800x651.webp 800w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-1024x834.webp 1024w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-1200x977.webp 1200w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon-1536x1250.webp 1536w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_Add_Icon.webp 1651w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
</div><div class="fusion-text fusion-text-39"><h2>Eigene Werte anzeigen lassen</h2>
<p>Ich möchte auf der Pixelclock den aktuellen Stromverbrauch meines Smartmeters anzeigen lassen. Wie man diesen ausliest, habe ich in dem Beitrag <a href="https://homeitems.de/smartmeter-mit-tasmota-auslesen/">SmartMeter mit Tasmota auslesen</a> beschrieben.</p>
<p>In Node-Red baue ich dazu einen Flow, der aus folgenden Komponenten besteht:</p>
<p><img decoding="async" class="size-medium wp-image-2529" src="https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-300x62.webp" alt="" width="300" height="62" srcset="https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-200x41.webp 200w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-300x62.webp 300w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-400x82.webp 400w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-600x123.webp 600w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-768x158.webp 768w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-800x164.webp 800w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-1024x210.webp 1024w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock-1200x246.webp 1200w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Flow_Pixelclock.webp 1233w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Von einer CCU hole ich mir die Variable, in der der aktuelle Stromverbrauch gespeichert ist (das könnte natürlich auch der Wert von einem MQTT-Broker sein). Diesem Wert übermittle ich an einen Change-Node, in der die Nachricht zusammengestellt wird, die an einen MQTT-out-Node weitergegeben wird. Die Nachricht wird als json-String in einer Payload zusammengesetzt und besteht aus folgenden Bestandteilen:</p>
</div>
<div class="table-1" style="--awb-margin-top:;--awb-margin-bottom:1%;">
<table width="100%">
<thead>
<tr>
<th align="left">Regel</th>
<th align="left">Erläuterung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Change</td>
<td align="left">Zuerst wird die "alte" Payload in msg.stromverbrauch gesichert. Diese Vorgehensweise führt dazu, dass das vorhandene payload-Objekt genutzt werden kann und kein neues erzeugt werden muss.</td>
</tr>
<tr>
<td align="left">Setze</td>
<td align="left">In msg.payload.text wird nun der Text "VEBRAUCH W" gespeichert.</td>
</tr>
<tr>
<td align="left">Ändere</td>
<td align="left">Hiermit wird der Text "VEBRAUCH" durch den Wert ausgetauscht, der in msg.stromverbrauch zwischengespeichert wurde.</td>
</tr>
<tr>
<td align="left">Setze</td>
<td align="left">Die Text-Farbe setze ich mit msg.payload.color auf den Wert grün (HEX-Wert)</td>
</tr>
<tr>
<td align="left">Setze</td>
<td align="left">Durch msg.payload.repeat gebe ich an, dass der Text zweimal hintereinander auf dem Display angezeigt werden soll</td>
</tr>
<tr>
<td align="left">Setze</td>
<td align="left">Mit msg.payload.icon gebe ich an, dass das zuvor geladene Icon mit der Nummer 21256 vor dem Text angezeigt werden soll.</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-40"><p>In Node-Red sieht der Change-Node wie folgt aus:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload.webp"><img decoding="async" class="alignnone wp-image-2530 size-medium" src="https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-179x300.webp" alt="" width="179" height="300" srcset="https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-179x300.webp 179w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-200x336.webp 200w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-400x672.webp 400w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-600x1007.webp 600w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-610x1024.webp 610w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload-768x1289.webp 768w, https://homeitems.de/wp-content/uploads/2023/12/Nodered_Awtrix_payload.webp 794w" sizes="(max-width: 179px) 100vw, 179px" /></a></p>
<p><em>TIPP: Es gibt eine große Zahl von Konfigurationsmöglichkeiten für eine Anzeige. Diese sind in der sehr guten Dokumentation unter folgendem <a href="https://blueforcer.github.io/awtrix-light/#/api">Link</a> zu finden.</em></p>
<p>Diese Informationen leite ich anschließend an den MQTT-out-Node weiter. Hier ist darauf zu achten, dass das Topic richtig eingetragen wird. Dieses besteht aus dem in AWTRIX festgelegten Topic (hier "awtrix_test"), gefolgt von dem Text "/custom" sowie einer eigenen Applikationsbezeichnung. In meinem Beispiel lautet das topic "awtrix_test/custom/stromverbrauch". Der letzte Name kann frei gewählt werden ist aber wichtig, damit man die verschiedenen Werte, die man an die Uhr übermittelt, eindeutig unterscheiden kann.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix.webp"><img decoding="async" class="alignnone wp-image-2534 size-medium" src="https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-300x245.webp" alt="" width="300" height="245" srcset="https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-200x163.webp 200w, https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-300x245.webp 300w, https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-400x326.webp 400w, https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-600x490.webp 600w, https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix-768x627.webp 768w, https://homeitems.de/wp-content/uploads/2023/12/MQTT-Node_Awtrix.webp 794w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Sobald man den Flow in Node-Red deployed hat, sollte nach kurzer Zeit auf der Pixelclock der definierte Wert angezeigt und ständig aktualisiert werden. Es kann am Anfang ein paar Sekunden dauern, bis die Nachrichten vom Broker empfangen wurden.</p>
</div><div class="fusion-text fusion-text-41"><h2>Senken des Stromverbrauchs</h2>
<p>Bei Messungen habe ich festgestellt, dass die Pixelclock bis zu 8 Watt im Betrieb braucht. Das erschien mir ziemlich viel, so dass ich zwei Maßnahmen empfehle, wie der Verbrauch gesenkt werden kann.</p>
<p>Zuerst sollte die Helligkeit des Displays heruntergestellt werden. Dazu wählt man im Menü der Pixelclock (langes Drücken auf die mittlere Taste) den Menüpunkt "BRIGHTNESS". Nach Drücken der mittleren Taste kann man hier einen eigenen Wert einstellen. Bei mir sind aktuell 10% eingestellt, was auch bei Tageslicht vollkommen ausreicht. Dadurch sank mein Stromverbrauch bereits auf weniger als 5 Watt.</p>
<p>Zusätzlich stelle ich ich die Anzeige z.B. nachts aus. Hierzu wird der Pixelclock einfach ein Befehl geschickt, der diese für eine bestimmte Zeit schlafen legt (Deep Sleep Modus des ESP).</p>
<p>Dazu wird in einem Change-Node die Eigenschaft "sleep" auf die Sekundenzahl gesetzt, die das Gerät im Schlafmodus verbringen soll. In meinem Beispiel sind das 12 Stunden oder 43.200 Sekunden:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep.webp"><img decoding="async" class="alignnone wp-image-2628 size-medium" src="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep-300x255.webp" alt="" width="300" height="255" srcset="https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep-200x170.webp 200w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep-300x255.webp 300w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep-400x341.webp 400w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep-600x511.webp 600w, https://homeitems.de/wp-content/uploads/2023/12/Awtrix_DeepSleep.webp 694w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Diese Information wird anschließend als Push-Nachricht über einen mqtt-out-Node an den MQTT-Server gesendet, wobei das Topic wie folgt lautet "awtrix_test/sleep".</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/pixelclock-als-statusanzeige-fuer-smarthome/">Pixelclock als Statusanzeige für smart home</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/pixelclock-als-statusanzeige-fuer-smarthome/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Weinor Markisen mit Node-RED und Somfy API steuern</title>
		<link>https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/</link>
					<comments>https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/#comments</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Sun, 08 Oct 2023 18:19:06 +0000</pubDate>
				<category><![CDATA[Node-Red]]></category>
		<category><![CDATA[Somfy / Tahoma]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2277</guid>

					<description><![CDATA[<p>Weinor Markisen sind seit vielen Jahrzehnten im Einsatz und gelten als sehr zuverlässig. Nach dem Kauf einer neuen Weinor-Markise wollte ich diese mittels Node-Red einbinden und über Taster von Homematic-IP schalten. Dabei habe ich festgestellt, dass die verbauten Somfy Motoren nur noch das io-Homecontrol Protokoll unterstützen. Für dieses habe ich leider keine  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/">Weinor Markisen mit Node-RED und Somfy API steuern</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-8 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-8 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-42"><p>Weinor Markisen sind seit vielen Jahrzehnten im Einsatz und gelten als sehr zuverlässig. Nach dem Kauf einer neuen Weinor-Markise wollte ich diese mittels Node-Red einbinden und über Taster von Homematic-IP schalten.</p>
<p>Dabei habe ich festgestellt, dass die verbauten Somfy Motoren nur noch das io-Homecontrol Protokoll unterstützen. Für dieses habe ich leider keine funktionsfähigen Bibliotheken für Node-Red gefunden, die den Zugriff auf die Somfy Produkte ermöglichen. Daher habe ich mich damit beschäftigt, wie man das Thema auch ohne fremde Bibiotheken lösen kann und zeige in den folgenden Absätzen wie das trotzdem geht.  Ich verwende dazu Node-RED, über das ich auch die Schalter von Homematic-IP nutzen kann.</p>
<h2>Wenige Grundlagen</h2>
<p>Schon seit langem werden Weinor Markisen mit Somfy Motoren ausgestattet. Somfy unterscheidet hier zwei selbst entwickelte Technologien:</p>
<ul>
<li>RTS (Radio Technology Somfy): Dise unidirektionale Technologie gibt einfach nur Befehle an den Motor weitere.</li>
<li>io-Homecontrol: Dies ist eine biderektionale Funktechnologie, die auch den Status von Aktoren abfragen kann. Diese wird mittlerweile auch standardmäßig in Weinor Produkten eingebaut.</li>
</ul>
<p>Für das RTS-Prokololl gibt es eine Vielzahl von Lösungsmöglichkeiten u.a. über einen nano-CUL Stick an, der auf dem Frequenzbank 433 MHz kommuniziert. Eine Anleitung hierzu ist  u.a unter folgendem Link zu finden: <a href="https://www.byteride.com/iobroker-somfy/">https://www.byteride.com/iobroker-somfy/</a></p>
<p>Für io-Homecontrol sieht das Ganze schon deutlich schwieriger aaus, das Somfy dieses Protkoll erst seit wenigen Jahren als neues Protokoll in seinen Geräten verbaut.</p>
<p>Um die von mir vorgestellte Lösung nutzen zu können, braucht man einen <a href="https://www.somfy.de/produkte/1870595/tahoma-switch">Tahoma Switch,</a> von Somfy, der eine Basisstation für alle Somfy-Produkte ist. Ein Somfy Connectivity Kit ist nicht geeignet. Die angelernten Geräte sich sich dann auch über eine Somfy-App sehr komfortabel einrichten und steuern.  In diesem Tahoma Switch hat Somfy eine lokale API installiert, die man für eigene Zwecke sehr schön nutzen kann, und über die die Steuerung aller Parameter eines am Tahoma-Siwtch angeschlossenen Gerätes inkl. von der Weinor-Markisen gelingt. Die vorgestellte Lösung kann somit für beliebige Somfy-Geräte verwendet werden, die an dem lokalen Tahoma-Switch angeschlossen werden.</p>
<h2>Welche Technologie unterstützt meine Markise</h2>
<p>Welche Technologie der Markisenmotor unterstützt ist fast immer anhand der Bezeichnung der Fernbedienung abzulesen, auf der z.B. ein kleines "io" zu finden ist, wenn die aktuelle Technologie verbaut wurde.</p>
<p>Alternativ  kann man sich den Aufdruck auf dem Markisenmotor anschauen, was meist etwas unpraktisch ist. Kennt man aber die Bezeichnung entweder vom Motor oder von der Fernbedienung kann man die Funktechnologien, die diese Geräte unterstützen,  auch direkt auf der <a href="https://www.somfy.de/">Somfy-Webseite</a> nachschauen.</p>
<h2>Developer Mode aktivieren</h2>
<p>Somfy hat in 2022 die Möglichkeiten zum Steuern von IOT-Devices komplett auf eine neue API umgestellt, die auf der lokalen Tahoma Basisstation aktiviert werden muss und anders angesprochen wird, als die alten APIs. Hierzu muss auf der Tahoma Basisstation der sogenannte "Developer Mode" aktiviert werden.</p>
<p>Man installiert den Switch wie in der Anleitung beschrieben und registriert sich bei Somfy (ohne geht es nicht, da für die Nutzung der API Daten mit Somfy ausgetauscht werden müssen).</p>
<p>Loggt man sich anschließend in seinen Account ein, sollte die Box unter "Produkte" erscheinen und aktiv sein (sonst bitte nochmal die Installationsschritte prüfen).</p>
<p>Unter dem Link "Tahoma/Connexoon bedienen" findet man nun die Möglichkeit den Developermode zu aktivieren. Sobald dieser aktiviert wurde sollte das Ergebnis wie folgt aussehen:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode.webp"><img decoding="async" class="alignnone wp-image-2280 size-medium" src="https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-163x300.webp" alt="" width="163" height="300" srcset="https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-163x300.webp 163w, https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-200x369.webp 200w, https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-400x738.webp 400w, https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-555x1024.webp 555w, https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode-600x1107.webp 600w, https://homeitems.de/wp-content/uploads/2023/07/Tahoma-Entwicklermode.webp 746w" sizes="(max-width: 163px) 100vw, 163px" /></a></p>
<p>Den PIN-Code, der angezeigt wird kopiert man, da dieser später noch benötigt wird. Wird die Möglichkeit zum Aktivieren des Entwicklermodus nicht angezeigt, dann ist ein Gerät nicht für die folgenden Schritte geeignet (z.B. Connexoon-Box, Connectivity Kit). Mit Aktivierung des Developer Modes wird der Zugriff auf die API freigeschaltet.</p>
</div><div class="fusion-text fusion-text-43"><h2>Session ID erzeugen</h2>
<p>Alle Schritte für das Generieren und das Ansprechen der Befehle sind von den Entwicklern in der Doku <a href="https://github.com/Somfy-Developer/Somfy-TaHoma-Developer-Mode">Somfy Tahoma Developer Mode</a> beschrieben. Da dies aber für den Laien echt kryptisch klingt, erkläre ich die wichtigen Schritte detailliert in den folgenden Absätzen.</p>
<p>Für die nächsten Schritte empfehle ich, das Tool <a href="https://www.postman.com/">Postman</a> zu verwenden, da die Kommunikation auch über POST-Befehle erfolgt und ein normaler Browser diese nicht unterstützt. Natürlich kann man das Ganze auch über curl machen, aber ich finde Postman einfacher. Im Prinzip braucht man nur die freie Version vom Postman zu installieren, d.h. eine Registrierung ist nicht erforderlich.</p>
<p>Zuerst muss eine Session ID erzeugt werden, die die aktive Kommunikation mit der Somfy API authentifiziert.</p>
<p>Hierzu wählt man in Postman in der oberen Zeile den Befehl "POST" aus (das kann man leicht vergessen und dann gibt es schnell einen Fehler, wenn da noch GET drinsteht) und gibt im nachfolgenden Feld die folgende Adresse ein:</p>
<p><em>https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/login</em></p>
<p>Nun müssen noch die folgenden Parameter in den Reitern unterhalb der Adresszeile ergänzt werden:</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left">Key</th>
<th align="left">Inhalt</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">userId</td>
<td align="left"></td>
<td align="left">Im Reiter "Body" wird dieser Key mit dem entsprechenden Inhalt ergänzt (unbedingt auf richtige Schreibweise achten)</td>
</tr>
<tr>
<td align="left">userPassword</td>
<td align="left"></td>
<td align="left">Im Reiter "Body" wird dieser Key mit dem entsprechenden Inhalt ergänzt (unbedingt auf richtige Schreibweise achten)</td>
</tr>
<tr>
<td align="left">Content-Type</td>
<td align="left">application/x-www-form-urlencoded</td>
<td align="left">Im Reiter "Header" wird dieses Feld mit Inhalt zusätzlich ergänzt</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-44"><p>Nach dem Drücken auf "Send" sollte als Ergebnis folgendes erscheinen:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO.webp"><img decoding="async" class="alignnone wp-image-2353 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-300x114.webp" alt="" width="300" height="114" srcset="https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-200x76.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-300x114.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-400x151.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-600x227.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-768x291.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-800x303.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-1024x388.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO-1200x454.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/SessionID-SomfyIO.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Wichtig ist dass irgendwo "sucess: true" steht und im Bereiche Cookies ein Cookie Code verfügbar ist. Diese Session ID ist erforderlich, um im nächsten Schritt einen dauerhaften Token anzulegen, mit dem man zukünftig alle Befehle authentifizieren kann. Der Vorteil von Postman ist, dass er diesen Cookie mit der Session ID "behält" und automatisch für die folgenden Befehle verwendet.</p>
<h2>Token erzeugen</h2>
<p>Die Kommunikation mit der API erfordert grundsätzlich eine Authentifizierung. Dazu muss ein Token generiert werden, der zukünftig bei jedem Befehl an die Tahoma Box mitgesendet wird. Auch hierzu braucht man nun Postman.</p>
<p>Dazu wird zuerst GET Befehl mit der folgenden Syntax benötigt:</p>
<p><em>https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/config//local/tokens/generate</em></p>
<p> ist dabei die PIN des Gateways, die man wie oben beschreiben unter den Geräteinformation des Tahoma Switch findet. Der Befehl lautet dann beispielsweise:</p>
<p><em>https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/config/2031-1587-1994/local/tokens/generate</em></p>
<p>Auch hier gibt man nun in Postman folgende Parameter an:</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left">Key</th>
<th align="left">Inhalt</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Content-Type</td>
<td align="left">application/json</td>
<td align="left">Im Reiter "Header" wird dieses Feld mit dem Wert zusätzlich ergänzt (der vorhandene Content Type kann gelöscht werden)</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-45"><p>Weitere Angaben müssen nicht gemacht werden, da die Authentifizierung über die im vorigen Abschnitt generierte Session ID erfolgt. Nun kann der Befehl wieder per "Send" ausgeführt werden.</p>
<p>Tipp: Wenn der Fehler "" erscheint, dann ist aus irgendeinem Grund die SessionID abgelaufen. Hier hilft es, einfach den Befehl aus dem vorigen Abschnitt nochmal aufzurufen (einfach in Postman den Reiter wechseln und wieder auf SEND drücken) und schon sollte es wieder funktionen. D.h. die Befehle zur Erzeugung der Session ID sowie des Tokens sollten zeitlich nicht zu weit auseinander liegen.</p>
<p>Als Ergebnis sollte man einen 20-stelligen alphanumerischen Tokenwert erhalten, den man zur weiteren Verwendung kopiert (siehe Bild).</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2.webp"><img decoding="async" class="alignnone wp-image-2381 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-300x145.webp" alt="" width="300" height="145" srcset="https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-200x97.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-300x145.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-400x194.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-600x291.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-768x372.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-800x387.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-1024x496.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2-1200x581.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/GenerateToken_SomfyIO_2.webp 1396w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2>Token aktivieren</h2>
<p>Um den Token nutzen zu können, muss er noch aktiviert werden. Dies wird wieder durch einen POST Befehl im folgenden Format erreicht:</p>
<p><em>https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/config//local/tokens</em></p>
<p> ist dabei wieder die PIN des Gateways, der Befehl lautet dann beispielsweise:</p>
<p><em>https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/config/2031-1587-1994/local/tokens</em></p>
<p>Hier gibt man nun folgende Parameter an:</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left">Key</th>
<th align="left">Inhalt</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Content-Type</td>
<td align="left">application/json</td>
<td align="left">Im Reiter "Header" wird dieses Feld mit dem Wert zusätzlich ergänzt (der vorhandene Content Type kann gelöscht werden)</td>
</tr>
<tr>
<td align="left">Body</td>
<td align="left">
<div>
<div>{</div>
<div>  "label": "Homeitems 1",</div>
<div>  "token": "87v17ac97d2739e2e5791",</div>
<div>  "scope": "devmode"</div>
<div>}</div>
</div>
</td>
<td align="left">Als raw Format im Body eingeben, wobei der Tokenwert der vorher generierte ist und das Label beliebig vergeben werden kann, also in der eigenen Lösung bitte anpassen.</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-46"><p>Nach dem Absenden des Befehls erhält man eine RequestID als Bestätigung, die angibt, dass der Befehl an die API erfolgreich versendet wurde (und gleich abgearbeitet wird).</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-scaled.webp"><img decoding="async" class="alignnone wp-image-2369 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-300x55.webp" alt="" width="300" height="55" srcset="https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-200x36.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-300x55.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-400x73.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-600x109.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-768x140.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-800x146.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-1024x186.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-1200x218.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/ActivateToken_SomfyAPI-1536x280.webp 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nun sind alle Voraussetzungen geschaffen, um die API zu nutzen.</p>
<h2>Parameter zur Steuerung identifizieren</h2>
<p>Welche Parameter (in diesem Fall eine Markise) ein Somfy Gerät besitzt und auf welche Befehle es reagiert, lässt sich nun einfach herausfinden. Dazu braucht man  nur die Devices im Tahoma Switch abzufragen (ähnliche wie bei einer CCU mit DevConfig) und sich die gelieferten Daten anzuschauen. Hierzu kann man wieder Postman verwenden oder die folgende interaktive Somfy Developer Webseite benutzen, die auf die lokale API zugreift:</p>
<p><a href="https://somfy-developer.github.io/Somfy-TaHoma-Developer-Mode/#/Api/get_apiVersion">https://somfy-developer.github.io/Somfy-TaHoma-Developer-Mode/#/Api/get_apiVersion</a></p>
<p>Dort trägt man oben als erstes die Geräte-PIN ein, der Port bleibt auf 8443 stehen. Durch Klicken auf den grünen "Auhorize-Button", kann man den vorhin generierten Token angeben.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API.webp"><img decoding="async" class="alignnone wp-image-2372 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-300x180.webp" alt="" width="300" height="180" srcset="https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-200x120.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-300x180.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-400x241.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-600x361.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-768x462.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-800x481.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-1024x616.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API-1200x722.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/Somfy-Tahoma-Local-API.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nun können die auf der Webseite dargestellten Funktionsaufrufe genutzt werden.</p>
<p>Unter der Rubrik "Setup" findet man den Befehl "GET /setup/devices". Dieser wird ausgeführt und als  Ergebnis erhält man eine riesige JSON-Datei mit allen Geräten, Paramatern, Befehlen und Namen der Devices, die über die Tahoma Box ansprechbar sind.</p>
<p>Aus der Datei habe ich die folgende Zeile heruasgesucht (sie enthält auch die bekannte Switch Adresse), die wie im folgenden Beispiel aussieht:</p>
<p><em>"deviceURL": "io://2031-1587-1994/4637294"</em></p>
<p>Dies ist die Adresse, unter der meine Markise intern angesprochen werden kann. Jeder Geräteblock in dieser Datei beginnt mit einer solchen deviceURL.</p>
<p>Tipp: Wer mehrere Geräte über eine Tahoma Box angeschlossen hat, sollte diesen Geräten über die Somfy App einen aussagekräftigen Namen geben, denn dieser Name taucht immer kurz nach der deiveURL auf. So kann man sicher sein, dass man das richtige Gerät erwischt hat.</p>
<p>Ebenso brauche ich den Namen des Geräte, der in einer weiteren Zeile zu finden ist:</p>
<p><em>"label": "Markise SUNEA"</em></p>
<p>Scrollt man weiter runter, findet man irgendwann auch eine Zeile, die mit <em>"commands"</em> beginnt. Hier sind nun alle Commands aufgeführt, auf das ein Somfy Gerät reagiert. In meinem Fall brauche ich nur den Befehlsnamen (CommandName) <em>"open"</em>.</p>
<h2>Markise über Postman steuern</h2>
<p>Ich habe jetzt alle Parameter zusammen, um meine Markise über Postman mit einem Befehl an die Somfy API ausfahren zu lassen. Die Befehlssyntax hierzu lautet:</p>
<p><em>PUT https://gateway-.local:8443/enduser-mobile-web/1/enduserAPI/exec/apply</em></p>
<p>In meinem Fall lautet der Befehl wie folgt:</p>
<p><em>https://gateway-2031-1587-1994.local:8443/enduser-mobile-web/1/enduserAPI/exec/apply</em></p>
<p>Folgende Parameter werden angegeben:</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left">Key</th>
<th align="left">Inhalt</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Content-Type</td>
<td align="left">application/json</td>
<td align="left">Im Reiter "Header" wird dieses Feld mit dem Wert zusätzlich ergänzt (der vorhandene Content Type kann gelöscht werden)</td>
</tr>
<tr>
<td align="left">Authorization</td>
<td align="left"></td>
<td align="left">Hier bitte als Format Bearer Token auswählen</td>
</tr>
<tr>
<td align="left">Body</td>
<td align="left">{</p>
<p>"label": "<em>Markise SUNEA</em>",</p>
<p>"actions": [</p>
<p>{</p>
<p>"commands": [</p>
<p>{</p>
<p>"name": "open"</p>
<p>}</p>
<p>],</p>
<p>"deviceURL": "io://<em>2031-1587-1994/4637294</em>"</p>
<p>}</p>
<p>]
<p>}</td>
<td align="left">Als raw Format mit dieser Syntax im Body eingeben (und nur die eigene Geräte-Adresse austauschen)</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-47"><p>Nach dem Absenden erhält man wieder eine "execID" und die Markise fährt aus.</p>
<h2>Befehl über Node-RED ausführen</h2>
<p>Den gleichen Befehl wie für Postman kann man auch über Node-RED ausführen lassen. Dort kann ich dann auch andere System einbinden und die Markise auf z.B. den Tastendruck eines Schalters reagieren lassen.</p>
<p>Ein einfacher Flow zum Ausfahren der Markise ist in folgendem Bild dargstellt:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow.webp"><img decoding="async" class="alignnone wp-image-2373 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-300x72.webp" alt="" width="300" height="72" srcset="https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-200x48.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-300x72.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-400x96.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-600x145.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-768x185.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-800x193.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-1024x247.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow-1200x289.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/NodeRed-Somfy-API-Flow.webp 1345w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Ich verwende in dem Beispiel einen Input Node. Dieser muss als JSON-Objekt konfiguriert werden, da er den RAW-Text für den Body des PUT Befehls erzeugt.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API.webp"><img decoding="async" class="alignnone wp-image-2374 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-300x102.webp" alt="" width="300" height="102" srcset="https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-200x68.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-300x102.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-400x136.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-600x204.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-768x261.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-800x272.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-1024x348.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API-1200x408.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/Inject-Node-Somfy-API.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Der http Request Node wird wie folgt konfiguiert:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl.webp"><img decoding="async" class="alignnone wp-image-2375 size-medium" src="https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-300x164.webp" alt="" width="300" height="164" srcset="https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-200x109.webp 200w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-300x164.webp 300w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-400x219.webp 400w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-600x328.webp 600w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-768x420.webp 768w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-800x437.webp 800w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-1024x560.webp 1024w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl-1200x656.webp 1200w, https://homeitems.de/wp-content/uploads/2023/09/Http_Request_Node_Somfy_Befehl.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Wichtig hierbei ist, dass im Gegensatz zum Postman-Beispiel in der Zieladresse das ".local" weggelassen wird. Bei der TLS-Konfiguration gibt es nichts besonderes zu beachten.</p>
<p>Dieses Beispiel kann nun beliebig erweitert werden. Ich frage hierüber bereits den Status der Markise ab, steuere diese über einen HMIP-Schalter und lasse sie einfahren, wenn es anfängt zu regnen oder der Wind zu stark ist.</p>
</div><div class="fusion-sharing-box fusion-sharing-box-1 boxed-icons has-taglines layout-floated layout-medium-floated layout-small-stacked" style="background-color:#f6f6f6;--awb-separator-border-sizes:0px;--awb-layout:row;--awb-alignment-small:space-between;--awb-stacked-align-small:center;" data-title="Kategorie: Node-Red" data-description="Weinor Markisen sind seit vielen Jahrzehnten im Einsatz und gelten als sehr zuverlässig. Nach dem Kauf einer neuen Weinor-Markise wollte ich diese mittels Node-Red einbinden und über Taster von Homematic-IP schalten.

Dabei habe ich festgestellt, dass die verbauten Somfy Motoren nur noch das io-Homecontrol Protokoll unterstützen. Für dieses habe ich leider keine funktionsfähigen Bibliotheken" data-link="https://homeitems.de/category/node-red/"><h4 class="tagline" style="color:#858a9f;">Teile diesen Post...</h4><div class="fusion-social-networks sharingbox-shortcode-icon-wrapper sharingbox-shortcode-icon-wrapper-1 boxed-icons"><span><a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fhomeitems.de%2Fcategory%2Fnode-red%2F&amp;t=Kategorie%3A%20Node-Red" target="_blank" rel="noreferrer" title="Facebook" aria-label="Facebook" data-placement="top" data-toggle="tooltip" data-title="Facebook"><i class="fusion-social-network-icon fusion-tooltip fusion-facebook awb-icon-facebook" style="color:#ffffff;background-color:#3b5998;border-color:#3b5998;border-radius:0px;" aria-hidden="true"></i></a></span><span><a href="https://x.com/intent/post?text=Kategorie%3A%20Node-Red&amp;url=https%3A%2F%2Fhomeitems.de%2Fcategory%2Fnode-red%2F" target="_blank" rel="noopener noreferrer" title="X" aria-label="X" data-placement="top" data-toggle="tooltip" data-title="X"><i class="fusion-social-network-icon fusion-tooltip fusion-twitter awb-icon-twitter" style="color:#ffffff;background-color:#000000;border-color:#000000;border-radius:0px;" aria-hidden="true"></i></a></span><span><a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fhomeitems.de%2Fcategory%2Fnode-red%2F&amp;title=Kategorie%3A%20Node-Red&amp;summary=Weinor%20Markisen%20sind%20seit%20vielen%20Jahrzehnten%20im%20Einsatz%20und%20gelten%20als%20sehr%20zuverl%C3%A4ssig.%20Nach%20dem%20Kauf%20einer%20neuen%20Weinor-Markise%20wollte%20ich%20diese%20mittels%20Node-Red%20einbinden%20und%20%C3%BCber%20Taster%20von%20Homematic-IP%20schalten.%0D%0A%0D%0ADabei%20habe%20ich%20festgestellt%2C%20dass%20die%20verbauten%20Somfy%20Motoren%20nur%20noch%20das%20io-Homecontrol%20Protokoll%20unterst%C3%BCtzen.%20F%C3%BCr%20dieses%20habe%20ich%20leider%20keine%20funktionsf%C3%A4higen%20Bibliotheken" target="_blank" rel="noopener noreferrer" title="LinkedIn" aria-label="LinkedIn" data-placement="top" data-toggle="tooltip" data-title="LinkedIn"><i class="fusion-social-network-icon fusion-tooltip fusion-linkedin awb-icon-linkedin" style="color:#ffffff;background-color:#0077b5;border-color:#0077b5;border-radius:0px;" aria-hidden="true"></i></a></span></div></div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/">Weinor Markisen mit Node-RED und Somfy API steuern</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/weinor-markisen-mit-nodered-und-somfy-api-steuern/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Wohnmobil oder Gartenhaus mit LoRaWAN überwachen</title>
		<link>https://homeitems.de/wohnmobil-oder-gartenhaus-mit-lorawan-ueberwachen/</link>
					<comments>https://homeitems.de/wohnmobil-oder-gartenhaus-mit-lorawan-ueberwachen/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Wed, 07 Jun 2023 14:06:18 +0000</pubDate>
				<category><![CDATA[LoRaWAN]]></category>
		<category><![CDATA[Node-Red]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2206</guid>

					<description><![CDATA[<p>Einbrüche und Diebstahl in und aus Gartenhäusern und Wohnmobilen sind ein großes Ärgernis. Die Überwachung mit Bewegungsmeldern wird dann problematisch, wenn eine Übertragungsstandard wie z.B. WLAN aufgrund der Entfernung nicht verfügbar ist. Daher stelle ich auf der Basis von LoRaWAN eine einfache Lösung vor, die kaum Strom braucht und geografisch sehr flexibel  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/wohnmobil-oder-gartenhaus-mit-lorawan-ueberwachen/">Wohnmobil oder Gartenhaus mit LoRaWAN überwachen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-9 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-9 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-48"><p>Einbrüche und Diebstahl in und aus Gartenhäusern und Wohnmobilen sind ein großes Ärgernis. Die Überwachung mit Bewegungsmeldern wird dann problematisch, wenn eine Übertragungsstandard wie z.B. WLAN aufgrund der Entfernung nicht verfügbar ist. Daher stelle ich auf der Basis von LoRaWAN eine einfache Lösung vor, die kaum Strom braucht und geografisch sehr flexibel ist. Grundinformationen zu LoRaWAN habe ich bereits im Artikel <a href="https://homeitems.de/lorawan/">LoRaWAN mit eigenem Gateway einrichten</a> veröffentlicht.</p>
<h2>Hardware</h2>
<p>Um einen Bewegungsmelder mit LoRaWAN zu realisieren habe ich das von ELV angebotene  ELV-Modulsystem für LoRaWAN verwendet (Loris). Mit diesem System kann man sehr flexibel Komponenten für einen Sensor oder Aktor, der über LoRaWAN kommunizieren soll, zusammenstecken. Dies funktioniert i.d.R. sogar, ohne irgendeinen Lötkolben in die Hand nehmen zu müssen.</p>
<p>Als Basis ist immer eine LoRIS-Base <a href="https://de.elv.com/elv-lw-base-experimentierplattform-fuer-lorawan-elv-bm-trx1-156514">ELV-BM-TRX1</a> erforderlich, über die die Kommunikation per LoRaWAN erfolgt. Die LoRIS-Base besitzt einen USB-C Anschluss zur Verbindung mit einem PC oder einer externen Spannungsversorgung.</p>
<p>Zusätzlich benötigt man das <a href="https://de.elv.com/elv-pir1-applikationsmodul-pir-bewegungsmelder-elv-am-pir1-158570?fs=1760796628">ELV-PIR1</a> Modul welches aus einem Bewegungsmelder und eine Helligkeitssensor besteht. Ebenso besitzt das Modul einen Opencollector-Ausgang, über den man mittels eines Relais auch andere Geräte schalten könnte. Ich benutze das in meinem Beispiel allerdings nicht.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul.webp"><img decoding="async" class="alignnone wp-image-2212 size-medium" src="https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-300x225.webp" alt="" width="300" height="225" srcset="https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-200x150.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-300x225.webp 300w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-400x300.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-600x450.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-768x576.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-800x600.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-1024x768.webp 1024w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul-1200x900.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/Loris_base-und-PIR1-Modul.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Zur Stromversorgung verwende ich zusätzlich noch das ELV Powermodul LR03, in das man eine AAA-Micro Zelle einlegen kann. Bekanntermaßen braucht LoRaWAN zur Kommunikation unglaublich wenig Strom, so dass mit einer Batterie das Gerät bis zu mehrere Jahre laufen kann. Alternativ sind auch andere Module für die Stromversorgung mit mehr Kapazität verfügbar (inkl. Solarmodul, etc.).</p>
<p>Als Gehäuse kann man das <a href="https://de.elv.com/elv-modulares-gehaeuse-mh0101a-gehaeusedeckel-schwarz-grau-157754?fs=944441232">ELV-MH0101a</a> verwenden. In meiner Umsetzung habe ich ein eigenes Gehäuse entworfen und mit dem 3D-Drucker passgenau gedruckt.</p>
<h2>Softwareinstallation</h2>
<p>Die LoRIS-Base wird immer mit einer Standardfirmware ausgeliefert, die die Funktionen des Moduls wie z.B. einfache Schalter unterstützt. Um den Bewegungsmelder zu unterstützen, muss eine andere Firmware aufgespielt werden.</p>
<p>Auf der Produktseite des PIR1-Moduls im ELV-Shop befindet sich die Firmware, die man sich von dort runterlädt. Die Firmwaredatei hat eine .hex-Endung und befindet sich in einem ZIP-Archiv.</p>
<p><a href="https://de.elv.com/elv-pir1-applikationsmodul-pir-bewegungsmelder-elv-am-pir1-158570?fs=185688875">https://de.elv.com/elv-pir1-applikationsmodul-pir-bewegungsmelder-elv-am-pir1-158570?fs=185688875</a></p>
<p>Das Flashen erfolgt über das ELV-Base Flasher Tool. Dieses befindet sich in einem ZIP-Archiv im Downloadbereich der LoRIS-Base unter</p>
<p><a href="https://de.elv.com/elv-lw-base-experimentierplattform-fuer-lorawan-elv-bm-trx1-156514">https://de.elv.com/elv-lw-base-experimentierplattform-fuer-lorawan-elv-bm-trx1-156514</a></p>
<p>Vor der Benutzung empfehle ich, die PDF-Anleitung in diesem ZIP-Archiv zu lesen.</p>
<p>Die Installation des Flasher Tools erfolgt als Administrator. Anschließend wird das Tool aufgerufen.</p>
<p>Das eigentlichen Flashen mit dem Tool ist hervorragend in der beiliegenden PDF-Anleitung beschrieben. Als Firmwaredatei wird die soeben für das ELV-PIR1 heruntergeladene .hex-Datei angewählt.</p>
<p>Nachdem mit dem grünen Haken der erfolgreiche Flashvorgang bestätigt wurde kann das Tool beendet werden.</p>
<h2>Hardware zusammenstecken.</h2>
<p>Nun kann man die Module zusammenstecken.</p>
<p>Unten befindet sich die Loris-Base, darauf wird das Powermodul mit der Batterie gesteckt und oben wird das PIR-Modul aufgesteckt. Alles zusammen schiebe ich anschließend in ein Gehäuse. Hat man das ELV-Gehäuse gekauft, dann muss mit einem Stufenbohrer eine ca. 13mm große Öffnung gebohrt werden, so dass der obere Teil des Sensors aus dem Gehäuse herausragt. Ich habe mit das Gehäuse allerdings passend mit einer Öffnung sowie einer Öse (zum Befestigen mit einer Schraube) passend gedruckt.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris.webp"><img decoding="async" class="alignnone wp-image-2213 size-medium" src="https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-300x187.webp" alt="" width="300" height="187" srcset="https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-200x125.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-300x187.webp 300w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-400x249.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-600x374.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-768x478.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-800x498.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-1024x637.webp 1024w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-1200x747.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris-1536x956.webp 1536w, https://homeitems.de/wp-content/uploads/2023/06/Komponenten-BWM-Loris.webp 1714w" sizes="(max-width: 300px) 100vw, 300px" /> </a><a href="https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1.webp"><img decoding="async" class="alignnone wp-image-2215 " src="https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-300x184.webp" alt="" width="305" height="187" srcset="https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-200x123.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-300x184.webp 300w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-400x246.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-600x368.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-768x472.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-800x491.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-1024x629.webp 1024w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-1200x737.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1-1536x943.webp 1536w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Loris-1.webp 1555w" sizes="(max-width: 305px) 100vw, 305px" /></a></p>
<h2>Payload decodieren</h2>
<p>Der Sensor wird nun als neue Applikation im TTN-Netz eingerichtet. Ich verweise hierzu auf meine Artikel <a href="https://homeitems.de/fuellstandsmessung-mit-lorawan/">Füllstandsmessung mit LoRaWAN, </a>in dem die Einrichtung erklärt wird.</p>
<p>Anschließend kann man den Payload Parser von der ELV-Seite Seite des PIR Moduls im Downloadbereich kopiereren und im Application Modul unter „Payload Formatters/Uplink“ eingefügen.</p>
<p>Die Daten werden dann korrekt interpretiert. Diese kann man sich über den Menüpunkt Livedata anschauen. Damit man diese versteht gebe ich folgende Hinweise:</p>
<p>Die Payload unterscheidet grundsätzlich zwei Zustände, die in der TX_Reason ausgegeben werden. In Abhängigkeit davon werden auch unterschiedliche Bytezahlen zurückgegeben.</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">TX_Reason</th>
<th align="left">#Bytes, die empfangen werden</th>
<th align="left">Inhalte der Bytes</th>
<th align="left">Kommentar</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Timer_Event</td>
<td align="left">5 Bytes</td>
<td align="left">TX_Reason und Voltage der Batterie</td>
<td align="left">Das Event wird zyklisch als Status event nach einer einstellbaren Zeitspanne generiert (siehe unten), wenn keine Bewegung erkannt wurde.</td>
</tr>
<tr>
<td align="left">App_Event</td>
<td align="left">6 Bytes</td>
<td align="left">TX_Reason, Voltage der Batterie und ob Input_1 active ist</td>
<td align="left">Der Input 1 Zustand gibt an, ob der Bewegungsmelder eine Bewegung erkannt hat.</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-49"><p>D.h. wenn der Input Event als Active ausgegeben wird, wurde eine Bewegung erkannt und man kann reagiren.</p>
<h2>Konfigurationswerte ändern</h2>
<p>Der Sensor hat eine Vielzahl von Konfigurationswerten, die in der Anleitung zum Sensor beschrieben sind. Hierzu wird ein Bytefolge aus insgesamt 8 Bytes gebildet, die immer komplett an das Gerät geschickt werden müssen.</p>
<p>Da ich möglichst viel Strom sparen möchte, schalte ich den Lichtsensor aus und lasse mir maximal einmal pro Stunde eine Nachricht schicken (wenn keine Bewegung erkannt wurde). Hierzu verwende ich folgende Bytefolge:</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">Bytewert</th>
<th align="left">Kommentar</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">0x0C</td>
<td align="left">ID des Devices</td>
</tr>
<tr>
<td align="left">0x3C</td>
<td align="left">Zyklisches Sendeintervall in Minuten (wenn nicht eine Bewegung erkannt wurde), hier 60 Minuten als Hexzahl (bis 255 Minuten möglich)</td>
</tr>
<tr>
<td align="left">0x19</td>
<td align="left">PIR-Detektionsschwelle (Auslöseempfindlichkeit), hier 25 (bis 255 = unempfindlich). Dies ist der Defaultwert</td>
</tr>
<tr>
<td align="left">0x22</td>
<td align="left">Ansprechempfindlichkeit, (3 Pulse in 6 Sekunden). Dies ist der Defaultwert</td>
</tr>
<tr>
<td align="left">0x10</td>
<td align="left">Kurzes gelbes Blinken bei Bewegungserkennung und keine Messung der Helligkeit (ich verweise auf die Dokumentation). Per Default wird daher nur Bit 4 gesetzt, so dass sich die Dualzahl 00010000 ergibt, die der Hexzahl 0x10 entspricht. Mit 0x00 kann man das ganz ausstellen, sieht dann aber beim Testen keine Reaktion.</td>
</tr>
<tr>
<td align="left">0x02</td>
<td align="left">Das Byte legt fest, wie lange die Einschaltdauer z.B. für den Opencollector-Ausgang ist. Ich verwende hier den Default-Wert von 0,3 Sekunden, da ich die Schaltung nicht benötige.</td>
</tr>
<tr>
<td align="left">0x85</td>
<td align="left">Wartezeit oder Sendeabstand, nach der wieder eine Bewegungserkennung gesendet wird (hier 100*0,6 Sekunden ergibt 60 Sekunden, d.h. für 60 Sekunden ist eine neue Bewegungserkennung blockiert). Dies ist der Defaultwert</td>
</tr>
<tr>
<td align="left">0x85</td>
<td align="left">Wartezeit nach letzter Bewegung, nach der Meldung „keine Bewegung“ gesendet wird. (hier ebenfalls 100*0,6 Sekunden ergibt 60 Sekunden). Dies ist der Defaultwert</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-50"><p>Hieraus ergibt sich die Bytefolge</p>
<p>0C 3C 19 22 10 02 85 85</p>
<p>Wer alles wieder zurücksetzen möchte kann die folgende Bytefolge verwenden:</p>
<p>0C 05 19 22 18 02 85 85</p>
<p>Die Bytefolge gibt man in "Applications /End Device / Messaging / Downlink" ein. Im Feld FPort wird Kanal 10 als Kommunikationskanal eingetragen und in "Payload" die Bytefolge.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink.webp"><img decoding="async" class="alignnone wp-image-2210 size-medium" src="https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-290x300.webp" alt="" width="290" height="300" srcset="https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-200x207.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-290x300.webp 290w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-400x414.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-600x621.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-768x795.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-800x829.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-989x1024.webp 989w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink-1200x1243.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/BWM_Payload_Downlink.webp 1260w" sizes="(max-width: 290px) 100vw, 290px" /></a></p>
<p>Zur Bestätigung kann noch das Confirm-Häkchen gesetzt werden.</p>
<p><em>WICHTIG: Damit die Befehle vom TRX1 empfangen werden muss auf der Platine (am Rand) unbedingt der "User-Button" kurz gedrückt werden. Erst dann wird die Konfiguration durchgeführt.</em></p>
<h2>Abfragen der Daten in Node-Red</h2>
<p>Auch hierzu verweise ich  auf meine Anleitung <a href="https://homeitems.de/fuellstandsmessung-mit-lorawan/">Füllstandsmessung mit LoRaWAN</a> insbesondere die Kapitel "Daten an MQTT-Server senden" sowie "Daten mit NodeRed verarbeiten". Zu diesem Zweck wird unter "Integrations/MQTT" für die Application ein neuer Nutzer angelegt sowie ein neuer API-Key vergeben. Dies sind die Accountdaten, um nachher in Node-Red die Werte abzufragen.</p>
<p>Mit dem MQTT-Explorer kann man diese Daten vorab auch auf dem MQTT-Server von TTN selber kontrollieren.</p>
<p>ACHTUNG: Wenn man in Node-Red bereits einen LoRaWAN-Sensor eingerichtet hat, dann muss man für diesen Sensor wieder eine neuen Server im MQTT-In Node einrichten, da man ja neue Accountdaten für diesen Sensor angelegt hat.</p>
<p>Unter Node-Red werden die Daten dann über folgende Funktion vom MQTT-Server ausgelesen und weiterverarbeitet.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen.webp"><img decoding="async" class="alignnone wp-image-2218 size-medium" src="https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-300x65.webp" alt="" width="300" height="65" srcset="https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-200x43.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-300x65.webp 300w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-400x86.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-600x129.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-768x166.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-800x173.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-1024x221.webp 1024w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen-1200x259.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/Node-Red-BWM-auslesen.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Die Daten kann man nun für Alarmmeldungen z.B. über Nachrichtendienste verwerten.</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/wohnmobil-oder-gartenhaus-mit-lorawan-ueberwachen/">Wohnmobil oder Gartenhaus mit LoRaWAN überwachen</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/wohnmobil-oder-gartenhaus-mit-lorawan-ueberwachen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Anwesenheit mit Node-Red simulieren</title>
		<link>https://homeitems.de/anwesenheitssimulation-mit-nodered/</link>
					<comments>https://homeitems.de/anwesenheitssimulation-mit-nodered/#respond</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Tue, 06 Jun 2023 10:18:14 +0000</pubDate>
				<category><![CDATA[Node-Red]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2173</guid>

					<description><![CDATA[<p>Die mechanischen Zeitschaltuhren mit ihrem Drehrad waren lange Jahre das einzige Mittel, zuhause Lampen zeitgesteuert einzuschalten. Damit wurde dann in Abwesenheit vorgetäuscht, dass das Haus bewohnt ist. Mit Smarthome wird diese Funktion bereits mit vielen fertigen App-Lösungen angeboten. Für mich stellt sich die Frage, wie man so etwas übergeordnet und damit unabhängig  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/anwesenheitssimulation-mit-nodered/">Anwesenheit mit Node-Red simulieren</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="fusion-fullwidth fullwidth-box fusion-builder-row-10 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:1216.8px;margin-left: calc(-4% / 2 );margin-right: calc(-4% / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_5_6 5_6 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:83.3333333333%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.304%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.304%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;"><div class="fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-10 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-top:20px;--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:32;line-height:1.1;">Node-Red</h1></div><div class="fusion-separator fusion-full-width-sep" style="align-self: center;margin-left: auto;margin-right: auto;margin-top:40px;width:100%;"></div><div class="fusion-text fusion-text-51"><p>Die mechanischen Zeitschaltuhren mit ihrem Drehrad waren lange Jahre das einzige Mittel, zuhause Lampen zeitgesteuert einzuschalten. Damit wurde dann in Abwesenheit vorgetäuscht, dass das Haus bewohnt ist. Mit Smarthome wird diese Funktion bereits mit vielen fertigen App-Lösungen angeboten. Für mich stellt sich die Frage, wie man so etwas übergeordnet und damit unabhängig von den meisten Smarthome-Zentralen und ihren App-Lösungen realisieren  und damit beliebige Geräte steuern kann.</p>
<p>Als Plattform habe ich Node-Red gewählt.</p>
<h2>Zufallszahlen erzeugen</h2>
<p>Für meine Umsetzung tue ich so, als ob ich nur eine Lampe schalten möchte. Die folgenden Werte dienen zur Demonstration und können natürlich frei verändert werden. Ich benötige folgende zufällig erzeugten Werte in einem vorgegebenen Intervall [min;max]):</p>
<ol>
<li>Dauer: Wie lange soll das Licht anbleiben (ich gebe den Bereich von 1 bis 30 Minuten vor (Intervall [1;60])</li>
<li>Startdauer: Um wieviel Minuten ab jetzt verzögert soll ein Licht erst angehen. (auch hier soll der Start von 1 bis 15 Minuten in der Zukunft liegen, (Intervall [1;60])</li>
</ol>
<p>Um diese Zufallswerte zu erzeugen braucht man einen Zufallsgenerator. Unter Node-Red wird dies mit der Math.random()-Funktion erreicht, die eine zufällige rationale Zahl von 0 bis kleiner 1 erzeugt.</p>
<p>Um hieraus eine Zahl für das gewünschte Intervall zu erzeugen, verwendet man folgende Formel:</p>
<pre><span class="nb">(Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="p">(</span><span class="nx">max</span> <span class="o">-</span> <span class="nx">min</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)) + min</span></pre>
<p><span class="p">Damit wird gewährleistet, dass die Zufallszahl immer beim min-Wert beginnt und auch den max-Wert berücksichtigt.<br />
Als Ergebnis kommt eine rationale Zahl heraus, die ich aber noch in eine ganze Zahl umwandeln muss.<br />
Hierzu verweise ich auf den Artikel in <a href="https://wiki.selfhtml.org/wiki/JavaScript/Tutorials/Zufallszahlen">selfhtml</a>, in dem verdeutlicht wird, warum zum Runden die Math.floor()-Funktion besser geeignet ist, als die Math.round()-Funktion.</span></p>
<p>Daraus ergibt sich die Formel</p>
<pre>Zufallswert = Math.floor(<span class="nb">(Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="p">(</span><span class="nx">max</span> <span class="o">-</span> <span class="nx">min</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)) + min</span>)</pre>
<p>und somit die Berechnungsformeln für die zwei Werte oben.</p>
<h2>Flow Variablen verwenden</h2>
<p>Die oben ermittelten Zufallswerte muss man in Node-Red Variabeln zwischenspeichern, um auf sie zurückgreifen zu können. Ich benötige daher sogenannte Flow-Variabeln, die ich aus jeden Knoten in dem Flow abrufen kann. Mit dem Befehl</p>
<p>var vara=flow.get('f_vara') || 0;</p>
<p>wird der Wert der flow-Variabel 'f_count' der lokalen Variabel 'vara' zugewiesen. Sollte 'f_count' nicht existieren, dann wird automatisch der Wert 0 (Null) der lokalen Variabeln 'vara' zugewiesen.</p>
<p>Mit dem Befehl</p>
<p>flow.set('f_vara',vara);</p>
<p>wird der Flow-Variabeln 'f_vara' wieder der Wert der lokalen Variabeln 'vara' zugewiesen. Über diesen Weg lassen sich alle Variebeln für den Flow sauber initialisieren.</p>
<p>Für den Node-Red Flow verwende ich folgende Flow Variabeln:</p>
<ul>
<li>f_startzeit (hierin steht die Startzeit zu der das Licht angehen soll)</li>
<li>f_stopzeit (dies ist die Stopzeit, zu der das Licht wieder ausgehen soll)</li>
<li>f_dauer (dies ist die Zeitspanne, die das Licht anbleiben soll in Minuten)</li>
<li>f_verzoegerung (dies ist die Zeitspanne, bevor das Licht eingeschaltet werden soll in Minuten)</li>
</ul>
<h2>Node-Red Flow</h2>
<p>Ich verzichte explizit auf eine Timer Funktion, da dann wieder eine Bibliothek eingebunden werden müsste. In dem Beispiel habe ich nur angedeutet, wo eigene Aktoren eingebunden werden können, wenn man das Beispiel verwenden möchte.</p>
<p>Aus den ganzen Überlegungen ist der folgende Flow entstanden:</p>
<p><img decoding="async" class="alignnone size-medium wp-image-2200" src="https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-300x123.webp" alt="Anwesenheitssimulation Node-Red" width="300" height="123" srcset="https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-200x82.webp 200w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-300x123.webp 300w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-400x164.webp 400w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-600x246.webp 600w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-669x272.webp 669w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-768x314.webp 768w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-800x327.webp 800w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-1024x419.webp 1024w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation-1200x491.webp 1200w, https://homeitems.de/wp-content/uploads/2023/06/Flow_Abwesenheitssimulation.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Der Code hierzu lautet wie folgt:</p>
</div><style type="text/css" scopped="scopped">.fusion-syntax-highlighter-14 > .CodeMirror, .fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</style><div class="fusion-syntax-highlighter-container fusion-syntax-highlighter-14 fusion-syntax-highlighter-theme-light" style="opacity:0;margin-top:0px;margin-right:0px;margin-bottom:20px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:#e0dede;"><div class="syntax-highlighter-copy-code"><span class="syntax-highlighter-copy-code-title" data-id="fusion_syntax_highlighter_14" style="font-size:14px;">Copy to Clipboard</span></div><label for="fusion_syntax_highlighter_14" class="screen-reader-text">Syntax Highlighter</label><textarea class="fusion-syntax-highlighter-textarea" id="fusion_syntax_highlighter_14" data-readOnly="nocursor" data-lineNumbers="1" data-lineWrapping="" data-theme="default" data-mode="application/xml">[{"id":"32271a2e8167efba","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"6d0f1cdfef4d8cae","type":"function","z":"32271a2e8167efba","name":"Neue Startzeiten ermitteln","func":"var v_pruefzeit = flow.get('f_pruefzeit' || 0);\n\nvar v_verzoegerung = ((Math.floor(Math.random() * 30) + 1) * 60000); // Zeit bis zum Start des Lichtes = innerhalb von 90 Minuten\nvar v_dauer = (Math.floor(Math.random() * 15) + 1) * 60000;  // Anzahl Minuten Licht (max. 60 Minuten)\n\nvar v_startzeit = msg.payload + v_verzoegerung\nvar v_stopzeit = v_startzeit+v_dauer\n\nflow.set('f_startzeit', v_startzeit);\nflow.set('f_stopzeit', v_stopzeit);\nflow.set('f_verzoegerung', v_verzoegerung);\nflow.set('f_dauer', v_dauer);\n\nmsg.payload = v_stopzeit;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1110,"y":760,"wires":[["c020fd7872fef9d5","35097431462b30bc","23abf50d088c614d","12bf2008013ea229"]]},{"id":"c020fd7872fef9d5","type":"function","z":"32271a2e8167efba","name":"Startzeit formatieren","func":"var f_startzeit = flow.get('f_startzeit') || 0;\nmsg.payload = new Date(f_startzeit);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":720,"wires":[["4f38bb65abd157d5"]]},{"id":"4f38bb65abd157d5","type":"debug","z":"32271a2e8167efba","name":"Startzeit","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1600,"y":720,"wires":[]},{"id":"35097431462b30bc","type":"function","z":"32271a2e8167efba","name":"Stopzeit formatieren","func":"var zeit = msg.payload;\nmsg.payload = new Date(zeit);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":780,"wires":[["07547647b016f3c3"]]},{"id":"07547647b016f3c3","type":"debug","z":"32271a2e8167efba","name":"Stopzeit","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1600,"y":780,"wires":[]},{"id":"23abf50d088c614d","type":"function","z":"32271a2e8167efba","name":"Dauer formatieren","func":"var f_dauer = flow.get('f_dauer') || 0;\nf_dauer=f_dauer/60000; //Umrechnen in Minuten\nmsg.payload=f_dauer;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":840,"wires":[["b83e82b0c1dedbe4"]]},{"id":"b83e82b0c1dedbe4","type":"debug","z":"32271a2e8167efba","name":"Zeitdifferenz in Minuten","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1650,"y":840,"wires":[]},{"id":"f8baf84b38ca3cd0","type":"inject","z":"32271a2e8167efba","name":"Check pro Minute","props":[{"p":"payload"}],"repeat":"60","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":190,"y":560,"wires":[["d60cd198f72b7710"]]},{"id":"b60516ada6450a16","type":"debug","z":"32271a2e8167efba","name":"Stopzeit erreicht","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"\"Stopzeitt erreicht\"","targetType":"jsonata","statusVal":"","statusType":"auto","x":1080,"y":660,"wires":[]},{"id":"1cea50e9f24b5673","type":"inject","z":"32271a2e8167efba","name":"Manuell","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":760,"wires":[["6d0f1cdfef4d8cae"]]},{"id":"43452a5485aa0ac4","type":"debug","z":"32271a2e8167efba","name":"Startdauer","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1610,"y":660,"wires":[]},{"id":"12bf2008013ea229","type":"function","z":"32271a2e8167efba","name":"Startdauer formatieren","func":"var f_startdauer = flow.get('f_verzoegerung') || 0;\nf_startdauer = f_startdauer / 60000; //Umrechnen in Minuten\nmsg.payload = f_startdauer;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":660,"wires":[["43452a5485aa0ac4"]]},{"id":"79962756dda5be6d","type":"function","z":"32271a2e8167efba","name":"Millisekunden entfernen","func":"var zeit = msg.payload;\nmsg.payload = Math.trunc(zeit/1000)*1000; //wieder mit 1000 Multiplizieren, damit wieder richtiges Datumsformat\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":560,"wires":[["5bca6c04f31c6668"]]},{"id":"bcd63ad839f821d3","type":"function","z":"32271a2e8167efba","name":"Dauer Lichtphase übermitteln","func":"var f_dauer = flow.get('f_dauer') || 0;\nf_dauer=f_dauer/60000*60; //Umrechnen in Minuten\nmsg.payload=f_dauer;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":260,"wires":[[]]},{"id":"772e775b9ecb7f43","type":"delay","z":"32271a2e8167efba","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1080,"y":360,"wires":[["2ddbf79accff440a"]]},{"id":"2ddbf79accff440a","type":"function","z":"32271a2e8167efba","name":"Einschalten Licht","func":"msg.payload = 1;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1290,"y":360,"wires":[[]]},{"id":"d60cd198f72b7710","type":"function","z":"32271a2e8167efba","name":"Initialisierung","func":"\nvar v_stopzeit = flow.get('f_stopzeit') || 0;\nvar v_startzeit = flow.get('f_startzeit') || 0;\nvar v_dauer = flow.get('f_dauer') || 0;\nvar v_verzoegerung = flow.get('f_verzoegerung' || 0)\n\nflow.set('f_startzeit', v_startzeit)\nflow.set('f_stopzeit', v_stopzeit)\nflow.set('f_dauer', v_dauer)\nflow.set('f_verzoegerung', v_verzoegerung)\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":560,"wires":[["79962756dda5be6d"]]},{"id":"5bca6c04f31c6668","type":"switch","z":"32271a2e8167efba","name":"Entscheidung","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"f_startzeit","vt":"flow"},{"t":"gte","v":"f_stopzeit","vt":"flow"}],"checkall":"true","repair":false,"outputs":2,"x":840,"y":560,"wires":[["772e775b9ecb7f43","bcd63ad839f821d3","3b66d00972ece4c6"],["6d0f1cdfef4d8cae","b60516ada6450a16"]]},{"id":"3b66d00972ece4c6","type":"debug","z":"32271a2e8167efba","name":"Licht einschalten mit Dauer","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"\"Licht einschalten mit Dauer\"","targetType":"jsonata","statusVal":"","statusType":"auto","x":1120,"y":460,"wires":[]}]</textarea></div><div class="fusion-text fusion-text-52"><h2>Flow Erläuterungen</h2>
<p>Die Inhalte der Nodes erfüllen folgende Aufgaben:</p>
</div>
<div class="table-1" style="--awb-margin-bottom:20px;">
<table width="100%">
<thead>
<tr>
<th align="left">Node</th>
<th align="left">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Check pro Minute</td>
<td align="left">Der Inject Node startet das Ganze und wird jede Minute ausgeführt. Er übermittelt die aktuelle Ausführungszeit und wird einmal bei Neustart initiiert.</td>
</tr>
<tr>
<td align="left">Initialisierung</td>
<td align="left">Diese Function Node dient dazu, alle Flow-Variabeln zu initialisieren. Dies ist insbesondere dann wichtig, wenn Node-Red neu gestartet wurde und es die Variabeln noch nicht gibt.</td>
</tr>
<tr>
<td align="left">Entscheidung</td>
<td align="left">Im Switch Node werden zwie Bedingungen unterschieden:</p>
<ul>
<li>Ist die Startzeit erreicht, dann führe die Startfunktionen durch</li>
<li>Ist die Stopzeit erreicht oder überschritten, dann ermittle neue Zeiten</li>
</ul>
</td>
</tr>
<tr>
<td align="left">Millisekunden entfernen</td>
<td align="left">Ich habe festgestellt, dass der Inject Node zwar jede Minute, manchmal aber mit einer Millisekunde Verzögerung gestartet wurde. Damit der Vergleich im switch node mit der Startzeit funktioniert, muss ich diese Ungenauigkeit ausschließen und lösche daher die für mich uninteressanten Millisekunden für die weitere Verarbeitung.</td>
</tr>
<tr>
<td align="left">Dauer Lichtphase übermitteln</td>
<td align="left">Wenn das Licht eingeschaltet werden soll, dann kann man z.B. bei Homematic Aktoren die Dauer der Lichtphase vorab übermitteln. Dies kann man in diesem Function-Node machen. Für meinen Homematic IP Aktor muss ich die Zeit in Sekunden angeben, so dass ich dies in diesem Node umrechne. Im Anschluss sollte der Node platziert werden, der den Wert an den Aktor übermittelt (für HMIP wäre das ein "set value"-Node).</td>
</tr>
<tr>
<td align="left">Einschalten Licht</td>
<td align="left">Über diesen Function-Node kann der Wert generiert werden, der an einen Aktor zum Einschalten gesendet werden muss. In meinem Fall wird der Homemtiac IP Aktor mit einer 1 aktiviert, die ich in dieser Funktion einfach belege. Anschließend würde der Wert über einen entsprechenden Node an den Aktor gesendet werden. Damit der Einschaltbefehl sicher nach der Dauer der Lichtphase übermittelt wird verzögere ich diese Befehlsausführung vorher noch um eine Sekunde.</td>
</tr>
<tr>
<td align="left">Neue Startzeiten ermitteln</td>
<td align="left">In diesem Function-Node ermittle ich alle neuen Zeiten.</p>
<p>Zuerst werden Dauer und Verzögerung, wie oben beschrieben ermittelt. Für die Verzögerung ermittle ich Werte zwischen 1 und 30 Minuten für die Dauer zwischen 1 und 15 Minuten.</p>
<p>Aus diesen Werten kann ich nun mit der Zeit des Inject Nodes (wird als payload übergeben) die Stratzeit sowie die Stopzeit ermitteln.</td>
</tr>
<tr>
<td align="left">Die Formatieren und Debug Nodes</td>
<td align="left">Diese Nodes dienen nur zur Ausgabe der laufenden Werte, damit man ein Ergebnis sieht und können später gelöscht werden.</td>
</tr>
<tr>
<td align="left">Manuell</td>
<td align="left">Mit diesem Inject-Node kann ich das manuelle Erzeugen der Zeiten anstoßen (wenn mir das mal zum Testen zu lange dauert).</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-53"><h2>Abschluss</h2>
<p>Ich habe an einigen Stellen natürlich mehr Code als notwendig ergänzt, da das Ganze dann auch für den Laien lesbarer ist.</p>
<p>Der Flow kann beliebig erweitert und umgebaut werden.</p>
<p>Denkbar ist z.B. die Einschränkung auf den Zeitbereich zwischen Sonnenunter- und Sonnenaufgang. Darüber hinaus würde ich die Schaltung zufällig n-Mal wiederholen. Ebenso könnte man das Ganze für mehrere Lampen anpassen und diese abhängig voneinander schalten lassen.</p>
</div></div></div></div></div>
<p>Der Beitrag <a href="https://homeitems.de/anwesenheitssimulation-mit-nodered/">Anwesenheit mit Node-Red simulieren</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/anwesenheitssimulation-mit-nodered/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
