Libratone Zipp WLan Lautsprecher - UDP Ausgang Hex-Code aus Slider übernehmen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • bennithebrain
    Smart Home'r
    • 04.10.2015
    • 64

    Libratone Zipp WLan Lautsprecher - UDP Ausgang Hex-Code aus Slider übernehmen

    Hi Community,

    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
    Die letzten zwei Hex-Codes stellen also die Lautstärke dar (x31 => 1, x32 => 2, also 12), usw. - Jetzt kann es zwar interessant sein, direkt eine Einstellung auf eine bestimmte Lautstärke vornehmen zu können. Schöner wäre es jedoch einen "Slider" zu verwenden. Der virtuelle Ausgang als Slider übergibt ja analoge Werte (bspw. von 0 bis 60) - Diese Werte würde ich nun gerne in den Hex-Code, also den Befehl übernehmen, um den analogen Slider-Wert übergeben zu können. Kann mir da jemand behilflich sein? Hab schon mit \h und <v> rumprobiert, aber irgendwie bekomm ich es nicht hin...

    Wer sich mit Powershell auskennt, der kann hier auch schon direkt ein paar Befehle testen. Damit habe ich auch fleißig getestet.

    Code:
    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
    Wenn das mit der Lautstärke noch über einen Slider sauber funktioniert, dann schreibe ich einen Wiki-Eintrag und arbeite das sauber auf, damit auch jeder direkt aus Loxone seine Libratone Lautsprecher steuern kann

    Viele Grüße und danke schon mal im Voraus für eure Unterstützung!
    Benni
    Massivhaus KFW70 / Baujahr 2016 / Smart Home: Loxone - 2x Miniserver, 6x Extension, 3x Dimmer Extension, 2x Relay Extension, 3x 1-Wire, 1x RS485, 1x LoxBerry
  • Labmaster
    Lox Guru
    • 20.01.2017
    • 2475

    #2
    Die letzten beiden Bytes sind ja wohl die Ascii Werte der Lautstärke, (0x31 & 0x31 = Text "11" , 0x32 & 0x33 = Text "23" )
    somit sollte man diese mit <v> ersetzen können.
    also z.B. \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02<v>

    Hierbei gibt es jedoch ein Problem:
    Was passiert wenn der Wert einstellig wird, dann würde <v> auch nur noch ein Byte ergeben.
    Kommt das "Libratone" Sytem damit zurecht ? wenn nicht, dann könnte man das vorab mit einer Loxone Logik abfangen und unterschiedliche Virt. Ausgänge hierfür nutzen
    wenn Wert einstellig dann : \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02\x00<v>
    wenn Wert zweistellig dann : \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02<v>

    Kommentar


    • bennithebrain
      bennithebrain kommentierte
      Kommentar bearbeiten
      Hi Labmaster, danke dir, so hatte ich das schon mal versucht: \xaa\xaa\x02\x00\x40\x00\x6e\x61\x00\x02<v>
      und habe dann nur zweistellige Werte vom Slider übergeben. Leider hat das nicht wirklich funktioniert - 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?

    • bennithebrain
      bennithebrain kommentierte
      Kommentar bearbeiten
      hm, also ein zweiter Versuch hat nun geklappt, ich glaube ich hatte da nur ein Typo oder ähnliches... Danke nochmal, klappt jetzt wie du geschrieben hast
  • bennithebrain
    Smart Home'r
    • 04.10.2015
    • 64

    #3
    Hier geht's noch zum Wiki Eintrag mit allen Befehlen und auch einer XML Vorlage zum direkten importieren in die Loxone Config: https://www.loxwiki.eu/display/LOX/L...n+Lautsprecher

    Hat vielleicht noch jemand einen Tipp, das Problem mit den unterschiedlichen Stellen der Werte (einstellig 0-9, zweistellig 10-99 und dreistellig 100) elegant zu lösen?
    Massivhaus KFW70 / Baujahr 2016 / Smart Home: Loxone - 2x Miniserver, 6x Extension, 3x Dimmer Extension, 2x Relay Extension, 3x 1-Wire, 1x RS485, 1x LoxBerry

    Kommentar

    • bennithebrain
      Smart Home'r
      • 04.10.2015
      • 64

      #4
      Okay, hatte jetzt doch noch zwei Ideen, ich stand wohl etwas auf dem Schlauch. Geht vielleicht eleganter, aber beide Lösungsansätze funktionieren und stehen auch im Wiki:

      Lautstärke über Slider in Loxone: Hierfür kann man einen virtuellen Ausgang des Typs "Schieber" verwenden. Die variablen Ausgänge "Volume V einstellig", "Volume V zweistellig" und "Volume V dreistellig" können dafür genutzt werden. Die Hex-Codes sind leider verschieden für die einstelligen Lautstärken (0-9), sowie zweistelligen Lautstärken (10-99) und der dreistelligen Lautstärke (100). Mir ist noch keine elegantere Lösung eingefallen, die verschiedenen Ausgänge bei verschiedenen Zahlen zu verwenden, da Loxone leider keine Zahlen mit führenden Nullen erzeugen kann. Daher hier mal zwei funktionale Lösungsansätze.

      1. Ansatz:
      Nutzung aller drei variablen Volume Ausgänge mit einem Schieberegler. Die "falsch" erzeugten UDP Paket werden zwar versendet, allerdings vom Lautsprecher verworfen. Somit kommen immer zwei falsche und ein richtiges Paket beim Lautsprecher an. Alternativ kann bei diesem Ansatz aber der dreistellige Ausgang auch ignoriert und nicht verwendet werden, dann wäre es nur ein falsches Paket das immer mitgesendet werden würde.
      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Anmerkung%202020-01-04%20171538.jpg?version=1&amp;modificationDate=1578156449000&amp;api=v2.jpg
Ansichten: 450
Größe: 463,9 KB
ID: 228726
      Screenshot: Nutzung aller drei variablen Volume Ausgänge mit einem Schieberegler

      2. Ansatz:
      Nutzung von MinMax Begrenzern und die 100 einfach weglassen (wird vermutlich sowieso nie verwendet, ist mega laut)
      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Anmerkung%202020-01-04%20171638.jpg?version=1&amp;modificationDate=1578156843000&amp;api=v2.jpg
Ansichten: 459
Größe: 48,3 KB
ID: 228727

      Viel Spaß beim Nachbasteln und wem eine elegantere Lösung einfällt, gerne posten.
      Angehängte Dateien
      Zuletzt geändert von bennithebrain; 04.01.2020, 20:35.
      Massivhaus KFW70 / Baujahr 2016 / Smart Home: Loxone - 2x Miniserver, 6x Extension, 3x Dimmer Extension, 2x Relay Extension, 3x 1-Wire, 1x RS485, 1x LoxBerry

      Kommentar

      • Tico
        Lox Guru
        • 31.08.2016
        • 1035

        #5
        Hier ist eine Option für Ihre Lautstärkeregelung. Verwenden Sie den Statusblock, um alle Befehle 0-100 vorzubereiten. Dann geben Sie den Schieberegler auf AI1 ein. Ausgabe von TQ.

        Der virtuelle Ausgang sollte den Befehl für ON, <v> haben.
        Verwendung als digitaler Eingang - aktiviert.

        Der Status-Block ist auch gut für Modi geeignet. Benutzen Sie den AQ-Ausgang von einem Radio-Button-Block in den Status-Block.
        Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

        Kommentar


        • bennithebrain
          bennithebrain kommentierte
          Kommentar bearbeiten
          Super Idee mit dem Status-Baustein. Ich hatte damit herumgespielt und versucht den Textausgang des Status-Bausteins zu nutzen, um die einstelligen Zahlen mit führenden Nullen zu füllen. Das funktioniert auch, jedoch dann nicht als Wert für den virtuellen Ausgang. Du hast es dadurch gelöst den Baustein einfach für das komplette Kommando zu nutzen. Genial - Danke dir!

        • Gast
          Gast kommentierte
          Kommentar bearbeiten
          Hallo Tico, ich versucht, mit deiner Methode einen Hexadezimal-Code als Text von einem Statusbaustein an einen Virtueller-Ausgang-Befehl zu übergeben. Es funktioniert bei mir nicht. Ich habe das Problem hier (https://www.loxforum.com/forum/germa...ehl-vab-senden) beschrieben. Könntest du bitte noch alle Details zu dem Virtueller-Ausgang-Befehl zeigen?

          PS: Du kannst zum Übersetzen statt Google auch https://www.deepl.com/translator benutzen. Die Qualität ist viel besser.

          Hi Tico, I'm trying to use your method to pass a hexadecimal code as text from a status block to a virtual output command. It's not working for me. I have described the problem here (https://www.loxforum.com/forum/germa...ehl-vab-senden). Could you please show me all details about the virtual output command?

          PS: You can also use https://www.deepl.com/translator instead of Google to translate. The quality is much better.

          Translated with www.DeepL.com/Translator (free version)
      • Gast

        #6
        Hi benni, ich habe ein ähnlich gelagertes Problem mit Hexcode. Falls du dazu einen Einfall hättest wäre das super. LG tholoxx

        Kommentar


        • bennithebrain
          bennithebrain kommentierte
          Kommentar bearbeiten
          Hi @Tholoxx: Sollte ja mittlerweile gelöst sein im anderen Thread - Problem auf das ich auch gestoßen war => Textausgabe eines Bausteins (z.B. Status Baustein) kann nicht als <v>, also Werte-Eingangs verwendet werden.
          Grüße,
          Benni
      • Gargamel
        MS Profi
        • 16.12.2018
        • 693

        #7
        bennithebrain

        Vielen Dank für deine Arbeit und das bereitstellen des Templates. Mein Libratone Zipp2 funktioniert einwandfrei damit.

        Was noch nicht funktioniert ist die Lautstärkenregelung. Wenn ich das so mache wie in deinem Beispiel und die Lautstärke über die Loxone App ändere dann springt die Lautstärke in der Libratone App auf 0

        Ist aber nicht weiter tragisch, wichtig war für mich den LS über einen Präsenzmelder zu starten/stoppen.

        Kommentar


        • bennithebrain
          bennithebrain kommentierte
          Kommentar bearbeiten
          Hi Gargamel, gerne doch! Das Problem hatte ich auch schon mal. Die Ursache dürfte die Länge der Codes sein. Kannst es mal manuell versuchen, also ohne <v>. Für Lautstärke 50 wäre es: \x00\x00\x02\x00\x40\x00\x00\x00\x00\x02\x35\x30 und für 75: \x00\x00\x02\x00\x40\x00\x00\x00\x00\x02\x37\x35

        • Gargamel
          Gargamel kommentierte
          Kommentar bearbeiten
          Habe jetzt mal einen virtuellen Eingang als Taste an VQ Lautstärke 25 gehängt und einen an VQ Lautstärke 50
          Die Box verändert die Lautstärke leider nicht.
      • Gargamel
        MS Profi
        • 16.12.2018
        • 693

        #8
        Jetzt hätte ich nochmal eine Frage:

        Ich benutze den Radio Baustein um die Favoriten durchzuschalten. Funktioniert auch wunderbar. Im Baustein habe ich die Favoriten benannt wie sie in der Libratone hinterlegt sind.

        Allerdings änder ich die Favoriten in der Libratone öfters und somit passt es mit der Loxone Visualisierung nicht mehr überein.

        Kann man die Favoriten dann nur über die Config anpassen oder gibt es eine Möglichkeit dies über die Loxone App zu ändern? Eventuell mit einem anderen Baustein? Oder genial wäre es den Namen des Favoriten auslesen zu können das es automatisch synchronisiert?
        Angehängte Dateien

        Kommentar

        Lädt...