Status AVR mit netcat, socat oder ähnlichem abfragen

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

Status AVR mit netcat, socat oder ähnlichem abfragen

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?

Code: Alles auswählen

printf "%s\r\n" ?V |nc -w 1 192.168.178.58 8102
Gibt aus:

Code: Alles auswählen

VOL023
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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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.
cux_schalter.png
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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Benutzeravatar
AndreO
Beiträge: 205
Registriert: 24.09.2013, 22:11
Wohnort: Die Rhön is schön :-)
Hat sich bedankt: 4 Mal

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Benutzeravatar
AndreO
Beiträge: 205
Registriert: 24.09.2013, 22:11
Wohnort: Die Rhön is schön :-)
Hat sich bedankt: 4 Mal

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Re: Status AVR mit netcat, socat oder ähnlichem abfragen

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

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“