Einige von Euch haben mich gefragt, welche günstige Tür-Fenster-Kontaktsensoren es für Fhem gibt. Ich nutze schon seit ungefähr zwei Jahren ein FS-20 TFK (-> Amazon: Funk-Tür-/Fensterkontakt FS20 TFK
) sowie selbstgebaute von MySensors. Andere nutzen für ihr Homematic-System folgende TFK (siehe amazon.de: EQ3 HomeMatic Funk-Fensterkontakt HM-SEC-SC-2
).
Blog-Leser Jens, welcher sich mit MySensors und Mikrocontroller super auskennt, hat nun eine meiner Meinung nach – Hammer – Software für Tür-Fenster Kontaktsenoren entwickelt, welcher sich am BinarySwitchSensor anlehnt.
Natürlich ist hier selber zusammenbauen angesagt, Erfahrungen mit Flashen von Mikrocontroller und Löten von Bauteilen werden benötigt.
Die Fakten vom neu angepassten Tür-Fensterkontakt unter MySensors sehen so aus:
-
*TFK 2.0x (ProMini 3V3@8Mhz ohne PowerLED und ohne LE33)
0,001 mA mit NRF sleep Kontakt offen
0,008 mA mit NRF Kontakt geschlossen
5 mA senden (-2mA wenn LED Vorwiderstand entfernt wurde)
17 mA Reset - Messung und Übertragung der Batteriespannung, ihr seht in Fhem die aktuelle Batteriespannung des Sensors und könnt reagieren
- Heartbeat-Funktion – einmal am Tag „meldet“ sich der TFK bei Fhem um zu signalisieren, ob alles ok ist. Hier kann man in Fhem ein Notify programmieren, welches bei fehlendem Heartbeat eine Meldung abgibt (z. B. per Telegram zum Smartphone).
- 1 oder 2 Ausgänge mit Reedkontakte (Kontakte am Fenster kleben)
Allein schon die Messung der Batteriespannung und dessen Übertragung zu Fhem halte ich schon für ziemlich sexy.
Dieser Arduino ProMini muss mit einem speziellen Boot-Loader geflashed werden, um eine lange Laufzeit zu erreichen.
Jens hat uns mehrere Firmwares zur Verfügung gestellt:
1/HB/ : 1 TFK-Kontakt mit Heartbeat ohne Bootloader (hex-file) TFK-V21-H.ino.eightanaloginputs.hex
1/HB/ : 1 TFK-Kontakt mit Heartbeat mit Bootloader (hex-file) TFK-V21-H.ino.with_bootloader.eightanaloginputs.hex
Ich kann die Version MIT Bootloader empfehlen, weil dort noch einige Tweaks für den ProMini gemacht wurden.
Folgende Bauteile werden pro TFK-Sensor benötigt:
- Arduino ProMini 3,3 V 8MHz, z.b. bei amazon: Arduino kompatibles ATmega Pro Mini / 3.3V, 8MHz / ATmega328 – Simpleduino
- nRFL01+ (amazon.de: Kuman 10pcs nRF24L01+ 2.4GHz Antenna Wireless Transceiver RF Transceiver Module Arduino Compatible K19)
- Batterie 3V z B. Lithium-Batterie PANASONIC CR123A (amazon: Panasonic PACR123A_10 Photo Lithium Batterie (3 Volt, 10-er Pack)
) - Reed-Kontakt (oder jeder andere Kontakt / Schalter)
- Magnete zum Auslösen des Reed-Kontaktes
- 1 Mohm Widerstand (Wichtig!)
- USBASP zum Flashen des Bootloaders, z.b. bei amazon.de (Programmierer-Adapter 3.3V oder 5V USBASP Download-Programm ISP-AVR)
Für die Funktion der gesamten MySensors Umgebung benötigt:
MySensors-Gateway.
Im einfachsten Fall ein USB-Gateway, welches direkt am Raspi angeschlossen wird.
oder ein WLAN-Gateway (Blog-Beitrag).
Flashen des Pro-Minis:
Die Quellen dieser Software stehen uns Blog-Leser Jens leider nicht zur Verfügung, deshalb können wir hier nicht über die Arduino-Oberfläche flashen. Stattdessen benötigen wir ein USBASP-Modul (s. oben), welches idealerweise an einem Raspi angeschlossen ist. Als Software benötigt man nur den AVRDUDE den man mit apt-get install avrdude installieren kann. Nachdem man das USBASP-Modul an dem Pro-Mini angeschlossen hat, öffnet man die Konsole und kopiert eine von den möglichen Firmwares in ein Verzeichnis.
Nur führt man innerhalb der Konsole folgenden Befehl aus:
Hierbei muss vorher festgestellt werden, wo an welchem USB-Port das USBASP-Modul angeschlossen ist (ttyAMA0) und die richtige hex-Datei einliest (tfkmitboot.hex).
avrdude -c usbasp -b 9600 -p /dev/ttyAMA0 -v -v -pm328p -u -U flash:w:tfkmitboot.hex
Als Ergebnis kommt aus avrdude folgendes heraus:
root@raspberrypi:~/mysensors# avrdude -c usbasp -b 9600 -p /dev/ttyAMA0 -v -v -pm328p -u -U flash:w:tfkmitboot.hex
avrdude: Version 6.1, compiled on Jul 7 2015 at 13:18:47
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is „/etc/avrdude.conf“
User configuration file is „/root/.avrduderc“
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : usbasp
Overriding Baud Rate : 9600
avrdude: seen device from vendor ->www.fischl.deUSBasp<-
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
———– —- —– —– —- —— —— —- —— —– —– ———
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: „flash“ memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: reading input file „tfkmitboot.hex“
avrdude: input file tfkmitboot.hex auto detected as Intel Hex
avrdude: writing flash (32652 bytes):
Writing | ################################################## | 100% 4.57s
avrdude: 32652 bytes of flash written
avrdude: verifying flash memory against tfkmitboot.hex:
avrdude: load data flash data from input file tfkmitboot.hex:
avrdude: input file tfkmitboot.hex auto detected as Intel Hex
avrdude: input file tfkmitboot.hex contains 32652 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 3.45s
avrdude: verifying …
avrdude: 32652 bytes of flash verified
avrdude done. Thank you.
Wenn alles richtig gemacht wurde, wurde nun der Boot-Loader vom Pro-Mini angepasst und sofort auch die Firmware für den TFK-Sensor geflashed.
Stromsparen extrem:
Um noch richtig Strom zu sparen, entfernen wir die Vorwiderstände für die LEDs und den 3,3 V Spannungsregler, siehe Foto:
Nun verkabeln wir den ProMini mit dem nRF, wie in der MySensors Informations-Seite angegeben.
Wichtig ist der 1 MΩ Widerstand und den Reed-Kontakt, welchen wir als letztes anschließen. Wie auf dem Foto zu sehen, wird das eine Ende vom 1 MΩ Widerstand am Arduino VCC-Pin angeschlossen, das andere Ende am D3-Pin. Darunter als Schalter abgebildet dann der Reed-Kontakt (oben D3), der schließlich mit GND verbunden wird.
Der Sensor ist nur fertig und kann mit der Batterie verbunden werden.
Pairen mit Fhem
Das Vereinen mit dem Gateway geschieht wieder in der üblichen Weise. Inclusion-Mode einschalten, dann kurz beim Pro-Mini auf den Reset-Microtaster klicken und schon wird der Sensor in Fhem angelegt.
Nun können wir via Fhem auf die Readings reagieren. Interessant ist das Feld tripped1, welches den on – off Zustand des Reed-Kontaktes beschreibt. So könnte ihr beispielsweise einen Alarm auslösen oder auch auf eine LED im LED-Bilderrahmen (siehe Blogbeitrag) in unterschiedlichen Farben anzeigen lassen.
Ebenfalls wird in den Readings die Batteriespannung angezeigt (voltage). Hier könnt ihr reagieren, wenn die Batterie mal zuende gehen sollte.
Versionshistorie von Jens:
Changelog Version G -> H
* 2.1H (Fehlerbereinigung + Optimierung)
* – Problem Heartbeat wird statt 24H alle 26:14 ausgeloest, also eine Differenz von 2:14 = 134 Minuten = 8040000 ms
* – neue Variable „SLEEP_TIME = SLEEP_IN_MS – SLEEP_KORREKTUR“
*- Negation der Wertuebermittlung beim Switch, somit ist keine Aenderung in fhem mehr noetig
*- weitere Codeoptimierung
Fazit: Der TFK Sensor mit dem angepassten Code von Jens ist eine interessante Alternative zu den Fertigprodukten wie Homematic und FS20.
Ihr könnte die Bauteile bei Eurem Elektronik-Lieferanten kaufen, einige Bauteile davon habe ich auch hier. Ferner könnte ich Euch den ProMini flashen.
Aktion: Das Flashen von Bootloader ist nicht jedermanns Sache. Zum einen kann der ProMini in die ewigen Silizium-Jagdgründe wandern, zum anderen ist es auch eine Frickelei, bis das Flashen erst mal läuft.Wer also das Flashen vom Arduino Pro Mini 3.3V nicht hinbekommt, kann sich bei mir melden. Für 9,99 Euro inkl. Versand flashe ich Euch den Pro mini (entweder mit oder ohne Fuses). Wer die Pinheaders auch dran haben möchte, auch kurz melden.
Das könnte Euch auch interessieren:
- MySensors-Sensoren an Fhem – Blogbeitrag
- Stromausfall am Raspi per Fhem mitteilen (Blogbeitrag)
- Airwick Freshmatic Compact auseinandergebaut und als Geruchssensor verwendet
- LED-Stripe 2812b als LED-Inforahmen mit MySensors
[sgmb id=“1″]
Hallo Michael,
danke für Dein Statement, und ich gebe Dir 100% Recht. Vor allem, weil der Sensor immer noch bei mir störungsfrei nach gefühlt 2 Jahren läuft.
Ich haue Jens noch mal lieb an ….
LG
/robin
Das mit dem zurückgehaltenen Source-Code ist halt schade.
Erstens kann man da nicht sehen, was das Gerät wirklich alles macht.
Zweitens kann man da nichts anpassen oder korrigieren.
Drittens ist man dann halt nicht von Homematic abhängig, sondern vom Jens, und wenn es einen Fehler gibt und der Jens nicht da ist, oder nicht mehr will (krank, liest Blog nicht mehr, hat Interesse verloren, macht jetzt was anderes, beruflich eingeteilt, …), dann schaut man doof aus der Wäsche. Da bin ich lieber in Abhängigkeit einer Firma, als einem namenslosen John Doe – auch wenn’s ein bisserl mehr kostet. Beim Preis vom Funksensor ist halt auch ein formschönes Gehäuse, eine andere Frequenz (wo es keine Von-der-Stange Tools gibt mit denen man eine AP Disassociation forcieren kann), und die Arbeitszeit bezahlt.
Gerade auf einem Blog wo man Sachen aufschraubt, auseinandernimmt, im FHEM herumhackt, … sollte man nicht den genau gegenteiligen Weg gehen und den Source-Code verstecken. Wer nicht wissen will, was hinter den Szenen passiert, der wäre nicht auf diesem Blog.
Und bevor man jetzt sagt: „kannst ja selbst machen und posten“. Klar. Kann ich. Habe auch die Kompetenz dazu. Aber warum soll man das Rad neu erfinden? Der Jens hat’s schon, will’s aber nicht herzeigen. Warum? Naja, sonst wäre man ja nicht mehr vom Jens abhängig, und könnte ja selber … Und schon sind wir wieder beim Punkt 3 oben.
Nachtrag, das war noch ein alter Sketch 🙂
Hier mit der Software, welche ich hier freigegeben hatte.
define Keller_FK_links MYSENSORS_DEVICE 114
attr Keller_FK_links IODev MYS_GW
attr Keller_FK_links alias Keller Fenster links
attr Keller_FK_links comment 1x1/2AA CR123A 3,2V (2016-04-02) 0,02mA Standby, 5mA Senden
attr Keller_FK_links devStateIcon open:fts_window_2w_open_lr@red closed:fts_window_2w@green
attr Keller_FK_links group Fenster
attr Keller_FK_links icon fts_window_2w
attr Keller_FK_links mapReading_armed1 1 armed
attr Keller_FK_links mapReading_current 0 current
attr Keller_FK_links mapReading_impedance 0 impedance
attr Keller_FK_links mapReading_tripped1 1 tripped 0:closed 1:open
attr Keller_FK_links mapReading_voltage 0 voltage
attr Keller_FK_links mode node
attr Keller_FK_links room Fenster,1_Keller,MySensors
attr Keller_FK_links stateFormat tripped1
attr Keller_FK_links version 1.5.4
define FileLog_Keller_FK_links FileLog ./log/Keller_FK_links-%Y.log Keller_FK_links
attr FileLog_Keller_FK_links logtype text
attr FileLog_Keller_FK_links room 1_Keller,MySensors
Hallo Landwehrkamp,
hier ein Auzug von den TFK
define WZ_FK MYSENSORS_DEVICE 111
attr WZ_FK IODev MYS_GW
attr WZ_FK alias Wohnzimmer Fenster
attr WZ_FK devStateIcon open:fts_window_2w_open_lr@red closed:fts_window_2w@green
attr WZ_FK group Fenster
attr WZ_FK icon fts_window_2w
attr WZ_FK mapReading_tripped1 1 tripped 0:closed 1:open
attr WZ_FK mode node
attr WZ_FK room 3.0_Obergeschoss,3.1_Wohnzimmer,Fenster,MySensors
attr WZ_FK stateFormat tripped1
attr WZ_FK version 1.4.1
brauchst du noch was?
Hallo Jens,
danke für deine Hilfe. Bei den Max! kann man sogenannte fakeShutterContakt anlegen, was auch gut beschrieben ist. Das Problem ist, das der MySensors TFK-Kontakt als keine Ahnung als was erkannt wird. Meine Conf.:
define Eingangstuer MYSENSORS_DEVICE 10
attr Eingangstuer IODev gateway
attr Eingangstuer mapReading_tripped1 1 tripped
attr Eingangstuer mapReading_voltage 2 voltage
attr Eingangstuer mode node
attr Eingangstuer room Fenster,Wohnzimmer
attr Eingangstuer stateFormat tripped1
attr Eingangstuer userReadings tripped1 {return "Open" if (ReadingsVal("Eingangstuer","tripped1","off") < "on");; return "Closed" }
aber das State ändert sich nicht, nur das reading tripped1 ändert von closed auf off oder on, je nach dem wie er lustig ist.
Vielleicht könntest Du ja einfach mal den Teil deiner config teilen um zu sehen wo der Fehler ist 🙂 Ich denke mal der Eintrag userReading ist quatsch.
Merci schonmal, Jan
Hallo Landwehrkamp,
nein, bei mir arbeitet er schon die ganze Zeit absolut zuverlässig. Ich habe noch nie ein Signal verloren. Evtl. ist deine Ausrichtung der Magnete zum Reed-Kontakt nicht richtig.
Ich habe auch Doppelfenster und da wird es bei Homematic & Co schon teuer, da Du 2 Geräte benötigst. Ich habe bei mir momentan auch 2 Reed-Kontakte in Reihe geschaltet, es ist mir egal, ob das linke oder das rechte Fenster offen ist. Der Zustand zählt! Bei Sturm oder Gewitter will ich nur wissen, ob ein Fenster (von den Doppelfenster) offen ist.
Ich habe mein TFK über ein virtuelles Device mit Homematic verheiratet.
Bei mir ist das Heizkörperthermostat so ungünstig, das es immer Fehlwerte liefert (aber auch bei anderen mechanischen oder elektronischen Thermostaten=, deshalb gehe ich über einen Wandthermostat, welcher die Raumtemperatur mist (beides Homematic). Mein TFK habe ich mit den Wandthermostat verheiratet und dieser gibt die „Fenster offen“ Kennung zum Heizkörperthermostat. Das funktioniert 100% fehlerfrei.
Im Schlafzimmer habe ich den MySensors TFK >> virtuelles Device -> Homemantic Heizkörperthermostat verheiratet und die reagiert wirklich in Echtzeit!
Kann hier leider keine Screenshoots hochladen. Wenn du größere Probleme hast, melde dich doch mal per Mail bei mir.
Es gibt für fast alles eine Lösung 🙂
Die Überlegung mit den 2 getrennten Überwachungen hatte ich auch schon, ist aber wieder bei mir eingeschlafen, da meine jetzige Schaltung ja super funktioniert.
Kommt es bei euch auch vor, das er nicht immer sendet, bzw. empfängt? Ich habe ein log erstellt und ca. 90% werden registriert. Zischen sender und Empfänger sind ca. 4m Abstand ohne Wand, oder gibt es da noch timing Einstellungen? Gibt es die Möglichkeit zwei Kontakte anzuschließen (habe große Doppelfenster) Was sicherlich gehen könnte, ist zwei Kontakte in reihe zu schalten, aber Fenster lings/rechts währe natürlich noch schöner und man spart sich noch eine Sendeeinheit. Was ich noch nicht rausgefunden habe, wie man ihn als richtigen Fensterkontakt in Fhem anlegt, um ihn mit dem Heizungsventil (MAX!) zu koppeln. Vielleicht hat jemand eine Beispiel-Config, da ich noch Perl-Neuling bin und ich das system dahinter noch nicht ganz verstanden habe. Vielen Dank für eure Hilfe.
Hallo Landwehrkamp,
ja das passiert manchmal bei FHEM, aber nur bei neuen Geräten. Ist mir auch schon des öfteren passiert und ich habe mich gewundert, warum die Werte nicht rüber kommen. Macht man eine manuelle Zuweisung, geht auch der Rest auf einmal automatisch. Was mir noch aufgefallen ist, dass es nicht nur an MySensors liegt, also andere Sachen sind auch betroffen. Aber wenn er es erstmal hat, dann läuft es stabil.
Es kann aber auch sein, wenn du den nächsten Sensor anschließt, dass der automatisch komplett angelegt wird und Du gar nichts mehr machen brauchst.
Gruß Jens
Hallo Landwehrkamp,
also bei mir wurde durch das Aktivieren des Sensors komplett alle Readings erzeugt, inklusive die Spannung.
LG
/robin
Hallo Jens,
nach stundenlanger Suche im Netz, habe ich das bereits rausgefunden 😉 Ist das normal bei MYSensors, das man die readings Manuel zuweisen muss? Das gleiche ist mit Volt? Ich habe in die Config einfach:
attr Fenster_Wohnzimmer mapReading_tripped1 1 tripped
attr Fenster_Wohnzimmer mapReading_voltage 2 voltage
eingefügt und das reading tripped on off erschien 🙂 nur Volt nicht, (vielleicht kommt es noch) Ich bin halt davon ausgegangen, das das Modul in Fhem bereits wie gewohnt die entsprechenden readings zuweist. (Anfänger in Fhem ;-))
Jetzt muß ich nur noch rausfinden, wie ich Fhem beibring, das es sich im ein Fensterkontakt handelt, aber kleine Schritte und man lernt nie aus…. immer nach dem Motto „hast du ein Problem gelöst, kommen zwei neue…“
Vielen Dank für eure Zeit und Mühe…
Hallo Landwehrkamp,
hast du schon „stateFormat“ Tripped1 zugewiesen?
Hallo, habe den Sensor Schritt für Schritt nachgebaut, aber bei mir fehlt das reading „tripped1“. Wenn der Kontakt geöffnet oder geschlossen wird, leuchtet kurz die obere LED und das reading „batterylevel“ in Fhem wird aktualisiert. Muss man da noch readings anlegen? Bzw Fhem sagen, was der Sensor kann? Vielen Dank schon mal
@Jens
Mich würde der Code im Detail trotzdem sehr interessieren. 🙂 Gibt es eine Möglichkeit?
Gruss
Ok,
super, wieder etwas schlauer und eine klare Aussage die einem eine Kaufentscheidung abnimmt.
Dankeschön für die Hilfe 😉
Hallo Markus,
nein, 868 MHz <> 2.4 GHz. Es gibt sowas für den 868 MHz Jeelink ein Projekt „Levelsender“: Lohnt aber nicht, weil Stromverbrauch zu hoch und auch nicht dafür gedacht.
Hole dir den Bausatz für das WLAN-Gateway (Blogbeitrag: https://blog.moneybag.de/fhem-wlan-gateway-mit-mysensors-ohne-zu-loeten/) oder einen USB-Serial Gateway mit Nano und nRFL01+ Baustein.
LG
/robin
Hi,
Ist soetwas auch über die 868mhz möglich?
Habe einen Jeelink für die Lacrosse Temperaturfühler am laufen und dachte, da ich dieses Gateway schon habe, kann ich es auch für den MySensor Empfang nutzen.
Liebe Grüße
Markus
Hallo Matthias,
nein den Sourcecode habe ich momentan nicht öffentlich, da die meisten ja eh ein fertiges funktionierendes Modul haben möchten, habe ich es gleich als hex kompiliert.
Der Bootloader ist momentan noch der Standart-Bootloader aber die Fuses sind angepasst, sonst wäre so eine Funktionsweise schlecht bis gar nicht umzusetzen und gerade Anfänger können durch manuelles falsches setzen der Fuses auch den Microkontroller bzw. den ProMini ins ewige Nirvana befördern. Des weiteren brauchst du eh zum setzten der Fuses einen Programmer.
Deshalb habe ich auch die Komplettversion mit gesetzen Fuses inkl. Sketch bereitgestellt. Also flashen und gut, alles wird gesetzt und funktioniert.
Kann man die Sketche auch als .ino bekommen? 🙂 Oder hast du alles auf Github?
Gruss und danke