SONOS: Neue Version vom 24.3.2018

Begonnen von Reinerlein, 24 März 2018, 23:56:22

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

da ich ein paar kleinere Sachen drin habe, hier mal eine neue Version.

Folgendes ist enthalten:

  • Einige Log-Ausgaben haben bei undefinierten Default-Übergaben Fehlermeldungen verursacht.
  • Bei einigen Positionsabfragen an die Player wurden Sonderfälle (wie NOT_IMPLEMENTED) nicht berücksichtigt.
  • Slider-Wertebereich für Bass und Treble auf den Bereich -10..10 korrigiert.
  • Es gibt jetzt ein Reading "IsZoneBridge", das 0 oder 1 sein kann. Danach wird jetzt auch entschieden, ob eine Playersteuerung dargestellt wird, oder nicht.
Wie immer ab sofort im SVN oder ab Morgen per Update...

Grüße
Reinerlein

Elektrolurch

Hallo Reinerlein,

ich habe mit dem Befehl:
set player CurrentTrackPosition <Wert>
ein Problem.
Zitat:
CurrentTrackPosition <TimePosition>: Setzt die aktuelle Zeitposition im Lied. Man kann hier auch relative Angaben machen wie '+0:00:10' oder nur '+10'. Zusätzlich kann man auch Prozentwerte angeben wie z.B. '+10%'. Natürlich können diese Angaben auch negativ sein.

Wenn ich den Wert mit "+10" angebe, springt die Position leider nicht relativ um 10 s vorwärts, sondern auf die Position 00:00:10, wird also nicht relativ, sondern absolut interpretiert.

     2018-09-23 11:31:56   currentTrack    3
     2018-09-23 11:31:56   currentTrackDuration 0:07:39
     2018-09-23 11:31:56   currentTrackDurationSec 459
     2018-09-23 11:31:56   currentTrackPosition 0:00:00
     2018-09-23 11:31:56   currentTrackPositionSec 0
     2018-09-23 11:10:15   currentTrackPositionSimulated 0:00:24
     2018-09-12 16:11:29   currentTrackPositionSimulatedPercent 0.0
     2018-09-23 11:10:15   currentTrackPositionSimulatedSec 24


Die "simulierte" Position stimmt auch nicht, da mindestens schon 4 Minuten abgelaufen sind.

Ich wollte mir eine Rewind / Forward - Funktion implementieren, um innerhalb eines Tracks vor- und zurück zu navigieren, z.B. in 10 s Schritten.

Eine Idee, worin das Problem bestehen könnte?

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

das ist ein Fehler :(
Ich habe den aber auch gefunden, und gefixt. Ich habe gerade nur einen halben Umbau wegen der temporären Wiedergabe drin, sodass ich erstmal schauen muss, was ich noch alles fertigmachen muss, damit das Modul erstmal wieder normal läuft :)

Ansonsten schonmal für Bastler:

} elsif ($workType eq 'setCurrentTrackPosition') {
my $value1 = $params[0];

if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
if ($value1 =~ m/([+-]{0,1})(\d+:\d+:\d+|\d+:\d+|\d+)(\%{0,1})/) {
my $sign = $1;
my $value1Sec = SONOS_GetTimeSeconds(SONOS_ExpandTimeString($2));
my $percent = $3;

$sign = '' if (!defined($sign));
$percent = '' if (!defined($percent));

# Positionswerte abfragen...
my $result = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0);
my $pos = $result->getValue('RelTime');
if ($pos !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
$pos = '0:00:00';
}
$pos = SONOS_GetTimeSeconds($pos);
my $duration = SONOS_GetTimeSeconds($result->getValue('TrackDuration'));

# Neue Position berechnen...
my $newPos = 0;
if ($sign =~ m/[+-]/) {
if ($percent eq '') {
$newPos = ($pos + $value1Sec) if ($sign eq '+');
$newPos = ($pos - $value1Sec) if ($sign eq '-');
} else {
$newPos = ($pos + ($value1Sec * $duration / 100)) if ($sign eq '+');
$newPos = ($pos - ($value1Sec * $duration / 100)) if ($sign eq '-');
}
} else {
$newPos = $value1Sec;
}

# Sicherstellen, dass wir im Bereich des Titels bleiben...
$newPos = 0 if ($newPos < 0);
$newPos = $duration if ($newPos > $duration);

# Neue Position setzen
$SONOS_AVTransportControlProxy{$udn}->Seek(0, 'REL_TIME', SONOS_ConvertSecondsToTime($newPos));
}

my $trackPosition = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime');
if ($trackPosition !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
$trackPosition = '0:00:00';
}
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$trackPosition);
}
Das Wort "setCurrentTrackPosition" kommt nur einmal in der 00_SONOS.pm vor...

Grüße
Reinerlein

Elektrolurch

Danke.
Aber da stimmtdas Prototyping nicht:
1.
Too many arguments for main::SONOSPLAYER_SimulateCurrentTrackPosition at ./FHEM/00_SONOS.pm line 1593, near "$hash)"
In 21_SONOSPLAYER gehört da noch ein $ in die Parameterliste.
2.
Too many arguments for main::SONOS_StartMetadata at ./FHEM/00_SONOS.pm line 3615, near "$nostart)"
Too many arguments for main::SONOS_StartMetadata at ./FHEM/00_SONOS.pm line 4019, near "])"
Deklaration:
sub SONOS_StartMetadata($$$$) {
   my ($workType, $udn, $res, $meta, $nostart) = @_;

und Zeile 4019:
            SONOS_StartMetadata($workType, $udn, $songURI, $songMeta, $params[1]);


Fehlt wohl auch ein $. :-)

Gruß

Elektrolurch


configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

danke für die Hinweise. Mich wundert nur, dass ich diese nirgendwo gesehen habe. Ich habe gerade mal die Logs nach sowas durchsucht.
Bei mir tritt das komischerweise nicht in Erscheinung...

Habe ich aber angepasst.

Grüße
Reinerlein

Elektrolurch

Hallo Reinerlein,

die Meldungen hatte ich auch nur, als ich die geänderte 00SONOS per reload aktiviert habe. Hat mich auch gewundert, denn früher ist das bei einem Neustart nicht gemeldet worden. Seis drum, habe ich ja schnell gefixed.
Läuft alles: Habe jetzt zwei Buttons (alles iPhone gerecht), einer für rewind, der andere für forward.
Drückt man z.B. den forward - Button, springt der Track um 10 s weiter. Drückt man innerhalb von 3 s nochmal, springt das Abspielen auf den nächsten Track.
Innerhalb von 3 s bis 20 s wird beim Drücken des Forward - Buttons jeweils die Sprungweite verdoppelt, also 20 s, dann 40 s usw. Wartet man länger als 20 s bis zum Drücken, dann steht die Sprungweite wieder auf 10 s.
Die Buttons werden dynamisch angepasst, unter dem Icon steht jeweils die aktivierte Aktion als Text.
Nettes Spielzeug.
Also noch Mal Danke für den schnellen fix.

Elektrolurch
configDB und Windows befreite Zone!