Seite 1 von 1

Telnet Antwort in Variable speichern?

Verfasst: 04.12.2011, 13:08
von mrMuppet
Hallo,
bin leider immer noch Anfänger was die Skripte angeht und komme seit einigen Tagen nicht mehr weiter:

Ich möchte eine Informationen meiner Squeezebox Webradios gerne in Homemtic Variablen speichern (um sie dann auf meinem Mediola a.i.o control Android-Touchpanel anzuzeigen). Die Radios verstehen entweder Telnet Befehle oder JSON-RPC (hab ich gar keine Ahnung von).

Bisher schicke ich (Telnet-)Befehle per Netcat:

sendcmdradio.sh

Code: Alles auswählen

    echo 00:04:21:29:6a:0f $@ | /etc/config/addons/busybox/busybox ./busybox nc 192.168.178.28 9090
und dann einen Aufruf:

Code: Alles auswählen

    string stdout;
    string stderr;
    system.Exec("sh /usr/local/sendcmdradio.sh stop ",&stdout,&stderr);
Bei diesen Befehlen brauche ich nun keine Rückmeldung. Jetzt möchte ich das Kommando "title ?" benutzen auf den das Radio den aktuellen Songtitel zurückliefert. Diese Rückmeldung möchte ich in einer Variable ablegen. Oder wenn es einfacher ist in einer temp-Datei.
An den Server 192.168.178.28 9090 muss also die MAC und danach "title ?" gesendet werden.
Ich habe in die sh-datei schon mal ein ">sb.txt" eingebaut

Code: Alles auswählen

  echo 00:04:21:29:6a:0f $@ >sb.txt| /etc/config/addons/busybox/busybox ./busybox nc 192.168.178.28 9090
aber die Datei beinhaltete dann nur den Aufruf und nicht die Antwort.

Oder ist es einfacher JSON-RPC für diese Problem zu verwenden? Davon hab ich leider gar keine Plan...

Wer kann mir helfen?

Re: Telnet Antwort in Variable speichern?

Verfasst: 04.12.2011, 20:09
von mrMuppet
Ok. Das speichern hab ich schon mal herausgefunden. Das Problem bestand darin, dass netcat einfach zu schnell die Verbindung beendet hat. NAchdem ich jetzt "-i 2" eingebaut habe klappts:

Code: Alles auswählen

echo "00:04:20:22:4c:50 artist ?" | /etc/config/addons/busybox/busybox ./busybox nc -i 2 192.168.178.28 9090 >/tmp/sq.txt 
Jetzt muss ichs noch hinbekommen die datei auszulesen und in einer Variable abzuspeichern.

Tipps are welcome!

Re: Telnet Antwort in Variable speichern?

Verfasst: 05.12.2011, 11:51
von owagner
Was steht denn in der Variable "stdout" nach dem system.Exec()-Aufruf?

Re: Telnet Antwort in Variable speichern?

Verfasst: 05.12.2011, 16:13
von mrMuppet
owagner hat geschrieben:Was steht denn in der Variable "stdout" nach dem system.Exec()-Aufruf?
Keine Ahnung, ich werde es heute abend mal auslesen. Wär ja spitze wenn da schon was brauchbares zu finden ist!

Re: Telnet Antwort in Variable speichern?

Verfasst: 05.12.2011, 19:29
von mrMuppet
Em... wieder ne peinliche Anfängerfrage: Wie lese ich stdout denn aus? Leg ich einfach ne Systemvariable gleichen Namens an und lass mir diese anzeigen?

Re: Telnet Antwort in Variable speichern?

Verfasst: 08.12.2011, 22:01
von mrMuppet
Habs jetzt mit dem XML-API (FW-Patch) und statechange.cgi gemacht.

Code: Alles auswählen

export SYSVAR_ID=3883
export SYSVAR_VALUE="$(echo "00:04:20:22:4c:50 artist ?" | /etc/config/addons/busybox/busybox ./busybox nc -i 5 192.168.178.28 9090)"
wget  "http:///config/xmlapi/statechange.cgi?ise_id=$SYSVAR_ID&new_value=$SYSVAR_VALUE"
leider bekomme ich noch die Fehlermeldung:

Code: Alles auswählen

wget: statechange.cgi?ise_id=3883&new_value=00%3A04%3A20%3A22%3A4c%3A50 artist WDR%205%20Hotline: Read-only file system
Woran kann das jetzt wieder liegen?

Edit:
hab die wget-Zeile jetzt geändert:

Code: Alles auswählen

wget -0 /dev/null -q http:/192.168.178.22//config/xmlapi/statechange.cgi?ise_id=$SYSVAR_ID&new_value=$SYSVAR_VALUE
Leider bekomme ich jetzt:
wget: server returned error 400: HTTP/1.0 400 Bad Request

Re: Telnet Antwort in Variable speichern?

Verfasst: 09.12.2011, 08:25
von Tank
Hallo MrPuppet,
nur um mal das offensichtliche auszuschliessen: im oberen Beispiel hast Du wget "http:///co...
, ohne CCU IP,
im unteren Beispiel hast Du http:/192.168.178.22//con.., also der Doppelslash gehört hinter http, nach der IP nur ein einfacher....
Weiss nicht ob das die Ursachen für Deine Fehler sind.
Jedenfalls musst Du bei den Aufrufen sorgfältiger sein! In der Regel sind es solche Flüchtigkeitsfehler!

Gruss Josef