[gelöst]valueColumns Zuordnung bei einer ReadingsGroup

Begonnen von mumpitzstuff, 16 März 2018, 10:53:30

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Ich habe das Problem, das ich innerhalb einer ReadingsGroup eine Zeile mit Coverinformationen habe und eine zweite Zeile mit den Steuerungselementen für das Radio. Da die Coverinformationen relativ gross sind, reissen diese die Steuerungselemente auseinander. Ich wollte das jetzt irgendwie mit dem Attribut valueColumns beheben, doch leider kann ich das nicht mit einem Namen zuordnen.

defmod rg_WLAN_RADIO readingsGroup WLAN_RADIO:<{getCoverTitleRG($DEVICE)}@cover>\
WLAN_RADIO:input,preset,mute,volumeStraight,repeat,shuffle,+STATE
attr rg_WLAN_RADIO alias Steuerung
attr rg_WLAN_RADIO alwaysTrigger 1
attr rg_WLAN_RADIO commands {\
"STATE.off" => "set %DEVICE on",\
"STATE.on" => "set %DEVICE off",\
"input" => "input:".filterReading(ReadingsVal($DEVICE, '.inputs', '')),\
"preset" => ReadingsVal($DEVICE, 'input', '')."preset:".filterReading(ReadingsVal($DEVICE, '.'.ReadingsVal($DEVICE, 'input', '').'presets', '')),\
"volumeStraight" => "volumeStraight:slider,0,1,32",\
"mute" => "set %DEVICE mute toggle",\
"repeat.on" => "set %DEVICE repeat off",\
"repeat.off" => "set %DEVICE repeat on",\
"shuffle.on" => "set %DEVICE shuffle off",\
"shuffle.off" => "set %DEVICE shuffle on"\
}
attr rg_WLAN_RADIO group WLAN_RADIO_RG
attr rg_WLAN_RADIO noheading 0
attr rg_WLAN_RADIO nonames 1
attr rg_WLAN_RADIO room RADIO
attr rg_WLAN_RADIO valueColumns { cover => 'colspan="4"' }
attr rg_WLAN_RADIO valueIcon {\
"STATE.on" => "radio_checked@#e56524",\
"STATE.off" => "radio_unchecked",\
"mute.on" => "rc_MUTE@#e56524",\
"mute.off" => "rc_MUTE",\
"repeat.on" => "rc_REPEAT@#e56524",\
"repeat.off" => "rc_REPEAT",\
"shuffle.on" => "rc_SHUFFLE@#e56524",\
"shuffle.off" => "rc_SHUFFLE"\
}


Wie kann ich sagen, das sich:

<{getCoverTitleRG($DEVICE)}@cover>

über mehrere Spalten erstrecken soll?

Darüber hinaus habe ich das Problem, das die Informationen der ReadingsGroup immer erst nach einem manuellen Reload der Seite sichtbar werden. Ich ändere z.B. den Preset und muss dann immer manuell die Seite neu laden, um die Änderungen in der ReadingsGroup sichtbar zu machen. Gibts hierfür eine einfache Methode das automatisch zu machen, z.b. wenn sich die Readings des Devices verändern?

supernova1963

Zum Thema colspan:

attr rg_WLAN_RADIO valueColumns {"r:1,c:1" => 'colspan = "2"'}

Das Thema Aktualisieren interessiert mich ebenfalls.

Gernot

mumpitzstuff

Das Cover kann man aktualisieren indem man:

<{getCoverTitleRG($DEVICE)}@state>

verwendet. Damit werden dann die Cover Informationen aktualisiert wenn sich der state des Radios ändert.

mumpitzstuff

#3
Bei mir geht jetzt alles. Vielen Dank!

Die Aktualisierungen hängen am Updatezyklus des Radio Devices. Nur wenn diese aktualisiert werden alle x Sekunden, wird diese Änderung in der Readingsgroup angezeigt. Ich have den Zyklus auf 10s eingestellt, dann geht das relativ gut. Hier noch mal das komplette Listing.

defmod rg_WLAN_RADIO readingsGroup WLAN_RADIO:<{getCoverTitleRG($DEVICE)}@state>\
WLAN_RADIO:input,preset,volumeStraight,mute,repeat,shuffle,state
attr rg_WLAN_RADIO alias Steuerung
attr rg_WLAN_RADIO alwaysTrigger 1
attr rg_WLAN_RADIO commands {\
"state.off" => "set %DEVICE on",\
"state.on" => "set %DEVICE off",\
"input" => "input:".filterReading(ReadingsVal($DEVICE, '.inputs', '')),\
"preset" => ReadingsVal($DEVICE, 'input', '')."preset:".filterReading(ReadingsVal($DEVICE, '.'.ReadingsVal($DEVICE, 'input', '').'presets', '')),\
"volumeStraight" => "volumeStraight:slider,0,1,32",\
"mute" => "set %DEVICE mute toggle",\
"repeat.on" => "set %DEVICE repeat off",\
"repeat.off" => "set %DEVICE repeat on",\
"shuffle.on" => "set %DEVICE shuffle off",\
"shuffle.off" => "set %DEVICE shuffle on"\
}
attr rg_WLAN_RADIO group WLAN_RADIO_RG
attr rg_WLAN_RADIO noheading 0
attr rg_WLAN_RADIO nonames 1
attr rg_WLAN_RADIO room RADIO
attr rg_WLAN_RADIO valueColumns { 'r:1,c:1' => 'colspan="7"' }
attr rg_WLAN_RADIO valueIcon {\
"state.on" => "radio_checked@#e56524",\
"state.off" => "radio_unchecked",\
"mute.on" => "rc_MUTE@#e56524",\
"mute" => "rc_MUTE",\
"repeat.on" => "rc_REPEAT@#e56524",\
"repeat" => "rc_REPEAT",\
"shuffle.on" => "rc_SHUFFLE@#e56524",\
"shuffle" => "rc_SHUFFLE"\
}


Und der Code in der 99_myUtils.pm:

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

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

  return $reading;
}

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;
}