FTUI Widget Readingsgroup: Unterschied zwischen den Versionen

Aus FHEMWiki
(Erster Entwurf für readingsGroup widget)
 
(FHEM-Teile hinzugefügt und korrekturen)
Zeile 1: Zeile 1:
Das [[{{PAGENAME}}|readingsgroup Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem eine in FHEM definierte readingsGroup auch im tablet UI angezeigt werden kann
Das [[{{PAGENAME}}|readingsgroup Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem eine in FHEM definierte readingsGroup auch im FHEM Tablet UI angezeigt werden kann


<gallery>
<gallery>
Zeile 12: Zeile 12:
!Beispiel
!Beispiel
|-
|-
|'''data-device'''||FHEM-Device, dessen Reading Reading angezeigt werden soll||||
|'''data-device'''||FHEM-Device, dessen HTML-Inhalt angezeigt werden soll||||
|-
|-
|'''data-get'''||Name des Readings, das eine Änderung der ReadingsGroup angibt||'STATE'||
|'''data-get'''||Name des Readings, das eine Änderung der ReadingsGroup anzeigt||'STATE'||
|-
|-
|'''data-max-update'''||Maximale Häufigkeit in Sekunden für das Update der ReadingsGoup||60||
|'''data-max-update'''||Maximale Häufigkeit in Sekunden für das Update der ReadingsGoup||60||
Zeile 20: Zeile 20:


==Hinweise==
==Hinweise==
Im ReadingsGroup widget wird anders als in anderen widgets nicht der angegebene Wert aus dem Device dargestellt, sondern der HTML-Inhalt des angegebenen Devices. Dieser HTML-Inhalt wird ohne Änderungen eingebettet. Das data-get Reading dient nur dazu ein nötiges Update der ReadingsGroup zu erkennen.
Im ReadingsGroup widget wird anders als in anderen widgets nicht der angegebene Wert aus dem Device dargestellt, sondern der HTML-Inhalt des angegebenen ReadingsGroup-Devices. Dieser HTML-Inhalt wird ohne Änderungen eingebettet. Das data-get Reading dient nur dazu ein nötiges Update der ReadingsGroup zu erkennen.




Zeile 38: Zeile 38:
   </div>  
   </div>  
</source>
</source>
Der Vollständigkeit halber noch die Definition der readingsGroup in FHEM
<pre>
define MyTHYReadings readingsGroup <%temperature_humidity>,<%temp_temperature>,<>,<%weather_humidity>,<>,<%measure_battery_50>,<>,<Update>
TYPE=LaCrosse:temperature,<&nbsp;>,humidity,<&nbsp;>,battery,<&nbsp;>,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"temperature","humidity"))}@temperature>
TYPE=CUL_TX:temperature,<&nbsp;>,humidity,<&nbsp;>,<>,<&nbsp;>,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"temperature","humidity"))}@temperature>
HMT_wz:measured-temp,<&nbsp;>,humidity,<&nbsp;>,battery,<&nbsp;>,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"measured-temp","humidity"))}@measured-temp>
HMT_lars:measured-temp,<&nbsp;>,<>,<&nbsp;>,battery,<&nbsp;>,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"measured-temp","battery"))}@measured-temp>
attr MyTHYReadings noheading 1
attr MyTHYReadings room TEMP
attr MyTHYReadings valueStyle style="text-align:right"
attr MyTHYReadings valueSuffix { "temperature" => ' C  ', "measured-temp" => ' C  ' , "humidity" => ' %  '  }
</pre>
Und damit auch alles funktioniert hier noch der Perl-Code (aus 99_myUtils) für die beiden Perl-Routinen
<pre>
##############################################
# Berechne Zeitdifferenz von String zeit -> als Beschreibung
#
sub getTimeDiffDesc($) {
  my ($str) = @_;
 
  my $now = time;
  my $td = $now - time_str2num( $str );
  my $tstr = "???";
 
  if ( $td < 1 ) {
    $tstr = "<1m";
  } elsif ( $td < 60 ) {
    $tstr = "<1m";
  } elsif ( $td < 3600 ) {
    $tstr = sprintf("%2d", int(($td/60) + 0.5) )."m" ;
  } elsif ( $td < (3600*24) ) {
    $tstr = sprintf("%2d", int(($td/3600) + 0.5) )."h" ;
  } else {
    $tstr = int(($td/(3600*24)) + 0.5)."d" ;
  }
 
  return $tstr;
}
##############################################
# Berechne neuesten Zeitstempel von mehreren Stati
#
sub getNewestTimestamp($@) {
  my ($device, @args) = @_;
  my $nt = 0;
  my $nts = "";
 
  for(my $i=0; $i < int(@args); $i++) {
    my $tds = ReadingsTimestamp($device,$args[$i],"");
    if ( $tds ne "" ) {
      my $td = time_str2num( $tds );
      if ( $nt == 0 ) {
        $nt = $td;
        $nts = $tds;
      } elsif ( $td > $nt ) {
        $nt = $td;
        $nts = $tds;
      }
    }
  }
 
  return $nts;
}
</pre>


[[Kategorie:FHEM Tablet UI]]
[[Kategorie:FHEM Tablet UI]]

Version vom 11. Februar 2017, 16:01 Uhr

Das readingsgroup Widget ist ein Widget für FHEM Tablet UI, mit dem eine in FHEM definierte readingsGroup auch im FHEM Tablet UI angezeigt werden kann

Attribute

Attribut Beschreibung Standard-Wert Beispiel
data-device FHEM-Device, dessen HTML-Inhalt angezeigt werden soll
data-get Name des Readings, das eine Änderung der ReadingsGroup anzeigt 'STATE'
data-max-update Maximale Häufigkeit in Sekunden für das Update der ReadingsGoup 60

Hinweise

Im ReadingsGroup widget wird anders als in anderen widgets nicht der angegebene Wert aus dem Device dargestellt, sondern der HTML-Inhalt des angegebenen ReadingsGroup-Devices. Dieser HTML-Inhalt wird ohne Änderungen eingebettet. Das data-get Reading dient nur dazu ein nötiges Update der ReadingsGroup zu erkennen.


CSS-Klassen

Keine eigenen CSS-Klassen, im HTML-Rendering können aber Referenzen auf CSS-Klassen aus FHEMWeb enthalten sein

Beispiele

ReadingsGroup von verschiedenen Thermo/Hygro-Sensoren

Hier werden Readings für verschiedene Typen von Sensoren als Tabelle angezeigt.

Ftui widget readingsGroup.png

  <header>THY readings</header>
  <div class="cell">
    <div data-type="readingsgroup" data-device="MyTHYReadings"></div> 
  </div>


Der Vollständigkeit halber noch die Definition der readingsGroup in FHEM

define MyTHYReadings readingsGroup <%temperature_humidity>,<%temp_temperature>,<>,<%weather_humidity>,<>,<%measure_battery_50>,<>,<Update>
TYPE=LaCrosse:temperature,< >,humidity,< >,battery,< >,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"temperature","humidity"))}@temperature> 
TYPE=CUL_TX:temperature,< >,humidity,< >,<>,< >,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"temperature","humidity"))}@temperature> 
HMT_wz:measured-temp,< >,humidity,< >,battery,< >,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"measured-temp","humidity"))}@measured-temp> 
HMT_lars:measured-temp,< >,<>,< >,battery,< >,<{getTimeDiffDesc(getNewestTimestamp($DEVICE,"measured-temp","battery"))}@measured-temp>
attr MyTHYReadings noheading 1
attr MyTHYReadings room TEMP
attr MyTHYReadings valueStyle style="text-align:right"
attr MyTHYReadings valueSuffix { "temperature" => ' C   ', "measured-temp" => ' C   ' , "humidity" => ' %   '  } 


Und damit auch alles funktioniert hier noch der Perl-Code (aus 99_myUtils) für die beiden Perl-Routinen

##############################################
# Berechne Zeitdifferenz von String zeit -> als Beschreibung
#
sub getTimeDiffDesc($) {

  my ($str) = @_; 
  
  my $now = time;

  my $td = $now - time_str2num( $str );

  my $tstr = "???";
  
  if ( $td < 1 ) {
    $tstr = "<1m";
  } elsif ( $td < 60 ) {
    $tstr = "<1m";
  } elsif ( $td < 3600 ) {
    $tstr = sprintf("%2d", int(($td/60) + 0.5) )."m" ;
  } elsif ( $td < (3600*24) ) {
    $tstr = sprintf("%2d", int(($td/3600) + 0.5) )."h" ;
  } else {
    $tstr = int(($td/(3600*24)) + 0.5)."d" ;
  }
  
  return $tstr;
}


##############################################
# Berechne neuesten Zeitstempel von mehreren Stati
#
sub getNewestTimestamp($@) {

  my ($device, @args) = @_; 

  my $nt = 0;
  my $nts = "";
  
  for(my $i=0; $i < int(@args); $i++) {
    my $tds = ReadingsTimestamp($device,$args[$i],"");
    if ( $tds ne "" ) {
      my $td = time_str2num( $tds );
      if ( $nt == 0 ) {
        $nt = $td;
        $nts = $tds;
      } elsif ( $td > $nt ) {
        $nt = $td;
        $nts = $tds;
      }
    }
  } 
  
  return $nts;
}