Hauptmenü

uiTable - neue Funktionen

Begonnen von Damian, 06 Dezember 2019, 22:24:21

Vorheriges Thema - Nächstes Thema

Damian

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#33
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#34
Und so sieht es aus, wenn man mit den ganzen Gradienten experimentiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ComputerZOO

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ComputerZOO

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.

Damian

Ich schaue mal, was ich das für´s nächste Update einbauen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#39
hier mal kombinierte Temperatur/Feuchte wie sie aus vielen Sensoren kommt

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

Damian

Endspurt. Die letzten Widgets werden fertiggestellt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#41
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ComputerZOO

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.

Damian

Die Farbe kann nicht berechnet werden. Evtl. ist die Color.pm nicht aktuell.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ComputerZOO

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