Hausautomation besteht im wesentlichen aus Aktoren, Sensoren und der Logik, die diese beiden miteinander verknüpft. Die schon beschriebenen Max!-Thermostate sind Sensor und Aktor in einem, sogar die verknüpfende Logik bringen sie mit. Auf meinem Schreibtisch lagen aber nun schon einige Zeit zwei alte Temperatur-Sensoren längst ausgemusterter Wetterstationen. Aus denen sollte sich doch was basteln lassen …
Die Hardware
Auf dem einen Temperaturfühler stand etwas von 433, auf dem anderen 868. Beide waren mit „technoline“ gelabelt und entstammen dem Hersteller LaCrosse. Eine kurze Rücksprache mit Google brachte die Erkenntnis: Es wird ein JeeLink-Stick benötigt und ich kann nur einen der beiden Sensoren nutzen. Schade, aber egal. Die JeeLink-Sticks gibt es für 433 MHz, für 868 MHz und zum Auflöten eigener Module direkt in einem von den JeeLabs zur Verfügung gestellten Shop. Da die 868 MHz – Variante eher der Standard zu sein scheint bestellte ich diese. Nun hieß es warten ;-).
Inbetriebnahme
Der Stick war schnell ausgepackt und angeschlossen. Das Kommando „dmesg“ verrät …
usb 2-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
… das er dem Device ttyUSB0 zugeordnet wurde. Dieses muss in der FHEM-Konfiguration angegeben werden, sofern FHEM den Stick nicht selbst findet. Der Eintrag sieht dann wie folgt aus:
define myJeeLink JeeLink /dev/ttyUSB0@57600
Nun gibt es nicht nur verscchiedene Frequenzen, auf denen die einzelnene Geräte senden, sondern auch verschiedene Protokolle. Ein JeeLink kann nur für ein Protokoll einer Frequenz zuständig sein. Für die Frequenz entscheidet man sich beim Kauf, für das Protokoll jetzt: Es gibt verschiedene Sketches, mit denen der Stick geflasht werden kann. Wer sein FHEM mit dem „update“-Befehl immer auf dem Laufenden hält, der bekommt auch immer die aktuellsten Sketches mitgeliefert. Das folgende Kommando, welches bequem im Web-Interface abgesetzt werden kann, installiert den aktuellsten, im contrib-Verzeichnis verfügbaren LaCrosse-Sketch auf dem Stick:
set myJeeLink flash LaCrosse
Nach wenigen Sekunden bestätigt die Ausgabe eines Logfiles den Erfolg der Übung.
Geräte anlernen
Das Anlernen der Temperaturfühler ist eine recht einseitige Sache. Typischerweise sucht das LaCrosse-Gerät nach dem Einlegen der Batterie nach einem Pairing-Partner. Daher versetzt man zunächst den JeeLink für zum Beispiel 60 Sekunden in den Pairing-Modus …
set myJeeLink LaCrossePairForSec 60
… und entfernt danach kurz die Batterie vom anzulernenden Gerät. Ist diese wieder eingelegt, so sollte binnen weniger Sekunden ein mit einer zweistelligen hexadezimalen Zahl benanntes, neues Gerät in FHEM auftauchen. Der JeeLink muss für jedes Gerät erneut in den Pairing-Modus versetzt werden.
Wie schon im Artikel über die Max!-Thermostate geschrieben, muss auch hier das Logging etwas eingeschränkt werden. Per Gerät ist mittels „event-on-change-reading“ und „event-min-interval“ dafür zu sorgen, dass zwar permanent, aber nur das notwendige geloggt wird.
Geloggtes plotten
Genügten bei den Thermostaten die IST- und Soll-Werte, so möchte man gerade bei der Außentemperatur doch einen Trend beobachten. Dazu bietet es sich geradezu an, die geloggten Daten in einem Plot darzustellen. Ein Plot wird zunächst genau so definiert wie ein Gerät. Er bekommt ebenso einen Namen. Mein Plot heißt vereinfacht „my_plot“:
define my_plot SVG logdb:my_jeelink_svg:CURRENT
attr my_plot label „Temperatur ($data{currval1}, max: $data{max1}, min: $data{min1})“
Fangen wir diesmal unten an. Das „label“ benötigen wir später. Es wird den Titel unseres Plots setzen. In der Zeichenkette wird „$data{currval1}“ durch den aktuellen Wert des ersten zu plottenden Wertes ersetzt, „$data{min1}“ und „$data{max1}“ durch dessen entsprechendes Minimum bzw. Maximum. In der oberen Zeile stellt „logdb“ sicher, dass die Werte aus der Datenbank und nicht aus einem Logfile kommen. Das „CURRENT“ am Ende sollte eigentlich den Titel definieren, ist mir aber nicht flexibel genug. Der Wert „my_jeelink_svg“ benennt nun letztendlich die Datei, die den eigentlichen Plot – erstellt von gnuplot – beschreibt. Diese ist im Pfad „www/gplot/“ anzulegen, im Beispiel also als „www/gplot/my_jeelink_svg.gplot“. Idealerweise setzt man gleich noch den Benutzer „fhem“ als Eigentümer, somit können filigranere Anpassungen über der Web-Interface vorgenommen werden. Meine Datei sieht wie folgt aus:
set terminal png transparent size <SIZE> crop
set output ‚<OUT>.png‘
set xdata time
set timefmt „%Y-%m-%d_%H:%M:%S“
set xlabel “ “
set title ‚<L1>‘
set ytics
set y2tics
set grid
set ylabel „Ventilstellung“
set y2label „“
set yrange [0:1000]#logdb jeelink_aussen:temperature
#logdb jeelink_innen:temperature
#logdb jeelink_innen:humidity
plot \
„<IN>“ using 1:2 axes x1y1 title ‚außen (Temp)‘ ls l0 lw 1 with lines,\
„<IN>“ using 1:2 axes x1y1 title ‚innen (Temp)‘ ls l1 lw 1 with lines,\
„<IN>“ using 1:2 axes x1y2 title ‚innen (Luft)‘ ls l2 lw 1 with lines
Die Werte in <>-Klammern werden über die Plot-Definition mitgegeben. Dabei ist „<L1>“ das erste Label und „<TL>“ hätte den Wert „CURRENT“. Ganz wichtig sind die Kommentarzeilen mit dem „#logdb“: Hier wird definiert, welche Werte als Stream anstelle des „<IN>“ in der jeweiligen Plot-Zeile übergeben werden. In den Plot-Zeilen deutet das „\“ an, dass hier eigentlich kein Zeilenumbruch hingehört.
Wird später der Titel des Plots richtig gesetzt, aber der Plot selbst bleibt leer, so liegt der Fehler vermutlich in der „#logdb“-Definition. Diese kann auf der MySQL-Konsole einfach getestet werden:
USE fhem
select * from history WHERE DEVICE = „jeelink_innen“ AND READING = „temperature“;
Um filigranere Schönheitsmaßnahmen wie zum Beispiel die Anpassung des Aussehens der Graphen durchzuführen, empfiehlt sich im Web-Interface ein Click auf den Link „my_jeelink_svg“ direkt unterhalb des Plots. Es öffnet sich der FHEM-eigene GPLOT-Editor, der sehr einfach zu bedienen ist.
Fine-Tuning
Ich behalte – wie schon oft beschrieben – in meinen Konfigurationsdateien gern die Übersicht. Deswegen pflege ich für mein JeeLink-System alle Werte in einer fhem.jeelink.cfg-Datei und binde diese per „include ./fhem.jeelink.cfg“ in die eigentliche fhem.cfg-Datei ein.
Außerdem habe ich tatsächlich bei allen Geräten die ich sehen möchte die Definition
attr wohnzimmer room Temperatur
hinzugefügt. Somit legt FHEM einen „Raum“ – also ein eigenes Submenu – für all diese Geräte an.
Weiterführende Links
http://fhem.de/commandref_DE.html: Die FHEM-Befehlsreferenz. Parameter und deren Beschreibung findet man hier auf Englisch.
http://www.fhemwiki.de/wiki/JeeLink: Das sehr gut gepflegte und oft helfende Wiki des FHEM-Projektes.
http://www.meintechblog.de/tag/jeelink/: Diese Beiträge haben mich auf die Idee gebracht, mir einen JeeLink zuzulegen.
http://forum.fhem.de/: Hier findet man eine sehr aktive Community, die Fragen binnen Stunden beantwortet. Aber Achtung: Wie bei jeder Community befreit auch diese nicht vom Selbstdenken! Also: Erst recherchieren, dann fragen.
5 Responses
Hallo!
Habe heute meinen Stick bekommen und angeschlossen. Es wird auch der Eintrag unter dev/ ttyUSB0 angezeigt. Nach Eingabe des Befehl set myJeeLink flash Lacrosse bekomme ich nach einiger Zeit folgendes angezeigt
flashing JeeLink JeeLink
detected Firmware: LaCrosse.hex
hex file: ./FHEM/firmware/JeeLink_LaCrosse.hex
port: /dev/ttyUSB0
log file: ./log/JeeLinkFlash.log
JeeLink closed
command: avrdude -p atmega328P -c arduino -P /dev/ttyUSB0 -D -U flash:w:./FHEM/firmware/JeeLink_LaCrosse.hex 2>./log/JeeLinkFlash.log
— AVRDUDE ———————————————————————————
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
avrdude done. Thank you.
— AVRDUDE ———————————————————————————
JeeLink opened
Was mach ich falsch?
Bin Anfänger und habe noch nicht soviel Ahnung.
Fhem hab ich am laufen mit Floorplan und auch 10 Fühlern DS18B20.
Würde mich freuen wen ich hier Hilfe bekommen könnte.
(wollte schon den Stick zurücksenden, dachte er wäre defekt)
Hallo Helmut,
das kann sehr viele Ursache haben … Vielleicht ist mit dem Stick wirklich etwas nicht in Ordnung, vielleicht liegt es aber auch bloß am USB-Port (Du könntest mal einen anderen probieren) oder an einem fehlenden Parameter. Aber poste Deine Frage doch einmal im FHEM-Forum (https://forum.fhem.de/). Die Mitglieder sind dort sehr aktiv. Es wäre toll, wenn Du um anderen zu helfen den Link zu Deinem Forenpost noch einmal hier posten könntest.
Viele Grüße & Viel Erfolg,
Andreas
Hallo, bei mir lag es an der fehlenden Baudrate (57600) in der Kommandozeile von FHEM:
Diese Kommandozeile funktioniert bei mir:
avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE] -b 57600
Hallo,
wie kann ich in FHEM den Gemessenen Wert für Feuchtigkeit korrigieren ?
Vielleicht an einem Beispiel ?
gruß
Rolf Weiß
Moin Rolf,
das ist eine Frage fürs FHEM-Forum. Wendest Du Dich bitte dahin?
Viele Grüße,
Andreas