# VBS Codeübersetzung Yamaha AV



## emilio20 (7 Dezember 2018)

Hallo
ich möchte einen Yamaha AV Receiver mit VBS steuern. Ich habe einen Autoit Code der mit WinHTTP Funktioniert. Nun möchte ich diesen in VBS umwandeln.
Hier mal der Autoit Code



```
#include <WinHTTP.au3>


Global $port=80
Global $ip="192.168.178.46"
Global $response=""

Global $PostDaten='<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>'


$hOpen = _WinHttpOpen()

$hConnect = _WinHttpConnect($hOpen, $ip, $port)

$hRequest = _WinHttpOpenRequest($hConnect, "POST", "/YamahaRemoteControl/ctrl")


_WinHttpSendRequest($hRequest, 'Content-type: text/xml'&@CRLF, $PostDaten)


_WinHttpReceiveResponse($hRequest)


_WinHttpCloseHandle($hRequest)

_WinHttpCloseHandle($hConnect)

_WinHttpCloseHandle($hOpen)

exit
```

Mein bisheriger VBS Code funktioniert noch nicht


```
Yamaha()


Sub Yamaha()
Dim result 
Dim URL , postData 
Dim winHttpReq 
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

URL = "http://192.168.178.46:80/YamahaRemoteControl/ctrl"
postDaten="<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>"

winHttpReq.Open "POST", URL, false
winHttpReq.SetRequestHeader "Content-type","text/xml" 
winHttpReq.Send postDaten


End Sub
```

Es liegt noch ein Fehler in postDaten "PUT" vor die Anführungszeichen habe ich schon mal entfern aber dies funktioniert auch nicht.


----------



## emilio20 (20 Dezember 2018)

Hallo kann mir jemand erklären wie ich eine xml anfrage per winHttp verschicken kann ?


----------



## Heinileini (23 Dezember 2018)

emilio20 schrieb:


> ```
> Dim URL , postData
> . . .
> postDaten="<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>"
> ```


1: ist mit postDat*a* und postDat*en* dasselbe gemeint?
2: statt "PUT" evtl. ""PUT""?
3: was sollen die < und die > bewirken? Wie soll der komplette String aussehen?


----------



## emilio20 (23 Dezember 2018)

Hallo
ja sorry was ein Schreibfehler. Habe es mal so abgeändert. Geht aber auch nicht kommt der Fehler 
"Der Server liefert eine ungültige Rückmeldung "

3. Das Commando basiert auf einer XML Syntax
https://www.heimkino-praxis.com/yamaha-netzwerk-steuerung/



```
Dim result 
Dim URL , postData 
Dim winHttpReq 
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

URL = "http://192.168.178.46:80/YamahaRemoteControl/ctrl"
postData = "<YAMAHA_AV cmd=""PUT""><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>"

winHttpReq.Open "POST", URL, false
winHttpReq.SetRequestHeader "Content-type","text/xml",postData
winHttpReq.Send 

result = winHttpReq.ResponseText
```

Ich habe sowas änliches schon mal mit Philips Hue gemacht. Anwort war hier ein Json String. CLIP Api war aber auf dem Gerät selbst
https://www.youtube.com/watch?v=Nh-mDkHZ13Q


```
Dim result 
Dim MyURL 
Dim winHttpReq 
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
     
MyURL = "http://192.168.178.48/api/1234567890/lights/1"

winHttpReq.Open "GET", MyURL, False

winHttpReq.Send 

result = winHttpReq.ResponseText
```


Bei Philips Hue musste ich mir nur die UHL zusammensetzen. Bei Yamaha benötige ich noch das Commando.
z.B der String 


```
'<YAMAHA_AV cmd="PUT"><Main_Zone><Volume>' .
   '<Lvl><Val>-455</Val><Exp>1</Exp><Unit>dB</Unit></Lvl>' .
   '</Volume></Main_Zone></YAMAHA_AV>'
```


----------



## Heinileini (23 Dezember 2018)

emilio20 schrieb:


> Geht aber auch nicht kommt der Fehler "Der Server liefert eine ungültige Rückmeldung"


Dann sind wir einen winzigen Schritt weiter. Der string ist jetzt zumindest formal richtig und wird anscheinend auch gesendet. 
Wie der Inhalt aussehen muss, weiss ich allerdings auch nicht ...


----------



## emilio20 (23 Dezember 2018)

In Autoit wir ein Zeilnumbruch verwendet.

```
_WinHttpSendRequest($hRequest, 'Content-type: text/xml'&@CRLF, $PostDaten)
```
Kann es daran liegen ? In autoit funktioniert der Inhalt auch.


----------



## emilio20 (23 Dezember 2018)

Habs hin bekommen
Das postData musste bei winHttpReq.Send rein 



```
Dim result 
Dim URL , postData 
Dim winHttpReq 
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

URL = "http://192.168.178.46:80/YamahaRemoteControl/ctrl"
postData = "<YAMAHA_AV cmd=""PUT""><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>"

winHttpReq.Open "POST", URL, false
winHttpReq.SetRequestHeader "Content-type","text/xml"
winHttpReq.Send postData

result = winHttpReq.ResponseText
```


----------



## Heinileini (23 Dezember 2018)

emilio20 schrieb:


> Habs hin bekommen


:s12:
Na, dann ist Weihnachten ja gerettet! Frohes Fest & guten Rutsch!


----------

