neues Attribut: uiTable - DOIF User Interface, neues Attribut: DOIF_Readings

Begonnen von Damian, 07 Oktober 2017, 23:29:48

Vorheriges Thema - Nächstes Thema

the ratman

ZitatDu kannst in uiTable an beliebiger Stelle HTML-Elemente einbauen.
ich hab grad so ein komisches gefühl in der leistengegend *g*
super anfang!
→do↑p!dnʇs↓shit←

Damian

Ich will jetzt keinen abschrecken, aber Ellert hat schon etwas experimentiert:

defmod widgetkombi DOIF (1) ## HMsensor HMdummy
attr widgetkombi room DOIFalone2
attr widgetkombi uiTable {\
$TPL{style2}="text-align:right;;width:23px;;position:absolute;;left:13px;;top:26px;;font-weight:bold;;font-size:12px;;color:#";;\
$TPL{style3}="text-align:right;;width:23px;;position:absolute;;left:13px;;top:13px;;font-weight:bold;;font-size:12px;;color:#";;\
\
$TPL{knob1}="knob,thickness:.4,fgColor:#00A5FF,min:7,max:30,width:50,height:50,step:.5,angleArc:270,angleOffset:225,displayInput:false";;\
$TPL{knob2}="knob,thickness:.3,fgColor:#FFA500,min:7,max:30,width:50,height:50,step:.5,angleArc:270,angleOffset:225,displayInput:false";;\
\
}\
\
"<div style='position:relative;;width:50px;;height:50px'><div style='position:absolute;;left:0px;;top:0px'>".WID([TH_Bad_HM:measured-temp],$TPL{knob1},"set")."</div><div style='position:absolute;;left:0px;;top:0px'>".WID([TH_Bad_HM:desired-temp],$TPL{knob2},"set")."</div>".STY([TH_Bad_HM:measured-temp:d1],$TPL{style2}.DOIF_rgb("3052FF","FF0000",1,25,[TH_Bad_HM:measured-temp])).STY([TH_Bad_HM:desired-temp:d1],$TPL{style3}.DOIF_rgb("3052FF","FF0000",1,25,[TH_Bad_HM:desired-temp]))."</div>"


Das Ergebnis: ein zusammengesetztes Thermostat-Widget siehe Anhang :)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Damian am 22 Oktober 2017, 22:54:37
Ich will jetzt keinen abschrecken, aber Ellert hat schon etwas experimentiert:

Eine Erläuterung gibt es hier: https://wiki.fhem.de/wiki/DOIF/uiTable

Damian

#18
Zitat von: Ellert am 23 Oktober 2017, 08:28:01
Eine Erläuterung gibt es hier: https://wiki.fhem.de/wiki/DOIF/uiTable

Version 0.10 im ersten Post

Es lassen sich jetzt Template-Methoden für kompliziertere Widgets erstellen (hier am Beispiel der Template-Methoden: TPL_meins und TPL_Thermo)

Beispiel:

attr Test uiTable {
$SHOWNOSTATE=1;


$TPL{style2}="text-align:right;width:23px;position:absolute;left:13px;top:26px;font-weight:bold;font-size:12px;color:#";
$TPL{style3}="text-align:right;width:23px;position:absolute;left:13px;top:13px;font-weight:bold;font-size:12px;color:#";

$TPL{knob1}="knob,thickness:.4,fgColor:#00A5FF,min:7,max:30,width:50,height:50,step:.5,angleArc:270,angleOffset:225,displayInput:false";
$TPL{knob2}="knob,thickness:.3,fgColor:#FFA500,min:7,max:30,width:50,height:50,step:.5,angleArc:270,angleOffset:225,displayInput:false";


sub FUNC_temp
{
  my ($temp)=@_;
    return ("height:6pt;font-weight:bold;color:".DOIF_hsv ($temp,0,30,110,360,60,90));

}
sub FUNC_hum
{
    my ($hum)=@_;
    return ("height:0pt;font-weight:bold;color:".DOIF_hsv ($hum,50,90,40,264,60,90));
}
}

#Template-Methoden

DEF TPL_meins(STY($1." %",FUNC_hum($1)) ,STY($2."°",FUNC_temp($2)))
DEF TPL_Thermo("<div style='position:relative;;width:50px;;height:50px'><div style='position:absolute;;left:0px;;top:0px'>".WID($1,$TPL{knob1},"set")."</div><div style='position:absolute;;left:0px;;top:0px'>".WID($2,$TPL{knob2},"set")."</div>".STY($1,$TPL{style2}.DOIF_rgb("3052FF","FF0000",1,25,$1)).STY($2,$TPL{style3}.DOIF_rgb("3052FF","FF0000",1,25,$2))."</div>")

#Tabellendefinition

"Status"|
TPL_Thermo([TH_Bad_HM:measured-temp:d1],[TH_Bad_HM:desired-temp:d1]) |
TPL_meins([Aussensensor:humidity],[Aussensensor:temperature])


Edit: Doku im zweiten Post wurde um Template-Methoden erweitert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#19
Ich habe fertig. Version 0.11 im ersten Post mit Doku zu uiTable.

Wenn hier kein Feedback zur aktuellen Version kommt, werde ich sie in den nächsten Tagen nur nach eigenen Tests einchecken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#20
Ich habe noch eine Schippe drauf gelegt  (Version 0.13 im ersten Post). Man kann jetzt Templates aus Dateien importieren,  so lassen sich vordefinierte Templates in eigenen Layouts nutzen. Damit ist der Weg geebnet, Kreativität der Nutzer anderen zur Verfügung zu stellen. :)

P.S. doif.js ist inzwischen eingecheckt und muss nicht separat kopiert werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#21
Hier mal zur Motivation ein Beispiel für ein Solar-Template. Anforderung: ein selbstfärbendes Icon abhängig von der Solareinstrahlung mit Anzeige der Leistung.

Inhalt von solar.tpl

# Solar-Template
{
sub FUNC_solar_hsv
{
   my ($kw)=@_;
   return (DOIF_hsv ($kw,0,4,0,60,80,90));
}

sub FUNC_KW
{
    my ($kw)=@_;
    return ("font-weight:bold;font-size:10pt;color:".FUNC_solar_hsv($kw));
}
}
#Template-Methode
DEF TPL_solar(FW_makeImage("sani_solar\@".FUNC_solar_hsv($1)).STY($1." KW",FUNC_KW($1)))



Die Nutzung des Templates im uiTable-Attribut ist dann relativ einfach:


#import der Template-Datei
IMPORT ./contrib/DOIF/solar.tpl

#Tabellendefinition
TPL_solar([test_d:state:d1])


test_d ist hier ein Test-Dummy, der die Solar-Leistung beinhaltet (von 0 bis 4 KW).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

sag mal: nur aus interesse ...

hast du vor fürs doif ne art bedienoberfläche/vereinfachung/abhängkeitenanzeige zu basteln? jaja, hatte ich schon mal gefragt, aber diesmal ists nicht mehr als spaß, sondern als ernsthafte frage gemeint.
bei dem funktionsumfag und vor allem den vielen, vielen verknüpfungsmöglichkeiten wird das wiki zum doif bald die bibel an seitenzahl übertreffen und ich bin jetzt schon nur mehr am nachschlagen, weil man (oder zumindest ich) sich diese riesige menge an möglickeiten nicht wirklich merken kann.

du weißt: ich bin begeistert von dem, was du da auf die beine gestellt hast. aber langsam krieg ich angst *g*
→do↑p!dnʇs↓shit←

Damian

#23
ja, die Anforderung ist nicht neu. Allerdings wird man immer nur einen Teil des Funktionsumfangs abdecken können. DOIF arbeitet sehr nah an Perl, damit kommt es der Forderung nah, eine Benutzeroberfläche für eine Programmiersprache zu entwickeln.

Nicht umsonst programmieren auch heute noch viele mit Hilfe eines universellen Editors - warum wohl.

Ich habe mich erst mal darauf konzentriert, etwas mehr "Farbe ins Spiel" zu bringen und dabei flexibel zu bleiben. Ich glaube, das ist uns (Ellert war kräftig auf der js-Seite beschäftigt) gelungen, denn es bieten sich jetzt Möglichkeiten an, die man sonst nur mit dem Umstieg auf andere UI´s, die es mittlerweile in FHEM gibt, erreichen kann. Immerhin steckt da jetzt ca. ein halbes Jahr Entwicklung drin seit der Geburt der Idee hier: https://forum.fhem.de/index.php/topic,72072.msg636738.html#msg636738

Für eine DOIF-Bedienoberfläche bräuchten wir da bestimmt ein ganzes Jahr ;)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

ZitatAllerdings wird man immer nur einen Teil des Funktionsumfangs abdecken können.
vielleicht gar ned so blöd ...
fürs "grobe designen" und ein bissi hilfe, für die feinheiten dann handbetrieb. würde in meinen augen auch gleich animieren, mal mehr zu lernen und nicht schon beim lesen des wikis schweiß- und panikattacken zu kriegen *g*.

mir geht einfach nicht dieses "puzzlespiel" aus dem kopf. du erinnerst dich? man schiebt quasi teile zusammen. passen sie nicht, gehts auch nicht. wäre für das "grund doif" und tabellenerstellung im doif sicher ne super hilfe. wer mehr will schaltet um auf editior.
das gäbs ja sogar fertig, nur hab ich keinen dunst, wie groß der aufwand ist. ich glaube mich zu erinnern, dass hier mal einer meinte, dass zumindest das ganze fhem damit abzubilden übertriebener aufwand wäre. aber doif ... ?

und nur, damitst mich ned falsch verstehst: das ganze wäre ein "schön wärs". ich bin hier nur am "rumspinnen", sicher nicht am fordern oder unzufrieden sein.
→do↑p!dnʇs↓shit←

Damian

Wollen wir mal erstmal die neuen Features einchecken, dann schauen wir in die Zukunft. Ein paar gute Wiki-Tutorials, können für viele ebenfalls eine gute Starthilfe sein. Dass die Commandref eine vollständige Dokumentation mit Beispielen haben wird, ist ja selbstverständlich.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Der Finish naht. Im Anhang v0.14 mit DOIF_Readings: ressourcenschonend ohne FHEM-Events!

Auszug aus der Doku:

Erzeugen berechneter Readings

Mit Hilfe des Attributes DOIF_Readings können eigene Readings innerhalb des DOIF definiert werden, auf die man im selben DOIF-Moduls zugreifen kann. Die Nutzung ist insbesondere dann sinnvoll, wenn mehrfach die gleichen Berechnungen innerhalb eines DOIF-Modus vorgenommen werden sollen. DOIF_Readings-Berechnungen funktionieren ressourcenschonend ohne Erzeugung FHEM-Events nach außen. Änderungen dieser Readings triggern allerdings das eigene DOIF-Modul.

Syntax

attr <DOIF-Modul> DOIF_Readings <readingname1>:<definiton>, <readingname2>:<definition>,...

<definition>: Beliebiger Perlausdruck ergänzt um DOIF-Syntax in eckigen Klammern. Angaben in eckigen Klammern wirken triggernd und aktualisieren das definierte Reading.

Beispiel: Push-Mitteilung über die durchschnittliche Temperatur aller Zimmer

define di_temp DOIF ([$SELF:temperature]>20) (push "Die Durchschnittstemperatur ist höher als 20 Grad, sie beträgt [$SELF:temperature]")
DOELSE

attr di_temp DOIF_Readings temperature:[#average:d2:"":temperature]


Hierbei wird der aufwändig berechnete Durchschnittswert nur einmal berechnet, statt zwei mal, wenn man die Aggregationsfunktion direkt angeben würde.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Bugfix. V0.15 im ersten Post.

Hat denn jemand schon seine ersten Erfahrung mit den neuen Features gemacht?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ComputerZOO

Moin,
geht heute noch los (endlich Wochenende und Zeit dafür), ich habe da schon so einige Umstellungen im Kopf und werde mich hier bestimmt nochmal melden. Kurze Frage, muss die .pm im ersten Post noch umbenannt werden und damit dann die exierende überschrieben werden?

Damian

Zitat von: ComputerZOO am 03 November 2017, 19:38:17
Moin,
geht heute noch los (endlich Wochenende und Zeit dafür), ich habe da schon so einige Umstellungen im Kopf und werde mich hier bestimmt nochmal melden. Kurze Frage, muss die .pm im ersten Post noch umbenannt werden und damit dann die exierende überschrieben werden?

Klar. Vorher FHEM stoppen und danach neustarten - es haben sich einige Dinge intern geändert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF