Per Telnet Ereignisse eines anderen Rechners erfassen und darauf auf der FB reagieren

miwu

Neuer User
Mitglied seit
25 Jun 2005
Beiträge
79
Punkte für Reaktionen
7
Punkte
8
Hallo,

ich habe nun schon lange geforscht, bin aber leider bisher noch auf keine richtige Lösung gestoßen, die ich mit Freet umsetzen könnte. Die Frage geht an die Shell-Script versierten Leute hier.

Auf meiner Fritz-Box habe ich Freetz 1.1.2. Mit Hilfe der Callmonitor-Scripts roku.sh kann ich perfekt Infos auf meiner Soundbridge anzeigen lassen. Nun würde ich gern erreichen, daß ich auf Knopfdruck auf der Fernbedienung der Soundbridge ein Script auf der Fritz-Box ausführen lasse.

Folgende Sachen kann ich nutzen:

- Die Soundbridge ist per Telnet unter Port 4444 ansprechbar, die Netzwerkverbindung wird durch die Soundbridge nie unterbrochen.
- Auf der Soundbridge selbst kann nichts (Scripts o.ä.) gespeichert werden.
- Auf der Soundbridge gibt es in der "SB-Shell" (ich nenne die jetzt mal so) ein Kommando, mit dem ich Tastenbetätigungen erkennen kann. Es müßte nach dem Aufbau der Telnet-Session gestartet werden.
- Dieses Programm gibt nun immer die gerade gedrückte Taste aus. Wenn nun eine bestimmte Taste gedrückt wird hieße die Ausgabe z.B. "CK-West" (ohne die "")
- Wenn "CK-West" gedrückt und erkannt wird soll auf der Fritz-Box ein dort abgelegtes Script einmal gestartet werden.

Gibt es eine Chance, so etwas mit den in Freetz vorhandenen Paketen hinzubekommen? Ich wäre für jeden Tip dankbar. Ein klein wenig Shell-Programmierung berherrsche ich, zunächst würde mir eine Idee reichen, wie ich den "Listener" über Telnet hinbekommen könnte.

Vielen Dank!

Miwu
 
Dank, ich probiere es heute abend gleich aus und poste mein Ergebnis.
 
Hallo,

leider klappts mit netcat nicht so ganz. Wenn ich

Code:
echo "irman echo" | nc sb 4444

aufrufe verbindet er sich mit der Soundbridge, führt das Kommando aus (je nach KOmmando sehe ich auch den Output), allerdings hält er die Session nicht, damit die Fernbedieungskommandos auch wirklich erfasst werden.

Konkret siehts so aus (ich habe mir mal die Firmwareversion ausgeben lassen):

Code:
/var/tmp/flash # echo "version" | nc soundbridge 4444


Welcome to the SoundBridge Shell version 3.0.52 Release
Type '?' for help or 'help <command>' for help on <command>.

SoundBridge> version: software version  3.0.52 Release
         blackfin revision 4

SoundBridge> /var/tmp/flash #

Vielleicht liegts daran, daß die SB nach Ausführung des Kommandos wieder in ihren eigenen Prompt zurückspringt? Dies würde das Fernbedieungs-Capture-Programm aber auch machen und die gedrückten Knöpfe einfach auf der Konsole ausgeben.

Gibt es eine Chance, die Session zu halten?

Vielen Dank!

Miwu
 
Spuer, das klappt, auf ein

Code:
 ( echo "irman echo"; sleep 86400 )  | nc sb 4444

bekomme ich folgenden Output

Code:
Welcome to the SoundBridge Shell version 3.0.52 Release
Type '?' for help or 'help <command>' for help on <command>.

SoundBridge>
SoundBridge> irman: CK_SOUTH
irman: CK_SOUTH
irman: CK_SOUTH

Die dreimal CK_South bedeuten, ich habe dreimal die runter-Taste auf der Fernbedinung gedrückt.

Nun wollte ich ja bei CK_South ein Script ausführen lassen. Ich versuchte also Folgendes:

Code:
( echo "irman echo"; sleep 86400 )  | nc sb 4444 |\
while read line; do
   if $line = *CK_SOUTH*;
   then echo "Hallo";
  fi
   done

Leider scheinen jetzt alle Outputs der Soundbridge als Kommando aufder Fritz-Box interpretiert zu werden, d.h. die FB versucht, jede ausgegebene Zeile auszuführen, was dann zu sowas führt:

Code:
: not foundine 6:
: not foundine 6:
knopf.sh: line 6: Welcome: not found
knopf.sh: line 6: Type: not found
: not foundine 6:
knopf.sh: line 6: SoundBridge>: not found

knopf.sh heißt das Script, in das ich alles verpackt habe.

Ich habe da sicher einen Denkfehler, was die Verarbeitung der Ausgaben angeht, kannst Du mir da nochmal weiterhelfen?

Vielen Dank schonmal für Deine Hilfe!

Miwu
 
Schreibe das if richtig als case, denn Du möchtest ja einen Wildcard-Vergleich:
Code:
case "$line" in
*CK_SOUTH*) echo "Hallo" ;;
*) ;;
esac
--gandalf.
 
Du solltest Dich etwas mit Shell-Programmierung befassen.

Das oben sollte wohl lauten
Code:
while read line; do
  case "$line" in
  *CK_SOUTH*)
    echo "Hallo"
    ;;
  esac
done
Es gibt sicher noch andere Möglichkeiten, aber das if in der obigen Form funktioniert so nicht.
 
Die While-Schleife hatte ich ganz vergessen, rauszunehmen, aber dafür hatte es dann gleich beim ersten Versuch perfekt funktioniert.

Ihr habt mir sehr geholfen. Nun klappt alles, wie ichs mir erträumt habe. Auf Knopfdruck kann ich mir nun die aktuellen Abfahrtszeiten meiner Straßenbahnhaltestelle auf der Soundbridge anzeigen lassen, einfach toll.

Vielen Dank an Euch beide.

Miwu
 
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.