Ich habe eine neue DOIF-Version eingecheckt. Da inzwischen einige Erweiterungen hinzugekommen sind, andere Ideen aber verworfen wurden, fange ich hier mit einem neuen Thread zum Thema uiTable an. Das Attribut ist um einige neue Perl-Funktionen erweitert worden.
Gleichzeitig baue ich eine neue wiki-Seite https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg dazu auf, die in erster Linie den Einstieg erleichtern soll. Bis Weihnachten sollen alle neuen Features, die sich bereits im neuen Modul befinden, dort mit bebilderten Beispielen dargestellt werden. Es wird also einige Türchen bis Weihnachten zu den neuen uiTable-Funktionen geben. :)
Hier findet man den alten Thread zu uiTable: https://forum.fhem.de/index.php/topic,77690.msg998416.html#msg998416
Eine wiki-Seite von Ellert zu den bisherigen Features des Attributes, u. a. mit komplexeren Beispielen, gibt es bereits hier: https://wiki.fhem.de/wiki/DOIF/uiTable
nächstes Türchen geöffnet: uiTable-Funktion hum :)
siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Feuchtigkeitsanzeige_mit_Hilfe_der_Funktion_hum
Schick. Bei temp fehlt mir allerdings eine Skalierung, also zb min und max. Für eine Zimmer-Temp ist -20 - 40 einfach zu grob gefasst ;)
Zitat von: Maui am 09 Dezember 2019, 15:29:24
Schick. Bei temp fehlt mir allerdings eine Skalierung, also zb min und max. Für eine Zimmer-Temp ist -20 - 40 einfach zu grob gefasst ;)
Das kannst du alles anpassen, aber dieses Türchen ist noch nicht offen ;)
neues Türchen (Fenster :) ) geöffnet: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_offene_Fenster
Zur Funktion shutter habe ich eine Frage oder Anregung: Die Logik meiner Homematic-Rolladensteuerung geht genau anders herum, wie implementiert. Pict=0% bedeutet hier, Rollladen ist oben, also zu 0% geschlossen. Entsprechend zeigen die Symbole der Funktion shutter bei mir jetzt genau das Gegenteil des wirklichen Zustandes.
Wäre ein attribut denkbar in Sinne von "reverse logik"?
Die von Dir bisher vorgestellten Vereinfachungen von uiTable finde ich wirklich gut und Du machst damit der großen DOIF-Fan-Gemeinde sicher ein großes Weihnachtsgeschenk.
Christian
ja, das hängt vom Aktor ab. Die shutter-funktion ist ja als Kopie in contrib/DOIF/uiTable.tpl drin:
sub shutter {
my ($value,$color,$type)=@_;
$color="\@darkorange" if (!defined ($color) or $color eq "");
if (!defined ($type) or $type == 3) {
return ($value,"","iconRadio,$color,100,fts_shutter_10,30,fts_shutter_70,0,fts_shutter_100","set");
} elsif ($type == 4) {
return ($value,"","iconRadio,$color,100,fts_shutter_10,50,fts_shutter_50,30,fts_shutter_70,0,fts_shutter_100","set");
} elsif ($type == 5) {
return ($value,"","iconRadio,$color,100,fts_shutter_10,70,fts_shutter_30,50,fts_shutter_50,30,fts_shutter_70,0,fts_shutter_100","set");
} elsif ($type >= 6) {
return ($value,"","iconRadio,$color,100,fts_shutter_10,70,fts_shutter_30,50,fts_shutter_50,30,fts_shutter_70,20,fts_shutter_80,0,fts_shutter_100","set");
} elsif ($type == 2) {
return ($value,"","iconRadio,$color,100,fts_shutter_10,0,fts_shutter_100","set");
}
}
Der dritter Rückgabewert entspricht dem FHEM-Widget: iconRadio
Die Anpassung kann man als eine kleine Fingerübung zum Verständnis der Sache ansehen.
Erweiterungen, die von allgemeiner Bedeutung sind, kann ich gerne ins DOIF übernehmen - da werden sich bestimmt noch einige interessante Funktionen ergeben.
PS: Ich habe bei mir auch HM laufen (https://de.elv.com/homematic-funk-rollladenaktor-fuer-markenschalter-1fach-unterputzmontage-hm-lc-bl1pbu-fm-fuer-smart-home-hausautomation-103038?fs=2896061061&c=421) und die funktionieren mit shutter korrekt. Vielleicht hast du deine andersrum drin.
Aufgabe angenommen und gelöst :-)
Zitat von: cwagner am 21 Dezember 2019, 20:36:01
Aufgabe angenommen und gelöst :-)
schön :), dann kannst du für die Nachwelt noch die Lösung posten.
Mein Vorschlag für Rollläden, bei denen das Reading pct 0 hat, wenn der Rollladen oben ist (0% geschlossen) wäre:
sub shutter {
my ($value,$color,$type)=@_;
$color="\@darkorange" if (!defined ($color) or $color eq "");
if (!defined ($type) or $type == 3) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,30,fts_shutter_70,100,fts_shutter_100","set");
} elsif ($type == 4) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,30,fts_shutter_30,70,fts_shutter_70,100,fts_shutter_100","set");
} elsif ($type == 5) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,30,fts_shutter_30,50,fts_shutter_50,70,fts_shutter_70,100,fts_shutter_100","set");
} elsif ($type >= 6) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,30,fts_shutter_30,50,fts_shutter_50,70,fts_shutter_70,80,fts_shutter_80,100,fts_shutter_100","set");
} elsif ($type == 2) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,100,fts_shutter_100","set");
}
}
Christian
Zitat von: Damian am 21 Dezember 2019, 11:46:12
neues Türchen (Fenster :) ) geöffnet: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_offene_Fenster
Moin,
Das "Türchen" funktioniert super. Aber wie kann ich anstelle des Device-Namen den Alias des Device-Namen ( AttrVal("[$SELF:windows]"), "alias", "") ) anzeigen lassen?
Zitat von: ComputerZOO am 22 Dezember 2019, 11:18:21
Moin,
Das "Türchen" funktioniert super. Aber wie kann ich anstelle des Device-Namen den Alias des Device-Namen ( AttrVal("[$SELF:windows]"), "alias", "") ) anzeigen lassen?
Das ist relativ simpel, hier: https://fhem.de/commandref_DE.html#DOIF_aggregation unter <format> gibt es das kleine "a" als Option für Aliasnamen:
also:
Zitatattr di_uiTable_windows DOIF_Readings windows:[@as(<br>)"Fenster$":state:"open","keine"]
Ziel erreicht :)
Mit dem letzten Türchen: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktuelle_Wetterlage wurde die Wiki-Seite zu uiTable weitgehend fertiggestellt.
Frohe Weihnachten.
Danke und Frohe Weihnacht!
..hat Spass gemacht...
Anwendungsfall: Visualisierung des Spritpreises: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis
Package-Konzept: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Package-Konzept.2C_Auslagerung_eigener_Funktionen.2C_der_IMPORT-Befehl
Zitat von: Damian am 29 Dezember 2019, 19:59:32
Package-Konzept: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Package-Konzept.2C_Auslagerung_eigener_Funktionen.2C_der_IMPORT-Befehl
Das ist ja die Lösung eines Themas, an dem ich geknabbert hatte: Klappt auch wie beschrieben mit einem kleinen Punkt, wo ich nicht beurteilen kann, ob das im Konzept noch verbesserbar ist:
Ich habe eine umfangreiche uiTable, der ich die Darstellung verschiedener Sensoren teils über die eingebauten Funktionen wie temp und hum formatiere und teils über angepasste Funktionen in einer eigenen TPL. Zum Beispiel möchte ich den "grünen" Bereich eines Temp-Sensor am Kessel woanders haben als bei der WAF-Temperatur im Wohnzimmer.
Das klappt gut, meine abgewandelten Funktionen heißen also z.B. temp2 und temp3 und werden über eine uiTable_cw.tpl importiert. Für den Style wollte ich eigentlich die Standardfunktion temp_style aus uiTable.tpl verwenden. Das klappt dann aber nicht, ich muss die völlig unveränderte Funktion temp_style noch eigens in meiner uiTable_cw.tpl aufnehmen, egal ob ich den Import-Befehl vor oder nach dem Perl-Block oder den Definitionen-Block positioniere.
Herzliche Grüße
Christian
Zitat von: cwagner am 31 Dezember 2019, 13:53:12
Das ist ja die Lösung eines Themas, an dem ich geknabbert hatte: Klappt auch wie beschrieben mit einem kleinen Punkt, wo ich nicht beurteilen kann, ob das im Konzept noch verbesserbar ist:
Ich habe eine umfangreiche uiTable, der ich die Darstellung verschiedener Sensoren teils über die eingebauten Funktionen wie temp und hum formatiere und teils über angepasste Funktionen in einer eigenen TPL. Zum Beispiel möchte ich den "grünen" Bereich eines Temp-Sensor am Kessel woanders haben als bei der WAF-Temperatur im Wohnzimmer.
Das klappt gut, meine abgewandelten Funktionen heißen also z.B. temp2 und temp3 und werden über eine uiTable_cw.tpl importiert. Für den Style wollte ich eigentlich die Standardfunktion temp_style aus uiTable.tpl verwenden. Das klappt dann aber nicht, ich muss die völlig unveränderte Funktion temp_style noch eigens in meiner uiTable_cw.tpl aufnehmen, egal ob ich den Import-Befehl vor oder nach dem Perl-Block oder den Definitionen-Block positioniere.
Herzliche Grüße
Christian
Wie sieht die uiTable-Definition bei dir aus?
Hallo Damian,
den Fall habe ich mehrfach, die eigene TPL lautet, die das prägnanteste Beispiel:
{
package $SELF;
# Varianten von CW für uiTable Subs
# 29.12.2019
#Styles
############## ohne Temp-Symbol und mit Temperaturspanne 15-25°
sub temp2
{
my ($temp,$size)=@_;
return($temp."°C","font-weight:bold;font-size:".$size."pt;".temp_style2($temp));
}
sub temp_style2
{
my ($temp)=@_;
return ("color:".::DOIF_hsv ($temp,15,22,240,150,90,95));
}
############## ohne Temp-Symbol und mit Temperaturspanne -20-30°
sub temp3
{
my ($temp,$size)=@_;
return($temp."°C","font-weight:bold;font-size:".$size."pt;".temp_style3($temp));
}
sub temp_style3
{
my ($temp)=@_;
if ($temp >=30) {
return ("color:".::DOIF_hsv ($temp,30,50,20,0,90,95));
} elsif ($temp >= 10) {
return ("color:".::DOIF_hsv ($temp,10,30,73,20,80,95));
} elsif ($temp >= 0) {
return ("color:".::DOIF_hsv ($temp,0,10,211,73,60,95));
} elsif ($temp >= -20) {
return ("color:".::DOIF_hsv ($temp,-20,0,277,211,50,95));
}
}
############### ohne Hum-Symbol
sub hum2
{
my ($hum,$size)=@_;
return($hum." %","font-weight:bold;font-size:".$size."pt;color:".::DOIF_hsv ($hum,30,100,30,260,60,90));
}
}
Mit dem sub temp_Style2 werden dann die Temperaturen gezeigt, die von dieser Definition bestimmt werden:
{
$SHOWNODEVICELINE = "Aktuell";
$ATTRIBUTESFIRST = 1;
$TC{0,1,3,5}= "style='font-weight:bold;font-size:11pt;'";
$TC{1,2,4,5}="align='right'";
$TD{0}{0}="style='position:relative'";
sub FUNC_CO2 {return ("font-weight:bold;font-size:11pt;color:".DOIF_hsv ($_[0],600,1000,122,0,60,90));}
}
IMPORT contrib/DOIF/uiTableCW.tpl
temp3([T_Aussen:temperature:d1],12),temp3([CN_Wind:Windchill:d1]),hum2([TF.Aussen:humidity:d1],10)|[$SELF:state],"Letzter Switch:".[$SELF:EWTLast:d1]."°C","Stellung:".[Steller_Zuluft:Stufe]."%"|"Fortluft".":".temp3([Fortluft:temperature:d1],12),"Frischluft".":".temp3([Frischluft:temperature:d1],12)," "," "|WID ([DI_Sommer_Winter.state],"iconSwitch,Sommer,svn\@yellow,Winter,control_x\@blue"),STY("")|"Zuluft".":".temp2([Zuluft2:temperature:d1],12),"Abluft".":".temp2([Abluft:temperature:d1],12),"Ø gestern ↑".":".temp2([Abluft:temperature_AVG_LD:d1])|STY([CO2Sensor:CO2:d0]." ppm CO2",FUNC_CO2([CO2Sensor:CO2:d0])),"Nebler".WID ([Switch_Lueftung:Nebler],"iconSwitch,ON,power\@green,OFF,power\@red")
[noch habe ich nicht alle Deine Vereinfachungen nachgearbeitet]
In der Anlage dann die Optik dazu (aktuell ist passend für die Silvesterknallerei Windstille, so sind beide Temperaturen ganz links gleich).
Herzliche Grüße
Christian
Wenn du in deiner tpl-Datei statt package $SELF; package ui_Table; schreibst, dann wird die interne ui_Table um deine Funktionen erweitert. Durch den Import der Datei befindest du dich dann in package ui_Table und kannst deine und die internen Funktionen direkt (ohne Angabe des package) nutzen. Das ist dieser Fall, den ich präferiere: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eigene_ausgelagerte_uiTable-Funktionen
Deine FUNC_-Funktion solltest du anders benennen (ohne FUNC am Anfang) ansonsten musst du :: davorstellen - das hatte wir ja schon mal.
So einfach, so klar: Funktioniert. Ein umweltfreundlicher Knaller zum Abschied des alten Jahres.
Guten Rutsch und Danke!
Christian
Anwendungsbeispiel für Visualisierung und Steuerung von Raumtemperaturen: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung_von_Raumtemperaturen
Hallo zusammen,
ich habe das Beispiel mit der Batterie-Anzeige (Färbung, Icon) übernommen. Nun habe ich ca. 20 Devices mit Batterien, muss ich für jedes einzelne eine Zeile mit expliziten Namen (DeviceXYZ:batteryLevel) angeben oder kann ich auch einen Trick mit Regexp machen, also simplerweise sowas wie [DevicesmitBattery.*:batteryLevel]?
Danke!
Zitat von: eddy242 am 03 Januar 2020, 22:54:15
Hallo zusammen,
ich habe das Beispiel mit der Batterie-Anzeige (Färbung, Icon) übernommen. Nun habe ich ca. 20 Devices mit Batterien, muss ich für jedes einzelne eine Zeile mit expliziten Namen (DeviceXYZ:batteryLevel) angeben oder kann ich auch einen Trick mit Regexp machen, also simplerweise sowas wie [DevicesmitBattery.*:batteryLevel]?
Danke!
Bei den Readingangaben sind keine Regex möglich - das war beim DOIF immer schon so.
Z. Zt. musst du für jedes Reading die Funktion aufrufen. Ich arbeite aber an einer Template-Erweiterung, die eine ganze Tabelle für mehrere Readings mit entsprechenden Formatierungen ausspuckt.
Gerne würde ich ein Perl-DOIF über die Switch-Funktion in einer uiTable ein- und ausschalten. Die Idee war: |switch([RR_Wohnzimmer:mode],"10px-kreis-gruen","10px-kreis-rot","enable","disable"
. Das klappt aber nicht, vermutlich weil die entsprechenden Mode-Readings enabled und disabled heißen. Bin ich auf einem Irrweg?
Herzliche Grüße
Christian
ja, geschaltet wird über set enable, angezeigt wird aber enabled, das geht schlecht über FHEM-widgets, wahrscheinlich lässt sich das über das Umbiegen des Kommandos mit eventMaps realisieren.
Zitat von: Damian am 03 Januar 2020, 23:09:25
Bei den Readingangaben sind keine Regex möglich - das war beim DOIF immer schon so.
Z. Zt. musst du für jedes Reading die Funktion aufrufen. Ich arbeite aber an einer Template-Erweiterung, die eine ganze Tabelle für mehrere Readings mit entsprechenden Formatierungen ausspuckt.
uiTable erhält ein mächtiges Kommando:
FORSyntax:
FOR (<Array>,<Zellendefinitionen, $_ wird durch das jeweilige Element des Arrays ersetzt>)Der Befehl entspricht der Perl-Schleife: foreach
Damit können ganze Tabellen jeweils mit einem Einzeiler definiert werden.
Bsp:
defmod di_for DOIF ##
IMPORT contrib/DOIF/my_uiTable.tpl\
\
## Tabellendefinition: Zeige alle Devices, die ein Reading battery haben mit einem entsprechenden Symbol\
FOR (::AggrDoIf('@','','battery'),"$_"|bat([$_:battery]))
Der erste Parameter ist ein Array, hier können insbesondere DOIF-Aggregationsfunktionen benutzt werden, aber auch alle anderen Funktionen, die ein Array liefern, wie z. B. devspec2array
Entsprechende Anwendungsbeispiele mit Dokumentation zu FOR werde ich demnächst in wiki einstellen.
Ergebnis der obigen Definition siehe Anhang
Neue DOIF-Version wurde eingecheckt.
wiki: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eine_for-Schleife_mit_Hilfe_des_FOR-Befehls
Ich habe mal eine neue Funktion namens bin(<Art der Tonne>,<Anzahl der Tage>) für Abfall gebastelt:
defmod Abfall DOIF
attr Abfall DOIF_Readings bio:[#min:"^abfall$":"Bioabfall.*_days$"], GelberSack:[#min:"^abfall$":"GelberSack.*_days$"], Gruenschnitt:[#min:"^abfall$":"Gruenschnitt.*_days$"]
attr Abfall uiTable {\
$TC{0..4}="align='center'";;\
$SHOWNOSTATE=1;;\
}\
IMPORT .\contrib\DOIF\my_uitable.tpl\
## mit der Funktion 'bin' können Abfallbehälter visualisiert werden
bin("yellow",[$SELF:GelberSack])|bin("blue",[abfall:Altpapier_days])|bin("grey",[abfall:Restmuell_days])|bin("green",[$SELF:bio])|bin("greengreen",[$SELF:Gruenschnitt])
Hier mal eine Abfalllösung ohne zusätzliche Abfallmodule https://forum.fhem.de/index.php/topic,103238.msg1020288.html#msg1020288.
Es wurde lediglich das Calendar-Modul definiert. Die Visualisierung-Funktion der Abfalleimer mit einem Counter kommt demnächst ins DOIF in einer allgemeineren Form, der entsprechende Wiki-Beitrag für uiTable wird dann aktualisiert.
neue DOIF-Version eingecheckt
siehe:
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Hilfe_der_Funktion_ICON
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Text_mit_Hilfe_der_Funktion_icon_label
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzahl_der_Tage_bis_zur_Abfall-Entsorgung
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis
neuer Eintrag Anwesenheitsstatus: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_Anwesenheitsstatus
Jetzt wird es bunt. Es wird demnächst eine Reihe von uiTable-Funktionen geben, die auf SVG-Grafiken basieren. Das besondere an diesen Funktionen ist: beliebige Skalierbarkeit sowie Einfärbung. Im Anhang ein Vorgeschmack.
Hier mal eine andere Darstellung der Temperatur.
Edit: Und in verschiedenen Größen
Unabhängig von der Darstellungen hat ein Temperaturwert immer die gleiche Farbe.
Und so sieht es aus, wenn man mit den ganzen Gradienten experimentiert.
Moin,
ich stehe gerade etwas auf dem Schlauch (vielleicht habe ich auch etwas überlesen...).
Ist es möglich die uiTable in Abhängigkeit z.B. eines Readings komplett auszublenden? Soll heissen, wenn z.B. ein Dummy ein- oder ausgeschaltet wird, dann blende die uiTable ein, oder aus.
Der Hintergrund:
Ich habe für jeden Raum ein "Übersichts"-DOIF (siehe Anhang). nun möchte ich die uiTable nur anzeigen lassen, wenn der Raum gerade auch "besucht/occupied" ist.
wünsche euch ein schönes Osterfest, bleibt gesund,
MAX.
Zitat von: ComputerZOO am 10 April 2020, 09:54:03
Moin,
ich stehe gerade etwas auf dem Schlauch (vielleicht habe ich auch etwas überlesen...).
Ist es möglich die uiTable in Abhängigkeit z.B. eines Readings komplett auszublenden? Soll heissen, wenn z.B. ein Dummy ein- oder ausgeschaltet wird, dann blende die uiTable ein, oder aus.
Der Hintergrund:
Ich habe für jeden Raum ein "Übersichts"-DOIF (siehe Anhang). nun möchte ich die uiTable nur anzeigen lassen, wenn der Raum gerade auch "besucht/occupied" ist.
wünsche euch ein schönes Osterfest, bleibt gesund,
MAX.
nein, z. Zt. ist das nicht möglich, man kann umgekehrt den Status abhängig des Raumes ausblenden. Sind das Status von DOIF-Devices, die man sieht? Poste mal list von Übersicht Wohnzimmer-Device.
Hallo, hier das List von dem Device:
STATE initialized
TYPE DOIF
VERSION 21224 vor 2 Monaten
OLDREADINGS:
READINGS:
vor ein paar Sekunden cmd 0
vor einem Jahr lightScene Motion
vor einem Jahr lightSceneDay Day
vor 10 Stunden lightSceneNow PowerOff
vor 5 Tagen manual off
vor ein paar Sekunden mode enabled
vor ein paar Sekunden state initialized
vor 10 Stunden status off
vor 2 Monaten tempOff 18.5
vor einem Jahr tempOn 20.5
vor 11 Stunden tempSet 18.5
vor einem Jahr time 10
vor 11 Stunden watchingTV off
Regex:
accu:
cond:
wz.cul868.motion.inside_Btn_02:"^Short.*$"] or [wz.hue.switch:"^400.$"]) {
fhem ("set $SELF manual off");
fhem ("set di.bar manual off");
fhem ("set $SELF status off");
fhem ("set wz.homezone occupied 0");
}
## cmd_2: Taster oben schaltet auf manuelle Bedienung
DOELSEIF ([wz.cul868.motion.inside_Btn_01:"^Short.*$"] and [?$SELF:manual] =~ /off/) {
fhem ("set $SELF manual on");
fhem ("set wz.lightscene scene Normal");
}
## cmd_3: Taster oben schaltet die Lichtszenen durch wenn manuelle Bedienung eingeschaltet ist
DOELSEIF ([wz.cul868.motion.inside_Btn_01:"^Short.*$"] and [?$SELF:manual] =~ /on/) {
fhem ("set wz.lightscene nextScene");
}
## cmd_4: status der Lichtszene beziehen
DOELSEIF ([wz.lightscene:"^status:.*$"] or [wz.lightscene:state]) {
fhem ("set $SELF status [wz.lightscene:status]");
if (ReadingsVal("$SELF", "lightSceneNow", "none") ne ReadingsVal("wz.lightScene", "state", "none")) {
fhem ("setreading $SELF lightSceneNow [wz.lightscene:state]");
}
}
## cmd_5: Helligkeit +
DOELSEIF ([wz.hue.switch:"^200.$"]) {
fhem ("set wz.hue.(ambiance|color|white).*:FILTER=state!=off dimUp 20");
}
## cmd_6: Helligkeit -
DOELSEIF ([wz.hue.switch:"^300.$"]) {
fhem ("set wz.hue.(ambiance|color|white).*:FILTER=state!=off dimDown 20");
}
## cmd_7: Raumtemperatur
DOELSEIF ([$SELF:tempSet]) {
centralHeating("$SELF");
fhem ("setreading di.bar tempSet ".ReadingsVal("$SELF", "tempSet", 18));
}
## cmd_8:
DOELSEIF ([$SELF:lightSceneNow]) {
fhem ("set wz.lightscene scene [$SELF:lightSceneNow]");
if (ReadingsVal("$SELF", "lightSceneNow", "none") ne "PowerOff") {
fhem ("set $SELF manualOn");
} else {
fhem ("set $SELF manualOff");
}
}
## di.sz di.wz di.bz di.ku di.fl di.bar di.ws di.th di.db
FUUID 5c431c24-f33f-85c0-f9cd-3f9aa133f342c89e
FVERSION 98_DOIF.pm:0.212240/2020-02-18
MODEL FHEM
NAME di.wz
NOTIFYDEV di.wz,wz.lightscene,wz.cul868.motion.inside_Btn_02,wz.hue.switch,global,wz.cul868.motion.inside_Btn_01
NR 389
NTFY_ORDER 50-di.wz
STATE initialized
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
OLDREADINGS:
READINGS:
2020-04-10 12:54:21 cmd 0
2018-12-24 23:53:53 lightScene Motion
2019-01-07 13:14:30 lightSceneDay Day
2020-04-10 02:34:11 lightSceneNow PowerOff
2020-04-05 21:11:14 manual off
2020-04-10 12:54:21 mode enabled
2020-04-10 12:54:21 state initialized
2020-04-10 02:34:11 status off
2020-02-25 23:35:01 tempOff 18.5
2019-02-01 16:36:38 tempOn 20.5
2020-04-10 01:52:16 tempSet 18.5
2018-12-24 23:53:56 time 10
2020-04-10 01:53:34 watchingTV off
Regex:
accu:
cond:
di.wz:
6:
tempSet ^di.wz$:^tempSet:
7:
lightSceneNow ^di.wz$:^lightSceneNow:
wz.cul868.motion.inside_Btn_01:
1:
&STATE ^wz.cul868.motion.inside_Btn_01$
2:
&STATE ^wz.cul868.motion.inside_Btn_01$
wz.cul868.motion.inside_Btn_02:
0:
&STATE ^wz.cul868.motion.inside_Btn_02$
wz.hue.switch:
0:
&STATE ^wz.hue.switch$
4:
&STATE ^wz.hue.switch$
5:
&STATE ^wz.hue.switch$
wz.lightscene:
3:
&STATE ^wz.lightscene$
state ^wz.lightscene$:^state:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::EventDoIf('wz.cul868.motion.inside_Btn_02',$hash,'^Short.*$',1) or ::EventDoIf('wz.hue.switch',$hash,'^400.$',1)
1 ::EventDoIf('wz.cul868.motion.inside_Btn_01',$hash,'^Short.*$',1) and ::ReadingValDoIf($hash,'di.wz','manual') =~ /off/
2 ::EventDoIf('wz.cul868.motion.inside_Btn_01',$hash,'^Short.*$',1) and ::ReadingValDoIf($hash,'di.wz','manual') =~ /on/
3 ::EventDoIf('wz.lightscene',$hash,'^status:.*$',1) or ::ReadingValDoIf($hash,'wz.lightscene','state')
4 ::EventDoIf('wz.hue.switch',$hash,'^200.$',1)
5 ::EventDoIf('wz.hue.switch',$hash,'^300.$',1)
6 ::ReadingValDoIf($hash,'di.wz','tempSet')
7 ::ReadingValDoIf($hash,'di.wz','lightSceneNow')
do:
0:
0 { fhem ("set di.wz manual off"); fhem ("set di.bar manual off"); fhem ("set di.wz status off"); fhem ("set wz.homezone occupied 0"); }
1:
0 { fhem ("set di.wz manual on"); fhem ("set wz.lightscene scene Normal"); }
2:
0 { fhem ("set wz.lightscene nextScene"); }
3:
0 { fhem ("set di.wz status [wz.lightscene:status]"); if (ReadingsVal("di.wz", "lightSceneNow", "none") ne ReadingsVal("wz.lightScene", "state", "none")) { fhem ("setreading di.wz lightSceneNow [wz.lightscene:state]"); } }
4:
0 { fhem ("set wz.hue.(ambiance|color|white).*:FILTER=state!=off dimUp 20"); }
5:
0 { fhem ("set wz.hue.(ambiance|color|white).*:FILTER=state!=off dimDown 20"); }
6:
0 { centralHeating("di.wz"); fhem ("setreading di.bar tempSet ".ReadingsVal("di.wz", "tempSet", 18)); }
7:
0 { fhem ("set wz.lightscene scene [di.wz:lightSceneNow]"); if (ReadingsVal("di.wz", "lightSceneNow", "none") ne "PowerOff") { fhem ("set di.wz manualOn"); } else { fhem ("set di.wz manualOff"); } }
8:
helper:
DEVFILTER ^global$|^wz.hue.switch$|^wz.cul868.motion.inside_Btn_02$|^di.wz$|^wz.cul868.motion.inside_Btn_01$|^wz.lightscene$
NOTIFYDEV global|wz.hue.switch|wz.cul868.motion.inside_Btn_02|di.wz|wz.cul868.motion.inside_Btn_01|wz.lightscene
globalinit 1
last_timer 0
sleeptimer -1
powerMap:
readings:
all wz.lightscene:state di.wz:tempSet di.wz:lightSceneNow
readingsDesc:
trigger:
all wz.cul868.motion.inside_Btn_02 wz.hue.switch wz.cul868.motion.inside_Btn_01 wz.lightscene
uiState:
uiTable:
Attributes:
DbLogExclude .*
alias Übersicht (Wohnzimmer)
climaDevice wz.cul868.heizung_Clima
comment {
package ui_Table;
}
## schaltbares Icons in der Webansicht (ZUM TESTEN im attr uiTable einfügen)
switch([dummy1:state]) |
switch([dummy2:state],"hue_room_hallway") |
switch([dummy3:state],"status_away_2","status_available\@DarkOrange")|
switch([dummy4:state],"status_locked","status_open\@DarkOrange","closed","open")
devStateIcon { devStateIcon_Uebersicht($name) }
do always
eventMap /manual on:manualOn/manual off:manualOff/
group 00_Home_Übersicht
icon hue_room_living
offsetTemp 11
readingList lightSceneDay lightScene lightSceneNow manual time tempOn tempOff tempSet status watchingTV
room MAXsHome,System->Module->DOIF,Wohnzimmer
sensorAmbient wz.esp.innensensor
sensorContact wz.cul868.contact.doorinside,wz.cul868.contact.window
setList lightSceneDay:none,Day,Motion,Normal,Nacht,Christmas,Aufstehen,Colorful,Hell
lightScene:PowerOff,Motion,Normal,Christmas,Aufstehen,Colorful,Hell
lightSceneNow:PowerOff,Motion,Day,Normal,AppleTV,Fernsehen,Christmas,Aufstehen,Nacht,Colorful,Hell
time:selectnumbers,1,1,60,0,lin
manual:on,off
status:on,off
watchingTV:on,off
tempOn:selectnumbers,15,0.5,30,1,lin
tempOff:selectnumbers,12,0.5,20,1,lin
tempSet:selectnumbers,15,0.5,30,1,lin
sortby 01
userattr offsetTemp sensorAmbient sensorContact climaDevice
verbose 1
webCmd lightSceneNow:tempSet
Ich könnte in dieses Device natürlich noch den Status des Raums (in meinem Fall durch das Modul "homezone") als Reading integrieren.
Ich schaue mal, was ich das für´s nächste Update einbauen kann.
hier mal kombinierte Temperatur/Feuchte wie sie aus vielen Sensoren kommt
Endspurt. Die letzten Widgets werden fertiggestellt.
Eine Vorabversion zum Ausprobieren neuer uiTable-Funktionen.
Syntax:
Parameter $min,$max,$size sind optional, default $min=-20, $max=60
temp_bar ($value,$min,$max,$size) default $size=50
temp_ring ($value,$min,$max,$size) default $size=40
hum_ring ($value,$size) default $size=40
temp_hum_ring ($value,$value2,$min,$max,$size) default $size=55
Beispieldefinition:
defmod di_new_func DOIF ##
attr di_new_func uiTable {package ui_Table}\
"temp_bar"| temp_bar ([Aussensensor:temperature])\
"temp_ring" | temp_ring ([Aussensensor:temperature])\
"hum_ring" | hum_ring ([Aussensensor:humidity])\
"temp_hum_ring"|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])
Layout der Beispieldefinition siehe Anhang.
Wiki-Einträge kommen später, wenn sich die neuen Funktionen bewähren und die Version eingecheckt wird.
Edit: aktuelle DOIF-Version zum Testen im ersten Post
Moin,
ich habe gerade mal die (Test) 98_DOIF.pm ausprobiert und erhalte noch nicht so richtig das gewünschte Ergebnis:
:
TIME 1587456472.57092
VALUE initialized
READINGS:
vor 9 Minuten cmd 0
vor 9 Minuten mode enabled
vor 9 Minuten state initialized
Regex:
accu:
uiTable:
di_new_func
NOTIFYDEV global,da.esp.aussensensor
NR 1025
NTFY_ORDER 50-di_new_func
STATE initialized
TYPE DOIF
Helper:
DBLOG:
cmd:
sys.dblogging:
TIME 1587456472.57092
VALUE 0
mode:
sys.dblogging:
TIME 1587456472.57092
VALUE enabled
state:
sys.dblogging:
TIME 1587456472.57092
VALUE initialized
READINGS:
2020-04-21 10:07:52 cmd 0
2020-04-21 10:07:52 mode enabled
2020-04-21 10:07:52 state initialized
Regex:
accu:
uiTable:
da.esp.aussensensor:
di_new_func_uiTable_c_0_1_0_0:
temperature ^da.esp.aussensensor$:^temperature:
condition:
do:
0:
helper:
DEVFILTER ^global$|^da.esp.aussensensor$
NOTIFYDEV global|da.esp.aussensensor
globalinit 1
last_timer 0
sleeptimer -1
powerMap:
readingsDesc:
myEnergy:
rtype whr
power:
rtype w
uiState:
uiTable:
dev da.esp.aussensensor
package package ui_Table;
reading temperature
table:
0:
0:
0:
0 package ui_Table;"temp_bar"
1:
0:
0 package ui_Table;::DOIF_Widget($hash,$reg,'di_new_func_uiTable_c_0_1_0_0', temp_bar (::ReadingValDoIf($hash,'da.esp.aussensensor','temperature')),"")
tc:
td:
0:
tr:
Attributes:
DbLogExclude .*
event-on-change-reading .*
room NEU,System->Module->DOIF
uiTable {
package ui_Table;
}
"temp_bar" | temp_bar ([da.esp.aussensensor:temperature])
ergibt das Bild im Anhang und folgende Fehlermeldungen im Log:
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [106,100,100]. should be in 0..1.
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [270,70,100]. should be in 0..1.
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [346,100,100]. should be in 0..1.
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [270,70,100]. should be in 0..1.
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [106,100,100]. should be in 0..1.
2020.04.21 10:14:56.914 1: Color::hsv2rgb value out of range [106,100,100]. should be in 0..1.
Die Farbe kann nicht berechnet werden. Evtl. ist die Color.pm nicht aktuell.
Zitat von: Damian am 21 April 2020, 10:42:59
Die Farbe kann nicht berechnet werden. Evtl. ist die Color.pm nicht aktuell.
FHEM/Color.pm:# $Id: Color.pm 20813 vor 4 MonatenZ justme1968 $
System ist Up2Date
Zitat von: ComputerZOO am 21 April 2020, 10:48:59
FHEM/Color.pm:# $Id: Color.pm 20813 vor 4 MonatenZ justme1968 $
System ist Up2Date
Ich habe die Routine jetzt rausgeschmissen. Es sollte eigentlich nur eine Warnung sein. Bei mir wurden die Farben trotz der Warnung korrekt dargestellt. Ist jetzt unerheblich, neue DOIF-Version 0.2 im Anhang des ursprünglichen Posts.
uitable-Funktion: cylinder
Syntax:
cylinder ($header,$min,$max,$unit,$bwidth,$height,($value1,$color1,$text1),($value2,$color2,$text2),...
$header, $unit, $bwidth, $height können mit "" ausgelassen werden
$color ist ein hue-Wert 0-360 (siehe color picker)
Beispieldefinition:
attr Energie uiTable {\
package ui_Table;;\
}\
\
cylinder("Energie",-20,30,"kWh","","",-[zaehler:Bezug:d1],0,"Bezug",[zaehler:Produktion:d1],60,"Produktion",[$SELF:Eigenv:d1],240,"Eigenverbrauch")
DOIF-Version v0.3 im ersten Post des Threads.
Ich habe fertig. Ich habe die temp_bar-Funktion etwas flexibler gestaltet. Es gibt ebenso Funktionen bar, ring, die nicht nur auf Temperatur beschränkt sind. Die aktuelle Version v.04 befindet sich im ersten Post, sie wird demnächst eingecheckt.
Syntax:
temp_bar ($value,$min,$max,$width,$height,$size)
Parameter $min,$max,$width,$height,$size sind optional
Beispieldefinition:
attr di_temp_bar uiTable {package ui_Table}\
\
temp_bar([Aussensensor:temperature],-20,40)|\
temp_bar([Aussensensor:temperature],-20,40,undef,80)|\
temp_bar([Aussensensor:temperature],-20,40,undef,300)|\
temp_bar([Aussensensor:temperature],-20,40,undef,undef,100)
Uuuiii.
Viel bunt. Sieht sehr gut aus.
Bin mal gespannt.....
Gesendet von meinem MI 9 mit Tapatalk
Zitat von: ComputerZOO am 10 April 2020, 09:54:03
Moin,
ich stehe gerade etwas auf dem Schlauch (vielleicht habe ich auch etwas überlesen...).
Ist es möglich die uiTable in Abhängigkeit z.B. eines Readings komplett auszublenden? Soll heissen, wenn z.B. ein Dummy ein- oder ausgeschaltet wird, dann blende die uiTable ein, oder aus.
Der Hintergrund:
Ich habe für jeden Raum ein "Übersichts"-DOIF (siehe Anhang). nun möchte ich die uiTable nur anzeigen lassen, wenn der Raum gerade auch "besucht/occupied" ist.
wünsche euch ein schönes Osterfest, bleibt gesund,
MAX.
In der Version 0.7 im ersten Post gibt es jetzt die neue Funktionalität uiTable raumabhängig auszublenden.
Syntax:
$SHOWNOUITABLE=<Regex für Räume>
Beispiel:
{
package ui_Table;
$SHOWNOUITABLE="test10";
}
Im Raum test10 wird sie nicht angezeigt.
Da gibt´s jetzt viel auszuprobieren... :)
Aber ich hätte da mal eine Frage:
Gibt es eine Möglichkeit uiTable im Dashboard anzeigen zu lassen?
Die mit uiTable erzeugte Ausgabe wird dort nicht angezeigt.
Zitat von: moskito am 26 April 2020, 22:41:20
Da gibt´s jetzt viel auszuprobieren... :)
Aber ich hätte da mal eine Frage:
Gibt es eine Möglichkeit uiTable im Dashboard anzeigen zu lassen?
Die mit uiTable erzeugte Ausgabe wird dort nicht angezeigt.
Dashboard hat vermutlich eine eigene WEB-Schnittstelle, DOIF benutzt eine WEB-Schnittstelle zu FHEM-WEB.
Moin,
ich teste mich gerade mal so durch die neuen Funktionen durch. Kann es sein, dass temp_bar noch einen weiteren Parameter ($BEZEICHNUNG?) hat?
temp_bar ($value,$min,$max,$BEZEICHNUNG,$width,$height)
temp_bar ([wz.cul868.heizung_Clima:desired-temp], 15, 22, "xyz", 80, 120)
Zitat von: ComputerZOO am 27 April 2020, 15:37:03
Moin,
ich teste mich gerade mal so durch die neuen Funktionen durch. Kann es sein, dass temp_bar noch einen weiteren Parameter ($BEZEICHNUNG?) hat?
temp_bar ($value,$min,$max,$BEZEICHNUNG,$width,$height)
temp_bar ([wz.cul868.heizung_Clima:desired-temp], 15, 22, "xyz", 80, 120)
ja, es haben sich noch ein paar Dinge geändert, die aktuellen Parameter sind:
temp_bar ($value,$min,$max,$header,$width,$height,$size)
mit $size kann man die gesamte Größe skalieren.
Ich bin inzwischen bei Version v0.8. Ich teste noch etwas und wenn mir nichts mehr auffällt, dann geht die DOIF Version morgen online. Die entsprechenden Wiki-Einträge kommen dann nach und nach.
Hallo Damian.
Habe mit der v0.8 mal ein bischen geprobt und was einfaches angelegt. Dabei ist Darstellungsfehler sichtbar geworden, warum auch immer.
Und ich wollte fragen, ob man den Abstand zwischen Widgets verkleinern kann ?
{package ui_Table}
temp_bar([ts01:temperature],15,35,"WZ",60,100)|
temp_bar([ts02:temperature],-10,40,"Garten",60,100)|
temp_bar([ts_ben:temperature],15,35,"KiZi",60,100)|
temp_bar([ts_gz:temperature],12,25,"GZ",60,100)
Ok. habe gerade gesehen, wenn ich das Widget um 10 breiter mache dann stimmt die Darstellung.
Was mich dann zu einer Frage bringt, ob man den angezeigten Wert (Schriftgröße) änder kann.
Zitat von: sash.sc am 27 April 2020, 19:07:53
Hallo Damian.
Habe mit der v0.8 mal ein bischen geprobt und was einfaches angelegt. Dabei ist Darstellungsfehler sichtbar geworden, warum auch immer.
Und ich wollte fragen, ob man den Abstand zwischen Widgets verkleinern kann ?
{package ui_Table}
temp_bar([ts01:temperature],15,35,"WZ",60,100)|
temp_bar([ts02:temperature],-10,40,"Garten",60,100)|
temp_bar([ts_ben:temperature],15,35,"KiZi",60,100)|
temp_bar([ts_gz:temperature],12,25,"GZ",60,100)
Ok. habe gerade gesehen, wenn ich das Widget um 10 breiter mache dann stimmt die Darstellung.
Was mich dann zu einer Frage bringt, ob man den angezeigten Wert (Schriftgröße) änder kann.
Bei der Breite solltest du nicht unter 75 gehen, das ist auch der Defaultwert. Du kannst das ganze Widget kleiner machen, in dem du size kleiner 100 angibst.
Es ist eine Tabelle. Es gibt vermutlich noch etwas anderes in der Spalte über oder unter dem DOIF, so dass die DOIF Tabelle auseinander gezogen wird.
Du kannst am besten in einem separaten Raum testen, wo nur dein DOIF drin ist, dann siehst du die tatsächlichen Abstände zwischen den Widgets.
Ok. Werde das mal in einen anderen Raum schieben, vorzugsweise einen leeren Raum.
Wie oder womit wird die Ringanzeige definiert bzw aktivert?
Gruß Sascha
Gesendet von meinem MI 9 mit Tapatalk
Funktionen mit ihren Parametern:
temp_bar ($value,$min,$max,$header,$width,$height,$size)
temp_ring ($value,$min,$max,$size)
hum_ring ($value,$size)
temp_hum_ring ($value,$value2,$min,$max,$size)
Die oberen Funktionen basieren auf allgemeinen Funktionen:
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec)
ring ($value,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec)
ring2 ($value,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$value2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2)
und
cylinder ($header,$min,$max,$unit,$bwidth,$height,$size,$dec,@values)
Die meisten Parameter sind optional, oft reicht die Angabe des Wertes (value)
Konkrete Beispiele habe ich bereits hier im Thread gepostet.
Im Wiki wird es natürlich genauer beschrieben.
Im Anhang ist mein aktueller Statusbildschirm basierend auf Version v0.8.
neue DOIF-Version wurde eingecheckt
Hallo Damian.
Es gibt ja den temp_hum_ring.
Ist es möglich diesen auch als temp-hum-bar darzustellen ? Also 2 Balken (temp und humidity) nebeneinander ?
Gruß und Danke
Sascha
Zitat von: sash.sc am 28 April 2020, 20:52:31
Hallo Damian.
Es gibt ja den temp_hum_ring.
Ist es möglich diesen auch als temp-hum-bar darzustellen ? Also 2 Balken (temp und humidity) nebeneinander ?
Gruß und Danke
Sascha
z. Zt. gibt es nur temp_bar, temp_hum_bar ist nicht programmiert. Man kann mit der Funktion bar alles Mögliche darstellen, z. B. humidity, allerdings mit nur einem Balken. Was die Zukunft noch bringt werden sehen. Wenn jemand sich etwas mit html auskennt, so kann er schnell die bestehenden svg-Funktionen auslagern und für seine Zwecke anpassen oder erweitern.
so sieht z. B. Feuchte über die Funktion bar aus:
defmod di_new_func DOIF ##
attr di_new_func uiTable {package ui_Table}\
"hum_bar"| bar([Aussensensor:humidity],0,100,"Aussen",undef,undef,"%",60,undef,undef,\&hum_hue,0)
oder Feuchte über die Funktion cylinder:
defmod di_new_func DOIF ##
attr di_new_func uiTable {package ui_Table}\
"hum_cylinder"|cylinder("Außen",0,100,"%",100,50,undef,0,[Aussensensor:humidity],200,"Feuchte")
oder wie wäre es mit einem cylinder, dessen Farbe sich an die Feuchte anpasst:
defmod di_new_func DOIF ##
attr di_new_func uiTable {package ui_Table}\
"hum_cylinder"|cylinder("Außen",0,100,"%",100,50,undef,0,[Aussensensor:humidity],hum_hue([Aussensensor:humidity]),"Feuchte")
oder wie wäre es mit Skalierung immer in bester Schärfe:
defmod di_new_func DOIF ##
attr di_new_func uiTable {package ui_Table}\
"hum_cylinder"|cylinder("Außen",0,100,"%",100,50,undef,0,[Aussensensor:humidity],hum_hue([Aussensensor:humidity]),"Feuchte")\
"hum_cylinder"|cylinder("Außen",0,100,"%",100,50,50,0,[Aussensensor:humidity],hum_hue([Aussensensor:humidity]),"Feuchte")\
"hum_cylinder"|cylinder("Außen",0,100,"%",100,50,200,0,[Aussensensor:humidity],hum_hue([Aussensensor:humidity]),"Feuchte")
Hallo Damian.
Danke für deine Beispiele.
Habe gerade versucht, den ring2 zu defnieren.
"Garten",temp_hum_ring([ts02:temperature],[ts02:humidity],-10,35,175)|
"Garten", ring2 ([ts02:temperature],-10,30,blue,red,"°C",150,linear,1)|
Bekomme aber nur Garten angezeigt, jedoch keinen Ring2. Die 1. Definition funktioniert ohne Probleme.
Stimmt das mit der min max Farbe oder müssen dort Werte rein? und wie muss die $func definiert sein ?
Und wie bekomme ich die Bezeichnung/Label mittig über die Grafik?
Ich habe auch versucht, den Staus eines CUL´s (Initialized/disconnected) darzustellen. Habe mich an dein beispiel aus der WIKI gehalten.
## Icon für Zustand 'closed' ist "status_locked", für Zustand 'open' 'status_open\@DarkOrange'\
"Haus"|icon([Schloss:state],"status_locked","status_open\@DarkOrange","closed","open")
Wenn ich analg dazu das uitable definiere wird jedoch nix angezeigt !
"CUL1" |icon ([CUL868:state],"cul_cul\@red","cul_cul\@lime","Initialized","disconnected")
Gruß und Danke
Sascha
P.S.
Mit der Zentrierung des Labels habe ich selber gefunden.
defmod di_uiTable_temp DOIF ##
attr di_uiTable_temp uiTable {\
package ui_Table;; ## Package für uiTable-Funktionen\
$TC{0..2}="align='center'";; ## zentrierte Darstellung aller Tabellenspalten\
}\
## Tabellendefinition\
"Garten", ring2 ([ts02:temperature],-10,30,blue,red,"°C",150,linear,1)|
Texte müssen in Anführungszeichen, Farben nur als Werte zwischen 0 und 360 (siehe color picker in der Googlesuche)
Was soll ring2 als Zweites darstellen?
Du hattest hier
Funktionen mit ihren Parametern:
temp_bar ($value,$min,$max,$header,$width,$height,$size)
temp_ring ($value,$min,$max,$size)
hum_ring ($value,$size)
temp_hum_ring ($value,$value2,$min,$max,$size)
Die oberen Funktionen basieren auf allgemeinen Funktionen:
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec)
ring ($value,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec)
ring2 ($value,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$value2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2)
und
cylinder ($header,$min,$max,$unit,$bwidth,$height,$size,$dec,@values)
Die meisten Parameter sind optional, oft reicht die Angabe des Wertes (value)
Das mit Ring2 erwähnt, oder ist da nur eine interne FUnktion ??
Danke !
ring2 kann man nutzen, aber wie du sieht, sind da jede Menge Parameter, die sich auf zwei verschiedene Werte beziehen, die man darstellen will. ring2 wird z. B. von temp_hum_ring genutzt.
Was möchtest du mit ring2 konkret darstellen?
Ich wollte einfach mal alle Darstellungen ausprobieren.
Gesendet von meinem MI 9 mit Tapatalk
Zitat von: sash.sc am 02 Mai 2020, 16:14:20
Ich wollte einfach mal alle Darstellungen ausprobieren.
Gesendet von meinem MI 9 mit Tapatalk
Sie entspricht temp_hum_ring mit zweit Ringen, wie in meinem jetzigen Profilbild für beliebige zwei Werte.
Ich möchte gerne mit ring2 Collektor-Temp und Rücklauf darstellen
ring2([HK.SOL:S.CollTemp],0,130,,,"°C",,,,[HK.SOL:S.FlowBack])
den 2. Wert bekomme ich nicht hin. Müssen ev. Parameter undef sein.
Später Heizung Vorlauf - Rücklauf.
3 Puffertemperaturen unten, mitte, oben funktionieren mit cylinder.
Wetterbeispiel: aktuell uni-muenchen
Ich merke schon, ihr braucht dringend vernünftige Doku :)
Hier mal zwei Temperaturen mit ring2:
ring2([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,60,undef,undef,"°C",undef,\&temp_hue,1,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,60,undef,undef,"°C",\&temp_hue,1)
Danke klappt - Doku wäre nicht schlecht, weil wir sonst nur rumprobieren.
Zitat von: jkriegl am 02 Mai 2020, 17:07:18
Danke klappt - Doku wäre nicht schlecht, weil wir sonst nur rumprobieren.
ja, bin bisher nicht dazu gekommen, steht aber auf höchster Prio.
Zwei Temperaturen im Ring sind auch keine schlechte Idee -> es wird dann auch die Funktion temp_temp_ring geben ;)
[emoji106]
Gesendet von meinem MI 9 mit Tapatalk
Und schon realisiert:
temp_temp_ring ($temp1,$temp2,$mintemp,$maxtemp,$size)
$mintemp,$maxtemp,$size sind optional
Bsp.
temp_temp_ring([ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,60)
Morgen per Update verfügbar :)
Und weil es so viel Spaß macht, habe ich noch eine hum_bar-Funktion programmiert:
hum_bar ($value,$header,$width,$height,$size)
$header,$width,$height,$size sind optional
Bsp.:
hum_bar([Aussensensor:humidity],"außen")
Hab hiermit ein Problem beim Runden 0-Nachkommastellen
bar([HK.SOL:S.Pumpe],0,100,"Pumpe",undef,undef,"%",undef,undef)
Edit: es wird scheinbar bei Daten auch ohne Komma mit 1-er Nachkommastelle formatiert
Zitat von: jkriegl am 02 Mai 2020, 17:41:17
Hab hiermit ein Problem beim Runden 0-Nachkommastellen
bar([HK.SOL:S.Pumpe],0,100,"Pumpe",undef,undef,"%",undef,undef)
Edit: es wird scheinbar bei Daten auch ohne Komma mit 1-er Nachkommastelle formatiert
Normal, falls du keine Nachkommastellen haben willst, dann musst du das mit $dec=0 angeben
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec)
bar([HK.SOL:S.Pumpe],0,100,"Pumpe",undef,undef,"%",undef,undef,undef,undef,0)
neue Version eingecheckt mit temp_temp_ring und hum_bar
So, der Anfang ist gemacht: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen
Habe da noch ne Frage.
Wozu dient in deiner definition die $func \&temp_hue ?
Gibt es irgendwo eine Erklärung ?
Zitat von: Damian am 02 Mai 2020, 16:55:32
Ich merke schon, ihr braucht dringend vernünftige Doku :)
Hier mal zwei Temperaturen mit ring2:
ring2([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,60,undef,undef,"°C",undef,\&temp_hue,1,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,60,undef,undef,"°C",\&temp_hue,1)
Zitat von: sash.sc am 03 Mai 2020, 01:06:34
Habe da noch ne Frage.
Wozu dient in deiner definition die $func \&temp_hue ?
Gibt es irgendwo eine Erklärung ?
$func ist eine Funktion, die zum aktuellen Wert, hier Temperatur, einen Farbwert hue zwischen 0 und 360 liefert.
Wird sie nicht angegeben oder als undef, dann wird der Farbwert hue linear zwischen $minColor und $maxColor interpoliert.
Wiki-Doku für: temp_ring, hum_ring, temp_hum_ring, temp_temp_ring, temp_bar, hum_bar ist fertig, siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen
Als Nächstes kommt noch die Beschreibung der universellen Funktionen: bar, ring, ring2, cylinder
Welche mögliche Funktionen gibt es denn noch? Evtl. Mit Beschreibung?
Gruß und danke
Sascha
Gesendet von meinem MI 9 mit Tapatalk
Zitat von: sash.sc am 03 Mai 2020, 11:43:47
Welche mögliche Funktionen gibt es denn noch? Evtl. Mit Beschreibung?
Gruß und danke
Sascha
Gesendet von meinem MI 9 mit Tapatalk
z. Zt. keine
Hallo Damian.
Deine ui werte das ganze doch sehr auf. Bin gerade etwas am experimentieren.
Wollte mir eine Übersicht der Temperaturen mit Taupunkte zusammen bauen. Siehe Bild.
Besteht die Möglichkeit, dass der temp_bar mit dem Taupunkt weiter an den tem_hum_ring ran rückt ??
{package ui_Table;; ## Package für uiTable-Funktionen\
$TC{0..5}="align='center'";;
## Ausblenden des Status in der Statuszeile\
$SHOWNOSTATE=1;;
## Die Gerätezeile wird ausgeblendet in allen Räumen\
## $SHOWNODEVICELINE = ".*";;
}
"Garten",temp_hum_ring([ts02:temperature],[ts02:humidity],-10,35,140)|
temp_bar([ts02:dewpoint],0,20,)|
"WZ",temp_hum_ring([ts01:temperature],[ts01:humidity],18,35,140)|
"Bad_EG",temp_hum_ring([ts_bad_eg:temperature],[ts_bad_eg:humidity],18,25,140)|
"KiZi",temp_hum_ring([ts_ben:temperature],[ts_ben:humidity],18,25,140)|
"SZ",temp_hum_ring([ts_sz:temperature],[ts_sz:humidity],15,28,140)|
Gruß und Danke
Sascha
Das hatten wir doch schon mal: https://forum.fhem.de/index.php/topic,106059.msg1047731.html#msg1047731
Habe die ganzen doifs mit ui in einem eigenen Raum gepackt.
Mir geht es um den Abstand zwischen den Ring und dem bar. Kann man diesen verkleinern?
Diese Darstellung ist bei weitem noch nicht final.
Gesendet von meinem MI 9 mit Tapatalk
Bei HTML-Tabellen orientiert sich die Breite jeder Zeile an der breitesten Zeile der Spalte. Da musst du selbst drauf achten, dass die Zeilen ungefähr gleichmäßig gefüllt sind - darauf habe ich keinen Einfluss.
Ok. Danke
Gesendet von meinem MI 9 mit Tapatalk
Ich gehe davon aus, dass in deinem Beispiel die breiteste Zeile die letzte Zeile ist, wenn du dort die Symbole verkleinerst, wird die Breite der Spalte sich verkleinern - die Abstände in den anderen Zeilen werden kleiner.
Oder muss es mal mit der Ausrichtung probieren. Habe da alles auf Center gestellt, also mittig
Gesendet von meinem MI 9 mit Tapatalk
Zitat von: sash.sc am 03 Mai 2020, 19:11:35
Oder muss es mal mit der Ausrichtung probieren. Habe da alles auf Center gestellt, also mittig
Gesendet von meinem MI 9 mit Tapatalk
Die Abstände zwischen den Symbolen sind doch alle gleichmäßig verteilt -> Spalten sind zentriert.
Habe mein Tanke-readingsgroup umgestellt
und mit icons gebastelt. Da ich kein Icon für Feinstaub gefunden habe, habe ich den "knob" probiert. Leider ist dieser an (temp_)knob gebunden und man kann keine Grenzwerte einstellen.
Vielen Dank für diese neuen Funktionen.
Zitat von: jkriegl am 03 Mai 2020, 20:01:17
Habe mein Tanke-readingsgroup umgestellt
und mit icons gebastelt. Da ich kein Icon für Feinstaub gefunden habe, habe ich den "knob" probiert. Leider ist dieser an (temp_)knob gebunden und man kann keine Grenzwerte einstellen.
Vielen Dank für diese neuen Funktionen.
Dann kannst du gleich Feinstaub mit Hilfe der gerade fertiggestellten Docu zur Funktion
ring versuchen umzusetzen. ;)
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Zahlenwertes_mit_Hilfe_der_universellen_SVG-Funktion_ring
Ach ja. Habe ich schon gesagt, dass die SVG-Widgets auch außerhalb von DOIF funktionieren? ;)
Nächste Doku fertig: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Zahlenwertes_mit_Hilfe_der_universellen_SVG-Funktion_bar
Zitat von: Damian am 03 Mai 2020, 21:08:10
Nächste Doku fertig: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Zahlenwertes_mit_Hilfe_der_universellen_SVG-Funktion_bar
Arrg, und ich habe mich gestern abend durch den source Code gequält (was eigentlich nicht wirklich eine Qual war ;-)) um ein paar bars zu erstellen :-)
Kurz, weil mobil....
Doku Funktion ring2: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2
Tesla ist leider nur ein Dummy :(
Es fehlt nur noch die Doku der mächtigstes Funktion von allen: cylinder
Zitat von: Damian am 03 Mai 2020, 20:17:13
Ach ja. Habe ich schon gesagt, dass die SVG-Widgets auch außerhalb von DOIF funktionieren? ;)
Man kann z. B. in Sensoren, die regelmäßig den Status aktualisieren, über devStateIcon die SVG-Funktionen nutzen.
defmod Aussensensor CUL_WS 1
attr Aussensensor alexaName Aussen
attr Aussensensor alias Aussen
attr Aussensensor devStateIcon {ui_Table::temp_hum_ring(ReadingsVal("Aussensensor","temperature",0),ReadingsVal("Aussensensor","humidity",0))}
attr Aussensensor event-on-change-reading .*
attr Aussensensor group Aktuell
attr Aussensensor room CUL_WS,Info
Doku zu SVG-Funktion cylinder: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#3d-Balkendarstellung_mehrerer_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_cylinder
Hallo,
ich versuche mich für den Einstieg gerade an dem Beispiel für die Anwesenheitsanzeige: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_Anwesenheitsstatus
Leider fehlt mir wohl irgendwie dieses FA (=Font Awesome?) - Icon.
Was muss ich denn dafür noch einbinden? Auf der Wikiseite habe ich dazu nichts gefunden...
Danke schon mal...
Grüße
Reinerlein
siehe https://forum.fhem.de/index.php/topic,12605.msg795076.html#msg795076
Nach dem Auspacken aus der Zip-Datein ins /opt/fhem/www/images/fhemSVG kopieren.
Hi Damian,
danke für den Hinweis.
Ich habe das jetzt in den Ordner fhemSVG kopiert:
root@fhem:/opt/fhem/www/images/fhemSVG# ll
.
.
-rw-r--r-- 1 998 dialout 1427 Sep 28 2017 fa__508.svg
.
.
root@fhem:/opt/fhem/www/images/fhemSVG#
Allerdings werden die Icons immer noch nicht angezeigt... fehlt noch ein Verweis oder so?
Grüße
Reinerlein
Zitat von: Reinerlein am 11 Juni 2020, 14:07:01
...Allerdings werden die Icons immer noch nicht angezeigt... fehlt noch ein Verweis oder so?
Einmal im betreffenden WEB-Device
set <WEB-DEVICE> rereadicons
ausführen.
Hallo ComputerZOO,
danke für den Hinweis, das war es... jetzt klappt es...
Grüße
Reinerlein
Hallo in die Runde,
ich habe ein Problem mit der Positionierung eines PopUps via PUP().
wie kann ich das PopUp zentriert auf dem Bildschirm darstellen? Bei mir wird es immer unten rechts in der ecke geöffnet.
schon mal danke für die Hilfe.
Die Positionierung festzulegen ist in PUP nicht vorgesehen.
Zitat von: Damian am 31 Dezember 2019, 17:47:10Deine FUNC_-Funktion solltest du anders benennen (ohne FUNC am Anfang) ansonsten musst du :: davorstellen
Kann ich auch auf Funktionen in myUtils zugreifen? Oder geht das nur mit IMPORT und einer separaten Datei?
Zitat von: Per am 04 Februar 2021, 09:57:33
Kann ich auch auf Funktionen in myUtils zugreifen? Oder geht das nur mit IMPORT und einer separaten Datei?
Du kannst auf alle Funktionen in FHEM zugreifen. :: voranstellen, wenn sie aus main kommen, also auch für myUtils, wenn du sie nicht im Package ui_Table definiert hast.
Komisch, nachdem ich es mit einer "alten" Funktion versucht habe, wurden auch die neu angelegten fehlerfrei genommen. K.A., warum.
Zitat von: Per am 05 Februar 2021, 00:01:56
Komisch, nachdem ich es mit einer "alten" Funktion versucht habe, wurden auch die neu angelegten fehlerfrei genommen. K.A., warum.
Dazu brauche ich genaue Daten mit list.
Ich schiebe gleich mal noch eine Frage hinterher: kann man die UIs aktualisieren, ohne die Definition oder das Attribut uiTable selbst zu aktualisieren? Hintergrund: mittels einer FOR-Schleife lasse ich mir eine variable Anzahl von Geräten anzeigen. Leider wird die korrekte Anzahl nur angezeigt, wenn ich o.a. Aktionen durchführe. Dann allerdings automatisch in allen offenen Anzeigen wie gewünscht.
Selbst ein set xxx initialize reicht nicht.
Zitat von: Per am 05 Februar 2021, 10:39:57
Ich schiebe gleich mal noch eine Frage hinterher: kann man die UIs aktualisieren, ohne die Definition oder das Attribut uiTable selbst zu aktualisieren? Hintergrund: mittels einer FOR-Schleife lasse ich mir eine variable Anzahl von Geräten anzeigen. Leider wird die korrekte Anzahl nur angezeigt, wenn ich o.a. Aktionen durchführe. Dann allerdings automatisch in allen offenen Anzeigen wie gewünscht.
Selbst ein set xxx initialize reicht nicht.
Das UI funktioniert beim DOIF ereignisgesteuert. Das heißt, jedes Symbol muss einen Trigger beinhalten. Das geschieht, indem man bei den UI-DOIF-Funktionen ein Reading in der DOIF-Notation angibt [:]. In HTML wird ja dann nicht die ganze UI-Table neu gezeichnet, sondern nur das entsprechende Symbol. Alles andere, wäre eine "billige" Lösung die unnötig Resourcen verbrauchen würde - das wollen wir :)
Nachvollziehbar. Dann muss ich mir einen anderen Weg einfallen lassen.
Hi,
ich bin derzeit auch mit der FOR-Schleife zur dynamischen Anzeige von Geräte am testen und mir fehlt ebenfalls die Möglichkeit, in der Tabelle Geräte dynamisch anzuzeigen.
Anwendungsbeispiel: Alle Geräte listen, bei denen die Batterie leer ist.
Vorteil der FOR-Schleife: Wenn alle Batterien gut sind, wird keine Zeile eingeblendet (habe ich mit einer einzelnen Zeile entsprechend dem Beispiel noch nicht geschafft.
Funktioniert prinzipiell wunderbar, wenn als Array eine perl-Funktion DefSpec2Array oder AggrDoIF verwendet wird. Um ein Ereignis zu generieren, war jetzt meine Idee, ein DOIFReadings zu setzen, in dem die Geräte kommasepariert stehen, und dieses Reading via "split" wieder in einen Array zu konvertieren.
Fazit: Funktioniert, wenn ich das Reading via ReadingsVal hole - dann fehlt mir allerdings der Trigger. Versuche ich, den Inhalt via [$SELF:Reading] zu übergeben, kommt in der FOR-Schleife nichts an.
Beispiel (mit Battery; ok, damit ein paar Geräte in der Liste stehen):
defmod di.Test.uiTable DOIF ##
attr di.Test.uiTable DOIF_Readings battery:[@".*":battery:"ok"]
attr di.Test.uiTable event_Readings html:{ fhem "get $SELF html" }
attr di.Test.uiTable room Test
attr di.Test.uiTable uiTable FOR(split(",",ReadingsVal("$SELF","battery","")),"Batterie Test"|"$_")\
FOR(split(",",[$SELF:battery]),"Batterie Test"|"$_")
@Damian: Hast Du einen Tip für mich?
Gruß Thorsten
Der FOR-Befehl impliziert eine Schleife, er ist für eine flexible Definition gedacht, die aber wiederum statisch ist. Eine Änderung der Tabelle ist nur mit der Änderung des Attributes möglich - also mit der Änderung der Konfiguration.
Vllt ließe sich das mit einen set Befehl neu zeichnen? So oft nutzt man es ja nicht, dass man es unbedingt vollautomatisch braucht.
Zitat von: Per am 18 Februar 2021, 22:20:20
Vllt ließe sich das mit einen set Befehl neu zeichnen? So oft nutzt man es ja nicht, dass man es unbedingt vollautomatisch braucht.
Mit Neuzeichnen ist es nicht getan. Bei uiTable handelt es sich um eine statische Tabelle, die per Konfiguration geändert wird. Eine Änderung des uiTable-Attributs bedeutet eine Änderung des Systems (rotes Fragezeichen), dazu wird die vorherige Definition bereinigt, Trigger gelöscht, ein aufwändiger Parser wird durchlaufen, Trigger müssen erkannt werden und neu aufgesetzt etc.
Dynamische Anzeigen kann man innerhalb einer Tabellenzelle realisieren, siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_offene_Fenster
All right.
WorkAround: Habe es jetzt über eine dynamische Anzeige innerhalb einer Tabellenzelle realisiert, indem ich über ein DOIF_Readings eine Tabellendefinition erzeuge, die ich dann mittels dem uiTable-Attribut in der Tabelle anzeige. Als Beispiel für eine Tabelle "Batterie niedrig / Batterie ok":
defmod di.Test.uiTable DOIF ##
attr di.Test.uiTable DOIF_Readings Info_BatteryLow:[@".*":battery:"low"],\
Info_BatteryOk:[@".*":battery:"ok"],\
\
my_html:{\
my $ret = "";;\
my @devs = split(",",[$SELF:Info_BatteryLow]);;\
$_ = "<tr><td>Batterie niedrig</td><td>".getFullName("$_")."</td></tr>" foreach @devs;;\
$ret = $ret.join("",@devs);; \
\
my @devs = split(",",[$SELF:Info_BatteryOk]);;\
$_ = "<tr><td>Batterie ok</td><td>".getFullName("$_")."</td></tr>" foreach @devs;;\
$ret = $ret.join("",@devs);; \
\
length($ret) < 5 ? return "keine Meldungen" : return "<table> $ret </table>";;\
}
attr di.Test.uiTable event_Readings html:{ fhem "get $SELF html" }
attr di.Test.uiTable room Test
attr di.Test.uiTable uiTable [$SELF:my_html]
Werde an dieser Stelle mal weiterbasteln. Mal schauen, ob es sich bewährt.
Gruß Thorsten
Zitat von: thorte am 20 Februar 2021, 12:55:56
All right.
WorkAround: Habe es jetzt über eine dynamische Anzeige innerhalb einer Tabellenzelle realisiert, indem ich über ein DOIF_Readings eine Tabellendefinition erzeuge, die ich dann mittels dem uiTable-Attribut in der Tabelle anzeige. Als Beispiel für eine Tabelle "Batterie niedrig / Batterie ok":
defmod di.Test.uiTable DOIF ##
attr di.Test.uiTable DOIF_Readings Info_BatteryLow:[@".*":battery:"low"],\
Info_BatteryOk:[@".*":battery:"ok"],\
\
my_html:{\
my $ret = "";;\
my @devs = split(",",[$SELF:Info_BatteryLow]);;\
$_ = "<tr><td>Batterie niedrig</td><td>".getFullName("$_")."</td></tr>" foreach @devs;;\
$ret = $ret.join("",@devs);; \
\
my @devs = split(",",[$SELF:Info_BatteryOk]);;\
$_ = "<tr><td>Batterie ok</td><td>".getFullName("$_")."</td></tr>" foreach @devs;;\
$ret = $ret.join("",@devs);; \
\
length($ret) < 5 ? return "keine Meldungen" : return "<table> $ret </table>";;\
}
attr di.Test.uiTable event_Readings html:{ fhem "get $SELF html" }
attr di.Test.uiTable room Test
attr di.Test.uiTable uiTable [$SELF:my_html]
Werde an dieser Stelle mal weiterbasteln. Mal schauen, ob es sich bewährt.
Gruß Thorsten
Für dynamische Listen schau dir mal das Modul readingsGroup an.
Hallo Zusammen,
für meine Anzeige wäre es schön, wenn die Cylinder-Funktion auch horizontal darstellt werden könnte.
Leider habe ich diesbezüglich nichts gefunden. Habe ich es übersehen oder ist das nicht möglich ?
Bitte nicht als Wunsch verstehen, wenn es nicht geht, dann ist es halt so.
Ich möchte nicht, das hier irgendwer Arbeit investiert für einen einzelnen Wunsch.
Gruß,
JudgeDredd
Zitat von: JudgeDredd am 07 Mai 2021, 18:04:58
Hallo Zusammen,
für meine Anzeige wäre es schön, wenn die Cylinder-Funktion auch horizontal darstellt werden könnte.
Leider habe ich diesbezüglich nichts gefunden. Habe ich es übersehen oder ist das nicht möglich ?
Bitte nicht als Wunsch verstehen, wenn es nicht geht, dann ist es halt so.
Ich möchte nicht, das hier irgendwer Arbeit investiert für einen einzelnen Wunsch.
Gruß,
JudgeDredd
Wie hättest du es gern?
Zitat von: Damian am 07 Mai 2021, 18:10:25
Wie hättest du es gern?
Och, die Grafik find ich schon schick, so wie sie ist. Nur eben horizontal.
Also Links "0" und rechts die "100".
Aber wie gesagt, ich kann auch mit der aktuellen vertikalen Situation leben.
Ich dachte nur, das man es schon jetzt mittels Parameter konfigurieren könnte.
Gruß,
JudgeDredd
Ein Balken oder mehrere?
Balken ineinander oder neben einander? (siehe bars-Funktion)
Mit Beschriftungen oder ohne?
Mit Hintergrund oder ohne?
Einen waagerechten Balken mit einer Zahl, der in eine Zeile hineinpasst könnte ich mir ebenso vorstellen.
Zitat von: Damian am 07 Mai 2021, 19:56:55
Ein Balken oder mehrere?
Balken ineinander oder neben einander? (siehe bars-Funktion)
Mit Beschriftungen oder ohne?
Mit Hintergrund oder ohne?
Einen waagerechten Balken mit einer Zahl, der in eine Zeile hineinpasst könnte ich mir ebenso vorstellen.
Mit einem waagrechten Balken, der in eine Zeile passt wäre mir am meisten geholfen.
Aber wenn Du wirklich was machen möchtest, dann vielleicht so, das möglichst viele was davon haben.
Designtechnisch bin ich allerdings voll der Krüppel :o Daher überlasse ich die Beschriftungen voll Deiner Inspiration.
Gruß,
JudgeDredd
Zitat von: JudgeDredd am 07 Mai 2021, 20:11:36
Mit einem waagrechten Balken, der in eine Zeile passt wäre mir am meisten geholfen.
Aber wenn Du wirklich was machen möchtest, dann vielleicht so, das möglichst viele was davon haben.
Designtechnisch bin ich allerdings voll der Krüppel :o Daher überlasse ich die Beschriftungen voll Deiner Inspiration.
Gruß,
JudgeDredd
Zuerst muss ich aber meine aktuelle Baustelle fertigstellen - card-Funktion
Zitat von: Damian am 07 Mai 2021, 20:39:15
Zuerst muss ich aber meine aktuelle Baustelle fertigstellen - card-Funktion
Du bist der einzige der über Deine Freizeit bestimmen sollte.
Wenn es irgendwann soweit sein sollte, dann bekomme ich das ja bestimmt mit.
Hallo,
ich heute in das Thema uiTable eingestiegen und war sehr überrascht wie einfach und schnell man schöne Dashboard-Grafiken bekommt.
Funktioniert klasse.
Über eine kuriose Sache bin ich gestolpert:
In all meinen uiTable-Definitionen nutze ich $SHOWNOSTATE=1;, aber bei einigen Devices schien dies keinen Effekt zu haben.
Der state ("initialized") wurde trotzdem angezeigt.
Durch einen dummen Zufall glaube ich herausgefunden zu haben warum das so ist: Wenn der device-Name Punkte enthält, dann funktioniert das obige Flag scheinbar nicht. Wenn ich mein Device di_ui_TVOC nenne, dann wird der state nicht angezeigt.
Benenne ich es in di.ui.TVOC um, dann ist der state wieder da.
Muss ich mein FHEM-Device Namensschema anpassen, oder kann das im Modul gefixt werden?
Viele Grüße,
Frank
Ich vermute, dass das Problem auf der JS-Seite ist. Die Mechanismen dort müsste ich mir erstmal genauer anschauen, weil ich bisher dort keine Finger im Spiel hatte.
doif.js berücksichtigt https://wiki.fhem.de/wiki/Ger%C3%A4tename#Restriktionen
Wenn nur der Inhalt von state stört könnte man ihn mit überschreiben.
Ich würde einfach laut Namenskonvention alle Punkte in Devicenamen gegen Unterstriche ersetzen, dann ist man auf der sicheren Seite.
Hm. Von der Namenskonvention höre ich zum ersten Mal.
In den 5 Jahren die ich jetzt FHEM nutze hatte ich noch keine Probleme mit dem Punkt, fast alle meine Devices sind so formatiert.
@Ellert das mit dem state probiere ich aus.
Was anderes:
Ehe ich mir vergeblich Mühe gebe, kannst du bestätigen dass die Tabelle aus dem Screenshot unten nicht mittels Templates erzeugt wurde/erzeugt werden kann?
Zitat von: KyleK am 12 Mai 2021, 19:21:25
Was anderes:
Ehe ich mir vergeblich Mühe gebe, kannst du bestätigen dass die Tabelle aus dem Screenshot unten nicht mittels Templates erzeugt wurde/erzeugt werden kann?
Du kannst alles ohne Templates erstellen, genauso wie du alles ohne Funktionen programmieren kannst, dann musst du halt den gleichen Code wiederholen.
Falls es dich interessiert, so sieht der Code dazu aus:
defmod Klima DOIF (1)
attr Klima uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
$TABLE='text-align:center';;\
$ATTRIBUTESFIRST = 1;;\
}\
\
DEF TPL_raum (icon_temp_hum_ring([$1_Fenster:state] eq "closed" ? ([H_$1:state] eq "off" ? "fts_window_1w\@silver":"fts_window_1w\@white"):([H_$1:state] eq "off" ? "fts_window_1w_open\@lime":"fts_window_1w_open\@red"),[TH_$1_HM:measured-temp],[TH_$1_HM:humidity],undef,undef,130))\
\
icon_temp_temp_ring(([vaillant:Pumpenstatus] eq "4" ? "sani_buffer_temp_down\@white" : ([vaillant:Flame] eq "off" ? "sani_boiler_temp\@silver":"sani_boiler_temp\@white")),[vaillant:Vorlauf],[vaillant:WWSpeicher],15,70,130)|\
\
icon_temp_temp_ring(([Zirk] eq "off"?"sani_pump\@silver":"sani_pump\@white"),[vaillant:WWSpeicher],[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70,130)|\
\
icon_temp_temp_ring(([vaillant:Pumpenstatus] eq "on" ? "sani_floor_heating\@white" : "sani_floor_heating_neutral\@silver"),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,130)\
\
"Bad"|"Kind o."|"Kind w."\
TPL_raum (Bad)|TPL_raum (Kz_o)|TPL_raum (Kz_w)\
"DG_Zi."|"Wohnzi."|"Küche"\
TPL_raum (DG)|TPL_raum (WZ)|TPL_raum (Kueche)\
""|"Schlafzi."|"Werkzi."\
icon_uring ('0,0,1',"air\@silver",[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,'ppm',0,130,[(600,120,1000,60,1200,0)],"50,35,45,35,50,35")|TPL_raum (Keller)|TPL_raum (AKeller)
Um es kompakt zu halten, habe ich mir natürlich ein Template (TPL_raum) definiert.
Hier eine doif.js die Punkte im Namen tolerieren sollte.
Bitte mal testen, ob es Nebeneffekte gibt.
Ergänzend eine Info, warum Punkte in der Element-Id (die in FHEM den Gerätenamen beinhaltet) zu Problemen führen können https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
Edit: Anhang gelöscht, doif.js ab morgen im Update.
Zitat von: Ellert am 14 Mai 2021, 08:06:42
Hier eine doif.js die Punkte im Namen tolerieren sollte.
Bitte mal testen, ob es Nebeneffekte gibt.
Ergänzend eine Info, warum Punkte in der Element-Id (die in FHEM den Gerätenamen beinhaltet) zu Problemen führen können https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
Ich kann keine Nebeneffekte feststellen. $SHOWNOSTATE funktioniert jetzt auch bei Devices mit Punkten im Namen.
Vielen Dank für die Anpassung.
@Ellert, auf der Seite von Mozilla, die du verlinkt hat, steht aber dass der Punkt (neben - und _) in IDs erlaubt ist?
Zitat von: KyleK am 14 Mai 2021, 21:33:35
Vielen Dank für die Anpassung.
@Ellert, auf der Seite von Mozilla, die du verlinkt hat, steht aber dass der Punkt (neben - und _) in IDs erlaubt ist?
... aber auch "may cause compatibility problems", wenn z.B. FHEM eine ältere Version von jQuery nutzt.
Hallo, ich habe mal eine Frage zu der Funktion "Cylinder". Die Darstellung von Werten geht wohl immer von Startpunkt aus, also bei mir mit 0, was für meinen Darstellungswunsch nicht passt. Ich würde gerne den "Cylinder" so nutzen wollen, dass für mich - siehe Bild- die Werte nicht immer von 0 aus beginnen sondern aufeinander aufsetzen. Bedeutet bei 3 Werten: 1 wäre 1300, 2ter 400 und 3ter 800., somit würde "IST" der Wert 1 den 2ten und den 3ten überdecken. Mein Wunsch wäre die 1300 darauf die 400 usw. Den "max Wert" des "Cylinder" kann man dann nach seinen Erwartungen setzen. Natürlich könnte ich die Wert von "Klein" nach "Groß" sortieren, da sie aber dynamisch sind macht das keinen Sinn. Vielleicht gibt es diese Darstellung schon, dann "Sorry" muss ich wohl mehrfach überlesen haben. Schön wäre es auch, wenn der "max Wert" dynamisch wäre, z.B. mit der Addition der Werte, wie im Beispiel", mit wachsen würde. Das Bild zeigt nochmal mein Problem. Grüße und vielen Dank für die super Möglichkeiten der Darstellung durch uiTable.
Zitat von: myhome am 24 Juni 2022, 10:42:22
Hallo, ich habe mal eine Frage zu der Funktion "Cylinder". Die Darstellung von Werten geht wohl immer von Startpunkt aus, also bei mir mit 0, was für meinen Darstellungswunsch nicht passt. Ich würde gerne den "Cylinder" so nutzen wollen, dass für mich - siehe Bild- die Werte nicht immer von 0 aus beginnen sondern aufeinander aufsetzen. Bedeutet bei 3 Werten: 1 wäre 1300, 2ter 400 und 3ter 800., somit würde "IST" der Wert 1 den 2ten und den 3ten überdecken. Mein Wunsch wäre die 1300 darauf die 400 usw. Den "max Wert" des "Cylinder" kann man dann nach seinen Erwartungen setzen. Natürlich könnte ich die Wert von "Klein" nach "Groß" sortieren, da sie aber dynamisch sind macht das keinen Sinn. Vielleicht gibt es diese Darstellung schon, dann "Sorry" muss ich wohl mehrfach überlesen haben. Schön wäre es auch, wenn der "max Wert" dynamisch wäre, z.B. mit der Addition der Werte, wie im Beispiel", mit wachsen würde. Das Bild zeigt nochmal mein Problem. Grüße und vielen Dank für die super Möglichkeiten der Darstellung durch uiTable.
Der Wunsch ist nicht neu. Ich muss schauen, ob sich das mit vertretbarem Aufwand einbauen lässt.
HI, ich versuche seit Tagen diesem DOIF beizubringen, dass man auf das devStateIcon klicken und damit cmd_3 auslösen kann.
Kann man das dsi überhaupt klickbar machen?
Hier mal mein letzter Versuch von Vielen.
Kannst du mir bitte helfen, Damiean (oder jemand sonst)?
Vielen Dank im Voraus.
defmod DI_Rollo_laden DOIF ([01:00]) \
(setreading DU_ZV Rollos_laden {([DU_ZV:Rollos_laden]) + 1})\
DOELSEIF (([08:00-16:00,+02:00]) and [DU_ZV:Rollos_laden] >39)\
(say Rollos müssen geladen werden!)\
DOELSEIF ([$SELF] eq "on")\
(say "Es verbleiben 35 Tage bis zum erneuten Laden!", \
setreading DU_ZV Rollos_laden 0, \
set Siro_.* reset_motor_term, set $SELF off)\
DOELSE
attr DI_Rollo_laden cmdState on|on
attr DI_Rollo_laden devStateIcon {ui_Table::ring(40 - ReadingsNum("DU_ZV","Rollos_laden",0), 0, 40, 0, 40,"Tage", 100,undef, "0,font-size:120%,fill:silver;;;;font-size:50%","0,1,1")}
attr DI_Rollo_laden do always
attr DI_Rollo_laden fp_Schalter 436,655,1,Rollo laden
attr DI_Rollo_laden readingList mybutton
attr DI_Rollo_laden room Rollo
Hier noch List
Internals:
DEF ([01:00])
(setreading DU_ZV Rollos_laden {([DU_ZV:Rollos_laden]) + 1})
DOELSEIF (([08:00-16:00,+02:00]) and [DU_ZV:Rollos_laden] >39)
(say Rollos müssen geladen werden!)
DOELSEIF ([$SELF] eq "on")
(say "Es verbleiben 35 Tage bis zum erneuten Laden!",
setreading DU_ZV Rollos_laden 0,
set Siro_.* reset_motor_term, set $SELF off)
DOELSE
FUUID 5cd9559f-f33f-8098-c8d2-6aee5f65432ab171
MODEL FHEM
NAME DI_Rollo_laden
NOTIFYDEV DI_Rollo_laden,DU_ZV,global
NR 140
NTFY_ORDER 50-DI_Rollo_laden
STATE cmd_4
TYPE DOIF
VERSION 26159 2022-06-19 16:10:29
eventCount 44
READINGS:
2022-06-27 10:00:00 cmd 4
2022-06-27 10:00:00 cmd_event timer_4
2022-06-27 10:00:00 cmd_nr 4
2022-06-25 14:45:19 e_DI_Rollo_laden_STATE cmd_4
2022-06-25 14:45:15 mode enabled
2022-06-05 08:42:06 mybutton ein
2022-06-27 10:00:00 state cmd_4
2022-06-27 01:00:00 timer_01_c01 28.06.2022 01:00:00
2022-06-26 16:00:00 timer_02_c02 27.06.2022 08:00:00
2022-06-26 16:00:00 timer_03_c02 27.06.2022 16:00:00
2022-06-27 10:00:00 timer_04_c02 27.06.2022 12:00:00
Regex:
accu:
collect:
cond:
DI_Rollo_laden:
0:
1:
2:
&STATE ^DI_Rollo_laden$
DU_ZV:
1:
Rollos_laden ^DU_ZV$:^Rollos_laden:
attr:
cmdState:
0:
on
1:
on
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 (::DOIF_time($hash,1,2,$wday,$hms)) and ::ReadingValDoIf($hash,'DU_ZV','Rollos_laden') >39
2 ::InternalDoIf($hash,'DI_Rollo_laden','STATE') eq "on"
days:
do:
0:
0 setreading DU_ZV Rollos_laden {([DU_ZV:Rollos_laden]) + 1}
1:
0 say Rollos müssen geladen werden!
2:
0 say "Es verbleiben 35 Tage bis zum erneuten Laden!", setreading DU_ZV Rollos_laden 0, set Siro_.* reset_motor_term, set DI_Rollo_laden off
3:
0
helper:
NOTIFYDEV DI_Rollo_laden,DU_ZV,global
event timer_4
globalinit 1
last_timer 4
sleeptimer -1
timerdev
timerevent timer_4
triggerDev
timerevents:
timer_4
timereventsState:
timer_4
triggerEvents:
timer_4
triggerEventsState:
timer_4
internals:
all DI_Rollo_laden:STATE
interval:
1 -1
2 1
intervalfunc:
3 ::DOIF_time($hash,1,2,$wday,$hms)
intervaltimer:
1 3
2 3
localtime:
0 1656370800
1 1656309600
2 1656338400
3 1656324000
readings:
all DU_ZV:Rollos_laden
realtime:
0 01:00:00
1 08:00:00
2 16:00:00
3 12:00:00
time:
0 01:00:00
1 08:00:00
2 16:00:00
3 +02:00
timeCond:
0 0
1 1
2 1
3 1
timer:
0 0
1 0
2 0
3 0
timers:
0 0
1 1 2 3
trigger:
triggertime:
1656324000:
localtime 1656324000
hash:
1656338400:
localtime 1656338400
hash:
1656370800:
localtime 1656370800
hash:
uiState:
uiTable:
Attributes:
cmdState on|on
devStateIcon {ui_Table::ring(40 - ReadingsNum("DU_ZV","Rollos_laden",0), 0, 40, 0, 40,"Tage", 100,undef, "0,font-size:120%,fill:silver;;font-size:50%","0,1,1")}
do always
fp_Schalter 436,655,1,Rollo laden
readingList mybutton
room Rollo
Ring kann nur etwas anzeigen, reagiert aber nicht auf Klicken, dafür gibt es Widgets, die du verwenden kannst, siehe webCmd. Siehe Beispiele hier: https://wiki.fhem.de/wiki/DOIF/Ein-_und_Ausgabe_in_FHEMWEB_und_Tablet-UI_am_Beispiel_einer_Schaltuhr
Wenn du statt devStateIcon uiState benutzt, kannst du Widgets direkt nutzen, siehe:
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Schaltbares_Icon_mit_Hilfe_der_Funktion_switch
Hatte ich mir bereits angesehen und hielt es für nicht für mich brauchbar.
Ich wolte eine Zahl aus einem Dummy holen, was funktioniert. Die Anzeige des Restes funktioniert auch.
nun wollte ich eigentlich nur den Dummy zurücksetzen, indem ich auf den Ring klicke.
Schade, scheint nicht so zu funktionieren, wie ich möchte.
Trotzdem vielen Dank.
siehe: https://forum.fhem.de/index.php/topic,128224.msg1226435.html#msg1226435
uiTable mit card zeigt ganz schön viel mit wenigen Zeilen Code.
defmod PV3 DOIF {}
attr PV3 room Fronius
attr PV3 uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
}\
card([[myFronius:PowerFlow_Site_P_PV:col12],[myFronius:PowerFlow_Site_P_Load:col12],[myFronius:PowerFlow_Site_P_Grid:col12]],"W","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
Wie kann ich die Leistung W in kW darstellen. Hab einige Versuche unternommen - ohne Erfolg.
danke
Zitat von: Vorhand am 05 Oktober 2022, 12:15:14
uiTable mit card zeigt ganz schön viel mit wenigen Zeilen Code.
defmod PV3 DOIF {}
attr PV3 room Fronius
attr PV3 uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
}\
card([[myFronius:PowerFlow_Site_P_PV:col12],[myFronius:PowerFlow_Site_P_Load:col12],[myFronius:PowerFlow_Site_P_Grid:col12]],"W","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
Wie kann ich die Leistung W in kW darstellen. Hab einige Versuche unternommen - ohne Erfolg.
danke
Indem du deine Readings durch 1000 teilst.
z. B.
[myFronius:PowerFlow_Site_P_PV:col12]/1000
hab ich gemacht, geht noch nicht!
{
package ui_Table;
$SHOWNOSTATE=1;
}
card([[myFronius:PowerFlow_Site_P_PV:col12]/1000,[myFronius:PowerFlow_Site_P_Load:col12]/1000,[myFronius:PowerFlow_Site_P_Grid:col12]/1000],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
Zitat von: Vorhand am 05 Oktober 2022, 16:12:34
hab ich gemacht, geht noch nicht!
{
package ui_Table;
$SHOWNOSTATE=1;
}
card([[myFronius:PowerFlow_Site_P_PV:col12]/1000,[myFronius:PowerFlow_Site_P_Load:col12]/1000,[myFronius:PowerFlow_Site_P_Grid:col12]/1000],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
Ja, das stimmt, an der Stelle geht es tatsächlich nicht. Alternativ kannst du dir beim Sensor mit userreadings behelfen oder im DOIF-Modul DOIF_Readings nutzen.
meinst du so...
defmod PV2 DOIF {}
attr PV2 DOIF_Readings P_PV:[myFronius:PowerFlow_Site_P_PV]/1000,\
P_Load:[myFronius:PowerFlow_Site_P_Load]/1000,\
P_Grid:[myFronius:PowerFlow_Site_P_Grid]/1000
attr PV2 room DOIF,Fronius
attr PV2 uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
}\
card([[P_PV:col],[P_Load:col],[P_Grid:col]],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
geht nicht.
Zitat von: Vorhand am 05 Oktober 2022, 16:25:51
meinst du so...
defmod PV2 DOIF {}
attr PV2 DOIF_Readings P_PV:[myFronius:PowerFlow_Site_P_PV]/1000,\
P_Load:[myFronius:PowerFlow_Site_P_Load]/1000,\
P_Grid:[myFronius:PowerFlow_Site_P_Grid]/1000
attr PV2 room DOIF,Fronius
attr PV2 uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
}\
card([[P_PV:col],[P_Load:col],[P_Grid:col]],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Verbr","Über"],[(-1,0,0,30,1,60,3.6,90)],"2","167,,1,,,1",",,1,6")
geht nicht.
klar nicht, du musst schon noch das Device des Readings immer mit angeben:
[$SELF:P_PV:col]
genial
jetzt geht's
Danke
Grüße