| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String "disabled" angezeigt.
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String "disabled" angezeigt.
|}
|}
== Berechnungen ==
{{Randnotiz|RNTyp=r|RNText=Die hier beschriebene Funktionalität wird erst im nächsten Update zur verfügung stehen.}}
Das Rechnen funktioniert über das Flag $ mit dem eine Funktion angegeben werden kann die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.
Hier wird eine readingsGroup über alle temperature Readings definiert. in einer zusätzlichen Zeile am Ende wird mit $avg der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.
Das genaue Format: <code>$<operator>[(<zellen>)]</code> mit
*<code><operator></code>: sum,avg,min,max,scalar,count oder der name einer beliebigen anderen funktion die ein array mit allen werten übergeben bekommt und eine ergebnis wert zurück liefert.
*<code><zellen></code> ist eine durch semikolon getrennte liste aus <code><zeilen>:<spalten></code> paaren.
*<code><zeilen></code> und <code><spalten></code> sind jeweils eine Perl Liste. d.h. hier können
**einzelne Werte,
**durch Komma getrennte Aufzählungen,
**mit .. angegebene Wertebereiche
**sowie <code>$ROW</code> und <code>$COLUMN</code> als Bezeichner für die aktuelle Zelle
:verwendet werden.
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.
Es ergeben sich somit unter anderem folgende Möglichkeiten:
*<code>$sum</code> equivalent zu <code>$sum(1..$ROW), $sum(:$COLUMN)</code> und <code>$sum(1..$ROW:$COLUMN)</code> die Summe der Werte in der Spalte über der aktuellen Zelle.
*<code>$max($ROW:1..$COLUMN-1)</code> maximum aller werte in der zeile links von der aktuellen zelle
*<code>$avg(1..$ROW:1)</code> durchschnitt aller werte in spalte 1 bis zur aktuellen zeile
*<code>$scalar(:1)</code> anzahl der werte in spalte 1
*<code>$min(1..5:1,2,4)</code> minimum der werte aus den zeilen 1-5 in den spalten 1, 2 und 4
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.b. verwenden um Häufigkeiten zu zählen oder mit nicht-numerischen Redings umzugehen.
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.b. einfärben, als Balkendiagramm darstellen, ...
Mit Hilfe der Funktionalität zum auf- und zu- klappen von Teilen einer readingsGroup lassen sich z.b. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.
Weitere Möglichkeiten:
*Attribut <code>firstCalcRow</code>: Hiermit kann der Default für die Nummer die erste Zeile vorgegeben werden (sofern im ausdruck nichts genaueres angegeben ist). firstCalcRow kann man z.b. auf 2 setzen wenn in der readingsGroup Spalten-Überschriften verwendet werden.
*special <code><nowiki><hr></nowiki></code> um eine horizontale Linie über die volle Breite einzufügen
* Über ein angehängtes <code>@<alias></code> kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesem kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.
*das <code>alwaysTrigger</code> attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.
*Über den operator <code>$count(<wert>)(<zellen>)</code> um das Vorkommen von <code><wert></cpde> in den angegebenen Zellen zu zählen. <code><wert></code> kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit <code>!<wert></code> kann das Nicht-Vorkommen von <code><wert></cpde> gezählt werden.
===Ein interaktives Beispiel:===
In drei dummys lässt sich jeweils ein Reading über einen slider einstellen. In der darunter liegenden readingGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert wenn die slider bewegt werden.
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.
== Sonstiges ==
== Sonstiges ==
In der Regel werden die Parameter zu einem reading in den mappings unter <$DEVICE> und dann <$DEVICE>.<$READING> und dann unter <$READING>.<$VALUE> gesucht.
In der Regel werden die Parameter zu einem reading in den mappings unter <$DEVICE> und dann <$DEVICE>.<$READING> und dann unter <$READING>.<$VALUE> gesucht.
Version vom 15. Juni 2015, 21:41 Uhr
readingsGroup
Zweck / Funktion
Einfache zusammenfassende Darstellung von Informationen über mehrere Geräte und deren Steuerung
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!
Das Fhem-HilfsmodulreadingsGroup bietet eine einfache Möglichkeit, Readings (kein Präfix vor dem Reading-Namen), Internals (Präfix "+" vor dem Namen des internen Wertes) und Attributes (Präfix "?" vor dem Namen des Attributs) von einem oder mehreren Devices darzustellen und flexibel zu formatieren.
Die Aktualisierung im Browserfenster geschieht per longpoll und überträgt nur die jeweils geänderten Zellen. Wenn eine readingsGroup in keinem Browserfenster angezeigt wird findet keine longpoll aktualisierung statt.
In allen Mappings die einen Hash verwenden muss der Key (das was jeweils links von => Operator steht) in Anführungszeichen stehen. Die einzige Ausnahme hiervon sind Keys die aus einem String bestehen der mit einem Buchstaben beginnt und nur Buchstaben und Zahlen enthält.
Weitergehende Erläuterungen zu einzelnen Attributen.
Die komplette Liste der Attribute ist der commandref zu entnehmen.
noheading
ReadingsGroup: rechts mit "noheading" Attribut, links der anklickbare Titel
Das Attribut noheading führt dazu, dass der Alias der ReadingsGroup nicht mehr als Titel angezeigt wird. Das kann wünschenswert sein, wenn die ReadingsGroup auf einer Dashboard-Seite angezeigt werden soll, hat allerdings den Nachteil, dass die Detail-Ansicht der ReadingsGroup nicht mehr über einen Klick auf den Titel aufgerufen werden kann. Der Einstellungsdialog der ReadingsGroup ist dann nur noch (z. B.) über
list TYPE=readingsGroup
einen "Probably associated with"-Link eines anderen Objekts oder über
manuelle Modifikation der URL eines anderen Objekts (http:.../fhem?detail=<objektname>)
erreichbar.
nolinks
Devicenamen und Titel der readingsGroup verlinken nicht mehr zur zugehörigen Detailansicht und sind nicht mehr anklickbar.
nostate
Das state-Reading wird bei regex match nicht berücksichtigt und nicht angezeigt.
notime
Es werden keine Timestamps für die Readings angezeigt. Nur für einspaltige readingsGroups sinnvoll.
Beispiele
Bitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im Web Interface im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Beim manuellen Einfügen in eine Konfigurationsdatei sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.
Einfache Auswahl über Reading-Namen
Definition
Erläuterungen
Aussehen
define battStatus readingsGroup .*:[Bb]attery
Alle readings mit Namen Battery oder battery von allen Devices.
attr battStatus alias FHT Batteriestatus
Der Alias wird als Zeilentitel verwendet
attr battStatus mapping %ROOM
Mapping %ROOM führt dazu, dass der Raumname als Zeilentitel angezeigt wird.
Den RSSI Wert aller Devices (am IODev cul) die einen solchen haben anzeigen. Achtung: "internal values" werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.
Den RSSI Wert mit der zugehörigen Zeit aller Devices (am IODev cul) die einen solchen haben anzeigen. Achtung: "internal values" werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau. "Internal Values" werden durch das vorangestellte + (Pluszeichen) identifiziert.
Mehrere readings des Device wzReceiver in mehreren Zeilen. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke, mute angezeigt. Farbige Anzeige des freien Speicherplatzes
Dieser Teil kommt in die 99_myUtils.pm: Hiermit werden die Icons zum Ändern der gewünschten Temperatur dargestellt und im Bereich >=18 und <= 24 Grad anklickbar gemacht. Zwischen den Pfeilen wird der gerade eingestellte Wert angezeigt. Wenn dieser drei Sekunden nicht mehr geändert wurde wird die desired-temp auf diesen Wert gesetzt und die Anzeige zwischen den Pfeilen ausgeblendet.
Heizungswerte, Status, Steuerung und Wochenprofil
Dieses Beispiel funktioniert nur mit HomeMatic HM-CC-RT-DN, für andere Thermostate müssen an diversen Stellen Änderungen vorgenommen werden.
Definition
Erläuterungen
Status, Steuerung und Wochenprofil
set d_label Heizung Heizung
set d_label Temperatur Temperatur
set d_label Status Status
set d_label Wochenplan Wochenplan
set d_label Werktag Werktag
set d_label Samstag Samstag
set d_label Sonntag Sonntag
set d_label Zeitraum1 Zeitraum 1
set d_label Zeitraum2 Zeitraum 2
Heizungsteuerung für HM Wand- und Heizkörperthermostate
Dieses Beispiel wurde für HM-TC-IT-WM-W-EU / HM-CC-RT-DN Geräte erstellt. Verwendung anderer Thermostate wird ggf. Anpassungen erforderlich machen. Die Geräte werden nicht automatisch ermittelt, sondern sind einzeln angegeben.
Es werden Soll- und Ist-Temperaturen angezeigt, Luftfeuchte und Ventilpositionen, Modus, Batterie und Global-Tastenlock.
Steuerungsmöglichkeiten: Solltemperatur, Modus (Manual/Automatik), (globale) Tastenlock.
Die Abweichung der Isttemperatur, die Ventilpositionen, Batteriestand etc. werden farblich hervorgehoben.
Im folgenden Beispiel wird gezeigt wie sich Readings zusätzlicher Devices zu einer Zeile mit mehreren Readings hinzufügen lassen. Diese zusätzlichen Devices können z.b. die unterschiedlichen Channel eines HomeMatic Gerätes sein. Im folgenden Beispiel wird der Name des zugehörigen Geräts dynamisch bestimmt.
#namen des ventil device aus thermostat device ableiten
sub valveOfDevice ($) {
my ($DEVICE) = @_;
if ($DEVICE =~ m/AZ/) {
return "Ventil.".substr($DEVICE,11).".Nord";
} else {
return "Ventil.".substr($DEVICE,11);
}
}
Dieser Teil kommt in die 99_myUtils.pm: Hier wird aus dem Namen des Thermostaten der Name des zugehörigen Ventilantriebs abgeleitet.
Da im {...} Teil des <reading>@<device> Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist er in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern. Mit ein paar 'Tricks' lässt es sich aber manchmal auch ohne Leerzeichen oder Kommas lösen und dann direkt in die Definition schreiben:...,ValvePosition@{$DEVICE=~s/Thermostat/Ventil/;$DEVICE;},...
Dynamische Inhalte
readingsGroup mit umschaltbarem Inhalt 1readingsGroup mit umschaltbarem Inhalt 2
Es ist möglich, den in einer readingsGroup dargestellten Inhalt dynamisch von zusätzlichen Bedingungen abhängig zu machen. Im folgenden Beispiel lässt sich
einstellen, dass nur die Devices angezeigt werden, die einen bestimmten Zustand (hier: on/off, open/tilted/closed) haben. Hier wird zum Umschalten ein dummy, der direkt über der readingsGroup dargestellt wird, verwendet. Über das links und/oder commands lässt sich auch eine Darstellung erzeugen, bei der das Umschalten direkt innerhalb der readingsGroup möglich ist.
Enable/Disable Button am Beispiel eines WeekdayTimer
Dieses Beispiel zeigt die Anwendung einer readingsGroup, um im Frontend einen Enable/Disable Button für ein Objekt darzustellen. Für den WeekdayTimer gibt es hier spezielle Erweiterungen (set Routinen, um das Attribut disable zu setzen). Es gibt aber auch eine allgemeinere Variante (siehe diesen Forumsbeitrag) für alle Objekte, die das Fhem Attribut disable unterstützen.
Definition der angezeigten Readings. Das Attribut disabled wird mit weiteren Einstellungen (commands) zum Button, +DEF zeigt die Definition, d.h. die Schaltzeiten, des Timers an. Die Readings nextUpdate und nextValue sollen nur angezeigt werden, falls der Timer aktiv ist. Hierfür sorgt eine Routine rg_timer_Wasser_show_conditional, die in der 99_myUtils.pm definiert wird. Das abschließende @disabled sorgt dafür, dass der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird.
Toggle-Funktion für den Button. Wenn der Timer aktiv ("disabled.0") sorgt ein Klick auf den Button, dass der Timer deaktiviert wird ("set $DEVICE disable").
Dieser Teil kommt in die 99_myUtils.pm: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String "disabled" angezeigt.
Berechnungen
Die hier beschriebene Funktionalität wird erst im nächsten Update zur verfügung stehen.
Das Rechnen funktioniert über das Flag $ mit dem eine Funktion angegeben werden kann die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.
Ein Beispiel:
define rg readingsGroup .*:temperature rg:$avg
Hier wird eine readingsGroup über alle temperature Readings definiert. in einer zusätzlichen Zeile am Ende wird mit $avg der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.
Das genaue Format: $<operator>[(<zellen>)] mit
<operator>: sum,avg,min,max,scalar,count oder der name einer beliebigen anderen funktion die ein array mit allen werten übergeben bekommt und eine ergebnis wert zurück liefert.
<zellen> ist eine durch semikolon getrennte liste aus <zeilen>:<spalten> paaren.
<zeilen> und <spalten> sind jeweils eine Perl Liste. d.h. hier können
einzelne Werte,
durch Komma getrennte Aufzählungen,
mit .. angegebene Wertebereiche
sowie $ROW und $COLUMN als Bezeichner für die aktuelle Zelle
verwendet werden.
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.
Es ergeben sich somit unter anderem folgende Möglichkeiten:
$sum equivalent zu $sum(1..$ROW), $sum(:$COLUMN) und $sum(1..$ROW:$COLUMN) die Summe der Werte in der Spalte über der aktuellen Zelle.
$max($ROW:1..$COLUMN-1) maximum aller werte in der zeile links von der aktuellen zelle
$avg(1..$ROW:1) durchschnitt aller werte in spalte 1 bis zur aktuellen zeile
$scalar(:1) anzahl der werte in spalte 1
$min(1..5:1,2,4) minimum der werte aus den zeilen 1-5 in den spalten 1, 2 und 4
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.b. verwenden um Häufigkeiten zu zählen oder mit nicht-numerischen Redings umzugehen.
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.b. einfärben, als Balkendiagramm darstellen, ...
Mit Hilfe der Funktionalität zum auf- und zu- klappen von Teilen einer readingsGroup lassen sich z.b. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.
Weitere Möglichkeiten:
Attribut firstCalcRow: Hiermit kann der Default für die Nummer die erste Zeile vorgegeben werden (sofern im ausdruck nichts genaueres angegeben ist). firstCalcRow kann man z.b. auf 2 setzen wenn in der readingsGroup Spalten-Überschriften verwendet werden.
special <hr> um eine horizontale Linie über die volle Breite einzufügen
Über ein angehängtes @<alias> kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesem kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.
das alwaysTrigger attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.
Über den operator $count(<wert>)(<zellen>) um das Vorkommen von <wert></cpde> in den angegebenen Zellen zu zählen. <wert> kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit !<wert> kann das Nicht-Vorkommen von <wert></cpde> gezählt werden.
Ein interaktives Beispiel:
In drei dummys lässt sich jeweils ein Reading über einen slider einstellen. In der darunter liegenden readingGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert wenn die slider bewegt werden.
Das PCA301 Beispiel oben lässt sich mit einem ans Ende des define angehängten
<{appendTrigger($DEVICE,"clear","Alle löschen")}>
und der folgenden appendTrigger Definition in 99_myUtils.pm um einen Link erweitern, der ein Event auslöst, an das z.B. ein notify gehängt werden kann, um die Verbrauchszähler der PCA301 Dosen zurückzusetzen.
define clearVerbrauch notify Verbrauch:clear set TYPE=PCA301 clear
use vars qw($FW_ME);
use vars qw($FW_subdir);
sub
appendTrigger($$$)
{
my ($name,$trigger,$label) = @_;
my $ret .= "</table></td></tr>";
my $link = "cmd=trigger $name $trigger";
my $txt = "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$label</a>";
$ret .= "<td colspan=\"99\"><div style=\"cursor:pointer;color:#888888;text-align:right\">$txt</div></td>";
return ($ret,0);
}
wenn hierdurch Änderungen an einer readingsGroup erfolgen, die ein Neuladen der Seite erforderlich machen, kann dies so erfolgen:
{myUtils_refresh("WEB")}
mit folgendem code in 99_myUtils.pm:
sub
myUtils_refresh($)
{
my ($name) = @_;
FW_directNotify("#FHEMWEB:$name", "location.reload(true);","" );
}
Ein weiteres Beispiel für 'custom links und trigger' findet sich in diesem Forenbeitrag: dort wird damit eine readingsGroup dynamisch umgeschaltet, um nur die eingeschalteten, nur die ausgeschalteten oder alle Lampen anzuzeigen.
sub rg
Damit beim klicken auf ein Icon oder einen Text in einer readingsGroup etwas passiert ist es möglich dies über das commands Attribut auf ein 'trigger ntfy_rg $DEVICE $READING' oder Ähnliches zu mappen.
Anlegen des ntfy_rg notify
In der Regel werden die Parameter zu einem reading in den mappings unter <$DEVICE> und dann <$DEVICE>.<$READING> und dann unter <$READING>.<$VALUE> gesucht.
Lesbar machen
Für die meisten Attribute gilt:
Wenn es komplexer wird ist es einfacher, den Code in eine eigene Routine in (beispielsweise) 99_myUtils auszulagern und diese aufzurufen:
Hier ist die gewünschte Breite der Spalte und je nach Wertebereich der Readings auch die Umrechnung des jeweiligen Readingwertes in prozentuale Werte anzupassen.
Die verwendeten Farben lassen sich natürlich auch anpassen, z.B. auch unter Verwendung der Color::pahColor Routine.
Die Balken werden bei Änderungen der Readings automatisch per longpoll aktualisiert.
Je nach verwendetem Browser ist -webkit-linear-gradient durch -moz-linear-gradient, -ms-linear-gradient oder linear-gradient zu ersetzen.
Die obige valueStyle Definition ist nur beispielhaft zu sehen und sollte mit den hier beschriebenen Methoden lesbarer gemacht werden.
Weitere Möglichkeiten zur Erzeugung von Balkendiagrammen sind in Forenbeiträgen hier und hier beschrieben.
readingsGroup Styling mit CSS
Jede readingsGroup lässt sich durch CSS individuell stylen.
Allgemeines
Damit der eigene CSS Code nach einem Update der FHEM-Style Dateien vorhanden bleibt, ist es notwenig eine eigene .css Datei (zB ios7ReadingsGroups.css) zu erstellen und ins Verzeichnis fhem/www/pgm2/ zu kopieren. Anschließend muss in der FHEMWEB Instanz das Attribut CssFiles auf zB pgm2/ios7ReadingsGroups.css gesetzt werden.
Erweiterte Device Übersicht
Diese ReadingsGroup ist an der FHEMWEB Device-Übersicht angelehnt. Zusätzlich werden weitere Readings, hier Leistung, Betriebszeit Heute und Jahr, ein Link zu Detail-Seite der ReadingsGroup und Links zu den jeweiligen Device-Detail-Seite, dargestellt.
Device ReadingsGroup ohne CSSDevice ReadingsGroup mit CSS
Damit sich der CSS auf die richtige readingsGroup bezieht, ist es nötigt
das Attribut style anzupassen.
Definition
Erläuterungen
attr <rgName> style class="block wide rgDevices"
Die Klassen block und wide müssen eingetragen werden. Der Name der Nachfolgenden Klasse, hier rgDevices, ist frei wählbar.
Funktion rgLink()
Die Funktion rgLink($name,$action,$label) liefert einen Link mit dem Namen $label zurück. Der Code gehört in die 99_myUtils.pm.
$name - Name des Device das aufgerufen werden soll
$action - Aktion die Ausgeführt werden soll.
konfigurieren erzeugt den kleinen Details Button links oben der einem zur Detail Seite der ReadingsGroup führt - nützlich wenn das ReadingsGroup-Attribut noheading gesetzt ist
detail erzeugt einen Link zu Device-Detail Seite
$label - Link-Name
sub rgLink($$$){
my ($name,$action,$label) = @_;
my $link = "";
my $fhemLink = "";
my $txt = "";
my $ret = "";
my $divStyle = "";
my $aStyle = "";
# FHEM Variablen einbinden
use vars qw($FW_ME);
use vars qw($FW_subdir);
use vars qw($FW_ss);
use vars qw($FW_tp);
if( $action eq "konfigurieren" ){
$fhemLink = "detail=$name";
$divStyle = "cursor:pointer;font-size:11px;padding-bottom:2px;padding-left:3px;";
}
elsif( $action eq "detail" ){
$fhemLink = "detail=$name";
$divStyle = "cursor:pointer;display:inline;";
}
$link = '<a onclick="location.href=\'' . $FW_ME . $FW_subdir . '?' . $fhemLink . '\'" style="' . $aStyle . '">' . $label . '</a>';
$txt = '<div style="' . $divStyle . '">' . $link . '</div>';
$ret = "$txt";
return $ret;
}
Tipp
Verwende zum Bearbeiten der eigenen .css Dateien entweder den Codemirror Editor oder einen eigenen Editor mit Syntax Highlighting . Das hilft bei der Fehlersuche enorm.
Styling
Die eigene .css Datei erscheint in FHEM unter Edit-Files --> styles und kann direkt im FHEM-Editor oder mit eigenen Editor bearbeitet werden.
Mit CSS ist man in der Lage auf die aktuelle Bildschirmlage zu reagieren. Alle Anweisungen die in diesen beiden Funktionen zwischen den beiden { } stehen, werden je nach Bildschirmlage aufgerufen
/* Portrait Modus */
@media all and (orientation:portrait) { }
/* Landscape Modus */
@media all and (orientation:landscape) { }
Styling
Info
width: xx% ändert die Breite der Spalte
display: none blendet die Spalte aus
In der FHEMWEB_phone Instanz muss wie hier beschrieben eine neue eigene .css Datei eingetragen werden. In diesem Beispiel ios7smallscreenReadingsGroups.css