Hallo,
ich möchte für einen Squeezebox Player einen Fortschrittsbalken mit Slider der Musik erstellen.
Wie kann ich data-max auf das Reading duration setzen?
duration wird bis zwischen 1 und 3 Nachkommastellen angezeigt. Wie kann das gekürzt / gerundet werden?
<div data-type="slider" class="horizontal col-3-4 value tap" data-device="SB_Player_PCT" data-get="currentTrackPosition" data-set="currentTrackPosition" data-min="0" data-max="playlistTracks" data-width="350"></div>
EDIT: Der Wert currentTrackPosition wird nur gut alle 5 Sekunden aktualisiert. Kann das auch für jede Sekunde eingestellt werden?
Gruß
TWART016
Der passive Counterpart von slider "level" kann das.
<div data-type="level" data-device="SB_Player_PCT" data-get="currentTrackPosition" data-max="duration" data-width="280"></div>
Kann man das auch in Slieder einbauen? Ich hätte gerne ähnlich wie bei der Lautstärke per Schieberegler die Zeit zu verändern:
<div data-type="slider" class="horizontal col-3-4 value tap" data-device="SB_Player_PCT" data-get="volume" data-set="volume" data-min="0" data-max="100" data-width="350"></div>
Und wie sieht es mit dem der duration bei data-max aus?
Hallo,
ZitatDer Wert currentTrackPosition wird nur gut alle 5 Sekunden aktualisiert. Kann das auch für jede Sekunde eingestellt werden?
Du kannst in der neuen Version der Module das Abfrageintervall über das Attribut 'trackPositionQueryInterval' in Sekunden einstellen. Der Wert 0 schaltet die Aktualisierung komplett aus.
Die Module kannst du mit
update force https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/sb/controls_squeezebox.txt
aktualisieren.
Grüße,
ChrisD
Ich habe Slider und Level jetzt angepasst, damit beide die gleichen Parameter haben. Also kann Slider jetzt auch Max und Min von einem Reading bekommen.
Danke schonmal. Der Slider funktioniert soweit. Nur habe ich ein seltsames Verhalten.
Nach 3 Sekunden wechselt der Wert und Slider von currentTrackPosition zu duration.
Zwischen 10 und 27 Sekunden wird die currentTrackPosition wieder korrekt angezeigt, anschließend bis 100 wieder die duration.
Das Reading im SB_Player wird korrekt angezeigt.
Kann die duration auch in Minuten und Sekunden angezeigt werden, z.B. 4:26?
TrackPositionQueryInterval habe ich gesetzt.
attr SB_Player_PCT trackPositionQueryInterval 1
Mein aktueller Code:
<div data-type="slider" class="horizontal col-3-4 value tap" data-device="SB_Player_PCT" data-get="currentTrackPosition" data-set="currentTrackPosition" data-min="0" data-max="duration" data-width="350"></div>
Der Wert in duration muss eine Ganzzahl sein, also Zeit in Sekunden, kein Zeitliteral z.B. "3:22"
genauso bei der currentPosition.
Die Zeit in Minuten und Sekunden kann man dann mit einem Label anzeigen
<div data-type="label" data-device="MPD1" data-get="elapsed" data-substitution="toMinFromSec()" class="inline middle"></div>
<div data-type="level" data-device="MPD1" data-get="elapsed" data-max="Time" data-width="280" class="horizontal inline middle"></div>
<div data-type="label" data-device="MPD1" data-get="Time" data-substitution="toMinFromSec()" class="inline middle"></div>
Mit einem korrekten data-max scheint es zu laufen. Wie bekomme ich den gekürzten Wert nur auf das Reading duration?
data-part="(\d*).*2
Per userReading? Wie müsste das aussehen?
Ich komme da gerade nicht weiter. Wie bekomme ich
data-part="(\d*).*"
in das reading duration?
für welches Widget bei welchem Parameter brauchst du ein RegEx Filter?
Nachtrag:
Aber besser ist ein userReading direkt in der Device Definition in FHEM, was Duration in Sekunden liefert. Wie das auszusehen hat, kann ich dir auch nicht sagen. Dafür mache ich sowas viel zu selten. Aber steht bestimmt im CommandRef :)
Hallo,
Die Squeezebox-Module liefern die Duration bereits in Sekunden. Beim Testen mit dem Slider-Widget konnte ich den Effekt
ZitatNach 3 Sekunden wechselt der Wert und Slider von currentTrackPosition zu duration.
Zwischen 10 und 27 Sekunden wird die currentTrackPosition wieder korrekt angezeigt, anschließend bis 100 wieder die duration.
reproduzieren. Er scheint dadurch zu kommen dass Duration und aktuelle Position nicht als Zahlen sondern als Strings miteinander verglichen werden. Wenn ich in widget_slider.js die Zeile
var val = ftui.getPart(state, part);
durch
var val = parseInt(ftui.getPart(state, part));
ersetze funktioniert es wie erwartet.
Grüße,
ChrisD
Mit dem UserReading ftuiDuration:duration.* {int(ReadingsVal($name,'duration',0))}
wird mir die Zeit im Label korrekt angezeigt.
Die Zeile habe ich in der slider.js gesetzt, scheint zu funktionieren. Baust du das fix in das nächste Update ein oder muss ich das jedesmal manuell setzen?
var val = parseInt(ftui.getPart(state, part));
Was derzeit noch nicht funktioniert mit dem Slider:
ich kann kein set machen. Manuell in FHEM UI springt die Zeitangabe zu der korrekten Zeit. Sieht so aus, als wenn der Wert currentTrackPosition sich ändert, der Slider sofort da hin springt. z.B. halte ich den Button 2 Sekunden bei einer halben Minute weiter gedrückt. Jede Sekunde springt der Zeiger wieder zur currentTrackPosition.
Weiter wäre es schön, wenn man nicht den Button des Slider drücken und in die gewünschte Position ziehen muss, sondern einfach auf eine die gewünschte Stelle im Slider.
Mein aktueller Code:
<div class="row">
<div data-type="label" data-device="SB_Player_PCT" data-get="currentTrackPosition" data-substitution="toMinFromSec()" class="inline middle"></div>
<div data-type="slider" data-device="SB_Player_PCT" class="horizontal centered inline" data-width="300" data-max="ftuiDuration" data-get="currentTrackPosition" data-set="currentTrackPosition"></div>
<div data-type="label" data-device="SB_Player_PCT" data-get="duration" data-substitution="toMinFromSec()" class="inline middle"></div>
</div>
das schaue ich mir noch an. Das klingt durchaus möglich, dass an einer Stelle nicht numerisch verglichen wird und dadurch Unsinn passiert.
Hast du hier schon was herausfinden können?
Da war doch noch was ... :-) genau
Schon wieder vom Schirm gewesen. Ich schaue gleich mal ...
Sooo....done
Ich habe jetzt die Umwandlung in Zahlen eingebaut. Klappt jetzt besser.
Setze ich per Slider den aktuellen Wert kann ich anschließend wie gewollt eine andere Zeit auswählen. Nach ein paar Sekunden gleiches Verhalten, der Slider springt beim Steuern zur aktuellen Zeit.
Beim Wechsel zum nächsten Titel wird immer erst ab der 10. Sekunde der korrekte Labelwert currentTrackPosition angezeigt. Ähnlich beim setzen des Wertes bei Slider.
Ich bekomme immer beim Wechsel oder bestimmten Kommandos einen Fehler mit der Verbindung:
Disconnected from FHEM
und
Retry to connect in 10 seconds
Kommt es vielleicht daher? Den Fehler habe ich übrigends auch auf einer komplett frischen Seite.