Hey,
hier mal ein kleines Demo-Skript wie man AV-Receiver von Yamaha übers Netzwerk steuern kann.
Ich hab nur den Post-Request eingebaut. Get macht bei einem cmdline Tool wenig Sinn.
Benutzung: Man Übergibt den gewünschten Befehle wie z.B.:
Zitat<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>
per cmdline und der Befehl wird an den Yamaha AVR gesendet.
In der INI muss eigentlich nur die entsprechende IP des Receivers eingetragen werden.
Unterstützte Receiver: RX-A3010, RX-A2010, RX-A1010, RX-A810, RX-A710, RX-V3071, RX-V2071, RX-V1071, RX-V871, RX-V771. RX-V671 (möglicherweise auch andere).
Spoiler anzeigen
#include <WinHTTP.au3>
#include <Misc.au3>
#include <File.au3>
;;
;; Author: nuts (http://www.autoit.de)
;;
Global $title = "Yamaha_Network"
_Singleton($title)
Global $version = "0.1"
Global $konfigdir = @AppDataCommonDir & "\my_scripts\"
Global $ini = $konfigdir & $title & ".ini"
Global $log = $konfigdir & $title & ".log"
If Not FileExists($ini) Then _Createini()
Global $Yamaha_IP = IniRead($ini, "Settings", "IP", "")
Global $Yamaha_Port = IniRead($ini, "Settings", "Port", 80)
Global $writelog = Int(IniRead($ini, "Settings", "Debug", 1))
Global $POSTdata = ""
If $writelog Then _FileWriteLog($log, "Startup - Version: " & $version, 1)
[/autoit] [autoit][/autoit] [autoit];Global $power_off='<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>Standby</Power></Power_Control></System></YAMAHA_AV>'
;Global $power_on'<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>'
;Global $Mute_on='<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Mute>On</Mute></Volume></Main_Zone></YAMAHA_AV>'
;Global $Mute_off='<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Mute>Off</Mute></Volume></Main_Zone></YAMAHA_AV>'
If $CmdLine[0] > 0 Then
If $writelog Then _FileWriteLog($log, "cmdlineRaw: " & $CmdLineRaw, 1)
$POSTdata = StringReplace($CmdLineRaw, "-", "", 1)
_SendXML($Yamaha_IP, $Yamaha_Port, $POSTdata)
_Exit()
EndIf
If $writelog Then _FileWriteLog($log, "cmdline[0]: " & $CmdLine[0], 1)
Exit
Func _SendXML($IP, $Port, $data)
Local $hOpen, $hConnect, $hRequest, $header, $response
$hOpen = _WinHttpOpen()
$hConnect = _WinHttpConnect($hOpen, $IP, $Port)
[/autoit] [autoit][/autoit] [autoit]$hRequest = _WinHttpOpenRequest($hConnect, "POST", "/YamahaRemoteControl/ctrl")
_WinHttpSendRequest($hRequest, 'Content-type: text/xml' & @CRLF, $data)
_WinHttpReceiveResponse($hRequest)
$header = _WinHttpQueryHeaders($hRequest)
If $writelog Then _FileWriteLog($log, $header, 1)
;ConsoleWrite($header&@crlf)
If _WinHttpQueryDataAvailable($hRequest) Then
[/autoit] [autoit][/autoit] [autoit]Do
$response &= _WinHttpReadData($hRequest)
Until @error
If $writelog Then _FileWriteLog($log, $response, 1)
;ConsoleWrite($response&@crlf)
EndIf
[/autoit] [autoit][/autoit] [autoit]_WinHttpCloseHandle($hRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
EndFunc ;==>_SendXML
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Exit()
Local $size = FileGetSize($log)
If $size / 1024 > 1000 Then
Local $aread
_FileReadToArray($log, $aread)
If @error Then
_FileWriteLog($log, $title & ".log konnte nicht automatisch verkleinert werden", 1)
Else
FileDelete($log)
Local $count = 20
If $aread[0] < $count Then
$count = $aread[0]
_FileWriteLog($log, $title & ".log konnte nicht automatisch verkleinert werden", 1)
EndIf
_FileWriteFromArray($log, $aread, 1, $count)
EndIf
EndIf
Exit
EndFunc ;==>_Exit
Func _Createini()
If Not FileExists($konfigdir) Then DirCreate($konfigdir)
IniWrite($ini, "Settings", "IP", "")
IniWrite($ini, "Settings", "Port", 80)
IniWrite($ini, "Settings", "Debug", 0)
IniWrite($ini, "Info", "power_off", '<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>Standby</Power></Power_Control></System></YAMAHA_AV>')
Iniwrite($ini, "Info", "power_on", '<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>')
Iniwrite($ini, "Info", "Mute_on", '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Mute>On</Mute></Volume></Main_Zone></YAMAHA_AV>')
IniWrite($ini, "Info", "Mute_off", '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Mute>Off</Mute></Volume></Main_Zone></YAMAHA_AV>')
_FileWriteLog($log, "Ini wurde nicht gefunden und neu erstellt :" & $ini, 1)
ShellExecute($ini)
_Exit()
EndFunc ;==>_Createini
Weiterführende Links:
Wie bastelt man den Befehlscode zusammen (Beispiele in der INI Sektion "Info"): http://www.ip-symcon.de/forum/f39/howt…-steuern-18509/
Sonstiges (andere AVR's, EG Plugins, UPnP Quälerei): http://www.dvbviewer.tv/forum/topic/48…rker-uber-netz/
Gruß nuts