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
- Bei einstelligen Werten gebe ich dir recht, wenn es keine Möglichkeit gibt via Formel-Baustein eine führende Null mit einzubauen oder so, dann muss man da noch etwas Logik drumherumbasteln. Wäre nicht schlimm, aber irgendwie hat das Vermischen von Hex-Code und ASCII-Wert nicht richtig funktioniert. Kann man das übergebene UDP Paket irgendwo mitloggen? Der Netzwerkmonitor von Loxone zeigt ja nur eingehende Pakete an, oder?

Kommentar