Telnet Antwort in Variable speichern?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
mrMuppet
Beiträge: 220
Registriert: 22.04.2011, 20:29
Hat sich bedankt: 1 Mal

Telnet Antwort in Variable speichern?

Beitrag von mrMuppet » 04.12.2011, 13:08

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?
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

mrMuppet
Beiträge: 220
Registriert: 22.04.2011, 20:29
Hat sich bedankt: 1 Mal

Re: Telnet Antwort in Variable speichern?

Beitrag von mrMuppet » 04.12.2011, 20:09

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!
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: Telnet Antwort in Variable speichern?

Beitrag von owagner » 05.12.2011, 11:51

Was steht denn in der Variable "stdout" nach dem system.Exec()-Aufruf?

mrMuppet
Beiträge: 220
Registriert: 22.04.2011, 20:29
Hat sich bedankt: 1 Mal

Re: Telnet Antwort in Variable speichern?

Beitrag von mrMuppet » 05.12.2011, 16:13

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!
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

mrMuppet
Beiträge: 220
Registriert: 22.04.2011, 20:29
Hat sich bedankt: 1 Mal

Re: Telnet Antwort in Variable speichern?

Beitrag von mrMuppet » 05.12.2011, 19:29

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?
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

mrMuppet
Beiträge: 220
Registriert: 22.04.2011, 20:29
Hat sich bedankt: 1 Mal

Re: Telnet Antwort in Variable speichern?

Beitrag von mrMuppet » 08.12.2011, 22:01

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
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

Tank
Beiträge: 60
Registriert: 20.11.2011, 12:08

Re: Telnet Antwort in Variable speichern?

Beitrag von Tank » 09.12.2011, 08:25

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

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“