FTUI Widget Bar: Unterschied zwischen den Versionen
| Zeile 18: | Zeile 18: | ||
!Beispiel | !Beispiel | ||
|- | |- | ||
|'''data-get'''||Name des Readings, dessen Wert angezeigt werden soll||||data-get=" | |'''data-device'''||Name des Device, dessen Reading angezeigt werden soll||||data-get="G.Verb" | ||
|- | |||
|'''data-get'''||Name des Readings, dessen Wert angezeigt werden soll||||data-get="power" | |||
|- | |- | ||
|'''data-part'''||[[Regulärer Ausdruck|RegEx]] oder Nummer des Wortes, nach welcher der angezeigte Text gefiltert werden soll|||| | |'''data-part'''||[[Regulärer Ausdruck|RegEx]] oder Nummer des Wortes, nach welcher der angezeigte Text gefiltert werden soll|||| | ||
| Zeile 24: | Zeile 26: | ||
|'''data-fix'''||Angegebene Anzahl an Dezimalstellen einhalten||(-1 -> nicht numerisch)|| | |'''data-fix'''||Angegebene Anzahl an Dezimalstellen einhalten||(-1 -> nicht numerisch)|| | ||
|- | |- | ||
|'''data- | |'''data-max'''||Zahlenwert, bei welchem der Balken zu 100% gefüllt ist||1||data-max="20.0" | ||
|- | |- | ||
|'''data- | |'''data-color'''||Fester Wert für die Farbe des Balkens. Erlaubte Werte hängen von den Definitionen im SVG-Teil ab, siehe unten. Mit dem unten gegebenem Beispiel sind erlaubte Farben "red", "green", "bue", "pink", "orange" ||||data-color="pink" | ||
|- | |- | ||
|'''data-unit'''||Einheit nach Zahl hinzufügen||||data-unit=" | |'''data-unit'''||Einheit nach Zahl hinzufügen||||data-unit="m³" | ||
|- | |- | ||
|'''data-substitution'''||Verschiedene Funktionen, um den empfangenen Wert durch etwas anderes zu ersetzen||||siehe [[#Hinweise]] | |'''data-substitution'''||Verschiedene Funktionen, um den empfangenen Wert durch etwas anderes zu ersetzen||||siehe [[#Hinweise]] | ||
|- | |- | ||
|'''data- | |'''data-interval'''||Anzahl Millisekunden, nach denen das Widget aktualisiert werden soll||0 -> kein Auto-Refresh||data-interval="10" | ||
|} | |} | ||
Version vom 4. August 2024, 10:22 Uhr
Das Bar Widget ist ein Widget für FHEM Tablet UI V2, mit dem ein Reading eines FHEM-Devices in Form eines horizontalen Balkens angezeigt wird.
Es ist nicht in den Standard-Widgets von FTUI2 enthalten, sondern wurde
Attribute
| Attribut | Beschreibung | Standard-Wert | Beispiel |
|---|---|---|---|
| data-device | Name des Device, dessen Reading angezeigt werden soll | data-get="G.Verb" | |
| data-get | Name des Readings, dessen Wert angezeigt werden soll | data-get="power" | |
| data-part | RegEx oder Nummer des Wortes, nach welcher der angezeigte Text gefiltert werden soll | ||
| data-fix | Angegebene Anzahl an Dezimalstellen einhalten | (-1 -> nicht numerisch) | |
| data-max | Zahlenwert, bei welchem der Balken zu 100% gefüllt ist | 1 | data-max="20.0" |
| data-color | Fester Wert für die Farbe des Balkens. Erlaubte Werte hängen von den Definitionen im SVG-Teil ab, siehe unten. Mit dem unten gegebenem Beispiel sind erlaubte Farben "red", "green", "bue", "pink", "orange" | data-color="pink" | |
| data-unit | Einheit nach Zahl hinzufügen | data-unit="m³" | |
| data-substitution | Verschiedene Funktionen, um den empfangenen Wert durch etwas anderes zu ersetzen | siehe #Hinweise | |
| data-interval | Anzahl Millisekunden, nach denen das Widget aktualisiert werden soll | 0 -> kein Auto-Refresh | data-interval="10" |
CSS Klassen
| Klasse | Beschreibung |
|---|---|
| small | Setzt die Größe des Elementes auf 80% |
| large | Setzt die Größe des Elementes auf 125% |
| big | Setzt die Größe des Elementes auf 150% |
| bigger | Setzt die Größe des Elementes auf 200% |
| thin | dünne Schrift |
| bold | fette Schrift |
| red | Vordergrundfarbe rot |
| green | Vordergrundfarbe grün |
| blue | Vordergrundfarbe blau |
| orange | Vordergrundfarbe orange |
| darker | Schriftfarbe grau |
| timestamp | Zeigt den Timestamp eines Readings statt dessen Inhalt |
| w1x | Einfache fixe Breite |
| w2x | Doppelte fixe Breite |
| w3x | Dreifache fixe Breite |
| circleborder | Runder Rahmen um ein Label-Widget |
| squareborder | Eckiger Rahmen um ein Label-Widget |
| bg-limit | Ändert bei Label-Widgets die Hinter- statt der Vordergrundfarbe in Abhängigkeit von data-limit |
| icon square | Erzeugt einen Hintergrund mit eckigen Kanten |
| icon round | Erzeugt einen Hintergrund mit abgerundeten Kanten |
| truncate | Text wird - wenn nötig - abgeschnitten und mit "..." ergänzt |
| fixedlabel | Verhindert bei verschachtelten labels das Überschreiben von data-get |
| blink | Blinkende Animation für Label- oder Switch-Widget |
| blurry | Element wird in einen stark verschwommen, grauen Schatten umgewandelt |
| shake | Element zittert stark für einen unendlichen Zeitraum. Kann z.B. für eine Alarmglocke verwendet werden. |
Installation
Dazu muss im ersten Schritt eine Widget-Datei widget_bar.js erstellt werden, die (mit den korrekten Rechten) im Verzeichnis /opt/fhem/www/tablet/js gespeichert wird.
/* FTUI Plugin
* Copyright (c) 2018 Prof. Dr. Peter A. Henning
* GPL License
*/
/* global ftui:true, Modul_widget:true */
"use strict";
function depends_bar() {
var deps =[];
return deps;
}
var Modul_bar = function () {
function drawBar(elem) {
var id = elem.prop('id');
var max = elem.data('max');
var val = elem.data('value');
var uni = elem.data('unit');
var val1 = Math.floor(val / max * 228 + 24);
var style;
var textpos;
if (val1 > 148) {
textpos = 28;
style = "text-anchor:start;font-family:Helvetica;font-size:30px;font-weight:bold";
} else {
textpos = 252;
style = "text-anchor:end;font-family:Helvetica;font-size:30px;font-weight:bold";
}
var bar = document.getElementById(id);
if (bar) {
bar.getElementsByClassName("side")[0].setAttribute("width", val1 + 16);
bar.getElementsByClassName("top")[0].setAttribute("x", val1);
bar.getElementsByClassName("topline")[0].setAttribute("x", val1);
bar.getElementsByClassName("labele")[0].textContent = val + " " + uni;
bar.getElementsByClassName("labele")[0].setAttribute("x", textpos);
bar.getElementsByClassName("labele")[0].setAttribute("style", style);
}
}
function init_attr(elem) {
//init standard attributes
base.init_attr.call(me, elem);
elem.initData('get', 'STATE');
elem.initData('unit', '');
elem.initData('value', 20);
elem.initData('max', 100);
elem.initData('font-size', 12);
elem.initData('interval', 5000);
}
function init_ui(elem) {
var svg = document.getElementById('svg200x150')
var p = document.getElementById("barwidget");
var svg_prime = svg.cloneNode(true);
var p_prime = p.cloneNode(true);
var bar = svg_prime.appendChild(p_prime);
var id = elem.prop('id');
document.getElementById(id).appendChild(svg_prime);
var color = elem.data('color');
switch (color) {
case "red":
bar.getElementsByClassName("side")[0].setAttribute("fill", "url(#grad1r)");
bar.getElementsByClassName("top")[0].setAttribute("fill", "url(#grad2r)");
break;
case "green":
bar.getElementsByClassName("side")[0].setAttribute("fill", "url(#grad1g)");
bar.getElementsByClassName("top")[0].setAttribute("fill", "url(#grad2g)");
break;
case "blue":
bar.getElementsByClassName("side")[0].setAttribute("fill", "url(#grad1b)");
bar.getElementsByClassName("top")[0].setAttribute("fill", "url(#grad2b)");
break;
case "pink":
bar.getElementsByClassName("side")[0].setAttribute("fill", "url(#grad1p)");
bar.getElementsByClassName("top")[0].setAttribute("fill", "url(#grad2p)");
break;
case "orange":
bar.getElementsByClassName("side")[0].setAttribute("fill", "url(#grad1o)");
bar.getElementsByClassName("top")[0].setAttribute("fill", "url(#grad2o)");
break;
}
}
function update(dev, par) {
me.elements.filterDeviceReading('get', dev, par).each(function (index) {
var elem = $(this);
var val = elem.getReading('get').val;
val = ftui.getPart(val, elem.data('part'));
val = me.substitution(val, elem.data('substitution'));
val = me.map(elem.data('map-get'), val, val);
val = me.fix(val, elem.data('fix'));
elem.data('value', val);
drawBar(elem);
});
}
// public
// inherit all public members from base class
var parent = new Modul_widget();
var base = {
init_attr: parent.init_attr
};
var me = $.extend(parent, {
//override or own public members
widgetname: 'bar',
init_attr: init_attr,
init_ui: init_ui,
update: update
});
return me;
};


