Ankündigung

Einklappen
Keine Ankündigung bisher.

Squeezebox Status erkennen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Wie siehts eigentlich hiermit aus?
    Tutoriels et Manuels DOMOTIQUE-STORE.FR - API Logitech Squeezebox Server / Player (HTTP)

    Liese sich nicht über z.B

    Code:
    http://IPdesSqueezeservers:9001/status.html
    das ganze einfacher lösen?


    Ich bekomme dann z.B das hier zurück

    Code:
    Squeezebox-Musikplayer Squeezeradio Küche
    
    Angehalten bei 1 von 1:
    NRJ Energy (Löschen)
    Zurück Überspringen Wiedergabe Pause [B]Stopp[/B] 
    Wiederholen: [B]aus[/B]/ein/alle 
    Zufall: [B]aus[/B]/titel/alben 
    Player: Ein/[B]Aus[/B] 
    
    Lautstärke: 1 2 3 4 5 6 [B]7[/B] 8 9 10 11
    
    Hit Music Only!
    ENERGY Wien 104.2
    MfG MrKnx

    Kommentar


      #32
      Ich hatte das mal ohne Cycle aufgebaut, da man den Modus des LMS entsprechend umstellen kann damit sämtliche Statusänderungen vom LMS an den EIBPC übertragen werden. Das läuft auch. Allerdings ist das Error-Handling und die Auswertungen nicht ganz trivial sind. Anleitungen gibt es viele, m.E. ist die LMS-Doku aber ausreichend. Man muß sich halt in das Handling und den Verbindungsaufbau reinfuchsen. Ist keine Rocket-Science...

      Kommentar


        #33
        Zitat von MrKNX Beitrag anzeigen

        Code:
        http://IPdesSqueezeservers:9001/status.html
        Hab mir das mal angesehen.. also grundsätzlich könnte man das gut verwenden. Über die URL kann man den Player auch steuern ..

        also zb. damit stell ich das gleich auf einen Player ein:
        http ://192.168.YY.XX:9002/status.html?player=192.168.YY.ZZ

        oder damit schalt ich ihn ein:
        http://192.168.YY.XX:9002/status.html?p0=power&p1=1&player=192.168.YY.ZZ"

        Volume auf 25 setzen:
        http://192.168.YY.XX:9002/status.html?p0=mixer&p1=volume&p2=25&player=192.16 8.YY.ZZ"

        usw...
        Beispiel hab ich HIER gefunden

        hab dann mal das klassische Skript angepasst (ist nur Testcode, !!)

        [highlight=epc]
        //Testecke:
        ZZ_Init = 0b01
        ZZ_TCP_ConnectionState = 6u08
        ZZ_IP = resolve($192.168.YY.XX$)
        ZZ_String = $$
        ZZ_ResPort = 0u16
        ZZ_ResIP = 0u32
        ZZ_ResData = $$c15000
        ZZ_Result= $$c15000
        ZZ_GET_1 = $$
        ZZ_GET_2 = $$
        ZZ_GET_3 = $$
        ZZ_GET_4 = $$
        ZZ_GET_5 = $$


        if ZZ_Init == EIN then \\
        stringset(CRLF, 0x0A0Du16, 0u16); \\
        ZZ_GET_1 = $GET http://192.168.YY.XX:9002/status.htm...192.168.178.23 HTTP/1.0$ + CRLF; \\
        ZZ_GET_2 = $User-Agent: Wget/ 1.0.10$ + CRLF; \\
        ZZ_GET_3 = $Accept: */*$ + CRLF; \\
        ZZ_GET_4 = $Host: 192.168.YY.XX$ + CRLF; \\
        ZZ_GET_5 = $Connection: Keep-Alive$ + CRLF + CRLF; \\
        ZZ_String = ZZ_GET_1 + ZZ_GET_2 + ZZ_GET_3 + ZZ_GET_4 + ZZ_GET_5 \\
        endif

        // TCP Verbindung zum Host aufbauen

        if after(ZZ_Init, 3000u64) then \\
        ZZ_TCP_ConnectionState = connecttcp(9002u16,ZZ_IP) \\
        endif

        // TCP Nachricht senden


        if change(ZZ_TCP_ConnectionState) \\
        and ZZ_TCP_ConnectionState == 0u08 then \\
        sendtcparray(9002u16, ZZ_IP, ZZ_String, size(ZZ_String)) \\
        endif


        // jetzt hier noch ggfs. TCP Nachricht empfangen und dann TCP Verbindung schließen
        if event(readtcp(ZZ_ResPort,ZZ_ResIP,ZZ_ResData)) and ZZ_ResIP == ZZ_IP and ZZ_ResPort == 9002u16 then {
        ZZ_Result=ZZ_ResData;
        } endif

        // TCP Verbindung wieder schließen
        if after(ZZ_Init, 20000u64)then {
        closetcp(9002u16,ZZ_IP);
        ZZ_Init = AUS
        }endif
        [/highlight]

        funktioniert soweit.. damit bekommt man den Quelltext der Seite.. aus diesem könnte man sich jetzt sämtliche Infos rauspharsen..
        Code:
        z.b <title>Squeezebox-Musikplayer piCorePlayer </title>
        oder:
        Code:
            Aktueller Titel  
            
            1 von 20:
           </div>
           <div class="playingSong"><a href="/songinfo.html?item=4095&amp;player=b8%3A27%3Aeb%3AZZ%3AYY%3AXX" target="browser">Take Off Vol. 11</a>
        Power könnte man über <b> </b> erkennen:
        Code:
            Player:
                       <b>Ein</b>/<a
                       target="_top" href="index.html?player=b8%3A27%3Aeb%3AZZ%3AYY%3AXX&amp;p0=power&amp;p1=0">Aus</a>
        Lautstärke genau so..

        sogar die gesamte Playlist kann man sich so rauslesen.. wer sich die Arbeit machen will..

        werd mir das in ner ruhigen Minute nochmal ansehen und schaun, ob man das nicht gleich in das SB Macro integrieren kann... bzw. zur Not schreib ich ein neues Macro (glaub ich ist besser)...

        Das Problem das der Eibpc diese Infos abrufen muss ist damit aber nicht gelöst... aber zumindest muss man nicht für jeden Wert eine eigene Abfrage lostreten sondern bekommt alle Werte in einem !

        Gruß Martin
        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

        Kommentar


          #34
          Hey super!
          Jetzt müsste man nurmehr versuchen, so wie Sandman60 es geschrieben hat, den LMS so konfigurieren, dass er seine Änderungen dem EibPc mitteilt.
          Muss ja noch nicht bei jeder Änderung sein, nur bei Power oder Lautstärke Veränderung, denn das verstellt man in der Regeln ja eh nicht so oft....
          MfG MrKnx

          Kommentar


            #35
            @Sandman

            Hast du vielleicht mal einen Link, wo das beschrieben ist, wie man den LMS umkonfiguriert?
            Oft fällt einem das Googeln zu schwer oder man findet nicht die richten Worte.. 😁
            MfG MrKnx

            Kommentar


              #36
              Das Geheimnis heißt den LMS auf den sog. listen-mode zu bekommen, also sendtcp(LMSPort,LMSIP,$listen 1$).

              Habe hier aktuell offline nur noch ein Fragment meines Squeezebox-Makros, welches ich damals auf Basis des Fritzbox-Makros umgebaut habe um dann die entsprechenden Rückmeldungen abfangen zu können.

              Die beste Doku ist wirklich direkt auf dem LMS die Doku zur CLI-API, bei mir unter http://<LMS-IP>:<GUI-Port>/html/docs/cli-api.html. Mal auf Deinem LMS checken.

              Oder im Google nach cli-api suchen und dort unter listen nachlesen. Man schickt einmalig in der Verbindung zum LMS das listen 1 und von da an sendet der LMS alle Änderungen.

              Ist wie gesagt schon sehr lange her, daher viel Out of the brain. Das LMS-Verbindungsmakro in Draftversion habe ich noch irgendwo, allerdings aktuell nicht direkt verfügbar und auffindbar.

              Cheers,
              Oliver

              Kommentar


                #37
                Ok, d.h. die Squeezebox sendet nach sendtcp(LMSPort,LMSIP,$listen 1$) jede Veränderung an den LMS, bis man es mit sendtcp(LMSPort,LMSIP,$listen 0$) wieder abstellt...

                Soweit so gut, aber wie bekomme ich dann die Änderung vom LMS auf meinen EibPc?
                Und wie lasse ich dann die Abfrage am EibPc starten

                Irgendwie sehe ich grad den Wald vor Bäumen nicht.
                Vielleicht findest du ja dieses Makro noch, das würde dann sicher einiges Aufklären.

                Ich habe hier mal die Gesamte CLI API im Pdf angehängt, damit man schneller blättern kann
                Angehängte Dateien
                MfG MrKnx

                Kommentar


                  #38
                  jup.. so ist das.. hab das grad ausprobiert.. das mit dem listen 1 funktioniert gut.. das ich das vorher nie gesehen hab ! (Hab mich schon länger mit der CLI beschäfftigt.. offensichtlich nicht gut genug )

                  viel musst du dann da gar nicht mehr machen.. einfach auf die IP des Servers und Port 9090 hören.. bin grad am testen... werd heut aber sicher nicht mehr viel machen.. aber eigentlich sollte es dann ganz einfach sein..
                  über die Mac Adresse erkennt man, welcher Player was macht.. somit kann man sich die ständigen Abfragen sparen und bekommt alle infos die man will (siehe auch subscribe)

                  Gruß Martin
                  Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                  Kommentar


                    #39
                    Hi Martin,
                    bist du hier weitergekommen und konntest Erfolge erzielen? Hab das Thema ganz aus den Augen verloren und wollte es jetzt wieder aufgreifen.
                    MfG MrKnx

                    Kommentar


                      #40
                      Hi,

                      ja logo.. läuft bei mir geraume Zeit problemlos...

                      hier mal mein Code für zwei Squeezeboxen.. kannst ja auch nur für eine verwenden:

                      Code:
                      //Squeezbox online Status
                      
                      
                      SBData=$$
                      SBServerIP=0u32
                      SB_SerPort=0u16
                      SB_Data = $$
                      SBPlayer2IP=$00:04:aa:vv:cc:xx$
                      SBPlayer1IP=$b8:27:aa:vv:cc:xy$
                      SB_Status=0u08
                      SB_Player = $$
                      SB_Cover_URL = $$
                      SB_Cover_URL2 = $$
                      SB_Data_Player1 = $$
                      SB_Data_Player2 = $$
                      SB_Data_Pos = 0u16
                      SB_Data_Pos2 = 0u16
                      SB_Data2_Pos = 0u16
                      SB_Data2_Pos2= 0u16
                      SB_Power_Player1 = AUS
                      SB_Power_Player2 = AUS
                      SB_Mode_Player1 = $$
                      SB_Mode_Player2 = $$
                      SB_CurrentTitle_Player1 = $$
                      SB_CurrentTitle_Player2 = $$
                      SB_Vol_Player1 = $$
                      SB_Vol_Player2 = $$
                      SB_Title_Player1 = $$
                      SB_Title_Player2 = $$
                      SB_Artist_Player1 = $$
                      SB_Artist_Player2 = $$
                      SB_next_Title_Player1 = $$
                      SB_next_Title_Player2 = $$
                      SB_next_Artist_Player1 = $$
                      SB_next_Artist_Player2 = $$
                      SB_Sender_Player1 = $$
                      SB_Sender_Player2 = $$
                      
                      
                      
                      if cycle(00,15) then SB_Status= 1u08 endif
                      
                      
                      if SB_Status == 1u08 then connecttcp(9090u16, 192.168.178.41) endif
                      if after(SB_Status == 1u08, 1000u64) then sendtcp(9090u16, 192.168.zz.xx,SBPlayer1IP + $ status - 2 tags:aNJK$); SB_Status = 2u08 endif
                      if after(SB_Status == 2u08, 5000u64) then sendtcp(9090u16, 192.168.zz.xx,SBPlayer2IP + $ status - 2 tags:aNJK$); SB_Status = 3u08 endif
                      
                      if event(readtcp(SB_SerPort, SBServerIP, SBData)) and SBServerIP == 192.168.zz.xx then SB_Data=SBData endif    
                      
                      if change(SB_Data) then SB_Player= convert(split(SB_Data, 25u16,26u16),$$) endif
                      
                      if change(SB_Player) and SB_Player == $76$ then SB_Data_Player1 = SB_Data  endif
                      if change(SB_Player) and SB_Player == $70$ then SB_Data_Player2 = SB_Data  endif
                      
                      //Player1 Status (Party)
                      if change(SB_Data_Player1)then {
                          SB_Data_Pos = find(SB_Data_Player1, $power$, 0u16) + 8u16;
                          SB_Power_Player1 = convert(split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos+1u16), 0b01);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $mode$, 0u16) + 7u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16)+ SB_Data_Pos;
                          SB_Mode_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $mixer%20volume$, 0u16) + 17u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16)+ SB_Data_Pos;
                          SB_Vol_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $ title$, 0u16) + 9u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16) + SB_Data_Pos;
                      //    SB_Title_Player1 = urldecode(split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2),$utf-8$c14,$utf-8$c14);
                          SB_Title_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $ artist$, 0u16) + 10u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16) + SB_Data_Pos;
                          SB_Artist_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $ title$, 1u16) + 9u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16) + SB_Data_Pos;
                          SB_next_Title_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $ artist$, 1u16) + 10u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16) + SB_Data_Pos;
                          SB_next_Artist_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      
                          SB_Data_Pos = find(SB_Data_Player1, $remote_title$, 1u16) + 15u16;
                          SB_Data_Pos2= find(split(SB_Data_Player1,SB_Data_Pos,END), $ $, 0u16) + SB_Data_Pos;
                          SB_Sender_Player1 = split(SB_Data_Player1, SB_Data_Pos, SB_Data_Pos2);
                      }endif
                      
                      
                      
                      //Cover Link finden
                      if change(SB_Data_Player1) and find(SB_Data_Player1, $artwork_url$, 0u16) < EOS then {
                          SB_Data_Pos = find(SB_Data_Player1, $artwork_url$, 0u16) + 14u16;
                          SB_Cover_URL = $http://www.mysqueezebox.com/public/imageproxy?&u=$ + split(SB_Data_Player1, SB_Data_Pos, EOS);
                      }endif
                      if change(SB_Data_Player1) and  find(SB_Data_Player1, $artwork_track_id$, 0u16) < EOS then {
                          SB_Data_Pos = find(SB_Data_Player1, $artwork_track_id$, 0u16) + 19u16;
                          SB_Cover_URL = $http://192.168.178.22:9002/music/$+split (SB_Data_Player1, SB_Data_Pos, SB_Data_Pos+7u16)+$/cover.jpg$;
                      }endif
                      
                      
                      
                      
                      //Player2 Status (Küche)
                      if change(SB_Data_Player2)then {
                          SB_Data2_Pos = find(SB_Data_Player2, $power$, 0u16) + 8u16;
                          SB_Power_Player2 = convert(split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos+1u16), 0b01);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $mode$, 0u16) + 7u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16)+ SB_Data2_Pos;
                          SB_Mode_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $mixer%20volume$, 0u16) + 17u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16)+ SB_Data2_Pos;
                          SB_Vol_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $ title$, 0u16) + 9u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16) + SB_Data2_Pos;
                      //    SB_Title_Player2 = urldecode(split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2),$utf-8$c14,$utf-8$c14);
                          SB_Title_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $ artist$, 0u16) + 10u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16) + SB_Data2_Pos;
                          SB_Artist_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $ title$, 1u16) + 9u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16) + SB_Data2_Pos;
                          SB_next_Title_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $ artist$, 1u16) + 10u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16) + SB_Data2_Pos;
                          SB_next_Artist_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                          SB_Data2_Pos = find(SB_Data_Player2, $remote_title$, 1u16) + 15u16;
                          SB_Data2_Pos2= find(split(SB_Data_Player2,SB_Data2_Pos,END), $ $, 0u16) + SB_Data2_Pos;
                          SB_Sender_Player2 = split(SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos2);
                      
                      }endif
                      
                      //Cover Link finden
                      if change(SB_Data_Player2) and find(SB_Data_Player2, $artwork_url$, 0u16) < EOS then {
                          SB_Data2_Pos = find(SB_Data_Player2, $artwork_url$, 0u16) + 14u16;
                          SB_Cover_URL2 = $http://www.mysqueezebox.com/public/imageproxy?&u=$ + split(SB_Data_Player2, SB_Data2_Pos, EOS);
                      }endif
                      if change(SB_Data_Player2) and  find(SB_Data_Player2, $artwork_track_id$, 0u16) < EOS then {
                          SB_Data2_Pos = find(SB_Data_Player2, $artwork_track_id$, 0u16) + 19u16;
                          SB_Cover_URL2 = $http://192.168.178.41:9002/music/$+split (SB_Data_Player2, SB_Data2_Pos, SB_Data2_Pos+7u16)+$/cover.jpg$;
                      }endif
                      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                      Kommentar


                        #41
                        Hey Klasse,
                        werd ich doch gleich mal anpassen an mein Squeezeradio.

                        Auf dich ist verlass
                        MfG MrKnx

                        Kommentar


                          #42
                          Warum meckert der Compiler bei dieser Zeile??
                          Code:
                          if after(SB_Status == 1u08, 1000u64) then sendtcp(9090u16, 10.0.zz.xx,SB_PlayerIP + $ status - 2 tags:aNJK$); SB_Status = 3u08 endif
                          Code:
                           Gültig bis Spaltenposition: {49}
                           STOP Parser --> (9090u16, 10.0.zz.xx,SB_PlayerIP + $ status - 2 tags:aNJK$); SB_Status = 3u08 endif
                          MfG MrKnx

                          Kommentar


                            #43
                            hast du die SB_PlayerIP in $$ deklariert ?
                            Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                            Kommentar


                              #44
                              Ja hab ich!
                              Selbst wenn ich den Kompletten Code von dir übernehme, meckert er bei dieser Zeile???

                              Kann es an meiner V2 liegen?
                              MfG MrKnx

                              Kommentar


                                #45
                                hmm.. möglich..

                                aber die Syntax von sendtcp gab es doch bei V2 auch schon.. hast mal geschaut, ob die
                                passt (Handbuch)

                                Die SB_PlayerIP ist übrigens die MAC Adresse.. etwas unglücklich gewählt.. der Ausdruck.

                                192.168.zz.xx = IP des Squeezebox servers.. hier natürlich deine IP rein..
                                Zuletzt geändert von Brick; 07.04.2015, 14:41.
                                Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                                Kommentar

                                Lädt...
                                X