FTUI Widget Readingsgroup: Unterschied zwischen den Versionen
(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 | 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 | |'''data-device'''||FHEM-Device, dessen HTML-Inhalt angezeigt werden soll|||| | ||
|- | |- | ||
|'''data-get'''||Name des Readings, das eine Änderung der ReadingsGroup | |'''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,< >,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" => ' % ' } | |||
</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.
<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; }