<?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>Tue, 06 Jan 2026 11:06:42 +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>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-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>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-2"><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-3"><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-4"><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-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="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-5"><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-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-6"><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-7"><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-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="text/javascript">{
    "snNumber": "PL1LIKTUN208476",
    "account": "zendur&#101;&#64;&#104;&#111;&#109;&#101;&#105;&#x74;&#x65;&#x6d;&#x73;&#x2e;&#x64;&#x65;"
}</textarea></div><div class="fusion-text fusion-text-8"><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-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}</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;"><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="" 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-9"><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-10"><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-11"><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-12"><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-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">msg.payload = msg.payload.remainOutTime
return msg;</textarea></div><div class="fusion-text fusion-text-13"><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-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-14"><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-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">https://gateway-2029-7239-2937:8443/enduser-mobile-web/1/enduserAPI/exec/apply</textarea></div><div class="fusion-text fusion-text-15"><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-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }</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: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_6" style="font-size:14px;">Copy to Clipboard</span></div><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="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-16"><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-17"><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-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">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-18"><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-19"><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-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: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_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/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-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-20"><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-21"><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-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">msg.payload = msg.payload.MT175.Power_curr
flow.set('f_stromverbrauch', msg.payload);
return msg;</textarea></div><div class="fusion-text fusion-text-22"><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-23"><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-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-24"><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-25"><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-26"><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-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/x-sh">msg.payload=msg.payload.aenergy.total;
return msg;</textarea></div><div class="fusion-text fusion-text-27"><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-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-28"><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-29"><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-30"><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-31"><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-32"><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 NodeRed 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 NodeRed 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-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-33"><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-34"><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-35"><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-36"><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-37"><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-38"><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 NodeRed 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 NodeRed 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-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-39"><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-40"><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-41"><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-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-42"><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-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: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_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="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-43"><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-44"><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>
		<item>
		<title>Füllstandsmessung mit LoRaWAN</title>
		<link>https://homeitems.de/fuellstandsmessung-mit-lorawan/</link>
					<comments>https://homeitems.de/fuellstandsmessung-mit-lorawan/#comments</comments>
		
		<dc:creator><![CDATA[Dieter]]></dc:creator>
		<pubDate>Sun, 02 Apr 2023 11:29:24 +0000</pubDate>
				<category><![CDATA[LoRaWAN]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[Node-Red]]></category>
		<guid isPermaLink="false">https://homeitems.de/?p=2009</guid>

					<description><![CDATA[<p>Im Artikel Füllstandssensor (Zisterne) für HMIP selber bauen habe ich beschrieben, wie ich mit einem D1 Mini und einem SR04T Distanzsensor eine Füllstandsmessung für eine Zisterne realisiert habe.  Nach  fast einem Jahr stelle ich fest, dass die Lösung für meine Zwecke zu unzuverlässig ist. Hierzu gehört insbesondere, dass eine WLAN-Verbindung im Außenbereich  [...]</p>
<p>Der Beitrag <a href="https://homeitems.de/fuellstandsmessung-mit-lorawan/">Füllstandsmessung mit LoRaWAN</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-45"><p>Im Artikel <a href="https://homeitems.de/fuellstandssensor-zisterne-fuer-hmip-selber-bauen/">Füllstandssensor (Zisterne) für HMIP selber bauen</a> habe ich beschrieben, wie ich mit einem D1 Mini und einem SR04T Distanzsensor eine Füllstandsmessung für eine Zisterne realisiert habe.  Nach  fast einem Jahr stelle ich fest, dass die Lösung für meine Zwecke zu unzuverlässig ist. Hierzu gehört insbesondere, dass eine WLAN-Verbindung im Außenbereich teils nicht funktioniert. Darüber hinaus verträgt auch der Sensor SR04-T die feuchte Luft in der Zisterne nicht gut, obwohl er hierfür gemacht wurde. Ebenso habe ich immer wieder Messunschärfen, da sich im Messbereich des Sensors auch der Zulauf befindet und dieser Abstand manchmal dominiert. Mein Ziel war es, einen Sensor zu finden, der präziser ist, langlebiger und vor allen Dingen ohne WLAN auskommt. Bei der Übertragungstechnik LoRaWAN bin ich fündig geworden.</p>
<h2>LoRaWAN Entfernungssensor</h2>
<p>Da man mit LoRaWAN auch extrem weite Strecken überbrücken kann war klar, dass es ein LoRaWa Sensor sein soll. Auf dem Markt gibt es für die Messung von Abständen zu Oberflächen ein erstaunlich großes Angebot in diesem Segment, allerdings teilweise auch mit astronomischen Preisen. Ich bin aber fündig geworden und haben den Dragino LDDS 75 entdeckt, den man z.B. bei <a href="https://www.reichelt.de/lorawan-distanzsensor-dra-ldds75-8-p311269.html">Reichelt</a> beziehen kann. Wenn man den Sensor kauft sollte dieser für die europäischen 863 -867 MHz Netze ausgelegt sein.</p>
<p>Der Sensor hat mich aus folgenden Gründen überzeugt:</p>
<ul>
<li>Er ist IP66 geschützt, d.h. ein starker Wasserstrahl sollte nicht zum Eindringen von Wasser führen (in einer Zisterne ist es maximal Spritzwasser)</li>
<li>Er hat eine Akku-Laufzeit von bis zu 10 Jahren</li>
<li>Er ist relativ klein</li>
<li>Er fokussiert die Messung auf einen kleinen Bereich</li>
<li>Er kann Distanzen bis zu 4 Metern erkennen</li>
<li>Er ist nicht teuer (&lt;80 Euro)</li>
</ul>
<p>Beim Öffnen des Hauptgehäuses ist mir ebenfalls noch aufgefallen, dass der Akku ausgetauscht werden kann. Dies ist ein Vorteil, denn manche LoRaWAN Sensoren werden mit einem vergossenen Gehäuse angeboten, so dass das ganze Gerät beim Ausfall des Akkus getauscht werden muss.</p>
<p>Interessant bleibt die Frage, ob der Sensor in einer geschlossenen Tonne funktioniert, denn hier bildet sich insbesondere im Frühjahr und Herbst Kondenswasser, welches insbesondere Ultraschallsensoren beeinflussen kann. Aber das werde ich jetzt ausprobieren.</p>
<h2>Einrichtung des Sensor</h2>
<p>Um den Sensor in Betrieb zu nehmen, muss er erst geöffnet werden. Dazu schraubt man die vier Gehäuseschrauben los und öffnet das Gehäuse. Im Gehäuse wird anschließend der gelbe Jumper umgesteckt (siehe Anleitung) und der Sensor meldet sich mit blauem Blinken.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup.webp"><img decoding="async" class="alignnone wp-image-2041 size-medium" src="https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-300x225.webp" alt="" width="300" height="225" srcset="https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-200x150.webp 200w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-300x225.webp 300w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-400x300.webp 400w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-600x450.webp 600w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-768x576.webp 768w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup-800x600.webp 800w, https://homeitems.de/wp-content/uploads/2023/01/LDDS75-Setup.webp 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Die Einrichtung eines LoRaWAN Gateways und eines Account im LoRaWAN-Netzwerk habe ich bereits im Artikel <a href="https://homeitems.de/lorawan/">LoRaWAN mit eigenem Gateway einrichten</a> beschrieben und beziehe mich in der folgenden Beschreibung darauf.</p>
<p>In der TTN/TTS Oberfläche wird für den Füllstandssensor zuerst eine neue Application erzeugt. Dazu geht man auf den Reiter "Applications" und erstellt über den Button "Create Application" eine neue Applikation mit einer aussagekräftigen Application-ID.</p>
<p>Nachdem man die neue Application erzeugt hat, schaut man in das Menü "End devices" (auf der linken Bildschirmseite) und wählt in diesem den Button "Register End device". Da der Dragino Sensor bereits im Repository steht, kann man zur Einrichtung die Option "Select the device in the LoRaWAN Device Repository" stehen lassen. Alternativ kann man die Einrichtung auch manuell vornehmen (zweite Option)</p>
<p>Folgende Parameter sollten gewählt werden (wenn sie nicht schon automatisch vorgegeben sind):</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Wert</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Frequency Plan</td>
<td align="left">Europe 863-870 MHz (SF12 for RX2)</td>
</tr>
<tr>
<td align="left">LoRaWAN Version</td>
<td align="left">LoRaWAN Sepcification 1.0.3</td>
</tr>
<tr>
<td align="left">Regional Parameter Version</td>
<td align="left">RP001 Regional Parameter 1.0.3. revision A (wird in der Regel durch LoWaWAN Version schon gesetzt)</td>
</tr>
<tr>
<td align="left">Join EUI (DEV EUI)</td>
<td align="left">Die auf dem Gerät oder Karton aufgedruckte Nummer</td>
</tr>
<tr>
<td align="left">APP EUI</td>
<td align="left">Die auf dem Gerät oder Karton aufgedruckte Nummer</td>
</tr>
<tr>
<td align="left">APP KEY</td>
<td align="left">Die auf dem Gerät oder Karton aufgedruckte Nummer</td>
</tr>
<tr>
<td align="left">Firmware Version</td>
<td align="left">
<pre>V1.1.4 (nur notwendig, wenn explizit danach gefragt wird)</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-46"><p>Die Anlage einer Device ist unter folgendem<a href="https://www.thethingsindustries.com/docs/devices/adding-devices/"> Link</a> gut erklärt. Die Firmware Versionen können bei Bedarf von <a href="https://www.dropbox.com/sh/47fsmpbfv4qrw2d/AACy5NcU8MCMFVpYITSUfVLPa?dl=0">Dropbox</a> heruntergeladen werden.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2.jpg"><img decoding="async" class="alignnone wp-image-2034 size-medium" src="https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-300x287.jpg" alt="" width="300" height="287" srcset="https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-200x191.jpg 200w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-300x287.jpg 300w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-400x382.jpg 400w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-600x573.jpg 600w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-768x734.jpg 768w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-800x764.jpg 800w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-1024x978.jpg 1024w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-1200x1146.jpg 1200w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2-1536x1467.jpg 1536w, https://homeitems.de/wp-content/uploads/2023/01/TTN-Einrichtung2.jpg 1653w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nach der Anlage der Device sollte der Server versuchen, eine Verbindung aufzubauen. Dies kann man entweder im Fenster "Device overviwe" oder unter "Live data" beobachten. Wenn ein Connect erfolgreich verläuft, dann sollten hier mindestens folgende Zeilen auftauchen:</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-scaled.jpg"><img decoding="async" class="alignnone wp-image-2032 size-medium" src="https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-300x30.jpg" alt="" width="300" height="30" srcset="https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-200x20.jpg 200w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-300x30.jpg 300w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-400x39.jpg 400w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-600x59.jpg 600w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-768x76.jpg 768w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-800x79.jpg 800w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-1024x101.jpg 1024w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-1200x118.jpg 1200w, https://homeitems.de/wp-content/uploads/2023/01/Successful-Connection-1536x152.jpg 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Wenn hier irgendetwas nicht funktioniert, dann ist fast immer igrendein Parameter bei der Device Anlage falsch angegeben worden.</p>
</div><div class="fusion-text fusion-text-47"><h2>Uplink Payload formatieren</h2>
<p>Der Hex-Code, der vom Sensor zurückgeliefert wird ist erst einmal nicht lesbar und muss daher aufbereitet werden. Aus diesem Grund wird zu jeder Application (und der dazugehörigen Device) ein Payload Formatter angelegt, der definiert, wie der Hex-Code aufbereitet werden soll. Zusätzlich wird über die Application definiert, an wen die decodierten Nachrichten weiterversendet werden sollen.  Die Payload-Information des sogenannten Uplink-Kanals besteht insgesamt aus 8 Bytes, die sich wie folgt unterscheiden</p>
</div>
<div class="table-1">
<table width="100%">
<thead>
<tr>
<th align="left"><strong>BYTES</strong></th>
<th align="left">INHALT</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">1 &amp; 2  <strong><br />
</strong></td>
<td align="left">Batterie Ladestand in mV</td>
</tr>
<tr>
<td align="left">3 &amp; 4</td>
<td align="left">Distanz in mm</td>
</tr>
<tr>
<td align="left">5</td>
<td align="left">Digital Interrupt (kann optional angeben, warum ein Interrupt ausgelöst wurde)</td>
</tr>
<tr>
<td align="left">6 &amp; 7</td>
<td align="left">Temperatur (nur verfügbar, falls optionaler Temperatursensor vorhanden ist)</td>
</tr>
<tr>
<td align="left">8</td>
<td align="left">Sensor Flag (gibt an, ob Sensor gefunden oder nicht gefunden wurde (z.B. wenn Sensor zu nahe an der Seitenwand angebracht wurde und keine Messung stattfinden konnte)</td>
</tr>
</tbody>
</table>
</div>
<div class="fusion-text fusion-text-48"><p>Für den Payload Decoder zum LDDS75 und andere Sensoren verweist Dragino auf das folgende <a href="https://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LSE01/Payload_Decoder/">Verzeichnis </a></p>
<p>ACHTUNG: Der Code von Dragino ist fehlerhaft, denn dieser geht davon aus, dass nur 6 anstelle von 8 Bytes vom Sensor zurückgeliefert werden. Der korrigierte Code lautet:</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: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_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/javascript">function Decoder(bytes, port) {
  // Decode an uplink message from a buffer
  // (array) of bytes to an object of fields.
  var len=bytes.length;
  var value=(bytes[0]<<8 | bytes[1]) & 0x3FFF;
  var batV=value/1000;//Battery,units:V
  
  var distance = 0;
  if(len==8)  
  {
   value=bytes[2]<<8 | bytes[3];
   distance=(value);//distance,units:mm
   if(value<20)
    distance = "Invalid Reading";
  }
  else
   distance = "No Sensor";
   
  var interrupt = bytes[len-1]; 
  return {
       Bat:batV ,
       Distance:distance,
       Interrupt_status:interrupt
  };
}</textarea></div><div class="fusion-text fusion-text-49"><p>Der Code wird nun unter Application / Payload /Formatters / Uplink in das Feld "Formatter Code" kopiert und gespeichert. Als Formatter Type sollte "Custom Javascript formatter" ausgewählt sein.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter.jpg"><img decoding="async" class="alignnone wp-image-2027 size-medium" src="https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-300x238.jpg" alt="" width="300" height="238" srcset="https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-200x159.jpg 200w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-300x238.jpg 300w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-400x318.jpg 400w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-600x477.jpg 600w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-768x610.jpg 768w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-800x636.jpg 800w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-1024x814.jpg 1024w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-1200x954.jpg 1200w, https://homeitems.de/wp-content/uploads/2023/01/Payload-Formatter-1536x1221.jpg 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Nun sollten die Nachrichten dekodiert werden (das kann auch erst beim nächsten Sensorwertempfang sein) und wie folgt erscheinen:</p>
<p><img decoding="async" class="alignnone wp-image-2026 size-large" src="https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-1024x65.jpg" alt="" width="1024" height="65" srcset="https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-200x13.jpg 200w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-300x19.jpg 300w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-400x25.jpg 400w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-600x38.jpg 600w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-768x49.jpg 768w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-800x51.jpg 800w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-1024x65.jpg 1024w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message-1200x76.jpg 1200w, https://homeitems.de/wp-content/uploads/2023/01/Example-Payload-Message.jpg 1465w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
</div><div class="fusion-text fusion-text-50"><h2>Intervall bis zur Datensendung (Uplink) verändern</h2>
<p>Lt. Dragino wird der Sensor alle 20 Minuten aktiv und sendet seine Werte an das TTN Netzwerk. Ich möchte diese Zeitspanne gerne verlängern, denn für mich reicht eine Messung jede Stunde aus. Darüber hinaus sparen längere Messintervalle Batterie, so dass die Laufzeit des Akkus hierdurch verlängert wird.</p>
<p>Dragino verweist auf zwei Möglichkeiten diesen Wert zu verändern</p>
<ul>
<li>Mittels AT-Befehlen (das schließe ich aus, denn dazu muss ich mir einen TTL-USB Adapter beschaffen)</li>
<li>Mittels Downlink Befehl (dies wäre meine präferierte Lösung)</li>
</ul>
<p>Hierzu verweist Dragino auf folgende <a href="http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/">FAQ  </a>aus der sich die folgenden Punkte ergeben:</p>
<ul>
<li>Zur Steuerung von Devices werden über TTN HEX-Codes verwendet.</li>
<li>Der Befehl besteht aus 4 Bytes</li>
<li>Das erste Byte gibt die Funktion zum Ändern der Uplink Intervals an und ist "01"</li>
<li>Die nächsten 3 Bytes beinhalten die Zeitdauer in Sekunden (im Hex Format) also z.B. für 60 Minuten (3600 Sekunden) "00 0E 10"</li>
</ul>
<p>Zur Einstellung wähle ich in TTN meine Device aus (Füllstandssensor), gehe dort auf den Reiter "Messaging" und wähle den Reiter "Downlink" aus. Hier füge ich nur den Payload "01 00 0E 10" ein und aktiviere die Checkbox "Confirmed downlink".</p>
<p>Nun wird der Befehl in die Warteschlange aufgenommen und beim nächsten Connect (Uplink-Intervall) an den Füllstandssensor übermittelt.</p>
<p>Der Befehl erst dann ausgeführt, wenn das Device die nächste Uplink-Message schickt.</p>
</div><div class="fusion-text fusion-text-51"><h2>Sensor montieren</h2>
<p>Ich habe den Sensor an einen Winkelverbinder montiert, welchen ich in der Regentonne befestigt habe. Da der Sensor mit zwei Überwurfmuttern zum Festschrauben geliefert wird habe ich einen passenden Halter entworfen und mit einem 3D-Drucker ausgedruckt, so dass ich an diesem den Sensor festschrauben kann. Den Sender mit der Antenne habe ich abschließend mit Kabelbindern an dem Winkelverbinder befestigt.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002.webp"><img decoding="async" class="alignnone wp-image-2038 size-medium" src="https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-300x294.webp" alt="" width="300" height="294" srcset="https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-66x66.webp 66w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-200x196.webp 200w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-300x294.webp 300w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-400x392.webp 400w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-600x588.webp 600w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-768x752.webp 768w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002-800x784.webp 800w, https://homeitems.de/wp-content/uploads/2023/01/IMG_0821-002.webp 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
</div><div class="fusion-text fusion-text-52"><h2>Daten an MQTT-Server senden</h2>
<p>Um die Daten weiterverarbeiten zu können, schicke ich diese an einen MQTT-Server. Hierzu verwende ich den MQTT-Server, der von The Things Stack angeboten wird.</p>
<p>Dazu lege man unter Applications /Integrations / MQTT einfach einen neuen API-Key an, der für eine sichere Authentifizierung der Verbindung sorgt (hat man früher schon einen API-Key angelegt, kann man diesen natürlich auch verwenden). Die Servervorgaben für den MQTT-TTN-Server können übernommen werden, der Username wird ebenfalls vom System vorgegeben und besteht aus <code>@.</code></p>
<p>Ab sofort sendet der Sensor die Daten über den Application Server an den MQTT-Server.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration.webp"><img decoding="async" class="alignnone wp-image-2050 size-medium" src="https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-300x134.webp" alt="" width="300" height="134" srcset="https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-200x89.webp 200w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-300x134.webp 300w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-400x179.webp 400w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-600x268.webp 600w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-768x343.webp 768w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-800x358.webp 800w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-1024x458.webp 1024w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration-1200x537.webp 1200w, https://homeitems.de/wp-content/uploads/2023/02/MQTT-Integration.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2>Daten mit NodeRed verarbeiten</h2>
<p>Nun müssen die Daten von dem TTN MQTT Server abgeholt werden. Hierzu verweise ich auf die wirklich gute Anleitung von The Things Stack zu Node-Red, die man unter folgendem <strong><a href="https://www.thethingsindustries.com/docs/integrations/node-red/">Link</a></strong> findet.</p>
<p>Ich frage in Node-Red alle Daten vom MQTT-Server ab und löse dann den payload mit einer Funktion für den Abstand (ich rechne das direkt auf Zentimeter um) sowie einer Funktion für die Batteriespannung auf und schreibe diese Daten dann direkt in eine InfluxDB.</p>
<p><a href="https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT.webp"><img decoding="async" class="alignnone wp-image-2051 size-medium" src="https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-300x92.webp" alt="" width="300" height="92" srcset="https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-200x61.webp 200w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-300x92.webp 300w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-400x122.webp 400w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-600x183.webp 600w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-768x234.webp 768w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-800x244.webp 800w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-1024x312.webp 1024w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT-1200x366.webp 1200w, https://homeitems.de/wp-content/uploads/2023/02/RedNode-LoRaWAN-MQTT.webp 1400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Wie das funktioniert steht 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/fuellstandsmessung-mit-lorawan/">Füllstandsmessung mit LoRaWAN</a> erschien zuerst auf <a href="https://homeitems.de">Smart home Ratgeber</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homeitems.de/fuellstandsmessung-mit-lorawan/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
	</channel>
</rss>
