<?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>FHEM &#8211; bubuxblog</title>
	<atom:link href="https://www.bubuxblog.de/tag/fhem/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bubuxblog.de</link>
	<description></description>
	<lastBuildDate>Mon, 04 Mar 2019 10:37:04 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Amazon Kindle als Statusdisplay &#8211; Update</title>
		<link>https://www.bubuxblog.de/amazon-kindle-als-statusdisplay-update/</link>
					<comments>https://www.bubuxblog.de/amazon-kindle-als-statusdisplay-update/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Fri, 25 Mar 2016 18:37:36 +0000</pubDate>
				<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Infodisplay]]></category>
		<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Statusdisplay]]></category>
		<category><![CDATA[Wetteranzeige]]></category>
		<category><![CDATA[Wetterdisplay]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1164</guid>

					<description><![CDATA[Nachdem das Statusdisplay für Wetter- und Temperaturdaten sowie weitere Informationen auf dem Kindle nun ein paar Tage in Betrieb ist und soweit gut funktioniert, habe ich noch ein paar Veränderungen vorgenommen. Grundlage dafür sind die Arbeiten aus dem vorherigen Artikel. Anpassungen am Kindle als Statusdisplay WLAN aktivieren/deaktivieren Um die Laufzeit der Batterie des Kindle zu [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Nachdem das Statusdisplay für Wetter- und Temperaturdaten sowie weitere Informationen auf dem Kindle nun ein paar Tage in Betrieb ist und soweit gut funktioniert, habe ich noch ein paar Veränderungen vorgenommen. Grundlage dafür sind die Arbeiten aus dem <a href="http://blog.bubux.de/kindle-status-display/">vorherigen Artikel</a>.</p>
<h1>Anpassungen am Kindle als Statusdisplay</h1>
<h3>WLAN aktivieren/deaktivieren</h3>
<p>Um die Laufzeit der Batterie des Kindle zu verlängern, schalte ich das WLAN in dem Script <em>zeige_daten.sh</em> zum holen des Statusbild am Beginn des Scriptes ein und am Ende wieder aus. Nachteil an der Sache ist, das man sich per SSH nicht mehr mit dem Kindle verbinden kann, da das Kindle UI-Framework beim Booten mit dem Aufruf des Scriptes <em>init_daten.sh</em> deaktiviert wird und der Kindle nicht mehr auf irgendwelche Tastendrücke reagiert. D.h der automatische Aufruf dieses Scriptes beim Booten muss wieder deaktiviert werden (Stichwort &#8222;Kite -&gt; onboot&#8220;). Nach einem Reboot des Kindle (~40 Sek. auf den Knopf an der Unterseite drücken) kann man dann wieder per SSH über WLAN zugreifen. Dann besteht die Verbindung solange der Cron nicht das Script <em>zeige_daten.sh</em> aufruft. Bei längeren Arbeiten muss daher der Cron auskommentiert, oder <em>ifdown wlan0</em> im Script <em>zeige_daten.sh</em> auskommentiert werden. Das Script <em>init_daten.sh</em> rufe ich dann manuell auf bevor ich die SSH-Sitzung beende.</p>
<p>Hier mein aktuelles <em>zeige_daten.sh</em> Script. Die Änderungen gegenüber der vorherigen Version sind in Zeile 3, 4 und 18 zu finden:</p>
<pre class="">#!/bin/sh

ifup wlan0
sleep 30

cd "$(dirname "$0")"

rm daten_output.png
eips -c
eips -c

if wget http://raspberry/kindle/daten_output.png; then
    eips -g daten_output.png
else
    eips -g daten_error.png
fi

ifdown wlan0</pre>
<p>&nbsp;</p>
<h3>Uhrzeit stellen</h3>
<p>Da der Kindle bei mir nicht am Internet hängt und auch kein Amazon-Konto konfiguriert ist, wurde die Uhrzeit nicht synchronisiert bzw. lief immer aus dem Ruder. Daher erstmal Uhrzeit kontrollieren und ggf. manuell einstellen:</p>
<pre class="">date</pre>
<pre class="">date MMDDHHMMYYYY
date 250317572016</pre>
<p>Anschliessend die neue Uhrzeit/Datum in die Hardware-Uhr schreiben:</p>
<pre class="">hwclock -w</pre>
<p>Dann noch in folgender Datei anstelle des NTP-Servers von Amazon den von meiner <a href="http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/336_Zeitsynchronisation-NTP-fuer-FRITZ-Box-und-Netzwerkgeraete-einrichten/" target="_blank">Fritzbox</a> (in der Regel <em>fritz.box</em>) eintragen:</p>
<pre class="">vi /etc/sysconfig/ntp</pre>
<p>&nbsp;</p>
<h3>Batterieanzeige des Kindle</h3>
<p>Während der Anzeige des Statusbild gibt es keine Möglichkeit mehr den Ladezustand der Batterie des Kindle zu sehen. Mittels SSH kann man den Ladezustand der Batterie (in %) mit dem Befehl:</p>
<pre class="">gasgauge-info -s</pre>
<p>abfragen. (Dieser Befehl kann übrigens noch verschiedene anderer Werte der Batterie des Kindle abfragen).</p>
<p>Um diese Information auch im Statusbild verfügbar zu machen, nutze ich das Tool <em>eips</em> welches im Kindle zum Löschen des Bildschirmes, dem Schreiben von Zeichen, dem Scrollen der Anzeige und der Anzeige von PNG-Bildern genutzt werden kann. Also einfach ein kleines Shell-Script mit folgendem Inhalt erstellt und per Cron (<em>vi /etc/crontab/root</em>) alle 5 Minuten ausgeführt.</p>
<pre class="">#!/bin/sh
gasgauge-info -s | xargs /usr/sbin/eips 47 39 > /dev/null;</pre>
<p>Der Ladezustand des Kindle-Akkus wird dann in der rechten unteren Ecke angezeigt. Beim aktualisieren des Statusbild wird die Information erstmal wieder überschrieben, dann nach 5 Minuten durch Starten des obigen Scriptes durch den Cron jedoch wieder angezeigt.</p>
<p>Mit <em>eips</em> kann das %-Zeichen der Ausgabe nicht geschrieben werden. Es erscheint eine entsprechende Fehlermeldung. Diese wird nach <em>/dev/null</em> geleitet. 47 und 39 sind die Zeilen- und Spaltennummer zur Ausgabe des Textes.</p>
<p>Im Ergebnis schaut es dann mit 42% Akkustand wie im folgendemn Bild aus. Das mit der <a href="https://de.wikipedia.org/wiki/42_%28Antwort%29" target="_blank">42</a> war Zufall <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_batteriestand.jpg" rel="attachment wp-att-1173"><img fetchpriority="high" decoding="async" class="alignnone wp-image-1173 size-medium" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_batteriestand-e1458926069954-300x258.jpg" alt="kindle_batteriestand" width="300" height="258" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batteriestand-e1458926069954-300x258.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batteriestand-e1458926069954-768x660.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batteriestand-e1458926069954-1024x881.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batteriestand-e1458926069954.jpg 1620w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h1>Anpassungen an der Serverkomponente</h1>
<p>Neben den Änderungen am Kindle habe ich auch noch einige Anpassungen des Python-Scriptes bzgl. der Anzeige weiterer Daten vorgenommen. Dazu habe ich auch ein paar zusätzliche SVG erstellt. Im Python-Script werden auf Basis verschiedene IF-Abfragen unterschiedliche SVG-Templates geladen. Das aktualisierte Python-Script ist am Ende des Artikels zu finden.</p>
<h3>Batterieanzeige der Fensterkontakte</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_batterie.jpg" rel="attachment wp-att-1169"><img decoding="async" class="wp-image-1169 size-medium alignleft" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_batterie-225x300.jpg" alt="kindle_batterie" width="225" height="300" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batterie-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batterie-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_batterie.jpg 1944w" sizes="(max-width: 225px) 100vw, 225px" /></a> Der Batteriezustand der <a href="http://blog.bubux.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/" target="_blank">Homematic-Fensterkontakte</a> kann über FHEM abgefragt werden.</p>
<p>Zum Thema Batteriestatus von Homematic-Geräten gibt es übrigens auch einen netten Artikel in <a href="http://www.meintechblog.de/2015/08/fhem-rechtzeitige-benachrichtigung-bei-leeren-batterien/#more-9307" target="_blank">meintechblog.de</a>.</p>
<p>Jedenfalls werden im Python-Script die Statis der Batterien aller Homematic-Fensterkontakte abgefragt. Alle Namen der Fensterkontakte die den Status &#8222;low&#8220; melden, werden aneinandergereiht in eine Variable geschrieben. Ist diese Variable ungleich &#8222;leer&#8220;, wird anstelle des Statusbild mit den Temperaturen etc. ein entsprechender Hinweis mit der Liste aller Batterie-schwächelnder Fensterkontakte angezeigt. Und das so lange, bis die Batterien gewechselt wurden. Im linken Bild ist der Hinweis über zwei leere Batterien zu sehen. Für diese Anzeige gibt es ein eigenes <a href="http://blog.bubux.de/wp-content/uploads/2016/03/batterie_preprocess.svg" rel="">SVG</a>.</p>
<h3>Temperatur Warmwasserspeicher</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_puffertemp.jpg" rel="attachment wp-att-1165"><img decoding="async" class="wp-image-1165 size-medium alignleft" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_puffertemp-225x300.jpg" alt="kindle_puffertemp" width="225" height="300" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_puffertemp-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_puffertemp-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_puffertemp.jpg 1944w" sizes="(max-width: 225px) 100vw, 225px" /></a>Die Anzeige des Luftdruckes und der Windgeschwindigkeit ist nett, für mich aber nicht wirklich informativ. Wie schon im <a href="http://blog.bubux.de/kindle-status-display/" target="_blank">vorherigen Artikel</a> angedeutet ist die Temperatur des Warmwasserspeicher wesentlich hilfreicher. Diese Daten <a href="http://blog.bubux.de/viessmann-heizung-auslesen/" target="_blank">lese ich schon seit längerem aus</a> und schreibe sie in eine Snapshot-Tabelle. Übersteigt die untere Temperatur im Pufferspeicher die Marke von 28°C, wird anstelle des Luftdruck/Wind die oberer und untere Temperatur des Warmwasserspeicher angezeigt.<br />
In der Praxis sehe ich so morgens den Luftdruck und nach Anfeuern des Kamins oder Aufheizen der Solarpanel irgendwann die Puffertemperatur. Auch für diese Anzeige gibt es ein eigenes <a href="http://blog.bubux.de/wp-content/uploads/2016/03/daten_script_preprocess_lfw.svg" target="_blank" rel="">SVG</a>.</p>
<p>&nbsp;</p>
<h3>Status der Heizung</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_heizung.jpg" rel="attachment wp-att-1170"><img loading="lazy" decoding="async" class="wp-image-1170 size-medium alignleft" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_heizung-225x300.jpg" alt="kindle_heizung" width="225" height="300" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_heizung-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_heizung-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_heizung.jpg 1944w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a>Zum guten Schluss noch eine weiteres <a href="http://blog.bubux.de/wp-content/uploads/2016/03/fehler_preprocess.svg" target="_blank" rel="">SVG</a> welches zur Anzeige kommt, sobald die Viessmann-Gastherme einen anderen Status als &#8222;<em>kein Fehler</em>&#8220; meldet. Dies kann neben echten Fehlern in der Anlage z.B. auch eine anstehende Wartung sein. Auch diese Anzeige wird solange angezeigt bis der Status der Heizung wieder OK ist.<br />
Während ich das hier schreibe kommt mir gerade der Gedanke, das die Anzeige der Wartung ggf. relativ lange angezeigt wird da der Heizungsbauer die nächsten 5 Monate keinen Termin frei hat. Hier muss noch ein Reset-Mechanismus her&#8230;</p>
<p>Da ich keinen echten Fehler der Heizung als Beispiel für das Bild provozieren konnte, habe ich im Python-Script die Abfragen nach &#8222;kein Fehler&#8220; testweise so verändert, das die Gut-Meldung der Heizung angezeigt wird. Diese ist auch im Bild zu sehen.<br />
&nbsp;</p>
<h3>Abgeändertes Python-Script</h3>
<p>Hier noch das versprochene Python-Script in der neuen Version. Neben den oben besprochenen Punkten habe ich das Auslesen der Fensterkontakte (für &#8222;Offen/Geschlossen&#8220;- und den Batteriestatus) noch in eine While-Schleife gepackt die über eine Liste aller Fensterkontakte läuft. Diese Copy&#038;Paste-Faulheit wie beim ersten Anlauf rächt sich irgendwann immer&#8230;</p>
<pre class="lang:python theme:twilight">
#!/usr/bin/python2
# -*- coding: utf-8 -*-

import codecs
import telnetlib
import MySQLdb
from datetime import datetime, time


################
# Hole FHEM data
################
tnet_host= "localhost"
tnet_port= 7072
def fhem_task(fcmd):
    tc= telnetlib.Telnet(tnet_host,tnet_port)
    tc.write(fcmd)
    erg= tc.read_until( "\n" )
    tc.close()
    return erg

# Abwesenheit pruefen
if "off" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="nicht gesetzt"
if "on" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="gesetzt"

# Liste Fensterkontakte
listFensterkontakte = ['FensterHeizung', 'FensterKeller', 'FensterGaestezimmer1', 'FensterGaestezimmer2', 'FensterBuero1', 'FensterBuero2', 'FensterWohnen1', 'FensterWohnen2', 'FensterWohnen3', 'FensterWohnen4', 'FensterGaestebad', 'FensterSpind', 'FensterBad1']

# Fensterkontakte
anz_fenster_offen=0;
for Fensterkontakt in listFensterkontakte:
    if "open" in fhem_task("get "+ Fensterkontakt +" param STATE\r\n"):
        anz_fenster_offen += 1

# Garagenkontakt
if "open" in fhem_task("get Garagentor param STATE\r\n"):
    stat_garage="offen"
else:
    stat_garage="geschlossen"

# Batteriestatus Fensterkontakte
kontakt_batterie_low=""
for Fensterkontakt in listFensterkontakte:
    if "low" in fhem_task("get "+ Fensterkontakt +" param battery\r\n"):
        kontakt_batterie_low += Fensterkontakt + ", "

# Wetter
try:
    condition=str.split(fhem_task("get MeinWetter condition\r\n"))
    if len(condition)==5:
        wetter_icon=condition[3] + " " + condition[4]
    else:
        wetter_icon=condition[3]
except:
    wetter_icon="Fehler"

luftdruck=str.split(fhem_task("get MeinWetter pressure\r\n"))
tendenz=str.split(fhem_task("get MeinWetter pressure_trend_txt\r\n"))
wind=str.split(fhem_task("get MeinWetter wind_speed\r\n"))

######################
# Datenbanken auslesen
######################
db = MySQLdb.connect(host="localhost", user="<benutzer>", passwd="<passwort>", db="<dbname>")
cur = db.cursor()
cur.execute("SELECT MIN(aussentemperatur), MAX(aussentemperatur) FROM temperaturen WHERE timestamp >= DATE(NOW()) ORDER BY timestamp")
for row in cur.fetchall():
    mintemp=round(row[0],2)
    maxtemp=round(row[1],2)

cur = db.cursor()
cur.execute("SELECT warmwasser, speicher_unten, error0 FROM snapshot")
for row in cur.fetchall():
    speicher_oben=round(row[0],2)
    speicher_unten=round(row[1],2)
    fehlerspeicher=row[2].replace(" ","\r",2)

db.close()


################
# Preprocess SVG
################
now = datetime.now()
now_time = now.time()
if time(5,50) <= now.time() <= time(22,50):
    # Wenn eine der Batterien der Fensterkontakte leer ist
    if kontakt_batterie_low!="":
        output = codecs.open('batterie_preprocess.svg', 'r', encoding='utf-8').read()
    # Wenn die Heizung einen Fehler anzeigt
    elif 'kein Fehler' not in fehlerspeicher:
        output = codecs.open('fehler_preprocess.svg', 'r', encoding='utf-8').read()
    # ansonsten abhaengig von speicher_unten ein SVG mit Luftdruck und Wind anzeigen. Ansonsten Puffertemperaturen
    elif speicher_unten<=28:
        output = codecs.open('daten_script_preprocess_lfw.svg', 'r', encoding='utf-8').read()
    else:
        output = codecs.open('daten_script_preprocess.svg', 'r', encoding='utf-8').read()
        
    # Platzhalter mit Daten ersetzen
    output = output.replace('ICON_ONE',wetter_icon.decode("utf-8"))
    output = output.replace('WETTER_BESCHR',wetter_icon.decode("utf-8"))
    output = output.replace('TEMP_A',fhem_task("get Aussenthermometer param temperature\r\n"))
    output = output.replace('LUFT_A',fhem_task("get Aussenthermometer param humidity\r\n"))
    output = output.replace('MIN_TEMP',str(mintemp))
    output = output.replace('MAX_TEMP',str(maxtemp))
    output = output.replace('PS_O',str(speicher_oben))
    output = output.replace('PS_U',str(speicher_unten))
    output = output.replace('DRUCK_A',luftdruck[3])
    output = output.replace('TENDENZ',tendenz[3])
    output = output.replace('WIND_A',wind[3])
    output = output.replace('ANZ_FENSTER',str(anz_fenster_offen))
    output = output.replace('STAT_ABWESENHEIT',abwesenheit)
    output = output.replace('STAT_GARAGE',stat_garage)
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    output = output.replace('FEHLERSPEICHER',fehlerspeicher)
    output = output.replace('BATTERIE',kontakt_batterie_low.replace(", ","\r"))
    # neues SVG schreiben
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
else:
    # Platzhalter mit Daten ersetzen
    output = codecs.open('sleep_preprocess.svg', 'r', encoding='utf-8').read()
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    # neues SVG schreiben
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
</pre>
<p>Viel Spaß mit den neuen Ideen, SVGs und dem Script. Falls ihr noch weitere Ideen habt den Kindle als Statusdisplay zu nutzen, lasst es mich wissen.</p>
<p>Gruß<br />
Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/amazon-kindle-als-statusdisplay-update/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Amazon Kindle als Statusdisplay</title>
		<link>https://www.bubuxblog.de/kindle-status-display/</link>
					<comments>https://www.bubuxblog.de/kindle-status-display/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Wed, 16 Mar 2016 20:33:06 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Statusdisplay]]></category>
		<category><![CDATA[Wetter]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1123</guid>

					<description><![CDATA[Die Anzeige aller im Haus gesammelter Daten über eine Webseite ist nett (siehe Screenshot), benötigt aber einen Rechner, Handy, Tablet etc. wo diese Seite im Browser anzeigt wird. Unschön dabei ist, das wenn man schnell die Außentemperatur wissen will, immer erst das Gerät anschalten oder aufwecken muss, einen Webbrowser öffnen muss, die Webseite aufruft und [&#8230;]]]></description>
										<content:encoded><![CDATA[<figure id="attachment_1137" aria-describedby="caption-attachment-1137" style="width: 351px" class="wp-caption alignright"><a href="http://blog.bubux.de/wp-content/uploads/2016/03/startseite_intranet.png" rel="attachment wp-att-1137"><img loading="lazy" decoding="async" class="wp-image-1137" src="http://blog.bubux.de/wp-content/uploads/2016/03/startseite_intranet-1024x525.png" alt="startseite_intranet" width="351" height="180" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-1024x525.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-300x154.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-768x394.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet.png 1029w" sizes="auto, (max-width: 351px) 100vw, 351px" /></a><figcaption id="caption-attachment-1137" class="wp-caption-text">Webseite &#8211; Übersicht</figcaption></figure>
<p>Die Anzeige aller im Haus gesammelter Daten über eine Webseite ist nett (siehe Screenshot), benötigt aber einen Rechner, Handy, Tablet etc. wo diese Seite im Browser anzeigt wird. Unschön dabei ist, das wenn man schnell die Außentemperatur wissen will, immer erst das Gerät anschalten oder aufwecken muss, einen Webbrowser öffnen muss, die Webseite aufruft und wartet bis die Seite geöffnet wird. Das ist für einen kurzen Blick auf die Temperatur eher unpraktisch.</p>
<p>Es musste eine Anzeigemöglichkeit für die wichtigsten Daten her, welche immer angeschaltet ist. Nach kurzer Recherche im Internet stellte sich ein Amazon Kindle als Statusdisplay aufgrund des E-Paper-Displays als stromsparender Anwärter auf diesen Job heraus. Also schnell einen Kindle 4 (kein Touch) im Internet für ~ 30€ besorgt (da ich bisher keinen besaß).</p>
<h3>Lösungsansätze</h3>
<p>Es gibt verschiedene Ansätze den Kindle als Statusdisplay (z.B. für Wetterinformationen) zu nutzen. Es gibt Lösungen wie <a href="http://www.mobiflip.de/kindl-eink-info-display/" target="_blank">hier</a> beschrieben die den Browser des Kindle nutzen. Besser gefielen mir aber die Lösungen die den Bildschirmschoner des Kindle zur Anzeige eines Statusbildes nutzen. Das macht unter anderem die <a href="http://www.fhemwiki.de/wiki/Kindle_Display" target="_blank">Lösung für FHEM</a>, als auch die Lösung von <a href="https://mpetroff.net/2012/09/kindle-weather-display/" target="_blank">Matthew Petroff</a> (von dem die FHEM-Lösung wahrscheinlich auch abgeleitet ist). Basierend auf dieser Lösung ist ausserdem <a href="http://www.shatteredhaven.com/2012/11/1347365-kindle-weather-display.html" target="_blank">diese hier</a> mit weiterführenden Erklärungen der nötigen Schritte.<br />
Ich bevorzuge anstelle der FHEM-Lösung die ursprüngliche Version, da ich nicht nur Daten aus FHEM anzeigen will, sondern auch Daten aus meiner MySQL-Datenbank und zusätzliche Informationen die direkt aus dem Internet stammen.</p>
<p>Den Kindle habe ich übrigens mittels <a href="http://avm.de/ratgeber/sicherheit/rundum-geschuetzt-mit-der-kindersicherung/" target="_blank">&#8222;Kindersicherung&#8220; der FritzBox</a> vom Internet gekappt falls Amazon auf komische Gedanken kommt und mir mit einem gutgemeinten Online-Update irgendwas zerschießt.</p>
<p>Die Lösung, den Bildschirmschoner des Kindle mit einem im Netzwerk bereitgestelltem Bild zu nutzen, benötigt verschiedene Anpassungen des Kindle als auch einige Komponenten die auf einem Server bereit gestellt werden müssen (bei mir der Raspberry PI).</p>
<h3>Beschreibung</h3>
<p>Die Beschreibung der nötigen Schritte und die benötigte Software sind <a href="https://mpetroff.net/2012/09/kindle-weather-display/" target="_blank">hier</a> (<em>ursprüngliche Idee</em>), <a href="http://www.shatteredhaven.com/2012/11/1347365-kindle-weather-display.html" target="_blank">hier</a> (<em>erweiterte Anleitung</em>) und <a href="http://fnordig.de/2015/05/14/using-a-kindle-for-status-information/" target="_blank">hier</a> (<em>ausführliche Anleitung</em>) erklärt. Aus diesem Grund liste ich die nötigen Arbeitsschritte hier nur Stichpunktartig auf:</p>
<p><em><strong>Kindle:</strong></em></p>
<ul>
<ul>
<li><a href="http://wiki.mobileread.com/wiki/Kindle4NTHacking" target="_blank">Jailbreak</a> des Kindle damit man damit auch anständig arbeiten kann</li>
<li>SSH für Kindle (<a href="http://www.mobileread.com/forums/showthread.php?t=88004" target="_blank">USBNetwork Hacks</a>)
<ul>
<li><a href="https://www.sven.de/kindle/" target="_blank">Root-Passwort</a> für den Kindle ermitteln</li>
</ul>
</li>
<li>Kite <a href="http://www.mobileread.com/forums/showthread.php?t=168270" target="_blank">installieren</a> um nach dem Starten des Kindle das Init-Script (<em>init_daten.sh</em>) ausführen zu lassen
<ul>
<li>Stoppen von <em>powerd</em>
<ul>
<li>das ist nötig, da im Sleep-Mode der Cronjob nicht ausgeführt wird</li>
<li>(&#8222;@reboot&#8220; in crontab funktioniert leider auf dem Kindle nicht)</li>
</ul>
</li>
<li>Stoppen von <em>framework</em></li>
</ul>
</li>
<li>Cronjob einrichten um alle x Minuten/Stunden ein aktualisiertes Bild per wget zu laden
<ul>
<li><em>vi /etc/crontab/root</em></li>
<li><em>*/10 5-22 * * * /mnt/us/anzeige/zeige_daten.sh</em> (alle 10 Minuten zwischen 5 und 22 Uhr</li>
</ul>
</li>
</ul>
</ul>
<p><em><strong>Server:</strong></em></p>
<ul>
<ul>
<ul>
<li>Python-Script anpassen
<ul>
<li>Das Python-Script sammelt die Daten, ersetzt die Platzhalter im SVG und erstellt daraus das PNG mittels <em>rsvg-convert</em> und <em>pngcrush</em></li>
</ul>
</li>
<li>Cronjob zur Ausführung des Python-Script anlegen
<ul>
<li><em>*/3 * * * * /var/www/kindle/daten-script.sh &amp;&gt; /dev/null</em></li>
</ul>
</li>
<li>SVG-Template anpassen (mit Editor und/oder <a href="https://inkscape.org/de/" target="_blank">Inkscape</a>)
<ul>
<li><a href="http://blog.bubux.de/wp-content/uploads/2016/03/daten_script_preprocess.svg" target="_blank">hier</a> mein SVG für die Datenanzeige und</li>
<li><a href="http://blog.bubux.de/wp-content/uploads/2016/03/sleep_preprocess.svg" target="_blank">hier</a> für zwischen 23 und 5 Uhr</li>
<li><em>bei Änderungen mit Inkscape nicht im &#8222;Inkscape-Format&#8220; abspeichern sondern als &#8222;Normales SVG&#8220;</em></li>
</ul>
</li>
<li><a href="http://developer.gnome.org/rsvg/stable/" target="_blank">rsvg-convert</a> installieren (<em>sudo apt-get install librsvg2-bin</em>)</li>
<li><a href="http://en.wikipedia.org/wiki/Pngcrush" target="_blank">pngcrush</a> installieren (<em>sudo apt-get install pngcrush</em>)</li>
</ul>
</ul>
</ul>
<p>(Achtung! Die Dateinamen der Scripte in den Cron-Beispielen und die Dateinamen der SVG´s sind anders als in den oben verlinkten Anleitungen)</p>
<h3>Python-Script</h3>
<p>Das ursprüngliche Python-Script holt das Wetter von einer Webseite aus den USA. Das Wetter dort hat mich nicht wirklich interessiert und so habe ich das Script etwas angepaßt und verschiedene Wetterdaten und Statusinformationen aus meinen eigenen Quellen (FHEM und MySQL) gezogen.<br />
Zur Anzeige der Wettericons nutze ich teilweise die Bilder aus dem ursprünglichen SVG. Einige habe ich allerdings gelöscht da ich hier z.B. keinen Blizzard erwarte. Die Werte für den Luftdruck und die Windstärke sowie die Auswahl des aktuellen Wetter-Icon erfolgt über die &#8222;condition&#8220; des <a href="http://www.fhemwiki.de/wiki/Weather" target="_blank">FHEM-Yahoo-Wetter-Moduls</a>.</p>
<p>Mein Pythonscript sieht wie folgt aus:</p>
<p><strong>Bitte das Update im <a href="http://blog.bubux.de/amazon-kindle-als-statusdisplay-update/">nachfolgendem Artikel</a> beachten!!</strong></p>
<pre class="lang:python theme:twilight">
#!/usr/bin/python2

import codecs
import telnetlib
import MySQLdb
from datetime import datetime, time

################
# Hole FHEM data
################
tnet_host= "localhost"
tnet_port= 7072
def fhem_task(fcmd):
    tc= telnetlib.Telnet(tnet_host,tnet_port)
    tc.write(fcmd)
    erg= tc.read_until( "\n" )
    tc.close()
    return erg

# Abwesenheit
if "off" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="nicht gesetzt"
if "on" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="gesetzt"

# Fenster
anz_fenster_offen=0;
if "open" in fhem_task("get FensterHeizung param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterKeller param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestezimmer1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestezimmer2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBuero1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBuero2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen3 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen4 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestebad param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterSpind param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBad1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get Garagentor param STATE\r\n"):
    stat_garage="offen"
else:
    stat_garage="geschlossen"

# Wetter
try:
    condition=str.split(fhem_task("get MeinWetter condition\r\n"))
    if len(condition)==5:
        wetter_icon=condition[3] + " " + condition[4]
    else:
        wetter_icon=condition[3]
except:
    wetter_icon="Fehler"


luftdruck=str.split(fhem_task("get MeinWetter pressure\r\n"))
tendenz=str.split(fhem_task("get MeinWetter pressure_trend_txt\r\n"))
wind=str.split(fhem_task("get MeinWetter wind_speed\r\n"))

####################
# Datenbank auslesen
####################
db = MySQLdb.connect(host="localhost", user="<benutzer>", passwd="<password>", db="<dbname>")        		
cur = db.cursor()
cur.execute("SELECT MIN(aussentemperatur), MAX(aussentemperatur) FROM temperaturen WHERE timestamp >= DATE(NOW()) ORDER BY timestamp")
for row in cur.fetchall():
    mintemp=round(row[0],2)
    maxtemp=round(row[1],2)

db.close()


################
# Preprocess SVG
################
now = datetime.now()
now_time = now.time()
if time(5,50) <= now.time() <= time(22,50):  
    # Open SVG to process
    output = codecs.open('daten_script_preprocess.svg', 'r', encoding='utf-8').read()
    # Insert icons and temperatures
    output = output.replace('ICON_ONE',wetter_icon.decode("utf-8"))
    output = output.replace('WETTER_BESCHR',wetter_icon.decode("utf-8"))
    output = output.replace('TEMP_A',fhem_task("get Aussenthermometer param temperature\r\n"))
    output = output.replace('LUFT_A',fhem_task("get Aussenthermometer param humidity\r\n"))
    output = output.replace('MIN_TEMP',str(mintemp))
    output = output.replace('MAX_TEMP',str(maxtemp))
    output = output.replace('DRUCK_A',luftdruck[3])
    output = output.replace('TENDENZ',tendenz[3])
    output = output.replace('WIND_A',wind[3])
    output = output.replace('ANZ_FENSTER',str(anz_fenster_offen))
    output = output.replace('STAT_ABWESENHEIT',abwesenheit)
    output = output.replace('STAT_GARAGE',stat_garage)
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    # Write output
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
else:
    # Open SVG to process
    output = codecs.open('sleep_preprocess.svg', 'r', encoding='utf-8').read()
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    # Write output
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
</pre>
<p>Es werden verschiedene Information aus FHEM mittels Telnet abgefragt und Daten aus einer MySQL-Datenbank (min/max-Werte) ermittelt. Neben Temperaturwerten zeige ich z.B. auch noch den Status der Fenster, des Garagentores und der Abwesenheitssteuerung an. Zwischen 5:50 und 22:50 Uhr wird alle 10 Minuten ein aktualisiertes Bild der Statusinformationen angezeigt, in der anderen Zeit ein Bild eines schlafenden Männchens. In dieser Zeit fragt der Kindle auch kein neues Bild per <em>wget</em> ab.</p>
<h3>Ergebnis</h3>
<p>Im Ergebnis schaut es dann so aus:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248.jpg" rel="attachment wp-att-1125"><img loading="lazy" decoding="async" class="alignnone wp-image-1125" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-768x1024.jpg" alt="kindle_statusdisplay" width="610" height="813" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248.jpg 1944w" sizes="auto, (max-width: 610px) 100vw, 610px" /></a></p>
<p>Und hier die Anzeige für Nachts:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay2.jpg" rel="attachment wp-att-1152"><img loading="lazy" decoding="async" class="alignnone wp-image-1152 " src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-768x1024.jpg" alt="kindle_statusdisplay2" width="610" height="813" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657.jpg 1944w" sizes="auto, (max-width: 610px) 100vw, 610px" /></a></p>
<p>Als Erweiterung werde ich evtl. noch während der Heizperiode mit dem Kachelofen oder abhängig der Puffertemperatur, die obere und untere Temperatur des Pufferspeichers anstelle des Luftdruckes und der Windinformation anzeigen. Die Puffertemperatur ist in der Regel unser Maßstab ob Holz nachgelegt werden muss oder nicht.</p>
<p>Es könnte z.B. auch eine Display füllende Information ausgegeben werden wenn eine der Batterien der Fensterkontakte leer ist oder ein Warnhinweis falls die Heizung eine Störung oder anstehende Wartung anzeigt. Im Python-Script würde ich dann analog dem "Schlaf-Bild" ein spezielles PNG aus einem weiteren SVG erzeugen.<br />
&nbsp;</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/kindle-status-display/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Homematik &#8211; Zisterne</title>
		<link>https://www.bubuxblog.de/homematik-zisterne/</link>
					<comments>https://www.bubuxblog.de/homematik-zisterne/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sat, 10 May 2014 08:25:27 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Hm-Sen-Wa-Od]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Homematic]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=402</guid>

					<description><![CDATA[Update 04.03.2019: Zur Messung des Füllstands der Zisterne habe ich einen neuen Artikel mit einem anderen Ansatz zur Messung verfasst. Dieser ist hier zu finden. Wieder eins von diesen Projekten wo viele sagen: &#8222;Das braucht doch kein Mensch!&#8220;. Richtig, das braucht man auch nicht nicht. Es macht aber Spaß (zumindest mir), den Füllstand meiner Zisterne [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><span style="color: #ff0000;">Update 04.03.2019: Zur Messung des Füllstands der Zisterne habe ich einen neuen Artikel mit einem anderen Ansatz zur Messung verfasst. Dieser ist <a href="http://blog.bubux.de/fuellstandmessung-der-zisterne-mittels-esp8266-nodemcu-und-ultraschallsensor/">hier</a> zu finden.</span></p>
<p>Wieder eins von diesen Projekten wo viele sagen: &#8222;Das braucht doch kein Mensch!&#8220;. Richtig, das braucht man auch nicht nicht. Es macht aber Spaß (zumindest mir), den Füllstand meiner Zisterne zu wissen ohne das ich den Betondeckel rausheben muss und mir dabei die Finger quetsche.</p>
<p>Im Homematik-Sensor-Park gibt es einen kapazitiven Füllstandssensor (Hm-Sen-Wa-Od) als Bausatz der diese Aufgabe übernehmen kann. Wobei &#8222;Bausatz&#8220; nicht wirklich schwierige Lötarbeiten erfordert, sondern nur ein paar wenige Teile auf die Platine gelötet werden müssen (Batteriehalter, Funkmodul) und das Ganze in dem mitgelieferten Gehäuse verpackt werden muss.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_3376.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-446" src="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_3376-1024x768.jpg" alt="IMG_3376" width="604" height="453" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_3376-1024x768.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_3376-300x224.jpg 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Nach dem Zusammenbau der Platine müssen die Messleitungen auf die entsprechende Länge (Tiefe der Zisterne und geplante Einbauhöhe des Sensors) angepaßt werden. Die Enden der Messleitungen müssen mit den beiligenden &#8222;Schrumpftüllen&#8220; die mit Kleber gefüllt sind wasserdicht verschlossen werden. Dazu reicht ein normaler Fön.</p>
<p>Alle 10 cm von unten beginnen müssen nun die Stege befestigt werden. Dieser Abstand&nbsp; wird später für die Kalibrierung benötigt. Dann die Anschlussleitungen durch die Kabeldurchführungen an den beiden Klemmen befestigen.</p>
<h3>Reichweite</h3>
<p>Ich war zuerst skeptisch ob das mit dem Funk vom Kellerraum bis in die Zisterne funktioniert?! Immerhin ist der Sensor etwa 1m unter der Erde im Betonverlies gefangen&#8230; Bei mir sind es aber nur 10m Luftline zwischen Sensor und <a title="Raspberry PI – Heimautomatisierung mit COC, Homematic &amp; FHEM" href="http://blog.bubux.de/?p=153">COC</a> und es gibt keine Probleme mit der Funkverbindung.</p>
<h3>Anlernen</h3>
<p>Zum Anlernen des Sensors muss die Zentrale in den Anlernmodus gebracht werden</p>
<pre>set &lt;zentrale&gt; hmPairForSec &lt;zeit_in_sekunden&gt;</pre>
<p>und danach am Füllstandssensor die &#8222;Sensor&#8220;-Taste für &lt;1 Sekunde gedrückt werden. Die Setup-LED blinkt in der Anlernphase und erlischt bei Erfolg. Danach sollte in der <em>fhem.cfg</em> ein ähnlicher Eintrag wie folgt erstellt worden sein:</p>
<pre>define Zisterne CUL_HM 226555
attr Zisterne .devInfo 020101
attr Zisterne .stc 60
attr Zisterne IODev COC
attr Zisterne autoReadReg 4_reqStatus
attr Zisterne expert 2_full
attr Zisterne firmware 1.2
attr Zisterne model HM-Sen-Wa-Od
attr Zisterne peerIDs
attr Zisterne rawToReadable 10:0 72:1000 144:2000 216:3000 288:4000
attr Zisterne room Garten
attr Zisterne serialNr KEQ0365449
attr Zisterne subType sensor
#attr Zisterne hmClass sender
define FileLog_Zisterne FileLog /var/log/fhem/Zisterne-%Y.log Zisterne
attr FileLog_Zisterne logtype text
attr FileLog_Zisterne room Garten</pre>
<p>Ich hab im Beispiel den kryptischen Gerätenamen durch &#8222;Zisterne&#8220; ersetzt. Das neue Gerät sollte dann auch in der FHEM-Weboberfläche im Raum &#8222;Garten&#8220; zu finden sein.</p>
<p>Mit dem folgenden Befehl werden die Register des Füllstandsmessers ausgelesen:</p>
<pre>get Zisterne regList</pre>
<p>Dabei sollte folgende Ausgabe zu sehen sein. Werden die Register nicht korrekt ausgelesen kann das u.a. mit einer zu alten Version von FHEM zusammenhängen. <span style="color: #ff0000;">In der Version 5.3 war das Gerät anscheinend noch nicht implementiert . Mit der FHEM Version 5.5 funktionierte das Auslesen der Register korrekt.</span></p>
<pre>list:         register | range              | peer     | description
   0: cyclicInfoMsgDis |   0 to 255         |          | cyclic message
   0: intKeyVisib      |     literal        |          | visibility of internal channel options:visib,invisib
   0: localResDis      |     literal        |          | local reset disable options:on,off
   0: pairCentral      |   0 to 16777215    |          | pairing to central
   0: transmDevTryMax  |   1 to 10          |          | max message re-transmit
   1: caseDesign       |     literal        |          | case desing options:verticalBarrel,horizBarrel,rectangle
   1: caseHigh         | 100 to 10000cm     |          | case hight
   1: caseLength       | 100 to 10000cm     |          | case length
   1: caseWidth        | 100 to 10000cm     |          | case width
   1: fillLevel        | 100 to 300cm       |          | fill level
   1: ledOnTime        |   0 to 1.275s      |          | LED ontime
   1: meaLength        | 110 to 310cm       |          | 
   1: transmitTryMax   |   1 to 10          |          | max message re-transmit
   1: useCustom        |     literal        |          | use custom options:on,off
   1: waterUppThr      |   0 to 256         |          | water upper threshold
   1: waterlowThr      |   0 to 256         |          | water lower threshold
   4: expectAES        |     literal        | required | expect AES options:on,off
   4: fillLvlLoThr     |   0 to 255         | required | fill level lower threshold
   4: fillLvlUpThr     |   0 to 255         | required | fill level upper threshold
   4: peerNeedsBurst   |     literal        | required | peer expects burst options:on,off</pre>
<h3>Kalibrierung</h3>
<p>Vor der Kalibrierung des Sensors müssen noch verschiedene Zisternen-spezifische Werte im Register gesetzt werden. Dazu gehören:</p>
<ul>
<li>Behälterform</li>
<li>Behälterhöhe</li>
<li>Behälterdurchmesser</li>
<li>Länge der Messkabel</li>
<li>maximale Füllhöhe</li>
</ul>
<p>Ich habe die maximale Füllhöhe und die Behälterhöhe auf die gleichen Werte gesetzt. Mit den folgenden Kommandos werden die Register gesetzt:</p>
<pre>set Zisterne regSet caseDesign verticalBarrel
set Zisterne regSet caseHigh 130
set Zisterne regSet caseWidth 200
set Zisterne regSet meaLength 180
set Zisterne regSet fillLevel 130</pre>
<p>Danach sollten die Werte in der Geräteübersicht in den Readings angezeigt werden:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/zisterne_readings.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-456" src="http://blog.bubux.de/wp-content/uploads/2014/04/zisterne_readings.png" alt="zisterne_readings" width="461" height="334" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/zisterne_readings.png 461w, https://www.bubuxblog.de/wp-content/uploads/2014/04/zisterne_readings-300x217.png 300w" sizes="auto, (max-width: 461px) 100vw, 461px" /></a></p>
<p>Das &#8222;set_&#8220; vor den Werten sollte dann nach mindestens 24 Stunden verschwinden. Bei Problemen mit dem korrekten Setzen der Register wurde u.a. <a title="FHEM Forum" href="http://forum.fhem.de/index.php/topic,16635.15.html" target="_blank" rel="noopener noreferrer">hier </a>behandelt.</p>
<p>Sind die Werte alle korrekt gesetzt, erfolgt die eigentliche Kalibrierung des Sensors die nur bei komplett gefüllter Zisterne erfolgen kann. Dazu wie in der Anleitung beschrieben verfahren:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/ziosterne_kalibrierung.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-457" src="http://blog.bubux.de/wp-content/uploads/2014/04/ziosterne_kalibrierung.png" alt="ziosterne_kalibrierung" width="716" height="981" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/ziosterne_kalibrierung.png 716w, https://www.bubuxblog.de/wp-content/uploads/2014/04/ziosterne_kalibrierung-218x300.png 218w" sizes="auto, (max-width: 716px) 100vw, 716px" /></a></p>
<p><span style="color: #0000ff;">Falls die grüne LED nicht erlischt, d.h. die Tabelle noch nicht vollständig gefüllt ist, hat das evtl. mit einer falschen angabe der Messleitungslänge und/oder der maximalen Füllhöhe in den Registern zu tun.</span></p>
<h3>Befestigung in der Zisterne</h3>
<p>Ich habe den Sensor auf ein Brett geschraubt welches ich lose auf den Rand eines Betonringes in der Zisterne gelegt habe. Das sollte ausreichen!</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_6937.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-453" src="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_6937-1024x682.jpg" alt="IMG_6937" width="604" height="402" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_6937-1024x682.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_6937-300x200.jpg 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_6935.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-451" src="http://blog.bubux.de/wp-content/uploads/2014/04/IMG_6935-1024x682.jpg" alt="IMG_6935" width="604" height="402" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_6935-1024x682.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/04/IMG_6935-300x200.jpg 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<h3>Daten loggen</h3>
<p>Den Füllstand der Zisterne lasse ich wieder per Cron stündlich in eine MySQL-Datenbanktabelle schreiben. Dazu wird der Sensor wieder per Telnet abgefragt:</p>
<p>get_zisterne.php</p>
<p>[cclN_php]<br />
<!--?
//Telnet-Verbindung zu FHEM aufmachen und Befehle absetzten...
$fhemhost = "localhost";
$fhemport = 7072;
$fhemsock = fsockopen($fhemhost, $fhemport, $errno, $errstr, 30);
$fhemcmd = "list Zisterne STATE\r\nquit\r\n";
$fenster = "";
$geschlossen = "";
fwrite($fhemsock, $fhemcmd);
while(!feof($fhemsock)){
$ergebnis=fgets($fhemsock, 128);
$zustand=preg_split("=( +)=", trim($ergebnis));
//falls das mit dem Füllen der Register nicht korrekt funktioniert, kann der Maximalwert
//auch "faktorisiert" werden :-)
//$zustand[1]=round($zustand[1]*2.5);
break;
}
fclose($fhemsock);

$mysqlhost="<rechner-->&#8222;;<br />
$mysqluser=&#8220;&#8220;;<br />
$mysqlpwd=&#8220;&#8220;;<br />
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die (&#8222;Verbindungsversuch fehlgeschlagen&#8220;);<br />
$mysqldb=&#8220;&#8220;;<br />
mysql_select_db($mysqldb,$connection) or die(&#8222;Konnte die Datenbank nicht waehlen.&#8220;);<br />
$sql = &#8222;INSERT INTO zisterne (timestamp,fuellstand) VALUES (CURRENT_TIMESTAMP,$zustand[1])&#8220;;<br />
$query = mysql_query($sql) or die(&#8222;Anfrage 1 nicht erfolgreich&#8220;);<br />
?&gt;<br />
[/cclN_php]</p>
<h3>Visualisierung</h3>
<p>Die Visualisierung habe ich wieder in meine &#8222;Intranet&#8220;-Seite eingebaut und neben dem aktuellen Füllstand in % wird noch ein Graph der letzten 14 Tage gezeichnet.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/05/zisterne.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-464" src="http://blog.bubux.de/wp-content/uploads/2014/05/zisterne-1024x674.png" alt="zisterne" width="604" height="397" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/05/zisterne-1024x674.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/05/zisterne-300x197.png 300w, https://www.bubuxblog.de/wp-content/uploads/2014/05/zisterne.png 1212w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Da wir die Tage einen Rollrasen verlegt haben wo ich ordentlich gießen musste und es zwei Tage später geregnet hat, sieht man das auch schön im Graphen. Die Einheit der X-Achse muss noch angepaßt werden.</p>
<p>Und mal wieder viel Spaß beim Datenloggen</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/homematik-zisterne/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>Snippet &#8211; FHEM mit PHP über Telnet abfragen</title>
		<link>https://www.bubuxblog.de/snippet-fhem-mit-php-ueber-telnet-abfragen/</link>
					<comments>https://www.bubuxblog.de/snippet-fhem-mit-php-ueber-telnet-abfragen/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sat, 08 Mar 2014 09:01:07 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homematic]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=384</guid>

					<description><![CDATA[Für alle die den Status Ihrer Homemmatic-Geräte anstelle der FHEM-Webseite in einer eigenen Webseite darstellen wollen, gibt es diesmal einen einfachen Schnippsel PHP-Code um den Status eines Homematic-Fensterkontaktes hm-sec-sc per Telnet abzufragen. Hierfür bietet sich das list-Kommando von FHEM an. Die Syntax ist sehr einfach: list [devspec] [value] Wobei [devspec] der Name des Homematic-Gerätes ist, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Für alle die den Status Ihrer Homemmatic-Geräte anstelle der FHEM-Webseite in einer eigenen Webseite darstellen wollen, gibt es diesmal einen einfachen Schnippsel PHP-Code um den Status eines Homematic-Fensterkontaktes <em>hm-sec-sc</em> per Telnet abzufragen.<br />
Hierfür bietet sich das <em>list</em>-Kommando von FHEM an. Die Syntax ist sehr einfach:</p>
<pre>list [devspec] [value]</pre>
<p>Wobei <em>[devspec]</em> der Name des Homematic-Gerätes ist, wie es in der FHEM-Einstellungen konfiguriert ist. Für <em>[value]</em> wird <em>STATE</em> als eines der Attribute des Fensterkontaktes abgefragt. STATE gibt neben dem Gerätenamen den aktuellen Zustand <em>closed</em> oder <em>open</em> aus.</p>
<p>Folgendes Script setzt ein entsprechendes Telnet-Kommando ab und parst das Ergebnis:</p>
<p>[cclN_php]<br />
//Hostname und Telnet-Port des FHEM-Servers<br />
$fhemhost = &#8222;localhost&#8220;;<br />
$fhemport = 7072;</p>
<p>//Socket öffnen<br />
$fhemsock = fsockopen($fhemhost, $fhemport, $errno, $errstr, 30);<br />
//FHEM Kommando definieren (Name des Homematic-Gerätes eintragen)<br />
$fhemcmd = &#8222;list <name_des_hm_geraetes> STATE\r\nquit\r\n&#8220;;<br />
fwrite($fhemsock, $fhemcmd);<br />
while(!feof($fhemsock)) {<br />
    $ergebnis=fgets($fhemsock, 128);<br />
    $zustand=explode(&#8218; &#8218;,$ergebnis);<br />
    switch (trim($zustand[1])) {<br />
        case &#8222;closed&#8220;:<br />
            $zustand=&#8220;geschlossen&#8220;;<br />
            break;<br />
        case &#8222;open&#8220;:<br />
            $zustand=&#8220;offen&#8220;;<br />
            break;<br />
        default:<br />
            $zustand=$ergebnis[1];<br />
            break;<br />
        }<br />
        if ($ergebnis[1]!=&#8220;&#8220;) {<br />
            print &#8222;<name_des_hm_geraetes>:&#8220;.$zustand;<br />
        }<br />
}<br />
[/cclN_php]</p>
<p>In einer Webseite kann das dann z.B. folgendermaßen implementiert werden:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/03/fenstersensoren.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-391" alt="fenstersensoren" src="http://blog.bubux.de/wp-content/uploads/2014/03/fenstersensoren-1024x828.png" width="604" height="488" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/03/fenstersensoren-1024x828.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/03/fenstersensoren-300x242.png 300w, https://www.bubuxblog.de/wp-content/uploads/2014/03/fenstersensoren.png 1040w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a></p>
<p>Ich lasse dann auch jeden Abend um 21 Uhr per Cron-Script prüfen ob alle Fenster geschlossen sind. Wenn nicht, wird eine Mail versendet.</p>
<p>Viel Spaß mit den Schnippsel<br />
Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/snippet-fhem-mit-php-ueber-telnet-abfragen/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry PI &#8211; Heimautomatisierung mit COC, Homematic &#038; FHEM</title>
		<link>https://www.bubuxblog.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/</link>
					<comments>https://www.bubuxblog.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Wed, 29 Jan 2014 20:18:56 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[COC Erweiterung]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Homematic]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=153</guid>

					<description><![CDATA[Damit der Raspberry PI sich nicht nur mit dem Aufzeichnen des Stromverbrauches langweilt, musste noch etwas anderes her. Kennt ihr das: Sobald man von Zuhause weg ist und gerade auf die Autobahn auffahrt, geht es einem durch den Kopf, ob auch alle Fenster zu sind und der Herd ausgeschaltet? Um diese Frage, zumindest für die [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Damit der Raspberry PI sich nicht nur mit dem Aufzeichnen des Stromverbrauches langweilt, musste noch etwas anderes her. Kennt ihr das: Sobald man von Zuhause weg ist und gerade auf die Autobahn auffahrt, geht es einem durch den Kopf, ob auch alle Fenster zu sind und der Herd ausgeschaltet?</p>
<p>Um diese Frage, zumindest für die Fenster, auch auf der Autobahnauffahrt klären zu können, habe ich im Internet nach einer Lösung gesucht und <a title="Homematic" href="http://www.homematic.com/" target="_blank">Homematic</a> und <a title="www.busware.de" href="http://www.busware.de" target="_blank">www.busware.de</a> gefunden. Die nötige Software bietet <a title="FHEM" href="http://fhem.de/fhem_DE.html" target="_blank">FHEM</a>.</p>
<p><span id="more-153"></span></p>
<p>Von Busware gibt es eine <a title="COC" href="http://busware.de/tiki-index.php?page=COC" target="_blank">Erweiterung</a> für den Raspberry PI, die auf die GPIO-Leiste gesteckt wird und dem Raspberry das für Homematic-Geräte benötigte Funken im 868 MHz-Band beibringt. Das Aufstecken der COC-Platine gestaltete sich etwas schwierig, da der Display Connector des Raspberry zu breit ist. Da ich den aber eh nicht benötige, habe ich ihn mit einem Cutter passend gemacht.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/01/raspberryCOC.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-188" src="http://blog.bubux.de/wp-content/uploads/2014/01/raspberryCOC-300x199.jpg" alt="raspberryCOC" width="461" height="305" /></a></p>
<p><strong>1. COC in Betrieb nehmen</strong></p>
<p>Zuerst muss der serielle Port des Rasperry für den COC freigegeben werden. Dazu müssen folgende Dateien angepaßt werden und <strong>alle Verweise auf <i>ttyAMA0</i> entfernt</strong> werden.</p>
<ul>
<li><i>In der Datei <strong>/etc/inittab</strong> folgende Zeile löschen oder auskommentieren (mit #)<br />
</i></li>
</ul>
<pre>T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100</pre>
<ul>
<li><i>In der Datei <strong>/boot/cmdline.txt</strong> auch alle Verweise auf <strong>ttyAMA0</strong> löschen<br />
</i></li>
</ul>
<p>Anschliessend den Raspberry rebooten.</p>
<p>Jetzt muss die Firmware auf den COC. Es gibt zwei Firmware-Versionen da es auch zwei COC-Versionen gibt. Einmal mit 1-Wire und einmal ohne 1-Wire. Ich habe die Version ohne 1-Wire. Am einfachsten geht das mit dem Runterladen der Firmware unter Linux mit <strong><em>wget</em></strong>.</p>
<p>Für die Version ohne 1-Wire sieht das folgendermaßen aus:</p>
<pre>sudo wget "http://culfw.svn.sourceforge.net/viewvc/culfw/trunk/culfw/Devices/COC/COC.radio_only.hex?format=raw" -O COC.radio_only.hex</pre>
<p>Für die Version mit 1-Wire gibt es die Firmware hier:</p>
<pre>sudo wget "http://culfw.svn.sourceforge.net/viewvc/culfw/trunk/culfw/Devices/COC/COC.radio.hex?format=raw" -O COC.radio.hex</pre>
<p>Wichtig ist die Ergänzung <strong><em>format=raw</em></strong> in dem URL. Ohne diesen Zusatz werden HTML-Header mitgeladen, welche die heruntergeladene Firmware unbrauchbar machen.<br />
Eine falsch aufgespielte Firmware äußert sich später mit folgenden Meldungen im FHEM-Log:</p>
<pre>---schnipp---
Opening COC device /dev/ttyAMA0
Setting COC baudrate to 38400
COC device opened
Cannot init /dev/ttyAMA0, ignoring it
---schnapp--</pre>
<p><span style="color: #0000ff;">Wenn es auch mit dem Parameter <strong><em>raw</em> </strong>zu diesem Fehler kommt, versucht die Datei ganz normal im Browser runter zu laden und kopiert sie anschliessend auf den Raspi.</span></p>
<p>Aber weiter mit dem Aufspielen der Firmware&#8230;. Dazu folgendes auf der Kommandozeile absetzen:</p>
<pre>echo "calling COC bootloader..."
if test ! -d /sys/class/gpio/gpio17; then echo 17 &gt; /sys/class/gpio/export; fi
 if test ! -d /sys/class/gpio/gpio18; then echo 18 &gt; /sys/class/gpio/export; fi
echo out &gt; /sys/class/gpio/gpio17/direction
echo out &gt; /sys/class/gpio/gpio18/direction
echo 0 &gt; /sys/class/gpio/gpio18/value
echo 0 &gt; /sys/class/gpio/gpio17/value
sleep 1
echo 1 &gt; /sys/class/gpio/gpio17/value
sleep 1
echo 1 &gt; /sys/class/gpio/gpio18/value</pre>
<p>Jetzt ist der Microcontroller des COC bereit, um mit der eben heruntergeladenen Firmware geflasht zu werden. Dafür wird z.B. <a title="avrdude auf mikorcontroller.net" href="http://www.mikrocontroller.net/articles/AVRDUDE" target="_blank"><em>avrdude</em></a> benötigt. Falls es noch nicht installiert ist geht das unter Debian mit folgendem Befehl:</p>
<pre>sudo apt-get install avrdude</pre>
<p>Der Befehl zum flashen schaut so aus (je nach COC-Version auf den richtigen Dateinamen der Firmware achten):</p>
<pre>avrdude -p atmega1284p -P /dev/ttyAMA0 -b 38400 -c avr109 -U flash:w:COC.radio_only.hex</pre>
<p>Das wars für den COC, der jetzt unter /dev/ttyAMA0 als Device auftauchen sollte.</p>
<p><span style="color: #ff0000;">Für Firmwareupdates muss FHEM gestoppt werden bevor mittels AVRDude geflasht wird. Ansonsten antwortet der COC mit &#8222;not responding&#8220;.</span></p>
<p><strong>2. FHEM</strong></p>
<p>FHEM ist eine in Perl geschriebene Anwendung zur Heimautomation. Das Paket kann mit folgendem Befehl runtergeladen werden. Ggf. auf der <a title="FHEM" href="http://fhem.de/fhem.html#Download">Webseite</a> prüfen ob v5.5 noch die aktuelle Version ist</p>
<pre>sudo wget fhem.de/fhem-5.5.deb</pre>
<p>Dann noch Perl installieren falls noch nicht passiert:</p>
<pre id="crayon-52dc13e5900aa884546568-1">sudo apt-get install perl libwww-perl libdevice-serialport-perl</pre>
<p>Anschliessend das FHEM-Paket installieren:</p>
<pre id="crayon-52dc13e5900ad023417912-1">sudo dpkg -i fhem-5.5.deb</pre>
<p>Damit die COC-Erweiterung bei jedem Start von FHEM initialisiert wird, müssen folgende Anpassungen im FHEM-Startscript vorgenommen werden. In der Datei <em>/etc/init.d/fhem</em> an der Stelle wo</p>
<pre>start)</pre>
<p>zu finden ist, folgendes hinzufügen:</p>
<pre>start)
	echo "resetting 868MHz extension..."
	if test ! -d /sys/class/gpio/gpio17; then echo 17 &gt; /sys/class/gpio/export; fi
	if test ! -d /sys/class/gpio/gpio18; then echo 18 &gt; /sys/class/gpio/export; fi
	echo out &gt; /sys/class/gpio/gpio17/direction
	echo out &gt; /sys/class/gpio/gpio18/direction
	echo 1 &gt; /sys/class/gpio/gpio18/value
	echo 0 &gt; /sys/class/gpio/gpio17/value
	sleep 1
	echo 1 &gt; /sys/class/gpio/gpio17/value
	sleep 1</pre>
<p><span style="color: #0000ff;">Diese Anpassung ist nach jedem Update der FHEM-Software zu tun da die fhem.cfg bei einem Update wieder überschrieben wird.</span></p>
<p>Die eigentliche Konfiguration von FHEM für die Homematic-Geräte oder die Räume etc. findet in der Datei <em>/etc/fhem.cfg</em> statt:</p>
<pre id="crayon-52dc13e5900b1566296470-1">sudo vim /opt/fhem/fhem.cfg</pre>
<p>Dort muss noch der COC und der Frequenzmodus eingetragen werden. Für die Homematic-Geräte ist der Eintrag in der zweiten Zeile notwendig.</p>
<pre>define COC CUL /dev/ttyAMA0@38400 1234
attr COC rfmode HomeMatic</pre>
<p>Danach FHEM neu starten, damit die Änderungen der Konfigdatei angezogen werden. Das geht z.B. so:</p>
<pre>sudo /etc/init.d/fhem start</pre>
<p>Funktioniert alles richtig, sollte auf der FHEM Webseite unter <em>http://&lt;ip_vom_raspi&gt;:8083/fhem </em>unter &#8222;Everything&#8220; folgendes Gerät auftauchen</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc1.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-199" src="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc1.jpg" alt="fhem_coc1" width="252" height="58" /></a></p>
<p>und mit Klick auf COC sollte folgendes zu lesen sein</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc2.jpg"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-200" src="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc2-300x270.jpg" alt="fhem_coc2" width="300" height="270" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/01/fhem_coc2-300x270.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/01/fhem_coc2.jpg 350w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>3. Homematic-Gerät einbinden</strong></p>
<p>Die schönste COC- und FHEM-Installation nutzt nix, wenn nicht auch ein Homematic-Gerät angebunden wird. Ich stelle das bespielhaft an einen Tür-/Fensterkontakt dar (hm-sec-sc).<br />
Der Fensterkontakt ist sehr kompakt und fällt kaum an der Türe auf.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/01/fensterkontakt1.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-178" src="http://blog.bubux.de/wp-content/uploads/2014/01/fensterkontakt1-300x199.jpg" alt="fensterkontakt1" width="435" height="288" /></a></p>
<p>Nach einlegen der beiden Knopfzellen leuchtet die Status-LED jewils einmal in Rot, Orange und Grün. Um das Gerät mit der Zentrale (COC) zu verbinden, muss der COC in den Pairing-Modus versetzt werden. Das funktioniert auf der FHEM-Webseite mit</p>
<pre>set COC hmPairForSec 600</pre>
<p>in der Eingabezeile auf der Startseite oder mit Klick auch &#8222;Everything &#8211; &gt;  COC &#8220; mittels Auswahlbox. &#8222;600&#8220; steht dabei für die Zeit in Sekunden für das Pairing und kann entsprechend angepaßt werden.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc3.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-204" src="http://blog.bubux.de/wp-content/uploads/2014/01/fhem_coc3-300x25.jpg" alt="fhem_coc3" width="300" height="25" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/01/fhem_coc3-300x25.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/01/fhem_coc3.jpg 354w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Ist die Zentrale im Pairing-Modus kann an dem Homematic-Fenstersensor die Anlerntaste gedrückt werden. Die LED sollte relativ schnell kurz grün aufleuchten. Damit ist das Pairing auch schon abgeschlossen.</p>
<p>Auf der FHEM-Webseite und in der FHEM-Konfiguration in <em>/etc/fhem.cfg</em> sollte nun das neue als <em><strong>threeStateSensor</strong></em> auftauchen.</p>
<p>Der Fensterkontakt kann nun mittels des doppelseitigen Klebebandes an der Fenster angebracht werden. Hierbei zeigte sich, dass das beigelegte Klebeband nicht wirklich gut hält, die Klebeflächen vorher gut gereinigt werden (z.B. mit Isopropanol) und fest angepresst werden müssen. Vor allem der Kontaktmagnet hält zumindest bei mir nicht besonders gut.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2013/11/fensterkontakt.jpg"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-299" src="http://blog.bubux.de/wp-content/uploads/2013/11/fensterkontakt-300x200.jpg" alt="fensterkontakt" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2013/11/fensterkontakt-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2013/11/fensterkontakt-1024x682.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2013/11/fensterkontakt.jpg 1500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Wenn jetzt das Fenster geöffnet oder geschlossen wird, sollte sich der Status des Fensterkontaktes aud der FHEM-Webseite entsprechend ändern.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
	</channel>
</rss>
