Archiv der Kategorie: Allgemein

Teil 4: Breitere Unterstützung von Wiegand Codeschlössern für den Keymatic / Abus Funk Türschlossantrieb

Nachdem ich das Projekt für ein Codeschloss für den Keymatic/Abus Türschlossantrieb online gestellt hatte (Teil 1Teil 2Teil 3), sind viele Kommentare und Wünsche per Mail gekommen. Zwei Wünschen konnte ich entsprechen. Diese möchte ich hier kurz vorstellen und natürlich den Code als Version 1.1 zur Verfügung stellen.

1. Unterstützung weiterer und günstigerer Wiegand Leser
Ziel ist die Unterstützung von einer breiteren Auswahl an Wiegand Lesern. Positive Rückmeldungen habe ich konkret zum TDSI Optica und zum IK-500 von I-Keys (und natürlich läuft das ursprünglich verwendete Sebury sTouch auch weiterhin und bleibt mein Favorit).
TDSIOptica
Mit dieser Codeänderung sollte hoffentlich fast jedes Codeschloss gehen (ich verspreche aber nix verbindlich). Wer erfolgreich weitere Modelle testet, kann dies gerne als Kommentar vermerken.
Viele Wiegand Codeschlösser geben bei einer Codeeingabe nur die einzelnen Tastendrücke als 4-Bit Wiegand Codes aus. Dies trifft insbesondere auch auf günstigere Varianten zu. Bei den „besseren“ Schlössern kann man typischerweise konfigurieren, ob die Codeeingaben als 26 oder 37 Bit Wiegand Codes weitergegeben werden sollen. In diesem Fall sammelt das Codeschloss die einzelnen Tastendrücke ein und erzeugt eine 26 oder 37-Bit Zahl daraus.
Bei der 4-Bit Variante werden einfach die Tastendrücke als 4-Bit Zahl kodiert und einzeln gesendet. Dabei sind 0..9 jeweils durch ihren numerischen Wert repräsentiert; * ist eine 10 und # eine 11. Mit der Version 1.1 wird diese 4-Bit Codeeingabe nun unterstützt. Das Format wird automatisch erkannt.

Die Bedienung erfolgt so:
* startet ein Codeeingabe bzw startet sie neu falls man sich vertippt hat.
# schließt die Codeeingabe ab
Den anfänglichen * kann man auch weglassen. 10 Sekunden nach dem letzten Tastendruck wird die Codeeingabe in jedem Fall neu gestartet.

Weiterhin wird ein Spezialfall unterstützt. Bei dem TDSI Optica kommen aus irgendeinem Grund die 4-Bit Eingaben invertiert an. Warum auch immer das der Fall sein mag, invertieren ist nicht schwer und nochmal invertieren hebt’s auf. Für dieses Codeschloss und für eventuell auch andere muss man in der Wiegand_Controller.ino in der folgende Zeile die 0 durch eine 1 ersetzen:

#define INVERT4BIT 1 // invert 4 Bit entry (some Wiegand devices need this)

Wenn es also nicht klappt und die Tasten im seriellen Monitor falsch angezeigt werden: Einfach mal mit der Invertierung probieren.

2. Bei mehrfacher Fehleingabe einen externen Pin schalten
Wenn zu oft ein falscher Code eingegeben wurde (Default: 5), dann wird das Codeschloss für eine gewisse Zeit (Default: 180s) gesperrt. Dies soll verhindern, dass jemand mit einer Brute-Force Attacke Zugang bekommt.
In der neuen Version 1.1 wird in diesem Fall zusätzlich der Pin 6 (PINWRONGCODE in HandelCodes.ino) auf high gezogen. Der Pin wird in der ursprünglichen Schaltung nicht benutzt, so dass diese Anpassung keine Hardware Änderung erfordert.
Dadurch lassen sich zusätzliche Aktionen triggern, wie eine Warnlampe oder das senden einer SMS mit Hilfe eines RFduinos usw.

Hier gibt es den Arduino Code: Wiegand_Controller_V.1.1

Upgrade auf die Version 1.1:
Wer von der ersten Version auf die 1.1 upgraden will kann das problemlos tun. Das Speicherformat im EEProm wurde nicht verändert, so dass alle Einstellungen erhalten bleiben.

In Teil 5 geht es dann um die Unterstützung der neueren Version des Türschlossantriebs namens Keymatic eQ-3.

Stabiler HTTP 1.1 WLAN Webserver mit dem ESP8266 Microcontroller

Nach einigen Experimenten mit dem ESP8266 WLAN Microcontroller (was ist das?), habe ich versucht einen stabilen kleinen Webserver zu realisieren. Am Ende habe ich es geschafft, eine stabile Variante zu erzeugen.

Angefangen habe ich mit der AT Firmware 0.9.5 und habe die AT Kommandos über einen Arduino erzeugt und interpretiert. Es hat zwar funktioniert, wurde aber regelmäßig instabil. Und es ist offen gesagt relativ furchtbar zu programmieren.
Danach habe ich mit der nodemcu Firmware experimentiert. Der Webserver war dann in lua geschrieben und an den verfügbaren Beispielen orientiert. Auch das war nie wirklich stabil. Der Webserver war immer wieder offline. Und ab und zu hat es den ESP auch so „zerrissen“, dass ich ihn neu flashen musste.

Wirklich voran ging es dann mit der Verfügbarkeit der ESP8266 Toolchain in der Arduino IDE (siehe hier). Das Webclient Beispiel war schon stabiler, lief aber auch immer wieder in Probleme. Die hier angehängte C-Code läuft nun seit mehreren Tagen bei mir stabil – und da möchte ich sie nicht für mich alleine behalten.

Als Demo wird eine kleine HTML Seite erzeugt, die zwei Funktionen zum Schalten anbietet. Funktion 1 erzeugt eine Ausgabe auf der seriellen Schnittstelle und schaltet GPIO2. Funktion 2 erzeugt nur eine Ausgabe auf der seriellen Schnittstelle.

ESP8266_Webserver

Der Sinn der seriellen Ausgaben ist einerseits natürlich für Debugging mit dem Seriellen Monitor in der IDE. Ich diese Ausgaben aber auch genutzt, um einen Arduino zu steuern. Dieser empfängt die seriellen Ausgaben (Softserial langt) und steuert damit alle Ein- und Ausgänge des Arduino. Auf diese Weise lässt sich sehr einfach eine Kopplung zwischen Arduino und ESP8266 erzeugen. Dazu schreibe ich später nochmal einen Beitrag.

Bei der folgenden Implementierung sind im Unterschied zu den üblichen Beispielen folgende Punkte verbessert / behoben:

  1. Bei Verlust der WLAN verbindung nach der ersten Verbindung wird die Verbindung falls nötig neu aufgebaut.
  2. Es wird eine saubere HTTP 1.1 Verbindung mit gültigem Header und „connection close“ erzeugt. Die mir bekannten Beispiele erzeugen entweder keinen Header oder setzen auf HTTP 1.0. Dadurch ist nicht sauber definiert, ob die Verbindung am Ende der Übertragung der Seite geschlossen werden soll. Dies kann zu Problemen führen.
  3. Falls nicht vorhandene Daten abgefragt werden, wird eine 404 Antwort erzeugt. Viele Browser suchen z.B. nach der favicon.ico und warten dann lange auf ein Timeout. Das kann den Webserver blockieren.
  4. Es kommt ab und zu leeren Anfragen an den ESP8266. Das könnte ein Fehler im SDK sein. Dieser Fehler wird hier abgefangen.

Den Code gibt es hier – bitte das eigene SSID und das Passwort eintragen: ESP_Webserver_HTTP11

Nachtrag 10.08.2015: Hier gibt es eine Version des Codes als AccessPoint.

ESP8266 WLAN Microcontroller mit der Arduino IDE programmieren

Heute gibt es eine m.E. brandheiße Neuigkeit! – Man kann jetzt den ESP8266 WLAN Microcontroller mit der Arduino IDE programmieren. Der folgende Text fasst meine Erfahrungen auf Deutsch zusammen. Es findet sich im Prinzip alles irgendwo auch sonst im Netz.

ESP8266?
In der Bastel- und Internet of things Community gibt es schon seit einigen Monaten viele Beiträge zu einem neunen Microcontroller namens ESP8266.
esp8266_board
Das ist ein Microcontroller der gleich ein eingebautes WLAN und einen TCP/IP Stack und UDP Support mitbringt. Entsprechende Module bekommt man bei ebay aus China für 2,60..2,80€ inkl. Porto geschickt.

Neben der sogenannten AT Firmware und der NodeMCU Firmware gibt es jetzt eine Erweiterung der Arduino IDE. Damit kann man die ESP8266 Module wie Arduinos in der Arduino IDE programmieren. Und darum soll es hier gehen.

Arduino IDE erweitern:
Auf github die Erweiterung der Arduino Entwicklungsumgebung herunterladen. Ich habe das mit der aktuellen IDE Version 1.63 gemacht.
Auf https://github.com/esp8266/arduino die arduino-esp8266-master.zip herunterladen. Das im Zip enhaltene Verzeichnis arduino-esp8266-master im Windows Dokumenten Verzeichnis unter Arduno\hardware (typischerweise C:\Users\User\Documents\Arduino\hardware) ablegen. Damit nix schief geht: Das Verzeichnis arduino-esp8266-master liegt dann in Arduino\hardware
Das war auch schon die ganze Installation.

Update 14.07.2015:
Die Installation ist mittlerweile überarbeitet und vereinfacht worden; siehe hier: https://github.com/esp8266/Arduino
Ab der Arduino IDE 1.6.4 (ich habe 1.6.5 genommen) – hier kurz auf Deutsch:
In der Arduino IDE im Menü Datei die Voreinstellungen öffnen.
Dort http://arduino.esp8266.com/stable/package_esp8266com_index.json in das Feld Additional Board Manager URLs eintragen.
Jetzt im Menü Werkzeuge -> Platine den Eintrag Boardsmanager wählen.
Hier die ESP8266 Erweiterung installieren (tyischerweise ganz unten).
ACHTUNG: Die Arduino IDE 1.6.6 läuft bisher nicht mit der ESP8266 Erweiterung. Die aktuellen Versionen laufen.

Installation prüfen:
Nach der Installation kann man dann im Menü Platine weiter unten das Board „Generic ESP8266 module“ auswählen. Es erscheinen jetzt auch die Beispiele für das ESP Board. Ich habe mit Beispiele->ESP8266WiFi->WiFiWebServer gestartet.

Eine Interface Platine bauen:
Die Interface Platine erlaubt es, die ESP8266 Module an ein FTDI Interface anzuschließen. Ein solches Interface haben die meisten Arduino Nutzer herumliegen und es ist für ein paar Euro zu bekommen. Ich habe folgenden Schaltplan entwickelt – wobei entwickelt hoch gegriffen ist.
esp8266 progboard
Die Schaltung orientiert sich an vielen Vorschlägen im Netz. Als Stecker für die ESP8266 Module habe ich eine Print Pfostenbuchse (2×4) genommen und das ganze auf einer Lochplatine aufgebaut.
esp_interface1
esp_interface2
Wichtig ist, dass die ESP8266 Module 3.3V für die Spannungsversorgung und die Pegel nutzen. Wer 5V nimmt, muss neu bestellen! – Die die ESP8266 Module kurzfristig bis zu 200mA ziehen können, ist der 3.3V Ausgang der FTDI Chips dafür nicht geeignet. Man muss also das FTDI Interface auf 5V stellen (falls es einstellbar ist), damit man die volle Stromversorgung des USB Ports nutzen kann. Die 3.3V erzeugt dann ein LM1117 Festspannungsregler.
Weiterhin sind in der Schaltung zwei Taster für Reset und den GPIO0 eingebaut. Zieht man den GPIO0 über einen Reset auf Masse, so geht das ESP8266 Board in den Programmiermodus.
Praktischer formuliert: Reset-Taster drücken und gedrückt halten. Während dessen GPIO0 drücken und gedrückt halten. Jetzt den Reset Taster loslassen und danach den GPIO0 Taster.
Jetzt ist das Board im Programmiermodus.

Das Board programmieren:
Das geht im Prinzip genauso wie einen Arduino mit der Arduino Entwicklungsumgebung zu programmieren. Wir müssen allerdings vor jedem Programmiervorgang das ESP8266 Board in den Programmiermodus bringen (also Reset und dan GPIO0 drücken und dann erst Reset und dann GPIO0 loslassen). Danach in aller Ruhe die Pfeiltaste in der Arduino-Entwicklungsumgebung starten. Der Code sollte nach dem Übersetzen hochgeladen und gestartet werden.
Der Serielle Monitor in der Arduino IDE funktioniert auch; Baudrate auf 115200 Baud stellen.
Ach ja: Im oben genannten Beispiel im Code bitte die eigene SSID und das WLAN Passwort eintragen.

Funktioniert’s?
Im seriellen Monitor den Start des ESP8266 Moduls mit der eigenen Firmware verfolgen. In der Ausgabe wird die IP Adresse des Moduls angezeigt, wenn das Board sich erfolgreich verbinden konnte. Nehmen wir mal an es wird die IP 192.168.178.40 angezeigt. Dann in einem Webbrowser im PC folgende Seiten aufrufen:
http://192.168.178.40/gpio/0
und
http://192.168.178.40/gpio/1

Mit diesen URLs wird GPIO2 des ESP8266 an oder ausgeschaltet. Wer mag kann eine Lowpower LED mit Vorwiderstand anschließen und per Browser an und ausschalten.
Ein Webserver für 2,60€ ist schon ein Kracher 🙂

P.S.: Wenn die Kommunikation mit dem ESP8266 nicht klappt, kann das an dem Spannungsteiler liegen, der eine Billig-Variante eines 3.3V 5V Levelshifters ist. Gegebenenfalls mal mit den Widerstandswerten spielen.

McPower 433MHz Funkwandschalter an Arduino

Als ich auf der Suche nach einem günstigen Funkwandschalter mit 433MHz war, bin ich auf ebay auf eine Schalterserie von McPower gestoßen. Im Netz konnte ich leider keine Antwort darauf finden, ob diese Schalterserie mit der RCSwitch Bibliothek kompatibel ist. Diese Bibliothek gibt es für die Arduino Plattform, Raspberry Pi und andere.

Ich hab’s einfach riskiert und für 11€ einen Doppelfunkwandschalter McPower Multi Comfort FSS-2 bestellt. Und es geht. Da der Schalter für selbstlernende Funkempfänger gedacht ist, kann man keine Codes voreinstellen. Diese sind fabrikseitig festgelegt.

1_Multi Comfort FSS-2 2_Multi Comfort FSS-2

Mit dem RF Sniffer aus diesem Beitrag habe ich verfiziert, dass die RCSwitch Library die Codes des McPower Funkwandschalters problemlos lesen kann und die Codes der jeweiligen Tasten konstant sind (kein Wechselcode).

3_Multi Comfort FSS-2

Wer das in eigenen Arduino Projekten nutzen möchte, muss die empfangenen Codes einfach per serieller Schnittstelle mitschreiben oder den Sniffer nachbauen.

Ach ja: Reichweite prima.

Wie aus einem TP-Link Archer C5 AC1200 ein Archer C7 AC1750 wurde

In diesem Bericht geht es um einen TP Link Archer C5 AC1200 Router, den mit einem Umweg über OpenWRT zu einem Archer C7 AC1750 umgeflasht habe.

Direkt am Anfang ein paar WARNUNGEN:

  1. Diese Anleitung beschreibt ein Experiment und ist für Interessierte als Erfahrungsbericht anzusehen. Durch das Flashen von nicht offiziellen Firmwares und Nutzung von inoffiziellen Flash-Mechanismen kann man den Router irreparabel beschädigen. Ebenso wird hier keinerlei Aussage getroffen inwiefern der Nutzer die Nutzungsrechte für die genannte Firmware auf der Hardware hat. Eine Firmware Modifikation führt ggf auch zu einem Garantieverlust. Alle folgenden Angaben sind somit ohne jede Gewähr.
  2. Es ist denkbar, dass TP Link in der Router Hardware das verkaufte Modell hinterlegt hat (z.B. in eine EEProm oder in der MAC Adresse o.ä.). Falls solche Informationen hinterlegt wären, könnte eine künftige Firmware für den C7 die Ausführung auf einer C5 Hardware verweigern. Aktuell ist das nicht der Fall.

Ich hatte auf meinem Archer C5 das alternatives Betriebssystem OpenWRT (Barrier Breaker) installiert. Ich war mit OpenWRT nicht glücklich. Die Stabilität und Performance war für mich nicht optimal und so stand der Weg zur Original Firmware an.
Und an dieser Stelle habe ich auf die Hardware Spezifikationen der Modelle C5 und C7 (z.B. auf OpenWRT) geschaut. Die sind komplett identisch! – Fotos der Platinen im Netz: auch identisch. Inklusive Aufdruck der Platinenversion.

Sollten sich die Modelle C5 und C7 etwa nur in der Firmware und dem Gehäuseaufdruck unterscheiden? – Um das Ergebnis vorwegzunehmen: Offenbar ja.
Für den Benutzer bedeutet C5 AC1200 konkret: bis zu 300MBit/s im 2.4GHz Band und bis zu 866MBit/s im 5GHz Band. Der C7 AC1750 bringt es auf 450MBit/s@2,4GHz und 1300MBit/s@5GHz.
Es scheint also, dass der C5 AC1200 einfach den dritten Datenstrom an ein geeignetes WLAN Endgerät mit 3 Antennen nicht aktiviert.
Witzigerweise sind die Fotos auf der TP-Link Homepage über den Archer C5 AC1200 nicht korrekt. Sie zeigen einen Router mit 2 Antennen. Darüber hinaus gibt es alte Presseberichte und Fotos über den bevorstehenden Start eines Archer C5 AC1350 mit zwei externen Antennen.
Der Archer C5 AC1200 hat (zumindest in der Version 1.2) definitiv drei interne und drei externe Antennen. Im Datenblatt des C5 AC1200 sind auch die Antennen zu sehen und auch im Text erwähnt. Hardwareseitig sind also 3 Datenströme möglich.
Die Fotos auf der TP-Link Seite & die alten Berichte über einen AC1350 könnten ein Hinweis darauf sein, dass TP-Link den C5 ursprünglich einmal in eine reduzierten Hardware geplant hatte und sich am Ende für eine reine SW-Limitierung entschieden hat.

Etwas Vorsicht muss aber walten. Es gibt unterschiedliche Hardware Modelle der Archer-Familie. Der Archer C7 v2.x sowie der C5 v1.2 enthalten für das 5GHz WLan einen Qualcom Atheros QCA9880-BR4A. Der C7 in den 1.x Versionen enthält einen QCA9880-AR1A. Der C5 ist bisher offenbar nur in der Version V1.2 am Markt aufgetaucht, die komplett mit dem C7 V2.0 identisch zu sein scheint.

Hier also das Umflash-Experiment:
Mit der Original Firmware von TP Link kann man natürlich keine C7 2.x Firmware auf einen C5 flashen (Meldung: falsches Modell). Mit dem Umweg über OpenWRT und einem Kniff geht es aber doch. Also kommt zunächst mal OpenWRT auf die Box. Das gibt es in der Version Barrier Breaker direkt auf openwrt.org (http://wiki.openwrt.org/toh/tp-link/tl-wdr7500). Die Installation ist ganz einfach. Es gibt eine OpenWRT Datei, die von der TP Link Original Firmware als Firmware Upgrade akzeptiert wird: openwrt-ar71xx-generic-archer-c5-squashfs-factory.bin

Danach bootet der Router unter OpenWRT. Von dort aus geht es wie bei OpenWRT beschrieben auf die Rückreise zur Originalfirmware. Für den Archer C5 AC1200 V1.2 habe ich diese Firmware Datei für den Archer C7 V2.0 von der TP Link Seite geladen: ArcherC7v2_en_3_13_34_up_boot(131217).bin
Das ist die älteste Firmware für den C7 V2.0, die ich bei TP Link finden konnte. Für solche Experimente gilt meistens: älter ist besser.

Nun muss man die ersten 0x20200 Bytes von dieser Datei abschneiden. Das ist der Bootloader und es geht z.B. wie auf OpenWRT beschrieben:

dd if=ArcherC7v2_en_3_13_34_up_boot(131217).bin of=tplink_mod.bin skip=257 bs=512

Alternativ kann man auch die ersten 0x20200 Bytes mit einem Hexeditor wegschneiden.

Nun muss die Datei auf den Router. Das geht am Einfachten als Download. Ich habe die tplink_mod.bin auf den Webserver meines Raspberry Pi gelegt und dann per wget auf den Router geladen. Also per ssh auf dem OpenWRT Archer C5 einloggen und dann:

cd /tmp
wget http://pi/tplink_mod.bin

Nun ist die modifizierte Firmware auf dem Router. Dann habe ich versucht die Firmware zu flashen:

sysupgrade /tmp/tplink_mod.bin

Es kam die Fehlermeldung, dass die Firmware-Datei für einen Archer C7 ist, aber ein Archer C5 vorliegt. Dieser Fehler validiert aber implizit, dass ein gültiges Archer C7 Format vorliegt und der Anfang der Firmwaredatei korrekt abgeschnitten wurde.

Jetzt wird es erst! – Ich habe das Update mittels -F erzwungen. Das ist durchaus riskant, denn mit dem -F Kommando wird im Zweifelsfall jegliche „Bytewurst“ geflasht. Mit gegebenenfalls fatalem Ergebnis. Also trotz Risiko:

sysupgrade -F /tmp/tplink_mod.bin

Nun kamen einige Ausgaben und dann stand die Ausgabe für eine längere Zeit bei einem „[w]“ still. Etwas Nervosität machte sich breit. Nach gefühlten 3 Minuten bootet der Router – und meldet sich mit der Original TP Link Firmware als Archer C7 AC1750 🙂
Im Menü habe ich dann die Factory Defaults geladen. Danach habe ich ein Firmware Update auf die neueste C7 V2.0 Firmware gemacht: ArcherC7v2_v3_en_3_14_1_up_boot(141110).bin
Das ging problemlos über den normalen Weg über das Webinterface. Durch das Flashen einer Firmware mit der Bezeichnung boot im Namen wird auch gleich noch ein C7 Bootloader geflasht.

Mein Archer C5 AC1200 V1.2 ist zu einem vollwertigen Archer C7 AC1750 V2.0 geworden:
C5toC7_upgraded

Über OpenWRT kommt man falls nötig auf dem beschriebenen Weg auch wieder auf die Original Archer C5 Firmware zurück.

Ergänzung vom 19.04.2015:
Ich konnte die aktuelle Firmware Archer C7_V2_150304 problemlos flashen. Vorher war gemäß der oben stehenden Anleitung die vorherige Firmware vom 10.11.2014 installiert.

Ergänzung vom 03.05.2015:
Offenbar hat TPLink eine neue Version des Archer C5 aufgelegt. Diese wird als V2 oder V2.0 bezeichnet. Diese neue Version hat nur zwei sichtbare Antennen und offenbar auch eine andere Hardware.
Für den Archer C5 V2.0 gilt die oben stehende Anleitung nicht!

Ergänzung vom 24.05.2015:
Update meines „C7“ auf die aktuelle Firmware-Version Archer C7_V2_150427 hat problemlos geklappt.

Anleitung für den NiCD Akkutausch für Braun OralB Sonic Complete Modell 4717

Hier geht es um den Austausch des Akkus in einer Braun OralB Sonic Complete Modell 4717 mit NiCD Akku. Warum noch eine Anleitung dazu? – Man findet im Netz so einiges zu dem Thema. Oft geht es um andere Modelle und ab und zu sind auch Tipps dabei die man besser nicht befolgt (z.B. das Innere der Zahnbürste an den Drähten des Bajonettverschlusses herausziehen). Deshalb hier mein Weg für das erwähnte Modell.

Eine Anmerkung noch vorneweg:
Es gibt das Modell 4717 mit NiCD und NiMH Akkus. Bitte nicht versuchen NiMH Akkus in das NiCD Modell einzubauen.
0_OralB_4717_NiCD

Was wird benötigt:

  • Elektronik-Lötkölben inkl. Lötzinn
  • kleiner Seitenschneider
  • stabile Schere
  • großer Flachkopfschraubenzieher
  • Ersatzakku (dazu später mehr)

Zahnbürste öffnen:
Die Zahnbürste wird von der Unterseite aus geöffnet. Dazu einen großen Flachkopfschraubenzieher in die Mulde auf der Unterseite schieben. Der Schraubenzieher muss so groß sein, dass er beim Drehen in der Mulde nicht frei drehbar ist. Eventuell kann man auch die Ladestation hierfür missbrauchen.
Nun vorsichtig den Schraubenzieher nach links drehen. Es ist keine große Kraft erforderlich. Der Bajonettverschluss an der Unterseite der Zahnbürste öffnet sich bei einer Drehung um ca. 30 Grad; siehe Foto:
1_Bajonettverschluss_oeffnen
Nun muss man etwas vorsichtig sein. Der Verschluss enthält einer Induktionsspule, die mit 3 dünnen Lackdrähten mit der Hauptplatine verbunden ist.
2_Verschluss_offen
Bitte auf keinen Fall versuchen, das Innere der Zahnbürste an den dünnen Drähten herauszuziehen. Das geht schief – auch wenn es ab und zu so beschrieben wird.
Einfach die Zahnbürste mit dem Metallstift an der oberen Seite auf eine Tischplatte oder ein Brett drücken. Das Innere kann problemlos herausgeschoben werden. Es kann sein, dass man am Anfang etwas fester drücken muss, wenn die obere Gummidichtung mit Zahnpastaresten verdreckt ist. Und schon liegt alles auf dem Tisch
3_Zerlegt

Akku ausbauen:
Der Akku ist mit Lötfahnen auf der Platine angelötet. Es empfiehlt sich nicht, die hintere Lötfahne abzulöten. Die Lötfahne läuft unter einem Plastikhalter hindurch. Diese würde vermutlich schmelzen/anbrennen. Deshalb habe ich einfach die Lötfahne mit einem kleinen Seitenschneider wie im Foto gezeigt durchtrennt.
4_Akku_hinten_abgetrennt
Man kann den Akku jetzt hinten heraushebeln. Vorne hängt er noch an einer Lötfahne. Die vordere Fahne kann man nun einfach ablöten. Der Akku ist raus.
5_Akku_vorne

Wahl des Ersatzakkus:
Mit etwas Recherche habe ich herausgefunden, dass in der Zahnbürste Standard-NiCD-Zellen verbaut sind. Es sind zwei NiCD 2/3A Zellen mit eine Kapazität von ca. 700mAh verbaut. Man kann nach einem Ersatzakku für das Zahnbürstenmodell googlen. Oder folgenden Suchtext eingeben „NiCD 2/3A“. Danach sollte man mehr als genug Angebote finden. Entweder man kauft zwei Zellen mit Lötfahnen und lötet diese Zusammen. Es gibt aber auch fertige 2er Zellenpacks.
Die einzelnen Zellen kosten so um die 3-4€. Mit Versandkosten muss man mit ca. 11€ rechnen.

Einbau des Akkus:
Meistens sind die Lötfahnen des Akkus am +Pols zu breit, so dass sie nicht durch den Schlitz in der Platine passen. Die vordere Lötfahne kann mit einer Schere passend zugeschnitten werden.
6_Loetfahne_zurechtschneiden
Die hintere Lötfahne kürzen, so dass sie nicht mehr über den Akkurand herausragt.
Nun die Lötfahne des +Pols durch die Platine stecken. Den Akku in die Halterung drücken und vorne festlöten. Ggf die überschüssige Lötfahne abtrennen.
An der hinteren Seite den -Pol mit dem Rest der abgeschnittenen Lötfahne (wir hatten die alte Lötfahne hier nicht ausgelötet) verbinden:
7_Loetfahne_hinten
Die Zahnbürste sollte jetzt wieder funktionieren. Wer will kann das im auseinandergebauten Zustand durch einen Druck auf den Taster auf der Platine testen.

Dichtungen reinigen und fetten:
Den folgenden Schritt kann man überspringen. Ich rate aber dazu. Die Gummidichtungen am Metallstift und am Bajonettverschluss sind mit Zahnpastaresten verdreckt. Diesen Dreck kann man mit einem feuchten Lappen entfernen.
8_Dichtung_reinigen1
9_Dichtung_reinigen2
Die Dichtungen dann noch mit Hahnfett aus Silikon (gibt’s im örtlichen Baumarkt) einfetten.
10_hahnfett
(soll keine Werbung sein)

Zahnbürste zusammenbauen:
Nun einfach die Zahnbürste wie auf dem Foto gezeigt wieder ineinander schieben und am Ende den Bajonettverschluss mit dem Schraubenzieher wieder schließen.
11_Zusammenbau
Fertig 🙂 – Die Zahnbürste jetzt noch 24h aufladen.

P.S.: Der Akku lebt erheblich länger, wenn man die Brüste nicht nach jeder Benutzung wieder auf die Ladestation stellt. Einfach warten, bis die Zahnbürste steht und sie dann einmal 24h aufladen. Alternativ einmal pro Woche aufladen. Details? – Memoryeffekt bei Akkus bei Wikipedia lesen.

TR-069 bei gebrandeten Fritzboxen mit Bordmitteln abschalten / deaktivieren

ACHTUNG: Der hier beschriebene Trick funktioniert ab der Fritz!OS Version 6.50 nicht mehr. Er ist aber auch nicht mehr nötig. Man kann ab der 6.50 kann man TR-069 auch bei der 1&1 Firmware im Menü abschalten: Internet –> Zugangsdaten –> Anbieterdienste; hier den Haken entfernen. Wenn das Menü nicht da ist, benutzt Euer DSL Anbieter kein TR-069.

Es gibt viele Fritzbox Modelle und Versionen am Markt, die „gebrandet“ sind. D.h. sie sind für einen DSL Anbieter konfiguriert bzw. mit spezieller Firmware versehen. Ich verwende beispielsweise eine Fritzbox 7362SL, ein Modell das der 7360SL ähnlich aber nur über 1&1 erhältlich ist.
Bei den gebrandeten Modellen sind vom Anbieter abhängig häufig bestimmte Einstellungen nicht möglich. Es gibt nun Tipps im Netz, wie man das Branding entfernen kann. Das mag auch funktionieren, erfordert aber, dass es für die entsprechende Box eine normale, „ungebrandete“ Firmware gibt. Das ist bei der 7362SL nicht der Fall.
Die gebrandete Firmware ist an sich auch kein Problem. Bei der 7362SL ist der einzige Unterschied zur normalen Firmware offenbar die Unmöglichkeit TR-069 abzuschalten. Auch hier gibt es wieder Tipps im Netz, welche in den Interna der Box herumfummeln (Stichwort ar7.cfg etc) und damit nicht offiziell unterstützte Änderungen an der Firmware vornehmen.

Es geht aber auch viel einfacher und mit den normalen Bordmitteln.

Bevor es losgeht: Was ist eigentlich TR-069?
Kurzversion: Über das TR-069 Protokoll kann der Internetanbieter den DSL-Router (um-)konfigurieren und hat weitgehende Rechte in das Heimnetzwerk hinein. Es gibt auch viele Diskussionen im Netz darüber, ob das Ganze nicht eine große Sicherheitslücke ist.
Wer mehr Infos möchte, findet diese hier Heise oder Wikipedia

Die Idee:
Auf den Fritzboxen läuft TR-069 über Port 8089. Bei Portscans wird dieser Port als geschlossen angezeigt, weil von der Fritzbox keine Antwort erfolgt. Dennoch lauscht die Box hier auf Daten. Die Basisidee ist nun ganz simpel: Was passiert eigentlich, wenn wir für Port 8089 eine Portweiterleitung anlegen?
(Eine Portweiterleitung ist eine in der Box konfigurierbare Anweisung, auf welches Netzwerkgerät im Heimnetzwerk eine Anfrage auf dem jeweiligen Port weitergeleitet werden soll.)

Also habe ich einen Test gemacht. Port 8089 wird auf Port 80 meines Raspberry Pi weitergeleitet. Port 80 ist der Webserver auf dem ich eine kleine Seite im Heimnetz anzeige und die normalerweise von außen unzugänglich ist. So sieht die Testkonfiguration aus:
fritz_antitr069_test
Die Probe habe ich dann mit dem Mobiltelefon vorgenommen (WLAN aus). Und siehe da: http://meine-ip-adresse:8089 zeigt die Webseite vom Rasperry Pi. Heißt konkret, dass die normale per Webinterface in der Fritzbox angelegte Portweiterleitung den Zugang zu Port 8089 umlenken kann. Damit ist TR-069 nicht mehr möglich.

Die Umsetzung:
Nach dem erfolgreichen Test stellt sich die Frage, wohin wir Port 8089 dauerhaft und sicher umlenken könnten. Auch hier ist die Idee wieder simpel. Ins Nirwana. Die Fritzboxen vergeben bei normaler Konfiguration per DHCP nur Netzwerkadressen zwischen 192.168.178.20 und 192.168.178.200. Also wird 192.168.178.255 unser Ziel. Und als Zielport nehmen wir Port 22. Falls doch jemand mal an den DHCP Einstellungen dreht und doch ein Netzwerkgerät auf dieser Adresse liegen sollte, landen wir auf dem SSH Port. Das dürfte sicher sein.

Konkret habe ich also folgende Portweiterleitung in der Fritzbox konfiguriert:
fritz_antitr069_config
Nun ist TR-069 aus – mit Bordmitteln und mit einer Konfiguration, die ganz offiziell unterstützt wird.

Getestet mit einer Fritzbox 7362SL Firmware Version 6.20.

P.S.: Wer kein DHCP verwendet, die IP Adressen geändert hat muss sich ggf eine andere Ziel-IP überlegen. Die Regel ist einfach: Dahin, wo nix passieren kann. Im Zweifelsfall auf IP/Ports die es gibt, aber die sicher sind.

433MHz und RFID Sniffer auf Arduino Basis

sniffer_1
Ich habe in diesem Projekt zwei „Sniffer“ auf Arduino-Basis in einem Gerät zusammengebaut:

  • einen Sniffer für 433MHz Funksteckdosen / Funkschalter Signale
  • einen Sniffer für RFID Tags

Wer nur eine der beiden Funktionen benötigt, kann einfach den 433MHz Empfänger oder das RFID Modul weglassen. Der Arduino merkt’s nicht und dem Code ist es auch egal.

Ziel des 433MHz Sniffers:

  • 433MHz Signale von Handsender & Wandsendern für Funksteckdosen und Unterputzfunkmodulen empfangen
  • den empfangenen Code anzeigen
  • falls möglich eine Kodierung für Elro AB440 Steckdosen (DIP Schalter) errechnen und die DIP-Schalter Einstellung anzeigen

Da die meisten Sender für lernfähige Empfänger keinen einstellbaren Code haben, ist der Code nicht bekannt. Er wurde werksseitig festgelegt (Beispiel: Elro AB600M). Wenn man diese Schaltcodes mit einer Heimautomatisierungslösung (z.B. auf Raspberry Pi Basis mit fhem) nutzen möchte, braucht man einen solchen Sniffer.
Weiterhin habe ich mit dem Sniffer festgestellt, dass diese werksseitig kodierten Sender Codes senden, die man auf einer Elro AB440 Funksteckdose einstellen kann. Dies muss nicht universell gelten, stimmt aber für die Sender, die mir bisher unter gekommen sind. Konkret kann man also die weit verbreiteten und günstigen Baumarkt Funksteckdosen mit 10-poligen DIP Schalter (Elro AB440 und baugleich) mit Sender von lernfähigen Komponenten koppeln.

Ziel des RFID Sniffers:

  • Einlesen von 125kHz RFID Tags (EM4100/4102)
  • Ausgabe des Facility- und Card-Codes

Ich nutze dies, um die RFID Tag Daten für die Kodierung des RFID-Codeschlosses an unserer Haustüre zu nutzen.

Verwendete Hardware Komponenten:

  • Arduino Pro Mini Clone (ca. 2,50€); es geht natürlich auch ein Nano o.ä.
  • RFID Empfänger RDM630 (ca. 6,50€)
  • 433MHz Empfänger MX-05V (ca. 1€)
  • 2×16 Zeichen LCD Display, HD44780 kompatibel (ca. 2,50€)
  • Aufputzdose aus dem Baumarkt als Gehäuse (ca. 4€)
  • 9V Batterie aus dem Supermarkt (ca. 1,60€)
  • 10kOhm Trimmer, 470Ohm Widerstand, Lochrasterplatine, Schalter, Clip für 9V Batterie aus der Restekiste

Gesamte Materialkosten somit: 18,10€

Schaltung:
Die Schaltung ist ganz einfach und an den im Netz verfügbaren Referenzeinbindungen orientiert.

Im Detail:

  • Der 433MHz Emfänger ist am D2 Pin des Arduino angeschlossen; die für das Auslesen des Signale verwendete RCSwitch Bibliothek fordert einen interruptfähigen Pin; somit kommen nur D2 und D3 in Frage.
  • Der RFID Leser wird an eine serielle Schnittstelle. Da nur Daten vom Empfänger an den Arduino gesendet werden, ist ein Pin ausreichend. Man könnte den RFID Leser an die normale serielle Schnittstelle des Arduino klemmen. Ich habe Pin D3 und die Softserial Bibliothek verwendet. Dies hat den Vorteil, dass man den Arduino weiterhin normal programmieren kann und über die serielle Schnittstelle auch Debug-Ausgaben bekommen kann.
  • Das HD44780 Display habe ich an die Pins 4,5,6,7 sowie 11 und 12 angeschlossen und die LiquidCrystal Bibliothek entsprechend konfiguriert. Weiterhin war bei meiner Display-Version ein Anschluss der Hintergrundbeleuchtung über den A und K Anschluss nötig. Ansonsten entspricht die Schaltung den üblichen Vorschlägen.

Der gesamte Schaltplan sieht so aus:
sniffer_schaltplan
Der Aufbau ist auf einer Lochrasterplatine erfolgt.

Für den Einbau in das Gehäuse habe ich ein paar Reste von Holzleisten im Heißkleber fixiert. Die Platine (auf den Fotos noch ohne RFID Empfänger) ist mit einer Schraube fixiert. Geht bestimmt schöner, tut aber seinen Zweck.
Die Antennenspule des RDM630 Moduls habe ich mit Heißkleber an der Wand des Gehäuses festgeklebt und die Stelle außen markiert. Das ca. 1,5mm starke Plastik behindert das Einlesen der RFID Tags nicht.

Die Software:
Der fertige Arduino Code ist hier zum Download verfügbar: rf433_rfid_sniffer_display
Der Code ist aufgrund der Kürze einfach als „Spaghetticode“ hintereinander geschreiben. In der loop() Routine wird zunächst der 433MHz Code und dann der RFID Code durchlaufen. Was auch immer empfangen wird, kommt zur Anzeige. Wird ein weiterer RFID Tag gescannt oder ein 433MHz Code empfangen, wird das Display überschrieben. Der Code sollte soweit selbsterklärend sein. Falls nicht, einfach fragen.

Das fertige Gerät sieht so aus. Das Display sieht in der Realität sehr klar aus. Das kommt auf den Fotos nicht gut rüber.
sniffer_1

sniffer_2

sniffer_3

sniffer_4

Aldi RGB LED Strip (IClite) auf TMS1829 Basis mit dem Arduino steuern

Aldi Süd verkauft hier gerade wieder 5m LED Bänder mit 150 RGB LEDs. Diese LEDs sind in 3er Gruppen unabhängig ansteuerbar und natürlich ist ein kleiner Controller und auch eine Fernbedienung mit in der Packung. In der Packung findet sich dann auch ein Hinweis auf den Hersteller/Importeur: EuroTechnicsTrade GmbH aus Meschede
Aldi_LED_Band
Aldi_LED_Band2

Hier geht es darum, dieses LED Band mit dem Arduino zu steuern. Im Wesentlichen ist das Aldi LED Band kompatibel zu den Adafruit RGB LED Produkten. Auf dem Band sind 5050 RBG LEDs verbaut. Alle 3 LEDs ist ein TM1829-Chip auf dem Band vorhanden, so dass die LEDs in 3er Gruppen über ein serielles Protokoll unabhängig gesteuert werden können. Im Vergleich zum Adafruit Produkt sind jedoch die Farbkanäle vertauscht. Die Adafruit Libaray unterstüzt RGB und GBR kodierte Schaltungen. Das Aldi Band ist allerdings BRG kodiert.

Im Netz findet sich auch eine adaptierte Library für den Aldi Streifen (klick). Diese basiert auf einer Opensource Library von Adafruit. Die vorgeschlagene Aldi-Anpassung ist ein etwas arger Hack. Damit ist die Library nicht mehr kompatibel zu den Adafruit Produkten. Das ist nicht wirklich günstig, da die veränderte Library weiterhin Adafruit heißt. Weiterhin „crasht“ das LED Band, wenn man den blauen LED Kanal voll aufdreht.

Last but not least handelt es sich bei der gehackten Library handelt nicht um die aktuelle Version der Adafruit Lib. Leider habe ich es bisher nicht geschafft, die aktuelle Version der Adafruit Lib ans Laufen zu bekommen.

Also habe ich folgendes verändert:
1. Kompatibilität zu den Adafruit Produkten wieder hergestellt.
2. Einen #define für die BRG Kodierung des Aldi LED Strips eingebaut. Damit werden alle Kodierungen unterstützt.
3. Die Library auf Aldi_NeoPixel umbenannt. Damit kann sie parallel zu neueren Versionen der Adafruit Library in der Arduino Entwicklungsumgebung betrieben werden. (Wenn man den Code von einem Adafruit Projekt verwenden will, muss man nur den Konstruktur im Code von Adafruit auf Aldi umbenennen und dort die Kodierung auf BRG umstellen).
4. Einen Fix für den blauen Kanal eingebaut.
5. Das Beispiel für das Aldi Band angepasst (BRG Kodierung + 50 LED Kanäle)

Hier könnt Ihr die Aldi_NeoPixel Library herunterladen: Aldi_NeoPixel.zip
Bei den neueren Versionen der Arduino IDE kann man das zip-Archiv der Lib per Menü hinzufügen: Sketch –> Include Library –> Add .zip Library …
Falls es eine alte IDE ist, muss die Arduino Entwicklungsumgebung beendet werden. Dann das Verzeichnis Aldi_NeoPixel in das library Verzeichnis der Arduino Umgebung kopieren. Typischerweise ist diese hier: C:\Program Files (x86)\Arduino\libraries . Danach die Arduino Umgebung starten.
Unter Datei->Beispiele->Aldi_NeoPixel->strandtest_aldi sollte das Beispiel laden.

Die Verkabelung ist sehr einfach. Pin D6 über einen 300-500 Ohm Widerstand an den DI Eingang des Bandes legen. Über den Original-Controller kann man das Band mit den nötigen 12V Spannung versorgen. Die Stromversorgung des Arduinos läuft hier noch über das USB Kabel. Das sieht dann so aus:
Aldi_LED_Verkabelung
Aldi_LED_Verkabelung2

Und so sieht das Ergebnis aus:

Was tun wir jetzt damit? – Mein erstes Projekt soll eine Lichtorgel/ RGB-Spectrum-Analyzer werden.
Soviel verrate ich schon mal: Prototyp läuft 🙂

Reichweite einer Elro AB440S Funksteckdose erhöhen & Umbau auf einen potentialfreien Schaltkontakt

Die folgenden zwei Tipps hat mir freundlicherweise Gerd Eichstaedt mit Text und Bildern zugesandt. Vielen Dank.
Beide Umbauten sind auch auf den Arduino-Umbau einer AB440S anwendbar (siehe hier).

Reichweite vergrößern durch Anbringen einer Drahtantenne:
Das Foto zeigt das Empfangsmodul auf der Platine der AB440S Steckdose. Im untersten rechten Eck ist ein goldener Punkt zu sehen, der verzinnt wird und an dem ein Draht / Litze 0,75mm2 oder ähnlich in einer Länge von 10-13cm angelötet wird.
Eine Warnung ist hier noch angebracht: Funksteckdosen funktionieren auf Basis eines Kondensatornetzteils. Es gibt damit keine galvanische Trennung vom 230V Netz. Die Antenne kann also auf 230V Potential liegen. Wer die Antenne nach außen führen möchte, muss auf eine passende Isolierung insbesondere auch am Ende achten.
AB440S_Reichweite

Umbau einer AB440S zum reinen Funk-Schaltkontakt (potentialfrei):
Wichtig ist,dass die Platine an der auf dem Foto gezeigten markierten Stelle (gelbe Linie) gründlich durchtrennt wird. Idealerweise nach dem Trennen mit einem Multimeter messen ob wirklich keine Verbindung mehr besteht. Hier muss sorgfältig gearbeitet werden, wir wollen uns nach nicht das zu schaltende Gerät zerstören, indem wir 230V hindurch „jagen“.
AB440S_potfrei
Ist die Trennung der Leiterbahn erfolgreich gewesen, so messen wir die oberer Hälfte (über der gelben Linie) gegen die Einzelader die auf dem Foto mit einem Pfeil markiert ist. Das Multimeter darf keinen Durchgang anzeigen.
Stecken wir jetzt die Platine in eine Steckdose und schalten mit der Fernbedienung die AB440S auf „Ein“. Dann muss das Multimeter an dieser Stelle einen Durchgang anzeigen.
Bitte Vorsichtig messen, da wir an einer offenen Platine arbeiten, die auf der Primärseite eine Spannung von 230V führt !!!
Zur Sicherheit mit dem Multimeter noch die obere Hälfte (über der gelben Linie) gegen Masse der Steckdose messen um sicherzustellen, das wirklich keine Spannung anliegt.

Dann seit ihr fertig und könnt beliebige Geräte mit der umgebauten Funksteckdose schalten.
Z.B. einen Rechner über den Platinenstecker einschalten oder wir bei mir eine NAS Festplatte.