Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Neues Plugin: Logitech Squeezebox - Anregungen?

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

  • Onkelandy
    antwortet
    Lach. Ab und an sollt ma mal in die Doku schauen
    Danke. Ich lass meine Antwort dennoch mal leben, da die herangehensweise für andere commandozeilenbefehle relevant sein könnte


    Gesendet von meinem iPad mit Tapatalk

    Einen Kommentar schreiben:


  • jaykay
    antwortet
    oder vielleicht so:


    sh.tools.ping()

    Pings a computer and returns True if the computer responds, otherwise False. sh.office.laptop(sh.tools.ping('hostname'))

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Im Plugin gibt es auch einen Eintrag für die IP-Adresse.. könnte mir vorstellen, dass du dort mittels crontab alle 60 Sekunden oder so eine Logik aufrufst, wenn du das unbedingt mit Ping machen willst.

    Im Python-Script nutzt du subprocess oder os.popen. Einfach mal googlen...

    Code:
    import os
    pingen = os.popen("ping IP")
    result = pingen.readline()
    pingen.close()
    # alternativ: import subprocess
    # result = subprocess.check_output("ping", "IP", shell=True)
    
    # Nun müsstest du checken, ob zB "timed out" oder "ms" im String des Resultats vorkommt. Könnte so funktionieren, vielleicht aber auch nicht ;) Könnte sein, dass result eine Liste und kein String ist...
    result1 = result.find("timed out")
    # sollte ein -1 ergeben, wenn nichts gefunden wird
    if result1 == -1:
       Squeezebox.lebt(1)
    Und das lebt machst halt in der Items conf als bool rein.

    Ob das wirklich so klappt, kann ich nicht sagen, bin Noob auf dem Python-Gebiet, aber es sind mal ein paar Ansätze, die du testen kannst.

    Einen Kommentar schreiben:


  • surfeu89
    antwortet
    IP-Adresse abfragen

    Hallo,

    eigentlich wollte ich direkt die IP-Adresse anpingen.
    Quasi damit einen Status anzeigen. Mir ist nur die Logik bzw. der Befehl nicht klar, wie ich über smarthome.py die IP pinge.

    Daniel

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    He surfeu!
    Schön, dass es funktioniert hat. Das mit dem Button hängt letztlich von der Visualisierung und dem Design ab. Das müsstest halt entsprechend anpassen, das hier wäre die Standardvariante:
    Code:
    {{ basic.switch('Squeezebox','Squeezebox.Power', icon1~'control_on_off.png', icon0~'control_on_off.png') }}
    Fügst du einfach in deine Visu-HTML ein, wo du den Button haben willst. Voraussetzung ist natürlich, dass du Squeezebox.Power auch in den Items hast.. dort gleich mit nem knx_send und knx_listen versehen, so wie in meiner vorigen Post beschrieben.

    So kannst du die Squeezebox auch über die Visu ein und ausschalten. Damit sich die geschaltene Steckdose auch bei Bedarf ein- und ausschaltet, musst nur noch das entsprechende Logik-File machen mit folgendem Inhalt. Wobei das vermutlich auch ohne Logik direkt in den Items geht, sofern es wirklich nur um die Steckdose geht. Ich hab halt noch deutlich mehr getriggert, daher mit Logikfile.
    Code:
    if Squeezebox.Power == 1
       Steckdose.an(1)
    Unter der Annahme, dass du die Steckdose als solche auch in nem Item konfiguriert hast. Sonst kannst du sie natürlich nicht ansprechen.

    Einen Kommentar schreiben:


  • surfeu89
    antwortet
    Vielen Dank

    Hallo Onkelandy,

    hatte bereits gestern deine Angaben getestet. Hat wunderbar funktioniert,
    auch ohne Angabe des Pfades. Bin hellauf begeistert!
    Weißt du zufälligerweise, wie ich mir ein Symbol einfüge, dass mir anzeigt,
    ob die Squezzebox im Netzwerk verfügbar ist?
    Die hängt hinter einer schaltbaren Steckdosenleiste und wenn die aus ist,
    dann geht natürlich gar nichts! Hätte das direkt mit einem Status darstellen wollen. Sprich IP-Adresse da oder nicht!

    Daniel

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hi!
    Also das kommt natürlich auf das Szenario an, das du hast. Wenn du ne Playliste durch Schalterdruck triggern willst, würden die Codes so aussehen:

    in items eine conf., wie die heißt, ist egal.. entweder du lädst dann die Playlist direkt oder mit einem "Name" Argument, wobei du dann natürlich auch die GA und Aufrufe anpassen musst:
    Code:
    [Squeezebox]
      squeezebox_playerid = MAC Addy
      [[Playlist_Load]]
        type = str
        enforce_updates = true
        visu_acl = rw
        squeezebox_send = <playerid> playlistcontrol cmd:load playlist_name:{}
      [[Playlist_Load_Liste1]]
        type = bool
        enforce_updates = true
        visu_acl = rw
        knx_send=GA, die von Schalter getriggert wird
        knx_listen=GA, die von Schalter getriggert wird
        knx_init=GA, die von Schalter getriggert wird
        squeezebox_send = <playerid> playlist resume Liste1
        squeezebox_recv = <playerid> playlistcontrol cmd:load playlist_name:Liste1
    In Logic.conf im etc-Verzeichnis:
    Code:
    [Playliste]
    filename = playliste.py
    watch_item = Squeezebox.Playlist_Load_Liste1
    visu_acl = yes
    Und dann noch das File playliste.py im logics-Ordner:
    Code:
    #!/usr/bin/python3.2
    logger.info(trigger)
    
    
    if Playlist_Load_Liste1() == 1:
          sh.Squeezebox.Playlist_Load_Liste1(1)
          logger.info("Squeezebox: Playliste 1 geladen")
          #alternativ: sh.Squeezebox.Playlist_Load("Liste1")
    Wie nobel und toll das ist, kann ich nicht sagen - bin blutiger Anfänger. Aber funktionieren tut's. Und froh wäre ich, wenn mir noch wer mit meiner Frage helfen könnte

    Einen Kommentar schreiben:


  • surfeu89
    antwortet
    Playlist

    Hallo Onkelandy,

    vielen Dank für die schnelle Auskunft. Muss ich heute Abend direkt mal testen. Würde es dir was ausmachen, mir ein konkretes Beispiel zu geben.
    Eines ist mir zum Beispiel nicht ganz klar...

    Der Punkt Logik:

    sh.Squeezebox.Playlist_Load("PLAYLISTNAME")

    Wo setzt Du diesen Eintrag, sprich in welcher .conf Datei?
    Musst Du diese Logik nicht triggern, wodurch wird das ausgelöst?

    Ein Beispiel wäre für mich ganz gut!

    Danke Dir!

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Problem mit Playlists speichern

    Hallo zusammen!

    Hier gibt es ja schon einige Posts, die sich mit Playlisten befassen, allerdings konnte ich leider noch nichts zu meinem Problem finden. Sämtliche Experimente meinerseits sind ebenfalls in die Hose gegangen

    Das möchte ich tun:
    - 2 oder mehrere Playlisten, die ich per KNX Taster abspielen kann
    - beim Umschalten von einer zur anderen Playliste soll die noch aktuelle Playliste (bzw. die Abspielposition) gespeichert werden, aber nur, wenn sie nicht durch neue Songs ersetzt wurde

    Szenario 1 funktioniert:
    - Lade Playliste 1, spiele paar Songs
    - Schalte auf Playliste 2 um, speichere davor aktuellen Stand der Playliste 1

    Szenario 2 funktioniert nicht:
    - Lade Playliste 1
    - Songs in der Playliste über Webinterface ersetzt. Dabei wird eine namenlose neue Playliste erstellt. Es handelt sich laut "playlist name ?" NICHT mehr um die geladene Liste. Und das ist gut so.
    - Schalte auf Playliste 2 um, speichere nichts, da Playliste 1 durch eine temporäre ersetzt wurde

    Ich bräuchte also vor dem Speichern das Rückmeldeobjekt zu "<playerid> playlist name ?" und bekomm das nicht auf die Reihe Wäre froh, wenn mir hier wer helfen könnte.


    Weiteres Problem: Ich möchte auch das Umschalten der Playlisten außerhalb von KNX monitoren, also zB wenn das übers Webinterface geschieht. squeezebox_recv habe ich wie hier empfohlen bereits auf <playerid> playlistcontrol cmd:load playlist_name:PLAYLISTNAME gestellt. Allerdings schreibt mein Squeezeserver beim Laden einer Playliste nicht den Namen, sondern eine ID (die zudem nicht konstant zu sein scheint): playlistcontrol cmd:load playlist_id: NUMMER. Wie kann ich denn den Squeezeserver dazu bringen, die Liste via Namen statt via ID aufzurufen, wenn ich das zB über iPeng oder Webinterface steuere?

    Vielen Dank!
    Andy

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    @SurfEU: Ich habe meinen Squeezeserver auch auf einem NAS laufen und muss keine Pfade angeben. Wichtig ist in dem Fall, dass die Playlisten halt auch in der Datenbank drin sind. Also mal im Webinterface eine Playliste abspeichern und die dann so aufrufen:
    ITEM:
    [[Playlist_Load]]
    type = str
    enforce_updates = true
    visu_acl = rw
    squeezebox_send = <playerid> playlistcontrol cmd:load playlist_name:{}
    #geht auch: squeeze_send = <playerid> playlist resume {}

    LOGIK:
    sh.Squeezebox.Playlist_Load("PLAYLISTNAME")

    Einen Kommentar schreiben:


  • surfeu89
    antwortet
    Problem mit Playlist

    Hallo erstmal,

    vielen Dank für das Klasse Plugin, habe gerade damit erfolgreich
    die Kommunikation zur Squezzebox hinbekommen. Mein Problem sind derzeit die Wiedergabelisten, sprich Playlist. Habe meinen LMS sowie die Playlist´s auf einem NAS-System liegen. Wie habt ihr das bei euch gelöst, wo legt ihr die Daten ab? Bekomme einfach keine Playlist geladen. Ist das überhaupt in Verbindung mit NAS möglich? Muss ja irgendwie einen Aufruf erzeugen.
    Habe mich übrigerweise an das gut beschriebene Beispiel unter smartvisu.de gehalten, aber leider ohne Erfolg.

    Ich denke, ich muss das in dieses Format packen, geht aber trotzdem nicht!

    squeezebox_send = <playerid> playlist play /volume1/music/01_Playlists/AntenneBayern.m3u

    Wäre für Hilfe, bzw. einen Denkanstoß sehr dankbar.

    Schöne Grüße
    Daniel

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Zitat von Robert Beitrag anzeigen
    Der Pfad wird automatisch der im LMS eingestellte genommen.

    Code:
      [[Playlist_Play_Internetradio]]     type = bool     enforce_updates = true     squeezebox_send = <playerid> playlistcontrol cmd:load playlist_name:Internetradio
    Als Argument in der smartVISU dann halt nicht "1" sondern einfach den Namen der Playliste!
    Hallo Robert,
    das habe ich irgendwie nicht gerafft.

    Ich habe einen LMS auf eigenem Raspi aktuellem Squeezeplugimage am laufen.

    In meiner Item habe ich folgenden Code:
    Code:
      [[Playlist_Load_AntenneBayern]]
        type = bool
        enforce_updates = true
        visu_acl = rw
        squeezebox_send = <playerid> playlist play /mnt/internal/media/playlists/AntenneBayern.m3u
    
      [[Playlist_Load_Bremen1]]
        type = bool
        enforce_updates = true
        visu_acl = rw
        squeezebox_send = <playerid> playlist play /mnt/internal/media/playlists/Bremen1.m3u
      [[Playlist_Load_Gong]]
        type = bool
        enforce_updates = true
        visu_acl = rw
        squeezebox_send = <playerid> playlist play /mnt/internal/media/playlists/Gong.m3u
      [[Playlist_Load_B5]]
        type = bool
        enforce_updates = true
        visu_acl = rw
        squeezebox_send = <playerid> playlist play /mnt/internal/media/playlists/B5.m3u
    usw.
    html:
    Code:
    {% import "multimedia.html" as multimedia %}
        <table width="100%">
            <tr>
            <td align="middle" width="100%">
                    {{ multimedia.station('CH1', 'Squeezebox_Bad.Playlist_Load_AntenneBayern', 'pics/station/radio/antennebayern.png', 1, 'midi') }}
                    {{ multimedia.station('CH2', 'Squeezebox_Bad.Playlist_Load_Bremen1', 'pics/station/radio/bremen1.png', 1, 'midi') }}
                    {{ multimedia.station('CH3', 'Squeezebox_Bad.Playlist_Load_Gong', 'pics/station/radio/gong.png', 1, 'midi') }}
                    {{ multimedia.station('CH4', 'Squeezebox_Bad.Playlist_Load_B5', 'pics/station/radio/b5.png', 1, 'midi') }}
    Das Abspielen der Internetsender funktioniert und per Buttonbetätigung werden die Sender gewechselt.

    Was ist bei Deinem Itemeintrag anders bzw was muß ich im html-Code und LM Player konfigurieren?

    Einen Kommentar schreiben:


  • SvStefan
    antwortet
    Squeezebox-Ansage

    Falls das wer brauchen kann, hab mir heute zusammengesucht, wie man mit dem Plugin eine Ansage hinkriegt, so dass nachher dasselbe weiterspielt, was vorher eingestellt war.

    squeeze_logic.py:
    Code:
    import time
    
    playing = sh.squeezebox1.play() # Status auslesen
    sh.squeezebox1.playlistsave('squeeze1') # Aktuelle Playlist abspeichern
    sh.squeezebox1.playlistplay('Relativer/Pfad/Ansage.mp3')
    time.sleep(5) # Länge Ansage
    sh.squeezebox1.playlistresume('squeeze1') # Resume alte Playlist
    if not playing:
    	sh.squeezebox1.stop(True) # Falls vorher gestoppt war, nun auch stoppen
    Das Item playlistplay macht (eh klar): <playerid> playlist play {}
    playlistresume macht: <playerid> playlist resume {}

    LG Stefan

    Einen Kommentar schreiben:


  • adm1024
    antwortet
    squuezebox Time item never updated ...

    Hello.
    As I said before, I have a issue with the Time item in the plugin.
    In my configuration this value is never updated. It was read in init, but not during the song.
    Is there anybody that have a working Time configuration ?

    Thanks to share your configuration.

    Regards

    Einen Kommentar schreiben:


  • Robert
    antwortet
    Nur als Anmerkung dazu:

    Ich hatte heute mit "playlist load" einige Schwierigkeiten. Daher weiter gesucht und mit

    Code:
      [[Playlist_Play]]
        type = str
        enforce_updates = true
        squeezebox_send = <playerid> playlistcontrol cmd:load playlist_name:{}
      [[Playlist_Play_Internetradio]]
        type = bool
        enforce_updates = true
        squeezebox_send = <playerid> playlistcontrol cmd:load playlist_name:Internetradio
    eine schönere Version gefunden. Der Pfad wird automatisch der im LMS eingestellte genommen.

    Als Argument in der smartVISU dann halt nicht "1" sondern einfach den Namen der Playliste!

    Einen Kommentar schreiben:

Lädt...
X