<?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>kex &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<atom:link href="https://www.smarthomeng.de/author/kex/feed" rel="self" type="application/rss+xml" />
	<link>https://www.smarthomeng.de</link>
	<description>Die Device Integrations-Plattform für Dein Smart Home</description>
	<lastBuildDate>Sun, 24 May 2020 20:02:26 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.smarthomeng.de/wp-content/uploads/global/logo_small_152x152-150x150.png</url>
	<title>kex &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<link>https://www.smarthomeng.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Extremwerte des Tages speichern</title>
		<link>https://www.smarthomeng.de/__trashed</link>
					<comments>https://www.smarthomeng.de/__trashed#comments</comments>
		
		<dc:creator><![CDATA[kex]]></dc:creator>
		<pubDate>Sun, 24 May 2020 19:59:01 +0000</pubDate>
				<category><![CDATA[Beispiel-Implementierungen]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[Items]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=2546</guid>

					<description><![CDATA[Meine Aufgabenstellung war die folgende: Speichern des höchsten gemessenen Temperaturwertes eines Tages und diesen einmal pro Tag zurücksetzten. Das ursprüngliche Item dessen Maximalwert ich speichern hat folgenden Aufbau. Wetterstation: Temperatur: type: num visu_acl: ro Um jetzt zusätzlich zum aktuellen Messwert den maximalen Messwert zu speichern habe ich das Item etwas<a class="moretag" href="https://www.smarthomeng.de/__trashed"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<p>Meine Aufgabenstellung war die folgende: Speichern des höchsten gemessenen Temperaturwertes eines Tages und diesen einmal pro Tag zurücksetzten.</p>
<p>Das ursprüngliche Item dessen Maximalwert ich speichern hat folgenden Aufbau.</p>
<pre class="line-numbers"><code class="language-yaml">
Wetterstation:
    Temperatur:
        type: num
        visu_acl: ro
</code></pre>
<p>Um jetzt zusätzlich zum aktuellen Messwert den maximalen Messwert zu speichern habe ich das Item etwas angepasst:</p>
<pre class="line-numbers"><code class="language-yaml">
Wetterstation:
    Temperatur:
        Aktuell:
            type: num
            visu_acl: ro
        Maximum_Heute:
            type: num
            visu_acl: ro
</code></pre>
<p>Für Wetterstation.Tempertatur.Maximum_Heute müssen jetzt noch folgende Dinge hinzufefügt werden:</p>
<ul>
<li><a href="#d1">Überprüfen auf Änderungen</a><br />
Immer wenn sich der Wert von <strong>Wetterstation.Temperatur.Aktuell</strong> ändert, soll überprüft werden, ob <strong>Wetterstation.Temperatur.Maximum_Heute</strong> aktualisiert werden muss.</li>
<li><a href="#d2">Aktualisieren des Wertes</a><br />
Wenn bei dieser Überprüfung der aktuelle Wert höher ist als der bisher in <strong>Wetterstation.Temperatur.Maxiumum_Heute</strong> gespeicherte Wert, soll der Wert aktualisiert werden.</li>
<li><a href="#d3">Zurücksetzen des Wertes</a><br />
Einmal am Tag muss <strong>Wetterstation.Temperatur.Maximum_Heute</strong> zurückgesetzt werden.</li>
</ul>
<h3 id="d1">Überprüfen auf Änderungen</h3>
<p>Das überprüfen, ob sich die aktuelle Temperatur ändert, geht ganz einfach indem man <strong>Wetterstation.Temperatur.Maximum_Heute</strong> einen eval_trigger auf das Item <strong>Wetterstation.Temperatur.Aktuell</strong> hinzufügt. Seit SmartHomeNG kann man das Item auch relativ angeben: ..Aktuell.<br />
es entsteht also folgender <strong>eval_trigger</strong>:</p>
<pre><code class="language-yaml">eval_trigger: ..Aktuell</code></pre>
<h3 id="d2">Aktualisieren des Wertes</h3>
<p>Wenn bei der Überprüfung der aktuelle Wert höher ist als der bisher in Wetterstation.Temperatur.Maxiumum_Heute gespeicherte Wert, soll der Wert aktualisiert werden.<br />
Das geht über ein <strong>eval</strong>:</p>
<pre><code class="language-yaml">eval: sh...Aktuell() if float(sh..self()) &gt; sh...Aktuell() else sh..self.property.value</code></pre>
<h3 id="d3">Zurücksetzen des Wertes</h3>
<p>Der Wert soll einmal pro Tag und bei einem Neustart zurückgesetzt werden. Das wird über ein <strong>crontab </strong>und ein <em>Magic Value</em> (99.9) erledigt. Es wird davon ausgegangen, dass ein Temperaturwert von 99.9 nie vorkommt und deshalb zum Zurücksetzen verwendet werden kann.</p>
<p>Verzögerung bei der Initialisierung: Meine Wetterstation liefert nur alle 5 Minuten (alle 300 Sekunden) einen neuen Temperaturwert. Das heisst nach einem Neustart von SmartHomeNG steht also für maximal 5 Minuten kein aktueller Messwert in <strong>Wetterstation.Temperatur.Aktuell</strong> sondern 0.0. Deshalb wird nach 5 Minuten und 10 Sekunden <strong>Wetterstation.Temperatur.Maximum_Heute</strong> auf die aktuelle Temperatur zurückgesetzt.</p>
<pre><code class="language-yaml">crontab:
 -init+310 = 99.9
 -0 0 * *  = 99.9
</code></pre>
<p>Auch der <strong>eval</strong> Ausdruck muss für das Zurücksetzen erweitert werden:</p>
<pre><code class="language-yaml">eval: sh...Aktuell() if <strong>value == 99.9 or</strong> float(sh..self()) &gt; sh...Aktuell() else sh..self.property.value
</code></pre>
<p>Natürlich kann dieses Prinzip Minimal-Werte angewendet werden. Dafür muss nur der Vergleich im <strong>eval</strong> Ausdruck angepasst werden.</p>
<p>Das endgültige Item sieht dann so aus:</p>
<pre class="line-numbers"><code class="language-yaml">
Wetterstation:
    Temperatur:
        Aktuell:
            type: num
            visu_acl: ro
        Maximum_Heute:
            type: num
            visu_acl: ro
            eval: sh...Aktuell() if value == 99.9 or float(sh..self()) &lt; sh...Aktuell() else sh..self.property.value
            eval_trigger: ..Aktuell
            # Reset am Ende des Tages durch "MagicValue" 99.9. Es wird angenommen, 
            # dass dieser Temperaturwert in der Praxis niemals auftritt. 
            crontab: 
             - 0 3 * * = 99.9
             # +310 weil die Wetterstation mindestens alle 300 Sekunden einen aktualisierten Temperatur Wert sendet
             # dadurch wird sichergestellt, dass nach einem Neustart von SmartHomeNG in ..Aktuell auf jeden Fall ein gültiger Wert steht. 
             - init+310 = 99.9
</code></pre>
<p>Wenn etwas anderes als Temperaturwerte gespeichert werden sollen, kann es auch sein, dass als <em>Magic Value</em> eine andere Zahl verwendet werden muss.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/__trashed/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
