<?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>Datenbank &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<atom:link href="https://www.smarthomeng.de/tag/datenbank/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>Thu, 10 Sep 2026 15:19:49 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.10</generator>

<image>
	<url>https://www.smarthomeng.de/wp-content/uploads/global/logo_small_152x152-150x150.png</url>
	<title>Datenbank &#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>Nutzung von Datenbanken in SmartHomeNG</title>
		<link>https://www.smarthomeng.de/nutzung-von-datenbanken-in-smarthomeng</link>
					<comments>https://www.smarthomeng.de/nutzung-von-datenbanken-in-smarthomeng#respond</comments>
		
		<dc:creator><![CDATA[Sebastian Helms]]></dc:creator>
		<pubDate>Thu, 10 Sep 2026 15:19:46 +0000</pubDate>
				<category><![CDATA[Core]]></category>
		<category><![CDATA[Releases und Updates]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Datenbank]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=2847</guid>

					<description><![CDATA[Im develop Branch sind ein paar größere Neuerungen in lib.db und dem database Plugin gelandet. Der letzte Teil behandelt die aktuellen Updates, die ersten Teile gehen nochmal auf schon fertige Änderungen ein, die aber offensichtlich noch nicht alle erreicht haben 🙂 1. Datenlücken statt &#8222;Wert unverändert&#8220; Wenn eine Datenquelle zeitweise<a class="moretag" href="https://www.smarthomeng.de/nutzung-von-datenbanken-in-smarthomeng"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<p>Im develop Branch sind ein paar größere Neuerungen in lib.db und dem database Plugin gelandet. Der letzte Teil behandelt die aktuellen Updates, die ersten Teile gehen nochmal auf schon fertige Änderungen ein, die aber offensichtlich noch nicht alle erreicht haben <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>1. Datenlücken statt &#8222;Wert unverändert&#8220;</h2>
<p>Wenn eine Datenquelle zeitweise ausfällt (offline, Verbindung nicht da) oder keine Daten liefert, behält das Item derzeit einfach seinen letzten Wert. Ohne Korrekturen wird dieser Wert für die gesamte Zeitspanne in der Datenbank gespeichert. Neben verfälschten Berechnungen haben auch Plots/Graphen dabei durchgehende Linien, obwohl ggf. keine Daten vorlagen.</p>
<p>Das ist ein altes Thema, über das in den Issues schon viel diskutiert wurde, und es gibt eine Lösung. Genaugenommen &#8211; zwei. <code>item.db_mark_invalid()</code> / <code>item.db_mark_valid()</code>.</p>
<pre><code class="language-python"># Verbindung verloren
sh.solar.leistung.db_mark_invalid(caller='solar_plugin', source='connection_lost')

# Verbindung wieder da
sh.solar.leistung.db_mark_valid(caller='solar_plugin', source='connection_restored')
sh.solar.leistung(neuer_wert, 'solar_plugin')
</code></pre>
<p>Wichtig dabei: das passiert nicht von allein. Das jeweilige Plugin muss den Ausfall selbst erkennen und <code>db_mark_invalid()</code> aktiv aufrufen. Unterstützt ein Plugin das (noch) nicht, bleibt der letzte Wert wie bisher einfach unverändert stehen. Aktuell macht das noch kein Plugin von Haus aus &#8211; Gateway-Plugins wie MQTT (Verbindung zum Broker verloren) oder KNX (Bus-Timeout, knxd nicht erreichbar) wären die ersten Kandidaten, die ich in absehbarer Zeit angehen möchte. Wer Lust hat, das für sein Lieblings-Plugin nachzurüsten: immer her damit.</p>
<p>Neu und ohne Plugin-Unterstützung nutzbar: das Item-Attribut <code>database_invalid_after</code>. Bekommt ein Item über die angegebene Zeitspanne keine Änderung/kein Update, wird automatisch eine Lücke geöffnet:</p>
<pre><code class="language-yaml">solar:
    leistung:
        type: num
        database: init
        enforce_updates: true
        database_invalid_after: 10m
</code></pre>
<p><code>enforce_updates</code> muss gesetzt sein, sonst zählt ein unverändertes Update nicht als Lebenszeichen. Und: das ist nur für Items sinnvoll, die ohnehin regelmäßig aktualisiert werden (cycle/crontab o.ä.) &#8211; bei unregelmäßig/ereignisgesteuert aktualisierten Items gibt&#8217;s sonst nur Fehlalarme.</p>
<p>Sobald wieder ein Wert gesendet wurde, wird automatisch <code>db_mark_valid()</code> aufgerufen und die Werte &#8222;zählen&#8220; wieder.</p>
<p>Lückeneinträge werden bei <code>avg</code>/<code>sum</code>/<code>integrate</code>/<code>on</code>/<code>min</code>/<code>max</code> automatisch ausgeschlossen, tauchen bei Rohwertabfragen als <code>NULL</code> (aus der Datenbank) auf (für Lücken in Plots), und lassen sich im Webinterface pro Datensatz auch manuell setzen/zurücknehmen.</p>
<h3>Beispiel: KNX-Item und MQTT-Item</h3>
<p>Zwei Items, zwei Transportwege, aber beide mit demselben eigentlichen Risiko: die Verbindung zur Außenwelt kann abreißen, ohne dass shng selbst oder das jeweilige Plugin davon groß Notiz nimmt &#8211; Telegramme bzw. Nachrichten bleiben einfach aus:</p>
<pre><code class="language-yaml">heizung:
    vorlauftemperatur:
        type: num
        database: init
        knx_dpt: 9
        knx_listen: 1/2/3
        enforce_updates: true
        database_invalid_after: 15m

garage:
    aussentemperatur:
        type: num
        database: init
        mqtt_topic_in: garage/aussentemperatur
        enforce_updates: true
        database_invalid_after: 3m
</code></pre>
<p><code>heizung.vorlauftemperatur</code> kommt vom Sensor selbst zyklisch (in ETS am Gerät eingestellt, z.B. alle 5 Minuten senden, unabhängig von einer Wertänderung) &#8211; komplett unabhängig von shngs eigenem Scheduler. Fällt <code>knxd</code> aus oder bricht die Verbindung zum Bus ab, bleiben die Telegramme einfach aus. Das KNX-Plugin selbst muss dabei nicht abstürzen oder für dieses eine Item einen auffälligen Fehler werfen &#8211; andere Items mit zwischenzeitlich gecachten Werten sehen auf den ersten Blick unauffällig aus. Genau diesen Fall fängt <code>database_invalid_after</code> ab, ohne dass jemand ins Log schauen muss.</p>
<p><code>garage.aussentemperatur</code> kommt per MQTT rein, mit demselben Prinzip: viele Sensoren (Zigbee2MQTT, Tasmota, &#8230;) senden zyklisch, unabhängig davon ob sich der Wert geändert hat &#8211; hier alle 60s angenommen, daher <code>3m</code> als Schwelle. Bleibt der Sensor tot oder der Broker weg, bleibt auch das MQTT-Update aus, ohne dass shng selbst etwas falsch macht.</p>
<p>Ein rein shng-internes <code>cycle</code>+<code>eval</code>-Item wäre dagegen kein gutes Beispiel: solange shng überhaupt läuft, feuert dessen Scheduler garantiert, und stünde der Scheduler wirklich still, würde auch die Prüfung selbst (<code>invalid_check_cycle</code>) nicht mehr laufen &#8211; es gäbe also niemanden mehr, der Alarm schlagen könnte.</p>
<p>Der Haken liegt nicht bei MQTT als Transportweg, sondern bei Quellen, die nur bei Zustandsänderung senden &#8211; klassisch Tür-/Fensterkontakte, viele Taster. Da ist &#8222;seit 30 Minuten kein Update&#8220; der absolute Normalfall, wenn eben nichts passiert ist, kein Ausfall. <code>database_invalid_after</code> ist nur sinnvoll, wenn die Quelle nachweislich regelmäßig sendet &#8211; egal ob per MQTT, KNX oder sonstwie -, und die Schwelle muss zu genau diesem Intervall passen, nicht zu einer geschätzten &#8222;sollte doch mal was kommen&#8220;-Zeit.</p>
<p>Das Risiko bei Fehlkonfiguration &#8211; falscher Itemtyp ohne regelmäßige Updates, oder zu kurz gewählte <code>database_invalid_after</code>-Zeit &#8211; sind Zeiträume, die in der Datenbank als &#8222;nicht vorhanden&#8220; eingetragen sind, obwohl eigentlich ein gültiger Wert vorlag. Das fällt seinerseits nur auf, wenn man es regelmäßig auf Plots überprüft.</p>
<h2>2. Aggregierung statt Löschen &#8211; die Optionen im Überblick</h2>
<p><code>database_maxage</code> ist ein bekanntes Item-Attribut und löscht alte Werte ersatzlos. Über <code>database_maxage_action</code> lässt sich jetzt stattdessen ein &#8222;Ersatzwert&#8220; zu einem Intervall verdichten:</p>
<table>
<thead>
<tr>
<th>Aktion</th>
<th>Bedeutung</th>
<th>Typ</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>delete</code></td>
<td>löschen (Standard)</td>
<td>beliebig</td>
</tr>
<tr>
<td><code>avg</code></td>
<td>zeitgewichteter Mittelwert</td>
<td>num, bool</td>
</tr>
<tr>
<td><code>sum</code></td>
<td>Summe</td>
<td>num, bool</td>
</tr>
<tr>
<td><code>min</code> / <code>max</code></td>
<td>Minimal-/Maximalwert</td>
<td>num, bool</td>
</tr>
<tr>
<td><code>integrate</code></td>
<td>diskretes Integral über der Zeit</td>
<td>num, bool</td>
</tr>
<tr>
<td><code>duty_cycle</code> (alt: <code>on</code>)</td>
<td>zeitgewichtete Einschaltdauer</td>
<td>bool</td>
</tr>
<tr>
<td><code>countall</code></td>
<td>Anzahl Rohwerte im Intervall</td>
<td>beliebig</td>
</tr>
<tr>
<td><code>first</code> / <code>last</code></td>
<td>ältester/neuester Rohwert, unverändert</td>
<td>beliebig, auch <code>str</code></td>
</tr>
</tbody>
</table>
<p>Das läuft komplett Python-seitig im Plugin, identisch auf SQLite3, MySQL/MariaDB und PostgreSQL. Wer zusätzlich zum Mittelwert auch Min/Max eines Intervalls dauerhaft behalten will, kann dafür die mitgelieferten Structs <code>database.min</code>/<code>database.max</code> nutzen (legen automatisch eigene Kind-Items mit den jeweiligen Werten an).</p>
<h3>Beispiel: vier Items, vier verschiedene Konfigurationen</h3>
<p>In den Konfigurationen fehlen die eigentlichen Datenquellen, die darf sich jeder dazu denken.</p>
<pre><code class="language-yaml"># plugin.yaml
database:
    plugin_name: database
    driver: sqlite3
    default_maxage_interval: 24h
</code></pre>
<pre><code class="language-yaml"># items/beispiel.yaml
wohnzimmer:
    temperatur:
        type: num
        database: init
        database_maxage: 90
        database_maxage_action: avg
        database_maxage_interval: 1h

pv:
    leistung:
        type: num
        database: init
        database_maxage: 365
        database_maxage_action: integrate
        database_maxage_interval: 1d

haustuer:
    kontakt:
        type: bool
        database: init
        database_maxage: 30
        database_maxage_action: countall

heizung:
    status:
        type: str
        database: init
        database_maxage: 14
        database_maxage_action: last
        database_maxage_interval: 6h
</code></pre>
<ul>
<li><code>wohnzimmer.temperatur</code>: nach 90 Tagen werden die Rohwerte je Stunde zu einem Mittelwert verdichtet &#8211; Langzeitverlauf bleibt Jahre erhalten, die minütlichen Rohdaten nicht.</li>
<li><code>pv.leistung</code>: nach einem Jahr wird aus der Momentanleistung je Tag die tatsächlich erzeugte Energie integriert &#8211; klassischer Fall für <code>integrate</code>.</li>
<li><code>haustuer.kontakt</code>: setzt kein eigenes <code>database_maxage_interval</code> &#8211; fällt auf den Plugin-Parameter <code>default_maxage_interval: 24h</code> zurück. Nach 30 Tagen bleibt pro Tag nur noch die Anzahl der Türöffnungen übrig.</li>
<li><code>heizung.status</code>: ein <code>str</code>-Item &#8211; hier funktionieren <code>avg</code>/<code>sum</code>/etc. nicht, aber <code>last</code> schon. Nach 14 Tagen bleibt je 6h-Intervall nur noch der letzte bekannte Status übrig.</li>
</ul>
<p>Effekt in der Praxis: Die Kompaktierung läuft im selben Zyklus wie das bisherige Löschen (<code>removeold_cycle</code>) und arbeitet sich &#8211; genau wie das &#8211; in begrenzten Schritten durch alte Daten (<code>max_aggregate_intervals</code>), pro Item. Bei vier Items mit doch recht unterschiedlichem Alter blockiert also keines der anderen den Durchlauf.</p>
<p>Ein Punkt, den man im Hinterkopf behalten sollte: Ändert man später bei einem Item mit <code>countall</code> (hier <code>haustuer.kontakt</code>) nachträglich das <code>database_maxage_interval</code>, werden schon kompaktierte alte Intervalle beim nächsten Durchlauf mit in ein neues, anders breites Intervall gezogen &#8211; für <code>avg</code>/<code>sum</code>/<code>min</code>/<code>max</code>/<code>integrate</code>/<code>duty_cycle</code> rechnerisch unproblematisch, bei <code>countall</code> zählt ein bereits kompaktiertes Intervall dann aber nur noch als &#8222;1&#8220; statt als die ursprüngliche Anzahl Rohwerte. Kein Bug, nur eine Ungenauigkeit, die man bei <code>countall</code> + nachträglicher Intervalländerung kennen sollte.</p>
<h2>3. PostgreSQL+TimescaleDB als neues Backend</h2>
<p>Neben SQLite3 und MySQL/MariaDB unterstützt das Plugin jetzt auch PostgreSQL, optional mit der <a href="https://www.timescale.com/">TimescaleDB</a>-Erweiterung. Die Treiber-Auswahl ist jetzt auch komfortabler: <code>driver</code> akzeptiert neben den echten Modulnamen (<code>psycopg2</code>/<code>psycopg</code>) auch sprechende Namen wie <code>postgres</code>, <code>postgresql</code>, <code>timescale</code>, <code>timescaledb</code> (und <code>mysql</code>/<code>mariadb</code> statt <code>pymysql</code>) &#8211; welches Python-Modul installiert ist, wird automatisch erkannt.</p>
<pre><code class="language-yaml">database_timescale:
    plugin_name: database
    driver: timescaledb
    connect:
    -   host:127.0.0.1
    -   port:5432
    -   user:shng
    -   password:shng_password
    -   database:shng
</code></pre>
<p><strong>Was TimescaleDB bringt:</strong></p>
<ul>
<li><strong>Hypertables</strong> &#8211; die <code>log</code>-Tabelle wird automatisch in Zeitpartitionen (Dateien für einzelne Zeiträume) aufgeteilt, macht zeitbereichsbasierte Abfragen auf großen Tabellen deutlich schneller.</li>
<li><strong>Native Kompression</strong> (<code>timescale_compress: true</code>) &#8211; TimescaleDBs eigene Doku nennt 10-20x (90-95% Speicherplatzersparnis) als üblich für Zeitreihendaten; im eigenen Test gegen einen echten 22-Millionen-Zeilen-Datensatz kamen 17,39x raus.</li>
<li><strong>Native Aggregation</strong> (<code>timescale_native_aggregation: true</code>) &#8211; statt Python-seitiger Aggregierung übernimmt TimescaleDB das über Continuous Aggregates, direkt auf dem Server. Dieselben Item-Attribute (<code>database_maxage_action</code> etc.) steuern das weiterhin.</li>
<li><strong>Native Retention</strong> (<code>timescale_native_retention: true</code>) &#8211; alte Rohdaten-Zeitpartitionen werden automatisch server-seitig fallengelassen statt Item für Item gelöscht.</li>
</ul>
<p><strong>Und die Nachteile, ehrlich gesagt:</strong></p>
<ul>
<li>Mehr Aufwand als SQLite3 (extra Server, extra Python-Paket <code>psycopg2-binary</code> oder <code>psycopg</code>).</li>
<li>Native Retention ist ein <strong>globaler</strong> Schwellwert für die ganze Tabelle, kein Wert pro Item mehr &#8211; auch Items mit <code>database_maxage_action: delete</code> warten dann auf denselben globalen Schwellwert.</li>
<li>Wichtig: Items <strong>ohne</strong> <code>database_maxage</code> sind davon nicht ausgenommen. ALLE Items werden nach der längsten eingestellten Zeit aggregiert &#8211; oder gelöscht. Wenn keine <code>default_maxage_action</code> eingestellt ist, werden alle nicht ausdrücklich anders konfigurierten Datenbankwerte der Items gelöscht. Wer native Retention nutzt, sollte <code>default_maxage</code> und <code>default_maxage_action</code> setzen.</li>
<li>Der Wechsel von nativer Aggregation zurück zu Plugin-Aggregierung ist nicht vorgesehen (nicht implementiert, da alles andere als trivial) und nicht verlustfrei möglich.</li>
<li>Auch die einmal aktivierte Kompression lässt sich über das Plugin nicht mehr rückgängig machen.</li>
</ul>
<h3>Warum gerade TimescaleDB</h3>
<p>Es gibt schon ein InfluxDB-Plugin, und Influx gilt seit Langem als die Referenz für Zeitreihen-Datenbanken. Das Problem mit InfluxDB ist dabei zweierlei: zum Einen hat sich die API mit jeder größeren Version komplett geändert, was ständigen Updateaufwand mit sich bringt und für jede Version ein eigenes Plugin erfordern würde. Zum Anderen ist die aktuelle Open-Source-Linie (InfluxDB 3 Core) explizit als Edge-/Echtzeit-Collector positioniert &#8211; Compactor und Optimierungen für Langzeit-Speicherung fehlen, und genau die wären für unseren Stats-/Grafik-Anwendungsfall am wichtigsten. Für brauchbare Abfrage-Performance über die Historie braucht es InfluxDB Enterprise. Es gibt zwar eine kostenlose Hobby-Stufe, aber damit hängt man an einer Hersteller-Lizenzstufe statt an einer eigenständigen Open-Source-Installation &#8211; für uns als reines Community-Projekt nicht ideal.</p>
<p>TimescaleDB basiert auf PostgreSQL, einer seit Langem gepflegten, gut getesteten und leistungsfähigen Datenbank, die auf den meisten System problemlos verfügbar ist. Die TimescaleDB-Erweiterung bringt mit der nativen Kompression einen großen Platzvorteil mit (siehe oben, 10-20x laut Timescale, 17,39x im eigenen Test), und die nativen Aggregations- und Retentionsfunktionen entlasten SmartHomeNG von Routineaufgaben, die sonst Python-seitig laufen müssten.</p>
<h3>Beispiel: dieselben vier Items, jetzt nativ auf TimescaleDB</h3>
<p>An den Items selbst ändert sich nichts &#8211; dieselbe Konfiguration wie oben. Nur <code>plugin.yaml</code> bekommt zwei zusätzliche Zeilen:</p>
<pre><code class="language-yaml">database_timescale:
    plugin_name: database
    driver: timescaledb
    connect:
    -   host:127.0.0.1
    -   port:5432
    -   user:shng
    -   password:shng_password
    -   database:shng
    default_maxage_interval: 24h
    timescale_hypertable: true
    timescale_native_aggregation: true
    timescale_native_retention: true
</code></pre>
<p>Was jetzt passiert: TimescaleDB legt <strong>ein</strong> Continuous Aggregate je tatsächlich genutzter Intervallbreite an, nicht eines je Item. Die Continuous Aggregates werden intern als virtuelle Tabelle über der log-Tabelle eingeblendet. Bei den vier Beispiel-Items sind das genau drei: 1h (<code>wohnzimmer.temperatur</code>), 6h (<code>heizung.status</code>) und 1d (<code>pv.leistung</code> und <code>haustuer.kontakt</code> über den <code>default_maxage_interval</code>-Fallback teilen sich hier eines, weil beide auf dieselbe Intervallbreite kommen). Die Aggregation selbst läuft weiter pro Item korrekt nach dessen eigener Konfiguration.</p>
<p>Der eigentliche Unterschied, konkret an diesem Beispiel: <code>pv.leistung</code> hat mit 365 Tagen das mit Abstand längste <code>database_maxage</code>. Unter nativer Retention wird genau dieser Wert (plus eine Zeitpartition Sicherheitsspanne) zum <strong>einzigen</strong> Schwellwert für die gesamte Tabelle. Die Rohdaten von <code>haustuer.kontakt</code> &#8211; eigentlich für 30 Tage konfiguriert &#8211; bleiben deswegen faktisch bis zu ein Jahr lang liegen, weil TimescaleDB pro Zeitpartition löscht und diese Item-übergreifend geteilt werden. Im Plugin-Modus (Abschnitt 2) würde <code>haustuer.kontakt</code> dagegen zuverlässig nach 30 Tagen kompaktiert. Das ist genau der &#8222;globaler statt Item-genauer Schwellwert&#8220;-Nachteil von oben, nur diesmal mit echten Zahlen dahinter. Durch die Kompression schrumpft der Platzbedarf für die eigentlich nicht erforderlichen Daten so weit, dass der zusätzliche Speicherplatz in der Praxis kein Problem darstellt. Trotzdem lässt sich dieses Feature optimal nutzen, wenn <code>database_maxage</code> bei allen Items in derselben Größenordnung liegt.</p>
<p>Für die meisten Home-Installationen reicht SQLite3 grundsätzlich aus. Da ich aber gehört habe, wie viele Millionen Zeilen viele Leute im Forum in ihren Datenbanken haben, wird TimescaleDB schon wieder interessant &#8211; und sei es nur aufgrund der Kompression, selbst ohne native Aggregation/Retention.</p>
<h3>Migration von Datenbanken</h3>
<p>Wer bestehende Daten zwischen Backends umziehen will (z.B. SQLite3 → TimescaleDB, oder umgekehrt): dafür gibt&#8217;s jetzt <code>tools/db_migrate.py</code> als eigenständiges Skript (läuft nur bei gestopptem SmartHomeNG). Migriert Item- und Log-Daten direkt zwischen zwei beliebigen unterstützten Backends, unterstützt Resume und <code>--dry-run</code>. Aber vorsicht &#8211; selbst auf einem schnellen Rechner sollte man für 22 Millionen Zeilen schon gute drei Stunden reine Transferzeit einplanen.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/nutzung-von-datenbanken-in-smarthomeng/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Welches Datenbank Plugin sollte ich verwenden?</title>
		<link>https://www.smarthomeng.de/welches-datenbank-plugin-sollte-ich-verwenden</link>
					<comments>https://www.smarthomeng.de/welches-datenbank-plugin-sollte-ich-verwenden#comments</comments>
		
		<dc:creator><![CDATA[Martin Sinn]]></dc:creator>
		<pubDate>Fri, 30 Mar 2018 07:35:26 +0000</pubDate>
				<category><![CDATA[FAQ]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[smartVISU]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[sqlite_visu2_8]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=866</guid>

					<description><![CDATA[Datenbank Plugins Es gibt zurzeit drei verschiedene Datenbank Plugins: database sqlite sqlite_visu2_8 Wenn Du neu mit SmartHomeNG beginnst, solltest Du das Plugin database verwenden. Das database Plugin unterstützt sowohl MySQL Datenbanken, als auch SQLite Datenbanken. Welcher Datenbank-Typ verwendet wird, wird in ../etc/plugin.yaml konfiguriert. sqlite und sqlite_visu2_8 Die beiden SQLite Plugins dienen<a class="moretag" href="https://www.smarthomeng.de/welches-datenbank-plugin-sollte-ich-verwenden"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<h3>Datenbank Plugins</h3>
<p>Es gibt zurzeit drei verschiedene Datenbank Plugins:</p>
<ul>
<li>database</li>
<li>sqlite</li>
<li>sqlite_visu2_8</li>
</ul>
<p>Wenn Du neu mit SmartHomeNG beginnst, solltest Du das Plugin <strong>database</strong> verwenden. Das <strong>database</strong> Plugin unterstützt sowohl MySQL Datenbanken, als auch SQLite Datenbanken. Welcher Datenbank-Typ verwendet wird, wird in <code>../etc/plugin.yaml</code> konfiguriert.</p>
<h3>sqlite und sqlite_visu2_8</h3>
<p>Die beiden SQLite Plugins dienen nur der Rückwärts-Kompatibilität für bestehende SmartHomeNG bzw. smarthome.py Umgebungen und werden nicht mehr weiterentwickelt.</p>
<p>Das Plugin <strong>sqlite</strong> unterstützt smartVISU bis zur Version v2.7.</p>
<p>Zur Unterstützung von smartVISU v2.8 und v2.9 muss das Plugin <strong>sqlite_visu2_8</strong> verwendet werden. Das Plugin führt beim ersten Start eine Konvertierung der Datenbank von <strong>sqlite</strong> auf das <strong>sqlite_visu2_8</strong> Format durch. Einen Weg zurück gibt es dann nicht. Es sollte also vorher eine Sicherung der Datenbank Datei <code>../var/db/smarthome.db</code> durchgeführt werden.</p>
<p><strong>Wichtig</strong>: Vor Beginn der Sicherung SmartHomeNG beenden.</p>
<p>&nbsp;</p>
<p>Eine Routine zur Konvertierung der Datenbanken der sqlite Plugins zu einer Datenbank für das database Plugin gibt es (noch) nicht.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/welches-datenbank-plugin-sollte-ich-verwenden/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Installation Influx, Grafana und Plugin</title>
		<link>https://www.smarthomeng.de/installation-influx-grafana</link>
					<comments>https://www.smarthomeng.de/installation-influx-grafana#respond</comments>
		
		<dc:creator><![CDATA[Martin Sinn]]></dc:creator>
		<pubDate>Sun, 10 Sep 2017 14:41:04 +0000</pubDate>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Graph]]></category>
		<category><![CDATA[influx]]></category>
		<category><![CDATA[influxdata]]></category>
		<category><![CDATA[influxdb]]></category>
		<category><![CDATA[Messwerte]]></category>
		<guid isPermaLink="false">http://test.smarthomeng.de/?p=198</guid>

					<description><![CDATA[Installation InfluxDB, Grafana und Plugin Es existiert ein neues InfluxDB Plugin für SmartHomeNG, das es ermöglicht Meßwerte in eine Influx Datenbank zu schreiben. Die Influx Datenbank wurde entwickelt als quasi eine SQL-ähnliche Datenbank für zeitabhängige Meßreihen. Viele Nutzer des Smarthome.py bemängelten, das eine RRD Datenbank einfach Werte ausdünnt im Laufe<a class="moretag" href="https://www.smarthomeng.de/installation-influx-grafana"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<h1>Installation InfluxDB, Grafana und Plugin</h1>
<p>Es existiert ein neues <a href="https://www.smarthomeng.de/user/plugins_doc/config/influxdb.html" title="https://www.smarthomeng.de/user/plugins_doc/config/influxdb.html" rel="noreferrer">InfluxDB Plugin</a> für SmartHomeNG, das es ermöglicht Meßwerte in eine Influx Datenbank zu schreiben. Die Influx Datenbank wurde entwickelt als quasi eine SQL-ähnliche Datenbank für zeitabhängige Meßreihen. Viele Nutzer des Smarthome.py bemängelten, das eine RRD Datenbank einfach Werte ausdünnt im Laufe der Zeit und andererseits der Ansatz mit der SQLite nicht genau genug ist.</p>
<p><strong>Achtung: Debian Jessie (8.x)</strong> Die neueren Linux Versionen setzen zunehmend auf systemd. Start/Stop Skripte werden nicht mehr gebraucht. Diese Anleitung berücksichtigt den systemd derzeit nicht.</p>
<h2>Vorbedingung</h2>
<p>Die folgende Anleitung geht davon aus, das ein stabiles System vorliegt mit Ubuntu 14.04.3 oder Debian als 64-bit Variante. Ihr könnt testen, welches System bei Euch installiert ist mit:</p>
<pre><code class="language-bash">
uname -i
</code></pre>
<p>Das ergibt für ein 64 Bit System <code>x86_64</code>. Alternativ geht auch</p>
<pre><code class="language-bash">
getconf -a | grep LONG_BIT
</code></pre>
<p>(Alternativ kann man auch die Sourcen für InfluxDB holen und eine 32 Bit Version bauen. Allerdings sprengt das den Rahmen dieses How-to.</p>
<p>Für alle weiteren Installationsschritte nutzen wir eine Root Shell</p>
<pre><code class="language-bash">
sudo -i
</code></pre>
<p>Nun installieren die InfluxDB Datenbank mit</p>
<pre><code class="language-bash">
wget https://s3.amazonaws.com/influxdb/influxdb_0.9.4.1_amd64.deb
dpkg -i influxdb_0.9.4.1_amd64.deb
</code></pre>
<p>Jetzt muß Influx noch einmalig gestartet werden:</p>
<pre><code class="language-bash">
/etc/init.d/influxdb start
</code></pre>
<p>Damit das Plugin später auch Daten in eine Datenbank schreiben kann, legen wir eine Datenbank an. Dazu startet wir das influx command line interface:</p>
<pre><code class="language-bash">
/opt/influxdb/influx
</code></pre>
<p>Um die existierenden Datenbanken aufzulisten, geben wir das Kommando <code>SHOW DATABASES</code> ein. Da wir frisch installiert haben, sollten lediglich <code>name</code> und <code>_internal</code> gelistet werden. Nun erstellen wir eine neue Datenbank mit <code>CREATE DATABASE smarthome</code></p>
<h2>Installieren des InfluxDB Python Clients</h2>
<pre><code class="language-bash">
pip install influxdb
</code></pre>
<h2>Installieren des Plugins</h2>
<p>Am einfachsten ladet ihr Euch das Plugin als <a href="https://github.com/SgtSeppel/smarthome-influxdb/archive/master.zip" title="https://github.com/SgtSeppel/smarthome-influxdb/archive/master.zip" rel="noreferrer">ZIP</a> runter und kopiert den Inhalt in ein neues Unterverzeichnis <code>/smarthome.py/plugins/influx</code></p>
<h2>Konfiguration des Plugins</h2>
<h3>plugin.conf</h3>
<pre><code class="language-yaml">
influxdb:
    class_name: InfluxDB
    class_path: plugins.influx
#   influx_host: localhost
#   influx_port: 8083
#   influx_user: root
#   influx_pass: root
#   influx_db: smarthome
    influx_keyword: influx
</code></pre>
<p>Der Eintrag <code>influx_keyword</code> legt fest, welche Daten in die Datenbank geschrieben werden. Ihr könnt entweder z.B. <code>influx</code> wählen und dann würde dieses item in die Datenbank geschrieben werden:</p>
<pre><code class="language-yaml">
Vorlauftemperatur:
    name: Vorlaufemperatur
    type: num
    knx_dpt: 9
    influx: true
    visu_acl: rw
    knx_init: 8/1/1
    cache: on
</code></pre>
<p>Eine Superidee des Entwicklers ist es jedoch als <code>influx_keyword</code> nun <code>sqlite</code> auszuwählen, dann werden alle Daten die in die SQLite Datenbank geschrieben werden zugleich auch in die Influx Datenbank geschrieben.</p>
<p>Nun müßt ihr noch smarthome.py neu starten, damit das Plugin auch genutzt wird.</p>
<h2>Installieren von Grafana</h2>
<p>Damit die Daten nun auch hübsch präsentiert werden können, installieren wir uns noch ein grafisches Frontend <code>Grafana</code>.</p>
<p>Wir nutzen wieder unsere Root Shell und erweitern unsere Liste für Repositories:</p>
<pre><code class="language-bash">
sudo -i
nano /etc/apt/sources.list
</code></pre>
<p>Dorthin idealerweise ganz unten einfügen:</p>
<pre><code class="language-bash">
deb https://packagecloud.io/grafana/stable/debian/ wheezy main
</code></pre>
<p>Jetzt müssen wir noch den Schlüssel holen damit wir signierte Packages installieren können:</p>
<pre><code class="language-bash">
curl https://packagecloud.io/gpg.key | sudo apt-key add -
</code></pre>
<p>Nächste Schritte sind aktualisieren der APT Datenbank und installieren von grafana</p>
<pre><code class="language-bash">
apt-get update
apt-get install grafana
</code></pre>
<p>Details der Grafana Installation:</p>
<p>Programm zu finden in <code>/usr/sbin/grafana-server</code> Das Init.d Skript liegt unter <code>/etc/init.d/grafana-server</code>, eine defaults Datei mit Umgebungsvariablen findet sich in <code>/etc/default/grafana-server</code> und eine Konfigurationsdatei in <code>/etc/grafana/grafana.ini</code>. Weiter gibt es noch ein Logfile zu finden unter <code>/var/log/grafana/grafana.log</code> und eine SQLite3 Datenbank als Basis für Grafana wird installiert unter <code>/var/lib/grafana/grafana.db</code>. Falls systemd vorhanden wird noch ein service installiert mit Namen <code>grafana-server.service</code></p>
<p>Jetzt gilt es den Grafana Server zu starten mit</p>
<pre><code class="language-bash">
service grafana-server start
</code></pre>
<p>Jetzt könnt ihr auf den Grafana Server zuzugreifen mit der IP-Adresse und Port 3000. Benutzer und Passwort sind admin.</p>
<p>Damit der Grafana Server bei jedem Systemstart mitstartet, müssen wir ihn noch eintragen:</p>
<pre><code class="language-bash">
update-rc.d grafana-server defaults 95 10
</code></pre>
<p>So, nun sollte das ganze funktionieren. Bevor ihr an das Frontend vom Grafana geht, solltet ihr erstmal ein wenig Daten sammeln.</p>
<h2>Datenverbindung zur Influx Datenbank</h2>
<p>Wie oben müßt ihr mit Eurem Browser nun auf Port 3000 auf den Grafana Server zugreifen. Dort könnt ihr Euch dann mit Benutzer admin und Passwort admin anmelden. Der nächste Schritt ist die Einrichtung der Datenverbindung. Dazu wählt ihr <code>Data Sources</code> aus und dann oben in der Leiste <code>Add New</code>. Danach gebt Ihr als Name <code>influxdb</code> ein und als Type <code>influxDB 0.9.x</code>; den Haken bei default setzt man zweckmäßigerweise auch. Bei den http-Settings gebt Ihr die<code>http://&lt;IP&gt;:8086</code>, Access auf <code>direct</code>. Bei den InfluxDB Details als Datenbank <code>smarthome</code>mit User = <code>root</code> und Passwort <code>root</code>. Jetzt sollte <code>Test Connection</code> erfolgreich sein. Mit Klick auf <code>Save</code> seid Ihr jetzt einsatzfähig.</p>
<h2>Erstes Dashboard anlegen</h2>
<p>Ihr klickt jetzt auf <code>Dashboards</code> und anschließend auf <code>Home</code>. Weiter unten könnt Ihr nun <code>+New</code>auswählen um ein neues Dashboard zu erzeugen. Wenn das geschehen ist, gibt es ein kleines grünes Rechteck. Darauf klickt ihr und dann weiter auf <code>Add Panel</code> und im Submenü <code>Graph</code>. Jetzt erscheint ein leeres Feld mit einem roten Ausrufezeichen in der oberen linken Ecke und einer Überschrift <code>no title (click here)</code>. Darauf klickt ihr nun und wählt aus dem Popup Dialog <code>Edit</code> aus.</p>
<p>Unter Metrics ist jetzt eine Abfrage. Dort könnt Ihr &#8211; wenn bis dato alles richtig verlaufen ist und schon Werte in der Influx Datenbank zu finden sind &#8211; unter <code>FROM</code> <em>select measurement</em> eure erste Datenreihe eintragen. Ein Klick ganz oben auf das Diskettensymbol speichert nun das dashboard. Der Rest geht am besten über ausprobieren. Ein Klick auf den Farbstrich der Datenreihenlegende erlaubt es zu wählen ob die linke oder rechte Achse zur Anzeige genommen und welche Farbe zur Anzeige verwendet wird.</p>
<p>Viel Spaß!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/installation-influx-grafana/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Database Plugin Guide für MySQL/MariaDB</title>
		<link>https://www.smarthomeng.de/database-plugin-guide-fuer-mysql-mariadb</link>
					<comments>https://www.smarthomeng.de/database-plugin-guide-fuer-mysql-mariadb#respond</comments>
		
		<dc:creator><![CDATA[Marc René Frieß]]></dc:creator>
		<pubDate>Sun, 30 Jul 2017 15:26:02 +0000</pubDate>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Datenbank]]></category>
		<guid isPermaLink="false">http://test.smarthomeng.de/?p=213</guid>

					<description><![CDATA[Leitfaden zur Umstellung auf das Database Plugin in Kombination mit MySQL/MariaDB Motivation Das Database Plugin setzt auf einer Neuimplementierung der Datenbankanbindung auf, bei der nicht wie beim bisherigen SQLite Plugin alte Daten &#8222;aufgeräumt&#8220; werden, sondern jeder Datensatz behalten wird. Dies kann zu sehr großen Datenbeständen führen, für die eine &#8222;echte&#8220;<a class="moretag" href="https://www.smarthomeng.de/database-plugin-guide-fuer-mysql-mariadb"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<div class="markdown-body">
<h3>Leitfaden zur Umstellung auf das Database Plugin in Kombination mit MySQL/MariaDB</h3>
<h2>Motivation</h2>
<p>Das Database Plugin setzt auf einer Neuimplementierung der Datenbankanbindung auf, bei der nicht wie beim bisherigen SQLite Plugin alte Daten &#8222;aufgeräumt&#8220; werden, sondern jeder Datensatz behalten wird. Dies kann zu sehr großen Datenbeständen führen, für die eine &#8222;echte&#8220; Datenbank wie MySQL oder MariaDB sinnvoller ist. Auch können diese Datenbanken mit PhpMyAdmin sehr leicht administriert / betrachtet werden.</p>
<p><strong>Wichtig:</strong> Eine Nutzung mit SQLite ist auch weiterhin mit dem Database Plugin möglich, so dass ein Wechsel zu anderen Datenbanken nicht zwingend notwendig ist.</p>
<p>Dieser Leitfaden soll trotzdem dazu dienen, den Umstieg zu erleichtern und motivieren.</p>
<h2>Installation von MariaDB</h2>
<p>Eine sinnvolle Alternative zu SQLite ist Maria DB (ein Fork von MySQL). Mit dem Database Plugin sind jedoch auch andere Datenbanken mit Kompatibilität zur Python DB API 2 möglich. Auch das klassische MySQL kann verwendet werden.</p>
<pre><code class="language-bash">
sudo apt-get update
sudo apt-get install mariadb-server
# alternativ
# sudo apt-get install mysql-server
</code></pre>
<p>Die Installationsroutine fordert dabei zur Eingabe eines Passworts für den User &#8222;root&#8220; auf. Hier ist darauf zu achten, ein möglichst sicheres Passwort zu wählen.</p>
<h2>Einrichtung einer DB und eines DB Users für SmartHomeNG</h2>
<p>Als nächstes sollte eine eigene MariaDB Datenbank mit eigenem User für SmartHomeNG erstellt werden, da die Verwendung des Root Users aus Sicherheitsgründen (globale root Rechte) nicht zu empfehlen ist.</p>
<p>Dazu sollte wie folgt vorgegangen werden:</p>
<h3>Einloggen in MariaDB als root (befehl &#8222;mysql&#8220;) mit vergebenem Passwort</h3>
<pre><code class="language-bash">
mysql -u root -p
</code></pre>
<h3>Datenbank / User für SmartHomeNG erstellen</h3>
<p>In der nun folgenden Shell &#8211; jede Zeile mit den jeweiligen Werten befüllen und mit ENTER bestätigen:</p>
<pre><code class="language-sql">
CREATE DATABASE smarthome_db;
CREATE USER 'smarthome'@'<mark>«ip of your SmartHomeNG server»</mark>' IDENTIFIED BY '<mark>«password»</mark>';
GRANT ALL PRIVILEGES ON smarthome_db.* TO 'smarthome'@'<mark>«ip of your SmartHomeNG server»</mark>';
FLUSH PRIVILEGES;
</code></pre>
<p><strong>Wichtig:</strong> Falls die Datenbank auf dem gleichen Server wie SmartHomeNG betrieben wird, muss anstatt der IP die <code>127.0.0.1</code> und ggf. <code>localhost</code> via jeweiligen <code>GRANT ALL ...</code> Statements freigegeben werden.</p>
<h3>(Optional) Prüfen der Einstellungen:</h3>
<p>Auf die Datenbank lokal als root einloggen, <code>mysql -u root -p</code>. Mittels <code>show databases;</code> kann man nun prüfen, ob eine Datenbank namens <code>smarthome_db</code> erstellt wurde. Der neue User ist in der Datenbank <code>mysql</code> in der Tabelle <code>users</code> zu finden:</p>
<pre><code class="language-sql">
use mysql;
select Host, User from user;
</code></pre>
<p>Im Output sollte nun eine Zeile mit IP des SmartHomeNG Servers und dem User &#8222;smarthome&#8220; sichtbar sein.</p>
<p>Die vergebenen PRIVILEGES auf die smarthome_db sind via</p>
<pre><code class="language-sql">
select Host, Db, USer from db; 
</code></pre>
<p>zu sehen. Auch hier sollten der Username, die IP und die Datenbank auftauchen.</p>
<p>Mit <code>exit</code> geht es zurück zur Shell.</p>
<h3>SmartHomeNG und Datenbank auf <strong>getrennten</strong> Maschinen/IPs</h3>
<p>Sind SmartHomeNG und Datenbank getrennt, muss zusätzlich der Eintrag <code>bind-address</code> in der <code>/etc/mysql/my.cnf</code> angepasst werden. Dieser kann entweder auskommentiert werden (jeder Rechner kann mit Angabe von User und Passwort auf die DB verbinden) oder explizit die IP des SmartHomeNG Servers gesetzt werden. Mehrere IPs sind nicht möglich. Soll daher auch vom Datenbank-Server zugegriffen werden (bspw. für ein dort installiertes PhpMyAdmin) hilft nur auskommentieren und das setzen entsprechender Firewall Regeln.</p>
<pre><code class="language-ini">
...
[mysqld]
...
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1 (auskommentiert)
#oder alternativ
bind-address            = «IP des SmartHomeNG Servers»
...
</code></pre>
<p>Nach dem Speichern muss der Dienst mit <code>sudo service mysql restart</code> neu gestartet werden.</p>
<h2>Vorbereitung des SmartHomeNG Servers für die Nutzung via Database Plugin:</h2>
<p>Detaillierte Informationen siehe <a href="https://github.com/smarthomeNG/plugins/tree/master/database" title="https://github.com/smarthomeNG/plugins/tree/master/database" rel="noreferrer">https://github.com/smarthomeNG/plugins/tree/master/database</a></p>
<p>Nach erfolgter Installation der Datenbank, muss auf dem SmartHomeNG Server das entsprechende Paket für Python3 installiert werden:</p>
<pre><code class="language-bash">
sudo pip3 install --upgrade pymysql
</code></pre>
<p>Achtung: Das sehr ähnlich klingende pymsql3 sollte nicht mehr verwendet werden (würde theoretisch mit dem Plugin aber auch funktionieren).</p>
<p>Das Database Plugin wird nun wie folgt in der <code>plugin.yaml</code> eingerichtet:</p>
<pre><code class="language-yaml">database:
    plugin_name: database
    driver: pymysql
    connect:
      - 'host:«ip des mariadb/mysql servers»'
      - 'user:smarthome'
      - 'passwd:«passwort des users smarthome»'
      - 'db:smarthome_db'

</code></pre>
<p>In den jeweiligen Items muss dann ein <code>database@mysqldb: init</code> erfolgen (oder das alte <code>sqlite: init</code> ersetzen).</p>
<h2>Datenkonvertierung von SQLite</h2>
<p>Das Datenbank Plugin nutzt intern ein anderes Format als die alte smarthome.db Datenbank. Wenn die Daten weiterhin genutzt werden sollen (historische Daten), dann müssen sie konvertiert werden ins neue Format.</p>
<p>Dazu muß auf der Shell ins SmartHomeNG Basisverzeichnis gewechselt und dann ein Konvertierungsscript aufgerufen werden:</p>
<pre><code class="language-bash">
cd /usr/local/smarthome
python3 plugins/database/&gt;convert ./var/db/smarthome.db ... . # gibt es leider noch nicht ;)
</code></pre>
<p>todo: Skript schreiben für die Migration</p>
<h2>Abschluß</h2>
<p>Nachdem die Änderungen an den Items durchgeführt sind und die Konvertierung erfolgt ist, muß SmartHomeNG neu gestartet werden.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/database-plugin-guide-fuer-mysql-mariadb/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installation InfluxDB</title>
		<link>https://www.smarthomeng.de/installation-influxdb</link>
					<comments>https://www.smarthomeng.de/installation-influxdb#respond</comments>
		
		<dc:creator><![CDATA[Bernd Meiners]]></dc:creator>
		<pubDate>Thu, 05 May 2016 14:59:26 +0000</pubDate>
				<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[influxdb]]></category>
		<category><![CDATA[Messwerte]]></category>
		<guid isPermaLink="false">http://test.smarthomeng.de/?p=205</guid>

					<description><![CDATA[Installation der InfluxDB Datenbank Damit SmarthomeNG Meßwerte loggen kann existiert eine Schnittstelle zur SQLite Datenbank. Als Alternative für umfangreichere Auswertungen und mehr Performance gibt es ein neues Plugin um Meßdaten in eine Influx Datenbank zu schreiben. Die Influx Datenbank wurde speziell entwickelt für Meßwerte mit Zeitstempeln. Sie verfügt über Schnittstellen<a class="moretag" href="https://www.smarthomeng.de/installation-influxdb"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<div class="markdown-body">
<h1>Installation der InfluxDB Datenbank</h1>
<p>Damit SmarthomeNG Meßwerte loggen kann existiert eine Schnittstelle zur SQLite Datenbank. Als Alternative für umfangreichere Auswertungen und mehr Performance gibt es ein neues Plugin um Meßdaten in eine Influx Datenbank zu schreiben. Die Influx Datenbank wurde speziell entwickelt für Meßwerte mit Zeitstempeln. Sie verfügt über Schnittstellen zu gängigen Programmiersprachen und es gibt eine interaktives Command Line Interface.</p>
<h2>Vorbedingung</h2>
<p>Die folgende Anleitung geht davon aus, das ein Debian Jessie System als 64-bit Variante vorliegt und damit der systemd benutzt wird um Dienste zu starten und zu beenden. Ihr könnt testen, welches System bei Euch installiert ist mit:</p>
<pre><code class="language-bash">
getconf -a | grep LONG_BIT
</code></pre>
<p>Das ergibt für ein 64 Bit System <code>LONG_BIT 64</code>.</p>
<p>(Alternativ kann man auch die Sourcen für InfluxDB holen und eine 32 Bit Version bauen. Allerdings sprengt das den Rahmen dieses How-to.</p>
<p>Zunächst der Download der <a href="https://influxdata.com/downloads/#influxdb" rel="nofollow" title="https://influxdata.com/downloads/#influxdb">InfluxDB</a> Datenbank mit</p>
<pre><code class="language-bash">
wget https://dl.influxdata.com/influxdb/releases/influxdb_0.12.2-1_amd64.deb
sudo dpkg -i influxdb_0.12.2-1_amd64.deb 
</code></pre>
<p>Jetzt muß Influx noch einmalig gestartet werden:</p>
<pre><code class="language-bash">
sudo systemctl start influxdb.service
</code></pre>
<p>Ob die Datenbank nun im Hintergrund läuft, läßt sich prüfen mit</p>
<pre><code class="language-bash">
sudo systemctl status influxdb.service
</code></pre>
<p>Damit das Plugin später auch Daten in eine Datenbank schreiben kann, legen wir eine Datenbank an. Dazu starten wir das influx command line interface:</p>
<pre><code class="language-bash">
influx
</code></pre>
<p>Um die existierenden Datenbanken aufzulisten, geben wir das Kommando <code>SHOW DATABASES</code> ein. Da wir frisch installiert haben, sollten lediglich <code>name</code> und <code>_internal</code> gelistet werden. Nun erstellen wir eine neue Datenbank mit</p>
<pre><code class="language-bash">
CREATE DATABASE smarthome
</code></pre>
<p>Zur Prüfung geben wir erneut das Kommando <code>SHOW DATABASES</code> ein. Das Ergebnis sollte nun sein:</p>
<pre><code class="language-text">
name: databases
---------------
name
_internal
smarthome

&gt;
</code></pre>
<p>Mit <code>quit</code> kann das Command Line Interface wieder verlassen werden.</p>
<h2>Installieren des InfluxDB Python Clients</h2>
<p>Um die InfluxDB mit Python und damit mit SmarthomeNG nutzen zu können, bmuß noch ein passendes Zugriffsmodul installiert werden:</p>
<pre><code class="language-bash">
sudo pip3 install influxdb
</code></pre>
<h2>Installieren des Plugins</h2>
<p>In den nächsten Versionen von SmarthomeNG (&gt; V1.1) wird das Plugin sicher Bestandteil des Masters werden. Bis es soweit ist, muss es nachinstalliert werden:</p>
<pre><code class="language-bash">
cd /usr/local/smarthome/plugins
mkdir influx
cd influx
wget https://github.com/SgtSeppel/smarthome-influxdb/archive/master.zip
unzip -j master.zip
rm master.zip
</code></pre>
<h2>Konfiguration des Plugins</h2>
<h3>plugin.yaml</h3>
<pre><code class="language-yaml">
influxdb:
    class_name: InfluxDB
    class_path: plugins.influx
#   influx_host: localhost
#   influx_port: 8083
#   influx_user: root
#   influx_pass: root
#   influx_db: smarthome
    influx_keyword: influx

</code></pre>
<p>Der Eintrag <code>influx_keyword</code> legt fest, welche Daten in die Datenbank geschrieben werden. Ihr könnt entweder z.B. <code>influx</code> wählen und dann würde dieses item in die Datenbank geschrieben werden:</p>
<pre><code class="language-yaml">
Vorlauftemperatur:
    name: Vorlaufemperatur
    type: num
    knx_dpt: 9
    influx: true
    visu_acl: rw
    knx_init: 8/1/1
    cache: on
</code></pre>
<p>Eine Superidee des Entwicklers ist es jedoch als <code>influx_keyword</code> nun <code>sqlite</code> auszuwählen, dann werden alle Daten die in die SQLite Datenbank geschrieben werden zugleich auch in die Influx Datenbank geschrieben.</p>
<p>Nun müßt ihr noch smarthome.py neu starten, damit das Plugin auch genutzt wird.</p>
<p>Wenn nun das Frontend Grafana genutzt werden soll um unabhängig von einer Visu auf dir nun frisch geloggten Daten zuzugreifen, dann bitte bei der Anleitung für Grafana fortfahren.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/installation-influxdb/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Min- u. Max-Werte von Temperaturen</title>
		<link>https://www.smarthomeng.de/min-u-max-werte-von-temperaturen</link>
					<comments>https://www.smarthomeng.de/min-u-max-werte-von-temperaturen#comments</comments>
		
		<dc:creator><![CDATA[Bernd Meiners]]></dc:creator>
		<pubDate>Sun, 01 Nov 2015 11:32:57 +0000</pubDate>
				<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Items]]></category>
		<category><![CDATA[Plugins]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=988</guid>

					<description><![CDATA[Möchte man die Min und Max-Werte zu einem Item bestimmen, ist dies mit smarthome.py einfach möglich. Vorraussetzung ist, dass die Werte zu dem Item aufgezeichnet werden. Dazu wird ein Eintrag in der Datei /etc/plugin.yaml benötigt: sql: plugin_name: database Anschliessend wird im Item die Aufzeichnung aktiviert mit &#8218;database: yes&#8216; bzw. &#8218;database:<a class="moretag" href="https://www.smarthomeng.de/min-u-max-werte-von-temperaturen"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<p>Möchte man die Min und Max-Werte zu einem Item bestimmen, ist dies mit smarthome.py einfach möglich. Vorraussetzung ist, dass die Werte zu dem Item aufgezeichnet werden. Dazu wird ein Eintrag in der Datei /etc/plugin.yaml benötigt:</p>
<pre><code class="language-yaml">sql:
    plugin_name: database
</code></pre>
<p>Anschliessend wird im Item die Aufzeichnung aktiviert mit &#8218;database: yes&#8216; bzw. &#8218;database: init&#8216;. Nun können weitere Items angelegt werden, die mit Hilfe einer Funktion, die das database-Plugin bereitstellt, die benötigten Werte erhalten.</p>
<p>Das ganze sieht dann in etwa wie folgt aus:</p>
<pre><code class="language-yaml">sensor:
    carport:
        temp:
            type: num   
            knx_dpt: 9  
            knx_send: 3/4/11  
            knx_reply: 3/4/11
            ow_addr: '28.52F1AA030000'
            ow_sensor: T 
            database: init  # Aufzeichnung der Daten aktivieren
            min:
                type: num
                knx_dpt: 9
                knx_send: 3/4/14
                knx_reply: 3/4/14
                eval: "sh.sensor.carport.temp.db('min', '28h')"  # Mimium über die letzten 28h berechnen
                eval_trigger: sensor.carport.temp  # Änderungen der Temperatur triggern die Neuberechnung
            max:
                type: num
                knx_dpt: 9
                knx_send: 3/4/15
                knx_reply: 3/4/15
                eval: "sh.sensor.carport.temp.db('max', '28h')"  # Maximum über die letzten 28h berechnen
                eval_trigger: sensor.carport.temp   # Änderungen der Temperatur triggern die Neuberechnung
</code></pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/min-u-max-werte-von-temperaturen/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
