Fhem und MySensors: Angepasster Tür-Fenster Kontaktsensor

fhemEinige 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:

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:

mysensors pro mini

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.

mysensors pro mini reed kontakt

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.

Anzeige der Readings in Fhem

Anzeige der Readings in Fhem

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:

[sgmb id=“1″]

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

18 Responses to Fhem und MySensors: Angepasster Tür-Fenster Kontaktsensor

  1. Robin sagt:

    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

  2. Michael sagt:

    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.

  3. Jens sagt:

    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

  4. Jens sagt:

    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?

  5. Landwehrkamp sagt:

    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

  6. Jens sagt:

    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.

  7. Landwehrkamp sagt:

    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.

  8. Jens sagt:

    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

  9. Robin sagt:

    Hallo Landwehrkamp,

    also bei mir wurde durch das Aktivieren des Sensors komplett alle Readings erzeugt, inklusive die Spannung.

    LG
    /robin

  10. Landwehrkamp sagt:

    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…

  11. Jens sagt:

    Hallo Landwehrkamp,
    hast du schon „stateFormat“ Tripped1 zugewiesen?

  12. Landwehrkamp sagt:

    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

  13. Matthias sagt:

    @Jens
    Mich würde der Code im Detail trotzdem sehr interessieren. 🙂 Gibt es eine Möglichkeit?

    Gruss

  14. Markus sagt:

    Ok,
    super, wieder etwas schlauer und eine klare Aussage die einem eine Kaufentscheidung abnimmt.
    Dankeschön für die Hilfe 😉

  15. Robin sagt:

    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

  16. Markus sagt:

    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

  17. Jens sagt:

    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.

  18. Matthias sagt:

    Kann man die Sketche auch als .ino bekommen? 🙂 Oder hast du alles auf Github?
    Gruss und danke

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.