Zusammenfassung (der langen Version weiter unten):
Den JeeLink mit der richtigen Firmware in den RaspberryPi stecken.
In der FHEM-Kommandozeile FHEM vorbereiten und den JeeLink anlernen (Jeweils die einzelnen Zeilen mit [ENTER] bestätigen):
attr global autoload_undefined_devices 1
define autocreate autocreate
attr autocreate autosave 1
attr autocreate filelog ./log/%NAME-%Y.log
define JLLaCrosse JeeLink /dev/ttyUSB0@57600
attr JLLaCrosse flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
attr JLLaCrosse initCommands 7m 30t v
attr JLLaCrosse icon cul
attr JLLaCrosse verbose 2
das ganze mit klick auf „Save config“ abschliessen. FHEM mit „shutdown restart“ neu starten und dann noch
set JLLaCrosse LaCrossePairForSec 120 ignore_battery
abgeben um alle verfügbaren Sensoren zu finden. Links im Menü taucht dann ein neuer Menüpunkt LaCrosse auf. Dort den Namen der Sensoren herausfinden und mit:
attr LaCrosseSensorName event-min-interval state:600,battery:3600,temperature:300,humidity:300
attr LaCrosseSensorName event-on-change-reading state
attr LaCrosseSensorName event-on-update-reading .*
das zumüllen des Log verhindern.
Lange Version:
Zuerst muss ein JeeLink oder ein selbstgebauter JeeLink Clone wie hier beschrieben mit der entsprechenden Firmware geflasht werden.
JeeLink in den RaspberryPi stecken
Mit Kitty auf den RaspberryPi gehen und mit dem Befehl
ls -l /dev/serial/by-id
herausfinden ob der JeeLink erkannt wurde, welchem USB-Port er zugeordnet wurde und wie er heisst. Die Ausgabe sieht so aus:
lrwxrwxrwx 1 root root 13 Mai 23 13:26 usb-FTDI_FT232R_USB_UART_A8H4EBA3-if00-port0 -> ../../ttyUSB0
Falls der JeeLink nicht erkannt wurde, kann es sein, dass man mit dem Befehl
sudo mknod /dev/ttyUSB0 c 188 0
erst den USB-Port am RaspberryPi im Linux noch aktivieren muss.
Dann per Weboberfläche/Browser in FHEM einloggen und evtl. FHEM erst einmal updaten. Dies macht man, indem man oben in die FHEM-Kommandozeile oben direkt neben dem FHEM Logo
update
eintippt und mit der [ ENTER ] – Taste bestätigt. FHEM startet daraufhin seine Updateprozedur. Nach einer Gedenkpause (kann schon mal etwas länger dauern) nach der Zeile
Global global Calling /usr/bin/perl ./contrib/commandref_join.pl, this may take a while
ist das Update fertig und meldet:
Global global update finished, „shutdown restart“ is needed to activate the changes.
und man muss FHEM mit dem Befehl
shutdown restart
gefolgt von der [ ENTER ] – Taste in der FHEM-Kommandozeile neu starten.
Dann sollte für automatische Einträge in FHEM Autocreate eingeschaltet werden. Autocreate wird per Befehl in der FHEM-Kommandozeile aktiviert:
attr global autoload_undefined_devices 1
define autocreate autocreate
attr autocreate autosave 1
attr autocreate filelog ./log/%NAME-%Y.log
jeweils mit [ ENTER ] bestätigen. und mit klick auf „Save config“ links im Menü wird die Konfigurationsänderung dauerhaft gespeichert. Der JeeLink wird nun mit
define JLLaCrosse JeeLink /dev/ttyUSB0@57600
in der FHEM-Kommandozeile angelegt. Die Zahl in ttyUSB0 ist abhängig davon, was vorher bei der Abfrage mit ls -l /dev/serial/by-id (s.o.) angezeigt wurde. Je Nachdem kann es auch sein, das man den JeeLink mit ttyUSB1@57600 oder ttyUSB2@… definieren muss. „JLLaCrosse“ ist der eindeutige Name für Euren JeeLink in FHEM und kann frei gewählt werden.
Wie man den JeeLink eleganter und ausfallsicherer in FHEM einbindet wird hier beschrieben.
Jetzt den JeeLink im FHEM noch mit ein paar wichtigen Attributen für die Zukunft versorgen:
attr JLLaCrosse flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
attr JLLaCrosse initCommands 7m 30t v
attr JLLaCrosse icon cul
attr JLLaCrosse verbose 2
Das erste ist für zukünftige Firmware Flash Vorgänge direkt aus FHEM heraus (Vorher muss man noch mit sudo apt-get install avrdude die benötigten librarys in Linux installieren).
Das zweite Attribut stellt den JeeLink ein. Hier kann man mit Steuerungskommandos zwischen dem initCommands und dem v verschiedene Sachen einstellen:
(7m)
Kommando m: bestimmt, welche data rates der toggle mode verwendet.
m ist bit codiert so kann durch Addition der Wert eingestellt werden:
1: 17.241 kbps, 2: 9.579 kbps, 4: 8.842 kbps
Beispiele:
3m -> wechselt zwischen 17.241 kbps und 9.579 kbps
5m -> wechselt zwischen 17.241 kbps und 8.842 kbps
7m -> wechselt zwischen allen drei data rates
(30t)
Kommando t: bestimmt die Zeit zwischen denen die BaudRate von Kommando m gewechselt wird.
Beispiele:
15t -> wechselt alle 15 Sekunden die data rate
30t -> wechselt alle 30 Sekunden die data rate
120t -> wechselt alle 2 Minuten die data rate
(0a)
Kommando a: bestimmt ob die LEDs auf dem JeeLink an oder ausgeschaltet sein sollen. Mit 0 werden Sie ausgeschaltet.
Das dritte Attribut stellt ein Logo vor den JeeLink in FHEM
Das vierte Attribut legt das Log Level fest. Wenn man später Probleme beim Anlernen neuer Sensoren hat, kann zur Fehlersuche das Log Level auf 5 herauf gesetzt werden. Dann wird die komplette Ausgabe angezeigt.
Weitere Attribute kann man dem FHEM Forum entnehmen.
Jetzt die Konfiguration mit klick auf „Save config“ speichern und FHEM mit dem Befehl „shutdown restart“ in der FHEM Kommandozeile neu starten.
Jetzt können die Temperatursensoren durch einlegen der Batterien aktiviert werden. Die Sensoren sollten nach kurzer Zeit links im Menü unter dem neuen Menüpunkt LaCrosse auftauchen. Der Menüpunkt wird von FHEM automatisch angelegt, wenn der JeeLink Sensoren erkannt hat.
Falls sich nichts tut, kann der Anlernvorgang auch mit
set JLLaCrosse LaCrossePairForSec 120
manuell gestartet werden.
Wenn man die schon Sensoren betreibt und sie nicht automatisch gefunden werden und man die Batterien gerade nicht herausnehmen kann oder will, wird mit dem Befehl
set JLLaCrosse LaCrossePairForSec 120 ignore_battery
der BatterieNew Flag ignoriert und alle gefundenen Sensoren angelegt.
Da die LaCrosse Sensoren alle 4 Sekunden ihre Werte senden wird das Logfile sehr schnell sehr groß. Um dies zu verhindern sollte man das Loggen der Temperaturen ändern:
attr LaCrosseSensorName event-min-interval state:600,battery:3600,temperature:300,humidity:300
attr LaCrosseSensorName event-on-change-reading state
attr LaCrosseSensorName event-on-update-reading .*
Falls man später die Batterien wechseln muss und möchte, dass die Anzeige in FHEM und das LogFile weiter funktionieren wird vor dem Batterietausch der Befehl
set LaCrosseSensorName ReplaceBatterieForSec 60
abgesetzt. Dadurch wird die neue ID des Sensors automatisch in FHEM eingetragen und mit dem Sensor verknüpft. Der Hintergrund ist, dass die LaCrosse Sensoren nach jedem Batteriewechsel eine neue Zufalls-ID generieren unter der sie dann senden. um die richtige Zuordnung wieder herzustellen muss also FHEM wissen unter welcher ID der Sensor die Daten schickt. Mit dem Befehl sucht FHEM nach 60 Sekunden nach einer bisher unbekannten ID und ordnet diese dem Sensor zu, für den man den Befehl abgegeben hat.
Falls sich Fremd Sensoren vom Nachbar einschleichen und man diese nicht angezeigt bekommen möchte, können die Fremd-Sensoren mit dem Befehl
attr FremdSensorName ignore 1
ausgeblendet werden.
Um den Sensoren einen leichter zu merkenden Namen zu geben, können die erkannten Sensoren umbenannt werden. Dazu mit dem Befehl
rename LaCrosse_AlterSensorName NeuerSensorName
den Sensor umbenennen.
Und wie immer: Im Zweifel das ganze mit klick auf „Save config“ speichern.
.
Ende der Seite, ab hier nicht mehr in meiner Verantwortung 🙁
15 Responses
[…] LaCrosse (Proficell/TFA-Dostmann/TechnoLine) Temperatursensoren an FHEM anlernen 24. Mai 2015 […]
Habe einen kleinen Fehler gefunden. Bei Definieren des JeeLink fehlt ein E. Das führt dazu, dass er erst nochmal umgenannt werden muss, bevor die Attribute angelegt werden können bzw. die Attribut Definierung angepasst werden muss 😉
Uhh stimmt, danke – hab es geändert.
Weiterhin sollte noch erwähnt werden, dass wenn die Sensoren nicht gefunden werden der Befehle
set JLLaCrosse LaCrossePairForSec 30
helfen kann sie doch zu finden. So war es bei mir, ohne den Befehl wollte er sie nicht finden, wobei ich autocreate etc. nach Anleitung eingestellt habe.
Das sollte eigentlich mit dem im Text angegebenen Befehl:
set JLLaCrosse LaCrossePairForSec 120 ignore_battery
funktionieren. Dabei sucht FHEM auch nach Sensoren, die schon länger laufen und nicht das „Hallo ich bin neu hier“ (new Battery Flag) mitsenden.
Aber der Tipp kann evtl. helfen, wenn es mit dem beschriebenen Befehl nicht funktioniert hat. Ich hab den Text entsprechend ergänzt.
Sonst eine sehr gute Anleitung. Auch der Teil des selbst bauen hat super funktioniert. Vielen Dank dafür 🙂
Vielen Dank!
Du hast eine sehr gute Anleitung verfasst. Das Teil lief auf Anhieb, echt spitze!
Vielen Dank für die ausführliche Anleitung, hat auf Anhieb geklappt !!!
Top und weiter so !!! CUL wäre auch noch super. Trotzdem vielen Dank.
CUL steht schon auf der ToDo-Liste 😉
Wie sieht es hierzu aus? 🙂
Erst mal: sehr gute Anleitung!
Mein FHEM habe ich neu aufgesetzt (5.8) u. den JeeLink mit 10.1q geflascht, jetzt werden mein TX29-IT und ein weiterer Temperatursensor (von meiner Wetterstation) nicht mehr erkannt.
Schließe ich den JeeLink an meinem PC an und öffne in der Arduino Entwicklungsumgebung einen seriellen Monitor erhalte ich folgendes:
OK 9 17 129 4 246 106
OK 9 8 1 4 173 106
Da werden doch die Daten von zwei Sensoren eingelesen!?!
Hast Du eine Idee was ich machen / einstellen muss, damit FHEM die Sensoren wieder erkennt?
Gruß
Carpy
Hast den „ignore battery flag“
Mal ausprobiert?
Also:
set JLLaCrosse LaCrossePairForSec 120 ignore_battery
Jepp, mit Wert bis zu 600!
Hallo, wieviel Sensoren kann man mit dem JLLaCrosse denn loggen?
Ich habe nun 11 Stück dran aber mehr wird nicht erkannt 🙁 14Stück wollte ich loggen…
Hallo Andreas,
eine harte Beschränkung in der Anzahl empfangbarer Sensoren gibt es meines Wissens nach nicht.
Hast Du evtl. eine gleiche ID bei den drei nicht auffindbaren Sensoren?
Mache Sensoren haben ja eine fest eincodierte ID, da kann man leider nichts machen.
Ansonsten versuche einmal eine neue ID bei den nicht empfangbaren Sensoren zu generieren (Batterie raus, 10s warten, Batterien wieder rein).
Welcher Typ Sensor wird denn nicht empfangen?