FHEM: Temperatur fühlen mit JeeLink

2015-04-08_jeelink

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 Gedanken zu „FHEM: Temperatur fühlen mit JeeLink

  • 8. September 2016 um 11:09
    Permalink

    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)

    Antworten
    • 8. September 2016 um 15:43
      Permalink

      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

      Antworten
    • 19. Februar 2017 um 11:52
      Permalink

      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

      Antworten
  • 27. Februar 2017 um 09:09
    Permalink

    Hallo,
    wie kann ich in FHEM den Gemessenen Wert für Feuchtigkeit korrigieren ?
    Vielleicht an einem Beispiel ?

    gruß
    Rolf Weiß

    Antworten
    • 5. März 2017 um 10:14
      Permalink

      Moin Rolf,

      das ist eine Frage fürs FHEM-Forum. Wendest Du Dich bitte dahin?

      Viele Grüße,

      Andreas

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.