Eingehende Meldung von Telnet in Variable schreiben

  • Ersteller Benutzer 189756
  • Erstellt am

Benutzer 189756

Gast
Hallo
ich sende über Telnet im Terminal Befehle an meinen Verstärker (Revox M51), und erhalte entsprechende Rückmeldungen.
z.B.
00:STATUS:IR:LIGHT:57:1:
00:STATUS:IR:LIGHT:40:1:
wie kann ich diese Rückmeldung in meinem Script in eine Variable schreiben?
z.B.

set telnet to "telnet 192.168.1.xxx. xx"
tell application "Terminal"
run
do scripttelnet
do script "00:SET:VOLUME:10" inwindow 1
delay 2
closewindow 1

end tell

Besten Dank für Hilfe Peter
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Was bekommst du denn mit

do shell script "echo 00:SET:VOLUME:10 | telnet 192...."

?
 

Benutzer 189756

Gast
Hallo Pill
auf dieses Script:
set telnet to "telnet 192.168.1.202 23"
tell application "Terminal"
run
do script
telnet
delay 1
do script "00:SET:VOLUME:10" inwindow 1
do shell script "echo 00:SET:VOLUME:10| telnet 192.168.1.202 23"
delay 10
closewindow 1

end tell
erhalte ich folgende Fehlermeldung:

error "„Terminal" hat einen Fehler erhalten: Connection closed by foreign host." number 1
mach ich da was falsch ?

Um eine Statusmeldung vom Verstärker zu erhalten, muss ich keinen Befehl senden, der Status wird im Terminalfenster fortlaufend aktualisiert, sobald sich der Status ändert.
im Terminal erscheint:
00:SET:VOLUME:10
00:OK:
00:STATUS:pRESS:Tuner :
00:STATUS:ROOM:10:1:MyMusic :SRF 1 :0:
Und eben die letzte Zeile im Terminal möchte ich in eine Variable schreiben und danach auswerten.
Gruss Peter
 
Zuletzt bearbeitet von einem Moderator:

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

ich bin sehr sicher, dass Pill dein Anliegen soweit verstanden hat :cool: Und sein Lösungsvorschlag ist der richtige Weg.
Führe nur den geposteten Code aus ... wobei da wohl noch ein delay rein muss (1 Sekunde sollte reichen, hier 2 wie in deinem Skript):
Code:
set theStatus to last paragraph of (do shell script "sleep 2; echo 00:SET:VOLUME:10 | telnet 192.168.1.202 23")

sonst probehalber auch mal nur
Code:
set theStatus to last paragraph of (do shell script "telnet 192.168.1.202 23")

Das sollte die letzte Zeile des Status zurückgeben
Allerdings kenne ich mich mit telnet nicht aus...ist nur auf dem Code von Pill aufbauend

Gruß
 

Benutzer 189756

Gast
danke Sedna,
geht leider nicht.
wenn ich einen von Dir vorgeschlagenen Code im AppleScript Editor laufen lasse, erscheint die Fehlermeldung:
error "Connection closed by foreign host." number 1
Gruss Peter
 

Benutzer 189756

Gast
Hallo
bin jetzt endlich fündig geworden, das Ganze ohne Terminal zu steuern.

Befehl senden:
do shell script "echo 00:SELECT:CD:\r | nc 192.168.1.202 23" (Eingabe im skript Editor)
wird nach dem Übersetzen so angezeigt
do shell script "echo 00:SELECT:CD:
|nc 192.168.1.202 23"

Status abfragen:
do shell script "echo" & " | nc -i " & 2 & " 192.168.1.202 23"

Rückmeldung:
00:STATUS:ROOM:10:1:DVD/CD :play :0:

Antwort in Variable schreiben:
set myString to result

String zerlegen:
set Pos to offset of "STATUS" in myString

set StatusM51 to text (Pos - 3) through (Pos + 52) of myString

set VolumeM51 to text (Pos + 12) through (Pos + 13) of myString

set PowerM51 to text (Pos + 15) through (Pos + 15) of myString

set SourceM51 to text (Pos + 17) through (Pos + 32) of myString

set InfoM51 to text (Pos + 34) through (Pos + 49) of myString

set MuteM51 to text (Pos + 51) through (Pos + 51) of myString

Funktioniert prima
Gruss
Peter