Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI
Moderator: Co-Administratoren
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 16.12.2015, 20:09
Hallo zusammen,
kann meinen Pioneer AVR mittels Telnet steuern. Das funktioniert aber nur von einem PC aus, mit der CCU bekomme ich es nicht hin.
Kann mir jemand einen Tipp geben wie ich folgendes Kommando auf der CCU nachbilden kann?
Gibt aus:
Davon bräuchte ich die Lautstärke "023" in einer Systemvariable. Habe nun schon netcat, socat probiert, leider erfolglos.
Wäre toll wenn jemand eine Lösung hätte.
Danke, Jochen
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 16.12.2015, 20:34
Antworte mir mal selber
Code: Alles auswählen
echo -ne ?V\\r|/usr/local/addons/cuxd/extra/nc -w1 $RECEIVERIP $RECEIVERPORT
Jetzt muss ich das noch mit CUXD hinbekommen und die Ausgabe in eine VAriable schreiben.
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 16.12.2015, 21:39
Mit CUXD bekomme ich es nicht hin:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("sh /usr/local/addons/avr/volume.sh");
dom.GetObject("CUxD.CUX2801001:1.QUERY_RET").State(1);
v = dom.GetObject("CUxD.CUX2801001:1.RETS").State();
Code: Alles auswählen
#!/bin/bash
RECEIVERIP=192.168.111.11
RECEIVERPORT=8102
PAUSE=1
echo -ne ?V\\r|/usr/local/addons/cuxd/extra/nc -w1 $RECEIVERIP $RECEIVERPORT
Versuch mit TCL Script ist leider auch erfolglos:
Code: Alles auswählen
load tclrega.so
# Aufruf und Erstellung der Datei
# ===============================
set cmd "echo -ne ?V\\r|/usr/local/addons/cuxd/extra/nc -w1 192.168.111.11 8102"
set ret [exec sh -c $cmd]
# Wert in Variable schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('avr_volume');"
append rega_cmd "w0.State('$ret');"
rega_script $rega_cmd
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
Bulli
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Beitrag
von Bulli » 17.12.2015, 13:11
Hallo
dein Script kann nicht funktionieren, es gibt keine bash.
ohne bash
Code: Alles auswählen
#!/bin/sh
RECEIVERIP=192.168.111.11
RECEIVERPORT=8102
PAUSE=1
echo -ne ?V\\r|/usr/local/addons/cuxd/extra/nc -w1 $RECEIVERIP $RECEIVERPORT
Wenn das jetz läuft kannst du es mit den cuxd machen einfach in cmd_short reinschreiben.
ps dein cuxd Beispiel ist auch nicht ganz richtig, da fehlt var und 2x CMD_
Gruß
Bulli
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 18.12.2015, 22:29
Hi,
sorry, hatte früher keine Zeit.
Danke für Deine Tipps, nun geht es.
Hab vor lauter probieren den Überblick verloren.
Grüße, Jochen
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 31.01.2016, 16:27
Hallo,
habe nun ein Homematic Script erstellt, mit dem ich die Lautstärke des AVR setzen kann. Sind einige Krücken drin und kann von den Script Profis sicher optimiert werden, aber es funktioniert
.
Code: Alles auswählen
!gewünschte Lautstärke
integer setvol = dom.GetObject("avr_volume_set").State();
!AVR IP
string AVRIP="192.168.111.111";
string AVRPORT="8102";
string CMDWAIT="1";
!Script
string volcmd="?V";
string cr="\\r";
dom.GetObject("avr_volume").State(0);
string cmdline="echo "#volcmd#""#cr#"|/usr/local/addons/nc -w"#CMDWAIT#" "#AVRIP#" "#AVRPORT#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmdline);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string volstring = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
integer vol = volstring.Substr(3, 3).ToInteger();
integer loops=((setvol-vol)/2).ToInteger();
if(loops < 0){
loops = loops*-1;
volcmd="VD";
}else{
volcmd="VU";
}
WriteLine(vol);
WriteLine(loops);
WriteLine(volcmd);
integer count;
while (count < loops) {
count = count + 1;
WriteLine(count);
cmdline="echo "#volcmd#""#cr#"|/usr/local/addons/nc -w"#CMDWAIT#" "#AVRIP#" "#AVRPORT#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(cmdline);
}
!Aktuelle Lautstärke in Variable schreiben
volcmd="?V";
string cmdline="echo "#volcmd#""#cr#"|/usr/local/addons/nc -w"#CMDWAIT#" "#AVRIP#" "#AVRPORT#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmdline);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string volstring = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
integer vol = volstring.Substr(3, 3).ToInteger();
dom.GetObject("avr_volume").State(vol);
vol = dom.GetObject("avr_volume").State();
edit: Script bereinigt. Steuerung über zwei Systemvariablen
Folgendes wird gebraucht:
- cuxd
- Zwei Systemvariablen: avr_volume_set und avr_volume vom Typ Zahl
- Ein Programm das auf die Variable avr_volume_set triggert und dann das Script ausführt
In die zweite Variable wird der gelesene Wert der Lautstärke geschrieben.
Grüße, Jochen
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
AndreO
- Beiträge: 205
- Registriert: 24.09.2013, 22:11
- Wohnort: Die Rhön is schön :-)
- Hat sich bedankt: 4 Mal
Beitrag
von AndreO » 02.02.2016, 20:43
N'Abend!
das sieht ja echt klasse aus!! Ich hatte es schon lange am Laufen, den AVR per SOCAT zu steuern, aber Stati auslesen hatte ich bisher nicht geschafft.
Dank der Anleitung klappt es nun per Putty den Einschaltzustand des AVR mit folgendem Befehl auszulesen:
echo -ne ?P\\r|/usr/local/addons/socat/nc -w1 192.168.250.50 8102
Leider wird die Verbindung dann nicht mehr beendet. Und ohne Beendung läuft ein Skript nicht weiter, was auf dem Ergebnis basieren soll. Hat da jemand ne Idee?
Viele Grüße,
André
piVCCU auf RaspberryPi3 (mit Funkmodul), CUL-Stick, 95 wireless Sensoren + Aktoren, 2 FS20-Sensoren + Aktoren
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 02.02.2016, 21:36
Wieso willst du das per Putty machen? Vom PC aus oder wie?
Wenn ja, dann musst du plink.exe nehmen.
Von der CCU aus kannst du das auch mit dem Script machen.
Musst nur das Kommando austauschen. So etwa:
Code: Alles auswählen
!AVR IP
string AVRIP="192.168.111.111";
string AVRPORT="8102";
string CMDWAIT="1";
!Script
string volcmd="?P";
string cr="\\r";
string cmdline="echo "#volcmd#""#cr#"|/usr/local/addons/nc -w"#CMDWAIT#" "#AVRIP#" "#AVRPORT#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmdline);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string statestring = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten
-
AndreO
- Beiträge: 205
- Registriert: 24.09.2013, 22:11
- Wohnort: Die Rhön is schön :-)
- Hat sich bedankt: 4 Mal
Beitrag
von AndreO » 02.02.2016, 21:40
Hi JoeHMS,
Danke für die Antwort! Ich möchte es gern per Shell-Skript direkt im Linux laufen lassen. Also ohne Cuxd-Gerät. Und das Skript bleibt genauso hängen, wie Putty ohne Strg - C nicht aus dem Programm kommt....
Viele Grüße,
André
piVCCU auf RaspberryPi3 (mit Funkmodul), CUL-Stick, 95 wireless Sensoren + Aktoren, 2 FS20-Sensoren + Aktoren
-
JoeHMS
- Beiträge: 340
- Registriert: 28.02.2012, 11:09
- Danksagung erhalten: 1 Mal
Beitrag
von JoeHMS » 02.02.2016, 21:48
Wo im Linux? Auf der CCU oder auf nem anderen Rechner?
Das schreibt auf der CCU in eine Datei:
Code: Alles auswählen
#!/bin/sh
RECEIVERIP=192.168.111.111
RECEIVERPORT=8102
PAUSE=1
echo -ne ?V\\r|/usr/local/addons/cuxd/extra/nc -w2 $RECEIVERIP $RECEIVERPORT >/usr/local/addons/avr/vol.txt 2>&1
Oder in der Art:
Code: Alles auswählen
#!/bin/sh
RECEIVERIP=192.168.111.111
RECEIVERPORT=8102
PAUSE=1
echo $1
state=$(echo -ne ?P\\r|/usr/local/addons/cuxd/extra/nc -w$PAUSE $RECEIVERIP $RECEIVERPORT)
echo aktuell $state
CCU3( 3.47.22 piVCCU3) auf RasPi4 * Wired * CUXD(2.3.3) mit CUL868 (v1.66), 1 Wire USB FTDI * Redmatic * Synology mit ccu-historian spk (V2.3.0) * ccu.io(1.0.51) * dashui(0.9beta120) openHAB 2.5.0 mit auf RasPI 4
-------------------------------------------------------------------------------------------------------------------
132 Kanäle in 38 Geräten und 140 CUxD-Kanäle in 21 CUxD-Geräten