Modul für WLAN Radios mit Frontier Silicon Chipsatz (SilverCrest/Medion/Hama...)

Begonnen von mumpitzstuff, 07 November 2017, 00:21:27

Vorheriges Thema - Nächstes Thema

mumpitzstuff


supernova1963

Zitat von: mumpitzstuff am 14 März 2018, 20:58:07
Wenn ich dich richtig verstanden habe, dann möchtest du ein Reading preset haben, das sich je nachdem was man als Input ausgewählt hat ändert und damit die aktuell verfügbaren presets anzeigt?
Wenn du mir sagst wozu man das brauchen könnte, würde ich drüber nachdenken.  ;D

Meinen Ansatz für eine Steuerung meines Radios als readingsGroup hatte ich hier vorgestellt.
Zitat von: supernova1963 am 12 März 2018, 17:34:04
...
(Raw-) Definition der Steuerung (Problemfall): ...
Der vielleicht naive Ansatz ist, neben dem DropDown für den Input eine Auswahl der verfügbaren Presets anzubieten. Aber vielleicht gibt es andere, bessere und elegantere Ansätze dafür oder es ist mit einem preset reading gar nicht umsetzbar?!
Ich bin gespannt, wie es andere umsetzen,

Gernot



mumpitzstuff

Hmmm. Was dein aktuell ausgewählter input ist, sollte dir ja bekannt sein bzw. steht dir als Reading ja bereits zur Verfügung. Kannst du dann nicht einfach folgendes zusammen basteln und dann das richtige Reading selbst auslesen?

my $input = ReadingsVal('radio', 'input', '');
my $presets = ReadingsVal('radio', '.'.$input.'presets', '');


Ansonsten muss ich mal gucken das ich die aktuell gültigen presets auch in .presets festhalte, so das man sich dann den Reading Namen nicht mehr manuell zusammen bauen muss. Ich würde das aber weiterhin gern mit dem Punkt verstecken, da man ansonsten immer ein riesiges Reading sehen würde.

supernova1963

Danke für den Tip, ich probiere es aus, ob ich mit dem valueFormat Attribut der readingsGroup es so hinbekomme.

Ich nicht erkannt, dass es so aufwendig ist. Mein erster Gedanke, war einfach in der sub SIRD_Notify auf das Umschalten Event von input zu reagieren und die jeweils aktiven Inhalte in presets zu kopieren.

Danke,

Gernot

mumpitzstuff

Habe jetzt auch mal ein wenig rumgespielt und mit der letzten Testversion von mir müsste es so gehen:

"input" => "input:".filterReading(ReadingsVal($DEVICE, '.inputs', '')),
"preset" => ReadingsVal($DEVICE, 'input', '')."preset:".filterReading(ReadingsVal($DEVICE, '.'.ReadingsVal($DEVICE, 'input', '').'presets', '')),


In 99_myUtils.pm gibts dann noch die kleine Funktion:

sub filterReading($)
{
  my $reading = shift;

  $reading =~ s/\d://g;

  return $reading;
}

supernova1963

Super, funktioniert!
Wenn ich nach einigen Sekunden die Seite aktualisiere, ist die DropDown für die presets korrekt gefüllt.

Mal' sehen, wie man diese Seitenaktualisierung automatisieren kann.

Vielen Dank,

Gernot

mumpitzstuff

Ein neues Update wurde eingespielt. Änderungen sind im ersten Post kurz dargestellt.

mumpitzstuff

Ich habe auf Basis der Sonos Readinggroup noch eine Cover Readinggroup erstellt:

in 99_myUtils.pm folgendes erzeugen:

sub getCoverTitleRG($;$$)
{
  my ($device, $width, $space) = @_;
 
  $width = 500 if (!defined($width));

  return '<div style="float: left;">'.getCoverRG($device).'</div><div style="margin-left: 150px; min-width: '.$width.'px;>'.getTitleRG($device, $space).'</div>';
}

sub getCoverRG($;$)
{
  my ($device) = @_;

  return '<img style="margin-right: 5px; border: 1px solid lightgray; height: 175px" src="'.ReadingsVal($device, 'graphicUri', '').'" />';
}

sub getTitleRG($;$)
{
  my ($device, $space) = @_;
  $space = 20 if (!defined($space));

  my $infoString = '';

  my $transportState = ReadingsVal($device, 'playStatus', '');

  if (ReadingsVal($device, 'currentAlbum', '') ne '')
  {
    $infoString = sprintf('<div style="margin-left: -150px;">%s %s<br/>Titel: <b>%s</b><br/>Interpret: <b>%s</b><br/>Album: <b>%s</b></div>',
                           $transportState,
                           ReadingsVal($device, 'input', ''),
                           ReadingsVal($device, 'currentTitle', ''),
                           ReadingsVal($device, 'currentArtist', ''),
                           ReadingsVal($device, 'currentAlbum', ''));
  }
  else
  {
    $infoString = sprintf('<div style="margin-left: -150px;">%s %s<br/>Sender: <b>%s</b><br/>Info: <b>%s</b><br/>Description: <b>%s</b></div>',
                           $transportState,
                           ReadingsVal($device, 'input', ''),
                           ReadingsVal($device, 'currentTitle', ''),
                           ReadingsVal($device, 'infoText', ''),
                           ReadingsVal($device, 'description', ''));
  }

  return $infoString;
}


Und dann eine weitere Readinggroup erzeugen:

defmod rg_WLAN_RADIO1 readingsGroup WLAN_RADIO:<{getCoverTitleRG($DEVICE)}@infoSummarize1>
attr rg_WLAN_RADIO1 alias Info
attr rg_WLAN_RADIO1 nonames 1

Lichti

Wollte mal das Cover anzeigen, kommt aber kein Bild.
Die Info-Zeilen sind da.
Allerdings ist auch das Reading graphicUri leer.
Kann es sein, das es nicht bei jedem Gerät geht ?

mumpitzstuff

Ich habs nur mit dem input internetradio probiert. Hier stand bei mir ein Link in dem reading graphicURI drin, wenn das Radio eingeschaltet war und ich den entsprechenden Radiosender laufen habe.

Hier habe ich mal abgelegt wie das grad bei mir aussieht:

https://forum.fhem.de/index.php/topic,85794.msg781980.html#msg781980

Lichti

Stimmt, ich hab nur mit DAB probiert.
Bei Internetradio steht ein Link zu Technisat drin, wo das Senderlogo angezeigt wird.

Könnte man eigentlich auch das Cover zum gerade laufenden Titel anzeigen?

mumpitzstuff

Grundsätzlich kann man jede Art von Cover anzeigen. Das Radio muss halt irgendwie einen Link erzeugen, der muss dann im Modul als Reading angezeigt werden und dann kann man ihn einer ReadingsGroup übergeben und diese lädt das Cover aus dem Netz. Wenn das Radio das nicht kann, dann müsste man das irgendwie selbst tun, das wird dann aber richtig kompliziert glaube ich.

mumpitzstuff

Theoretisch wäre es denkbar im Modul einen Link für z.B. das AlbumCover zu erzeugen. Leider stellt mein Radio aber keinerlei Informationen über den gerade abgespielten Song oder den Interpreten zur Verfügung wenn ich internetradio als Input ausgewählt habe. Dazu habe ich jetzt mehrere Fragen:

1.) Ist das bei euch auch so, sowohl im FHEM Modul als auch z.B. in der UNDOK App auf iOS oder Android?
2.) Habt ihr andere Inputs wo vielleicht mehr Informationen angezeigt werden? CD, DAB, UKW oder was auch immer. Könnt ihr mir einen Screenshot entweder vom FHEM Modul schicken (falls da was angezeigt wird) oder von der UNDOK App, falls nur hier etwas wie Artist oder Album angezeigt wird?

Wenn das Radio irgendwas wie den Artist bzw. das Album liefert, könnte ich einen Link zum Cover generieren und dieser könnte dann z.B. in einer ReadingsGroup angezeigt werden.

mumpitzstuff

Ich habe eine Version mit volumeUp, volumeDown, presetUp und presetDown fertig gestellt und hoffe, dass ich diese heute Abend einspielen kann. Weiterhin werde ich im ersten Beitrag meine aktelle Version eines Players über eine ReadingsGroup einstellen, so dass ihr euch diese ebenfalls installieren bzw. als Basis für weitere Anpassungen verwenden könnt.

mumpitzstuff

Die neue Version wurde hochgeladen und ist ab sofort verfügbar.

Die Informationen zur ReadingsGroup habe ich im ersten Beitrag hinzugefügt.

Das nächste woran ich mich versuchen werde sind die Events. Wenn mir das gelingt, dann kommen die Statusinformationen wesentlich schneller rein und man kann den Updatezyklus wesentlich größer wählen und bekommt trotzdem alle Informationen absolut zeitnah angezeigt.