WLAN Keypad und Portal:Freifunk/Router/Original Firmware flashen: Unterschied zwischen den Seiten

(Unterschied zwischen Seiten)
K
MikO verschob die Seite Freifunk/Router/Original Firmware flashen nach Portal:Freifunk/Router/Original Firmware flashen, ohne dabei eine Weiterleitung anzulegen
>Mogwai
 
K (MikO verschob die Seite Freifunk/Router/Original Firmware flashen nach Portal:Freifunk/Router/Original Firmware flashen, ohne dabei eine Weiterleitung anzulegen)
 
Zeile 1: Zeile 1:
{{Project
= Einleitung =
|Why=Senden von Tasteneingaben an einen MQTT Server
Dieses Tutorial behandelt das Thema, wie man seinen Freifunk Router zurück auf die originale Firmware des Herstellers (Stock-Rom) flasht.
|What=hardware, software
Als Router wird ein TP-LINK TL-WR841ND mit der Gluon Firmware genutzt.
|Who=User:Mogwai
Diese Gluon Firmware basiert auf [//openwrt.org/ OpenWrt]. [https://openwrt.org/ OpenWrt] unterstützt eine [//wiki.openwrt.org/toh/start Vielzahl an Geräten]. Für den hier im Tutorial genutzten Router kann daher auf [//wiki.openwrt.org/toh/tp-link/tl-wr841nd#go_back_to_original_firmware dieses Tutorial] zurück gegriffen werden. Für andere Router kann die Vorgehensweise ggf. abweichen. Daher sollte für andere Geräte immer die [//wiki.openwrt.org/toh/start Table of Hardware] herangezogen werden.
|Status=running
|Tags=Keypad, ESP8266
}}
Ziel ist das Senden von Tasten Eingaben per WLAN an einen MQTT Server zur Weiterverarbeitung  (z.B. Steuerung von Raumfunktionen oder Lichteffekten)


= Vorgehensweise =


== Hardware ==
Im ersten Schritt, stellt man fest, um welches Gerät es sich handelt. Bei dem TP-LINK TL-WR841ND ist dies auf der Rückseite aufgedruckt.


* ESP8266
[[File:Router rueckseite.jpg|800px]]
* Alte Kassensystem Keypads aus dem Maschinendeck (Type FM015700C)


== Pinbelegung Keypad und ESP8266 (vorläufig) ==
Aus den Bild wird ersichtlich, dass es sich bei dem Router um ein TL-WR841ND in der Version 9.0 handelt.


{| class="wikitable"
== Originale Firmware vorbereiten ==
! Keypad Pin
! Funktion
! Tasten
! ESP8266 PIN
! ESP8266 Bemerkungen
|-
| 0 || Gehäuse Schließkontakt Kette || Alle Schließkontakte (3x) || GND || -
|-
| 1 || Zeile 1 || 1, 2, 3, Cancel || IO 0 || INPUT, Externer Pull-Up, da PIN HIGH sein muss zu starten des ESP, LOW (extra Taster) für Programmierung
|-
| 2 || Zeile 2 || 4, 5, 6, Clear || IO 2 || INPUT, Pull-Up intern
|-
| 3 || Gehäuse Schließkontakt Kette || Alle Schließkontakte (3x) || T_OUT / ADC || Pull-Up Extern (Spannungsteiler: GND - 100K - T_OUT - 220K - Kontakt - 10K - VCC)
|-
| 4 || Zeile 3 || 7, 8, 9, Enter || IO 4 || INPUT, Pull-Up intern
|-
| 5 || Zeile 0 || PfeilHoch, Select, PfeilRunter, 0 || IO 3 || RX als IO-PIN konfigurieren, INPUT, Pull-Up intern
|-
| 6 || Spalte 0 || PfeilHoch, 1, 4, 7 || IO 14 || OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
|-
| 7 || Spalte 1 || 2, 5, 8, 0 || IO 12 || OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
|-
| 8 || Spalte 2 || Select, 3, 6, 9 || IO 13 || OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
|-
| 9 || Spalte 3 || PfeilRunter, Cancel, Clear, Enter || IO 5 || OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
|}


== Tastencodes Keypad ==
Für jede Version des Routers, gibt es eine eigene [//www.tp-link.de/products/details/?categoryid=238&model=TL-WR841N#down Firmware beim Hersteller]. Hierbei muss man darauf achten ob, in der entpackten Datei, die Firmware einen boot part hat. Dies wird aus dem Namen des Images (Firmware) ersichtlich.


{| class="wikitable"
wr841nv5_en_3_12_5_up(100929).bin <- hat kein boot im Namen
! Tastencode
wr841nv9_en_3_16_9_up_boot(150104).bin <- hat boot im Namen
! Taste
! Zeichenzuordnung
|-  
|| 0x0000 || <keine> || <nix>
|-
|| 0x0001 || 1 || 1
|-
|| 0x0002 || 4|| 4
|-
|| 0x0004 || 7|| 7
|-
|| 0x0008 || PfeilHoch || u
|-
|| 0x0010 || 2 || 2
|-
|| 0x0020 || 5 || 5
|-
|| 0x0040 || 8|| 8
|-
|| 0x0080 || 0 || 0
|-
|| 0x0100 || 3 || 3
|-
|| 0x0200 || 6 || 6
|-  
|| 0x0400 || 9 || 9
|-
|| 0x0800 || Select || s
|-
|| 0x1000 || Cancel || x
|-
|| 0x2000 || Clear || c
|-
|| 0x4000 || Enter || e
|-
|| 0x8000 || PfeilRunter || d
|}


== Geplante Funktionen ==
Das Image für die Version 9 hat boot im Namen, daher muss der boot part aus dem Image entfernt werden.
* Senden der gedrückten Taste per MQTT
* Zusammenfassen mehrerer Zeichen als Zeichenkette und senden dieser Kette nach Drücken der "Enter" Taste
* Konfiguration per JSON String im SPIFFS des ESP
* Konfigurierbare Tastenwiederholung


== Konfiguration ==
=== Boot Part entfernen unter Linux ===


Die Konfiguration erfolgt per JSON String in der Deit config.txt im SPIFFS des ESP8266.
Hierzu lädt man sich unter Linux das Image vom Hersteller auf den Rechner.


{| class="wikitable"
<nowiki>
! Parameter (case sensitiv)
user@rechner:~$ cd Downloads/
! Funktion
user@rechner:~/Downloads$ wget http://www.tp-link.com.de/resources/software/TL-WR841N_V9_150104.zip
! Wertebereich
--2015-02-18 19:45:29-- http://www.tp-link.com.de/resources/software/TL-WR841N_V9_150104.zip
|-
Auflösen des Hostnamen »www.tp-link.com.de (www.tp-link.com.de)«... 91.250.77.30
| wifiSSID || WLAN SSID || String
Verbindungsaufbau zu www.tp-link.com.de (www.tp-link.com.de)|91.250.77.30|:80... verbunden.
|-
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
| wifiPassword || WLAN Passwort || String
Länge: 3241910 (3,1M) [application/x-zip-compressed]
|-
In »»TL-WR841N_V9_150104.zip«« speichern.
| mqttServer || IP Addresse des MQTT Servers || IPv4 als String
|-
| mqttServerPort || Portnummer des MQTT Servers || Numerisch 16-bit
|-
| mqttClientName || MQTT Client Name || String
|-
| mqttUser || MQTT Username || String
|-
| mqttPassword || MQTT Passwort || String
|-
| mqttPubTopic || MQTT Topic an das die Tastendaten geschickt wird || String
|-
| keypadDebounceTime || Debounce Zeit für Tastenerkennung in Ms || Numerisch 16-bit
|-
| keypadRepeatDelay || Wartezeit für erste Tastenwiederholung in Ms || Numerisch 16-bit
|-
| keypadRepeatInterval || Wiederholungsintervall bei Tastenwiederholung in Ms || Numerisch 16-bit
|-
| keypadRepeatMask || Maske der Tastencodes, für die eine Tastenwiederholung durchgeführt wird (siehe Tastencodes) || Numerisch 16-bit
|-
| keypadMultikeyTimeout || Timeout für Zusammenhängende Tasteneingabe in Ms || Numerisch 16-bit
|}


== MQTT Nachrichtenformat ==
100%[==========================================================>] 3.241.910  35,0KB/s  in 82s   


Die Übermittlung der Tasteninformationen erfolgt per MQTT mit folgendem Inhalt:
2015-02-18 19:46:52 (38,8 KB/s) - »»TL-WR841N_V9_150104.zip«« gespeichert [3241910/3241910]
</nowiki>


{| class="wikitable"
Als Nächstes entpackt man das gezippte Archiv
! Parameter (case sensitiv)  
 
! Funktion
<nowiki>
! Wertebereich
user@rechner:~/Downloads$ unzip TL-WR841N_V9_150104.zip
|-
Archive:  TL-WR841N_V9_150104.zip
| keycode || Maske der Tastencodes der gedrückten Taste(n) || 16-Bit Integer
creating: TL-WR841N_V9_150104/
|-
inflating: TL-WR841N_V9_150104/How to upgrade TP-LINK Wireless  N Router.pdf 
| keyrepeat || Anzahl der bisherigen Wiederholungen der Taste || 16-Bit Integer
inflating: TL-WR841N_V9_150104/wr841nv9_en_3_16_9_up_boot(150104).bin
|-
</nowiki>
| keychar || Zeichenentsprechung der gedrückten Taste(n) || String, sortiert nach Keycode bei mehreren gedrückten Tasten
 
|-
Daraufhin wechselt man in den nun erstellten Ordner und schneidet den boot part aus dem Image
| keystring || Enthält mehrerer hintereinander gedrückte Tasten, die mit Enter bestätigt wurden || String
 
|-
<nowiki>
| keypadEnclosureState || Ist Gehäuse geschlossen (1), oder offen (0)? || 8-Bit Integer
user@rechner:~/Downloads$ cd TL-WR841N_V9_150104/
|}
user@rechner:~/Downloads/TL-WR841N_V9_150104$ dd if=wr841nv9_en_3_16_9_up_boot\(150104\).bin of=tplink_stripped.bin skip=257 bs=512
7680+0 Datensätze ein
7680+0 Datensätze aus
3932160 Bytes (3,9 MB) kopiert, 0,62805 s, 6,3 MB/s
</nowiki>
 
=== Boot Part entfernen unter Windows ===
 
Hat man kein Linux zur Verfügung, kann man sich bei OpenWrt ein [//wiki.openwrt.org/toh/tp-link/tl-wr841nd#go_back_to_original_firmware stripped Image (ohne boot part)] herunter laden. Dies muss nicht immer das aktuellste Image vom Hersteller sein. Ggf. ist es daher ratsam, das Image des Herstellers in der Stock-Rom noch einmal zu aktualisieren. Dies funktioniert genau so, wie man das Freifunk Image auf den Router kopiert hat.
 
== Originale Firmware aufspielen ==
 
Das Image ohne Boot part muss nun auf das Gerät kopiert werden. Hierfür gibt es mehrere Möglichkeiten.
 
=== Möglichkeit 1: Übertragen und flashen mittels Weboberfläche ===
 
Man bootet den Router in den Config-Mode (QSS Taste gedrückt halten bis alle LEDs kurz aufleuchten) und ruft im Webbrowser die Adresse [http://192.168.1.1/] auf.
 
[[File:Firmware tp 1.png|800px]]
 
Daraufhin klickt man oben links auf Expert Mode und wählt Firmware aktualisieren aus. Auf der Seite wählt man nun, durch ein klick auf Durchsuchen das passende Image aus, entfernt den Haken bei Einstellung beibehalten und klickt auf Upload Image.
 
Nach dem Upload des Images wird eine weitere Seite im Webbrowser angezeigt.
 
[[File:Firmware tp 2.png|800px]]
 
Auf dieser Seite wird die [//de.wikipedia.org/wiki/Message-Digest_Algorithm_5 md5sum] angezeigt. Dies ist eine Kontrollfunktion um festzustellen, ob das Image korrekt auf den Router übertragen wurde.
 
Hat man das Image von OpenWRT heruntergeladen, befindet sich eine md5sum.txt Datei in dem entpackten Ordner. Wenn die in der Datei enthaltende md5sum mit der angezeigten md5sum übereinstimmt, wurde das Image korrekt übertragen.
 
Ist alles in Ordnung, klickt man auf Fortfahren und der Router wird geflasht und neugestartet. Dies kann bis zu 5 Minuten dauern und darf auf keinen Fall unterbrochen werden. War dies erfolgreich, ist der Route unter der Adresse [http://192.168.0.1/] mit der Stock-Rom zu erreichen.
 
=== Möglichkeit 2: Übertragen mittels Konsole/Shell ===
 
Unter Linux per Konsole mit scp das Image auf das Gerät kopieren:
Hierfür muss die IPv6 bekannt und ssh aktiviert sein. In diesem Beispiel ist es die 2a03:1234:56:7:8912:34:567:8912
Falls noch nicht geschehen, muss man den rsa2 Schlüssel-Fingerabdruck akzeptieren.
 
<nowiki>
user@rechner:~/Downloads/TL-WR841N_V9_150104$ scp tplink_stripped.bin
root@[2a03:1234:56:7:8912:34:567:8912]:/tmp/
root@2a03:1234:56:7:8912:34:567:8912's password:
tplink_stripped.bin                                              100% 3840KB  1.9MB/s  00:02
</nowiki>
 
Als nächstest [[#Flashen mittels Konsole|flasht man das Image]].
 
=== Möglichkeit 3: Übertragen mittels WinSCP unter Windows ===
 
[[File:Winscp dialog1.PNG|800px]]
 
Unter Windows mit WinSCP das Image auf das Gerät kopieren:
Hierfür muss die IPv6 bekannt und ssh aktiviert sein. In diesem Beispiel ist es die 2a03:1234:56:7:8912:34:567:8912
 
Hierzu wählt man als Übertragungsprotokoll scp aus und gibt die IPv6 Adresse und die ssh Zugangsdaten ein.
 
[[File:Winscp dialog2.PNG|800px]]
 
Falls noch nicht gesehen, muss man den rsa2 Schlüssel-Fingerabdruck durch klicken auf ja akzeptieren.
 
[[File:Winscp dialog3.PNG|800px]]
 
Als nächstes navigiert man im Programm auf der Routerseite (im Bild rechts) in den Ordner tmp. Auf der linken Seite (lokaler PC) sollte das Verzeichnis mit dem Image geöffnet sein.
Im nächsten Schritt schiebt man per Drag and Drop das Image in den Ordner tmp des Routers.
 
Als nächstest [[#Flashen mittels Konsole|flasht man das Image]].
 
=== Flashen mittels Konsole ===
 
Hat man die die oben beschriebenen Möglichkeiten 2 oder 3 gewählt, muss man sich mit einem Terminal (gnome-shell, Putty etc.) auf den Router per SSH anmelden.
 
Hat man sich erfolgreich auf den Router angemeldet, führt man ein sysupgrade aus.
 
<nowiki>
  _______                    ________        __
|       |.-----.-----.-----.|  | | |.----.|  |_
|   -   ||  _  | -__|    ||  |  |  ||  _||  _|
|_______||   __|_____|__|__||________||__| |____|
          |__| W I R E L E S S  F R E E D O M
-----------------------------------------------------
BARRIER BREAKER (Barrier Breaker, r43483)
-----------------------------------------------------
* 1/2 oz Galliano        Pour all ingredients into
* 4 oz cold Coffee        an irish coffee mug filled
* 1 1/2 oz Dark Rum      with crushed ice. Stir.
* 2 tsp. Creme de Cacao
-----------------------------------------------------
 
root@FF-RE-DAT-Dev:~# sysupgrade /tmp/tplink_stripped.bin
Saving config files...
killall: watchdog: no process killed
Sending TERM to remaining processes ... uhttpd dnsmasq ntpd udhcpc odhcp6c odhcp6c dnsmasq alfred Write
failed: Broken pipe
user@rechner:~$
</nowiki>
 
Daraufhin startet der Router neu. Dies kann bis zu 5 Minuten dauern und darf auf keinen Fall unterbrochen werden. War dies erfolgreich, ist der Route unter der Adresse [http://192.168.0.1/] mit der Stock-Rom zu erreichen.