[Info] Hardwarelösung als Ersatz für debug.cfg ohne FW-Modifikation

HeHe

Neuer User
Mitglied seit
19 Feb 2005
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo,
in den neueren Versionen des Fritz!OS ist leider die Verwendung von debug.cfg und inzwischen auch Telnet abgeschaltet.
Da ich diese Funktionen weiter nutzen möchte ohne die Firmware zu modifizieren, habe ich mir eine preiswerte Hardwarelösung ausgedacht.
Eventuell besteht ja auch bei anderen ein Interesse an dieser Lösung.

Dazu nutze ich die Serielle Konsole der Fritz-Box und einen speziell programmieten Arduino.
Die Serielle Konsole ist hier http://www.wehavemorefun.de/fritzbox/Serielle_Konsole beschrieben.
Als Arduino habe ich ein "Arduino kompatibeles ATmega Pro Mini /3,3V, 8MHz" Modul benutzt.

Folgende Verbindungen müssen hergestellt werden:
Fritz-Box Gnd --- Arduino Gnd
Fritz-Box Txd --- Arduino Rx
Fritz-Box Rxd --- Arduino Tx
Fritz-Box 3V3 --- Arduino VCC

Damit ist der Arduino in der Lage, die Meldungen der Konsole zu lesen und auch Befehle an die Konsole zu senden.

Im Arduino läuft ein Programm, das auf die Konsolmeldung "Please press Enter to activate this console." wartet,
anschliessend die Konsole aktiviert und einen Befehl ausgibt.

Hier das Programm:
Code:
// FritzBox Autostart ueber Console
// Fuer Arduino Pro Mini
// (C) H. Hennek 30.07.2015

String compareString = "Please press Enter to activate this console."; // String auf den gewartet wird
String commandString = "[ -x /data/rc.data ] && /data/rc.data";        // Befehl der dann ausgefuehrt wird
int cSlen = compareString.length();                                    // compareStringlaenge
int cSIndex = 0;                                                       // Zeiger auf Zch im Suchstring
boolean found = false;                                                 // Flag ob Suchstring gefunden
int ledPin = 13;                                                       // Interne LED am Pin 13
void setup() {
  pinMode(ledPin, OUTPUT);                                             // setzt den LED Pin als Ausgang
  digitalWrite(ledPin, LOW);                                           // schaltet die LED aus
  Serial.begin(38400);                                                 // Baudrate der seriellen Console
}
void loop() {
  if (found == true) {
    digitalWrite(ledPin, HIGH);                                        // schalte die LED ein, String gefunden
    found = false;
    Serial.print(char(13));                                            // Enter senden um die Console zu aktivieren
    delay(1000);                                                       // 1 Sekunde warten
    Serial.print(commandString);                                       // Befehl ausgeben
    Serial.print(char(13));                                            // Enter ausgeben
  }
}

void serialEvent() {                                                   // wird bei Empfang eines Zch aufgerufen
  while (Serial.available()) {                                         // Schleife solange Zch im Puffer sind
    char inChar = Serial.read();                                       // Zch. einlesen
    if (inChar == compareString[cSIndex]) {                            // Pruefen ob das Zch jetzt erwartet wird
      cSIndex ++;                                                      // Zeiger in Suchstring weiterschalten
      if (cSIndex == cSlen) {                                          // Pruefen ob letztes Zch im Suchstring gefunden
        found = true;                                                  // Flag Suchstrin gefunden setzen
      }
    }
    else
    {                                                                  // Falsches Zch empfangen
      cSIndex = 0;                                                     // Zeiger in Suchstring ruecksetzen
    }
  }
}

Der ausgegebene Befehl [ -x /data/rc.data ] && /data/rc.data prüft ob die Datei
/data/rc.data vorhanden ist und führt sie dann aus.

Die /data/rc.data muss manuell angelegt werden und hat bei mir folgenden Inhalt:
Code:
#!/bin/sh
eventadd 1 "Start rc.data"
/usr/sbin/telnetd -l /sbin/ar7login
eventadd 1 "Ende rc.data"

Damit wird eine Startmeldung in die Ereignisse geschrieben, Telnet gestartet und eine Endemeldung in die Ereignisse geschrieben.

Im gewählten Speicherort /data bleibt die Datei auch nach Neustart oder Netzausfall erhalten.
Den Weg mit dem Script in /data habe ich gewählt um Änderungen am Script vornehmen zu können, ohne den Arduino umzuprogrammiern.

Viele Grüße
Helmut
 
Interessanter Ansatz, nur die Box zu öffnen und die Pins anzuschließen halte ich für invasiver als eine Softwareanpassung.
 
Das stimmt,
aber die Box lässt sich leicht öffnen ohne Spuren zu hinterlassen und da die Kontaktstellen gebohrt/durchkontaktiert sind lässt sich mit etwas Bastelgeschick auch eine sichere Kontaktierung ohne Lötarbeiten an der Box erreichen.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.