ich hänge mal wieder an einem Problemchen,das ich gerne noch lösen möchte, bevor ich alle Infos gesammelt uns sauber aufbereitet ins Loxwiki übernehmen werde.
Vielleicht hat der ein oder andere die WLan Lautsprecher von Libratone und möchte diese gerne auch über Loxone steuern (bspw. beim Betreten eines Raumes, soll dort ein im standby befindlicher Libratone Zipp Lautsprecher anspringen und beim Verlassen wieder stoppen). Das ist mir nach einiger "Forschung" mit Wireshark und Android App Re-engineering gelungen.
Das ganze läuft mit UDP Paketen ab, die ich auch problemlos vom Loxone Miniserver losschicken kann. Beispielsweise die Lautstärke, wie folgt dargestellt.
Lautstärke | Hex-Code zur Lautstärke-Einstellung |
11 | \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02\x31\x31 |
12 | \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02\x31\x32 |
13 | \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02\x31\x33 |
... | |
23 | \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02\x32\x33 |
Wer sich mit Powershell auskennt, der kann hier auch schon direkt ein paar Befehle testen. Damit habe ich auch fleißig getestet.
function Send-LibratoneCommand { param ( [string]$toIP = "192.168.xxx.xxx", [int]$toUDPPort = 7777, [int]$fromUDPPort = 58800, $send = "" ) $IP = [System.Net.Dns]::GetHostAddresses($toIP) $Address = [System.Net.IPAddress]::Parse($IP) $EndPoints = New-Object System.Net.IPEndPoint($Address, $toUDPPort) $Socket = New-Object System.Net.Sockets.UDPClient($fromUDPPort) $SendMessage = $Socket.Send($send, $send.count, $EndPoints) $Socket.Close() } # Favorites #..... .. w{"isFromChannel":false,"play_identity":"1","play_subtitle":"1","play_title":"channel","play_type":"channel","token":""} [Byte[]] $favorites1 = 0xaa, 0xaa, 0x02, 0x01, 0x15, 0x00, 0x1f, 0xdb, 0x00, 0x77, 0x7b, 0x22, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3a, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3a, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x22, 0x22, 0x7d #..... .. w{"isFromChannel":false,"play_identity":"2","play_subtitle":"2","play_title":"channel","play_type":"channel","token":""} [Byte[]] $favorites2 = 0xaa, 0xaa, 0x02, 0x01, 0x15, 0x00, 0xb7, 0xa2, 0x00, 0x77, 0x7b, 0x22, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x32, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3a, 0x22, 0x32, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3a, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x22, 0x22, 0x7d # Lautstärke #... @ na .13 [Byte[]] $volume11 = 0xaa, 0xaa, 0x02, 0x00, 0x40, 0x00, 0x6e, 0x61, 0x00, 0x02, 0x31, 0x31 [Byte[]] $volume12 = 0xaa, 0xaa, 0x02, 0x00, 0x40, 0x00, 0x6e, 0x61, 0x00, 0x02, 0x31, 0x32 [Byte[]] $volume13 = 0xaa, 0xaa, 0x02, 0x00, 0x40, 0x00, 0x6e, 0x61, 0x00, 0x02, 0x31, 0x33 [Byte[]] $volume23 = 0xaa, 0xaa, 0x02, 0x00, 0x40, 0x00, 0x6e, 0x61, 0x00, 0x02, 0x32, 0x33 # Pause/Stop Streaming #... ( .. .STOP [Byte[]] $stop = 0x00, 0x00, 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x04, 0x53, 0x54, 0x4f, 0x50 #... ( .. .PLAY [Byte[]] $play = 0x00, 0x00, 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x04, 0x50, 0x4c, 0x41, 0x59 # sending commands to test Send-LibratoneCommand -toIP "192.168.xxx.xxx" -toUDPPort 7777 -fromUDPPort 58800 -send $favorites1 Send-LibratoneCommand -toIP "192.168.xxx.xxx" -toUDPPort 7777 -fromUDPPort 58800 -send $favorites2 Send-LibratoneCommand -toIP "192.168.xxx.xxx" -toUDPPort 7777 -fromUDPPort 58800 -send $volume12 Send-LibratoneCommand -toIP "192.168.xxx.xxx" -toUDPPort 7777 -fromUDPPort 58800 -send $stop Send-LibratoneCommand -toIP "192.168.xxx.xxx" -toUDPPort 7777 -fromUDPPort 58800 -send $play
Viele Grüße und danke schon mal im Voraus für eure Unterstützung!
Benni
Kommentar