Hauptmenü

[erledigt] uitable und der floorplan

Begonnen von the ratman, 16 September 2024, 10:21:04

Vorheriges Thema - Nächstes Thema

the ratman

grüß euch - im zuge meiner suche nach schönen visualisierungen, bin ich nun (wieder mal) am doif hängen geblieben.

folgendes doif würde ich gerne in einen floorplan einbauen:
defmod doif_gfx_umwelt DOIF {}
attr doif_gfx_umwelt alias umwelt
attr doif_gfx_umwelt fp_fp_wetter 10,18,2,temperaturen
attr doif_gfx_umwelt room frontend _test
attr doif_gfx_umwelt uiTable {package ui_Table;;}\
card([wohnzimmer_temperatur:temperature:col],"wohnzimmer","temp_outside",-10,60,undef,undef,"°C",\&temp_hue,"1","130,,,,",undef,undef,[wohnzimmer_temperatur:humidity:col],0,100,undef,undef,"%",\&hum_hue,"0")\
\
card([nordseite_temperatursensor:temperature:col],"aussen nord","temp_outside",-10,60,undef,undef,"°C",\&temp_hue,"1","130,,,,",undef,undef,[nordseite_temperatursensor:humidity:col],0,100,undef,undef,"%",\&hum_hue,"0")|\
card([terrasse_doppeltemperatur_hydro:temperature:col],"terrasse","temp_outside",-10,60,undef,undef,"°C",\&temp_hue,"1","130,,,,",undef,undef,[wetterstation:humidity:col],0,100,undef,undef,"%",\&hum_hue,"0")|\
card([wetterstation:temperature:col],"aussen süd","temp_outside",-10,60,undef,undef,"°C",\&temp_hue,"1","130,,,,",undef,undef,[wetterstation:humidity:col],0,100,undef,undef,"%",\&hum_hue,"0")
also eigentlich nur ein angepasster uitable aus der umfangreichen hilfe.

das dumme: im floorplan kommt dann nur ein "initialized", egal, was ich im floorplan an darstellungsarten auswähle.
ich wette ja, ich übersehe wieder mal nur eine kleinigkeit, oder geht die darstellung nicht im floorplan?

hilfe wäre willkommen *g*
→do↑p!dnʇs↓shit←

Damian

Wenn du deine Definition statt im Attribut uiTable im Attribut uiState definierst, wird deine Visualisierung im Status des DOIFs dargestellt und damit auch im Floorplan.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

wusst' ich's doch ... nur 'ne kleinigkeit.

danke dir fürs richten!
→do↑p!dnʇs↓shit←

the ratman

ich weiß, gleich werden hier augen verdreht *g*

wahrscheinlich wieder mal eine dumme frage:
ich baue nach deiner anleitung auf https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg die abfallanzeige nach.
das funzt auch soweit. allerdings stell' ich mir die frage, wie ich dem konstrukt nun einen hintergrund verpassen kann, sodass das ergebnis grafisch zu z.b der card-funktion passt.
alternativ: wie kann ich meine mülleimer in eine card kriegen?

{
  package ui_Table;
  $TC{0..5}="align='center'";
  $SHOWNOSTATE=1;
 
  sub ic
  {
    my ($icon,$days)=@_;
    icon_label($icon,$days,"white",$days eq "X" ? "#cccccc" : $days > 1 ? "#606060" : "red",30,-40)
  }
}
ic ("Abfalltonne\@gray",[$SELF:restmuell])|
ic ("Abfalltonne-Recycling-Logo\@green",[$SELF:altpapier])|
ic ("bag\@yellow",[$SELF:gelber_sack])|
ic ("Gartenabfall\@green",[$SELF:gruenschnitt])|
ic ("sperrmuell\@brown",[$SELF:sperrmuell])

vielen dank für die eventuelle hilfe!
→do↑p!dnʇs↓shit←

Damian

card ist speziell für Diagramme programmiert und kann nicht für diesen Zweck verwendet werden.

Du kannst dir einen Hintergrund als Grafik selber hinterlegen, siehe:

https://wiki.fhem.de/wiki/DOIF/uiTable#Frontendelemente_%C3%BCber_einem_Hintergrund_(Grundriss)_platzieren.

Beim Mülleimer-Beispiel würde dafür die Definition von $TABLE wie im obigen Beispiel schon reichen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

#5
danke dir - so weit war ich noch ned fortgeschritten *g*
einfach eine dumme hintergrundfarbe für den table geht nicht? wäre eventuell ne nette sache generell.

ha! eine höher auf deiner seite
$TD{0}{0..5}="style='background-color:#FF0000'"
funzt
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 18 September 2024, 19:32:15danke dir - so weit war ich noch ned fortgeschritten *g*
einfach eine dumme hintergrundfarbe für den table geht nicht? wäre eventuell ne nette sache generell.

ha! eine höher auf deiner seite
$TD{0}{0..5}="style='background-color:#FF0000'"
funzt

Es reicht alleine schon z. B.: 

$TABLE="text-align:center; width:300px; height:100px; background-color:#202020";
$TD Definition kannst dann weglassen, weil $TABLE für die ganze Tabelle gilt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

jau, is klar. langsam kapier' ich deine gedanken hinter der sache.
muss mich nur wieder mal böse rein fuchsen, nachdem ich vorher nicht weiß, welche lösungen es für meine problemchen überhaupt gibt.

der uitable ist echt extrem umfangreich. lob an dich und fluch für mich *lach*
→do↑p!dnʇs↓shit←

the ratman

#8
so, ich hoffe, ich nerv' jetzt zum letzen mal ... hat auch weniger mit deinem doif zu tun, aber vielleicht weißt du ja 'ne lösung?
derzeit bastel' ich gerade testweise an licht-schalten mit grundriss und bin da schon recht zufrieden.

mein problem ist diesmal: ich hab' einige alte, "nicht-ip" homematic taster. die brauchen nach dem schalten schon einige zeit, bis der neue zustand klar ist.
in deinem doif wird das zum problem, wenn man zu schnell wieder umschalten will. der zustand ändert sich nicht und ab dann kriegt das doif scheints gar nix mehr bei dem einen switch mit, bis ich die seite neu aufrufe. danach sucht er sich wohl den zustand des gerätes neu und es geht wieder alles.

zur sicherheit meine ersten versuche:
{ $TABLE = "text-align:center;width:500px; height:500px; background-image:url($FW_ME/www/handy/gfx/grundriss1920b.png); background-size: 100% 100%;";
  package ui_Table;
}

"<div style='position:absolute; left:60px; top:360px;'>sofa",switch([HM_1A9622_Dim:state],"light_light_dim_00","light_light_dim_100\@gold","off","on")."</div>
<div style='position:absolute; left:160px; top:360px;'>büro",switch([wohnzimmer_buero_licht_neu_Dim:state],"light_light_dim_00","light_light_dim_100\@gold","off","on")."</div>
"

NACHTRAG:
nun ein echtes problem ... der grundriss aus
{ $TABLE = "text-align:center;width:500px; height:500px; background-image:url($FW_ME/www/handy/gfx/grundriss1920b.png); background-size: 100% 100%;";
  package ui_Table;
}
verschwindet nach jedem restart von fhem (die icons bleiben). rufe ich das attr uistate auf und speichere einfach nochmal, ist der grundriss wieder da.
→do↑p!dnʇs↓shit←

Damian

1) Schau mal ob du die aktuelle FHEM-Version hast. IconSwitch-widget https://forum.fhem.de/index.php?topic=137598.msg1307955#msg1307955 auf dem die Funktion switch basiert hatte einen Bug und wurde im März 2024 gefixt.

2) Möglicherweise ist $FW_ME nach dem Neustart nicht belegt. Du könntest versuchen den Pfad zu deiner Grafik ohne die Variable komplett auszuschreiben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

1) fhem ist bei mir immer tagesaktuell. wie gesagt: auch in anderen fällen ist die anzeige des zustands bei den dimmern von hm ein wenig zäh. allerdings kann ich da zumindest einen 3. zustand anzeigen. somit drückt derweil hier keiner wild herum. da hätte ich bei deiner lösung derzeit nix gefunden - oder bin ich wieder mal nur blind?
ich hatte das im web immer mit
devStateIcon on:vent_ventilation@green off:vent_ventilation@red .*:edit_settings@orange"
gelöst".
wäre also die frage: wie krieg' ich .*:edit_settings@orange im doif untergebracht?

2) mit voller adresse scheint's zu funktionieren. zumindest 2 restarts hat der hintergrund mal weggesteckt.
wie immer auf den punkt *g*
danke dir!
→do↑p!dnʇs↓shit←

the ratman

#11
noch was gefunden, dass ich nicht lösen kann ...
ich möchte ein paar infos aus einem httpmod eintragen (egal, welches der 4 readings)
mache ich das [adv5mpro2:modell_simpel], wird zuerst das reading korrekt angezeigt, aber nach einem erneuten aufruf des httpmod kommt nur noch:
#FHEMWEB notification:
doifUpdateCell('doif_gfx_fabrik','doifId','doif_gfx_fabrik_uiState_c_0_1_0_1','links PLA 2h3m ','display:inline-table;')
SyntaxError: '' string literal contains an unescaped line break
eine readingsgroup frißt die readings anstandslos, so auch z.b. der rainmeter unter windows.

define adv5mpro2 HTTPMOD http://192.168.178.9:8899/command 35
attr adv5mpro2 alias die fabrik - infos
attr adv5mpro2 disable 0
attr adv5mpro2 enableControlSet 1
attr adv5mpro2 group 3d druck
attr adv5mpro2 httpVersion 1.1
attr adv5mpro2 icon 3d_printer
attr adv5mpro2 reading01Name modell
attr adv5mpro2 reading01Regex CurrentFile: (.*)
attr adv5mpro2 reading02Name mode
attr adv5mpro2 reading02Regex MoveMode: (.*)
attr adv5mpro2 reading04Name status
attr adv5mpro2 reading04Regex MachineStatus: (.*)
attr adv5mpro2 requestData ~M119
attr adv5mpro2 room computer
attr adv5mpro2 showBody 1
attr adv5mpro2 stateFormat <table>\
<tr>\
<td align="left">name: </td><td align="left">modell</td>\
</tr><tr>\
<td align="left">modus: </td><td align="left">mode</td></td>\
</tr><tr>\
<td align="left">zustand: </td><td align="left">status</td></td>\
</tr>\
</table>
attr adv5mpro2 timeout 35
attr adv5mpro2 userReadings modell_simpel { my $js = ReadingsVal($NAME,"modell",0);; $js=~s/.gcode//;; $js=~s/_/ /g;;$js;;}
#   BUSY       1
#   DEF        http://192.168.178.9:8899/command 35
#   FUUID      660192c2-f33f-f543-d3b0-a6beae783385d2e5
#   Interval   35
#   MainURL    http://192.168.178.9:8899/command
#   ModuleVersion 4.2.0 - 11.8.2023
#   NAME       adv5mpro2
#   NOTIFYDEV  global
#   NR         330
#   NTFY_ORDER 50-adv5mpro2
#   STATE      <table>
#<tr>
#<td align="left">name: </td><td align="left">links_PLA_2h3m.gcode
</td>
#</tr><tr>
#<td align="left">modus: </td><td align="left">MOVING
</td></td>
#</tr><tr>
#<td align="left">zustand: </td><td align="left">BUILDING_FROM_SD
</td></td>
#</tr>
#</table>
#   TYPE       HTTPMOD
#   eventCount 137
#   httpbody   CMD M119 Received.
#Endstop: X-max: 110 Y-max: 110 Z-min: 0
#MachineStatus: BUILDING_FROM_SD
#MoveMode: MOVING
#Status: S:1 L:0 J:0 F:0
#LED: 1
#CurrentFile: links_PLA_2h3m.gcode
#ok
#
#   value     
#   CompiledRegexes:
#   HttpUtils:
#     NAME      
#     addr       http://192.168.178.9:8899
#     auth       0
#     compress   1
#     conn      
#     data       ~M119
#     displayurl http://192.168.178.9:8899/command
#     header    
#     host       192.168.178.9
#     httpversion 1.1
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    8899
#     hu_portSfx :8899
#     ignoreredirects 1
#     loglevel   4
#     path       /command
#     protocol   http
#     redirects  0
#     timeout    35
#     url        http://192.168.178.9:8899/command
#     sslargs:
#   QUEUE:
#   READINGS:
#     2024-09-21 14:53:10   mode            MOVING
#     2024-09-21 14:53:10   modell          links_PLA_2h3m.gcode
#     2024-09-21 14:53:10   modell_simpel   links PLA 2h3m
#     2024-09-21 14:53:10   status          BUILDING_FROM_SD
#   REQUEST:
#     context    reading
#     data       ~M119
#     header    
#     ignoreredirects 0
#     num        unknown
#     retryCount 0
#     type       update
#     url        http://192.168.178.9:8899/command
#   defptr:
#     readingBase:
#       mode       reading
#       modell     reading
#       status     reading
#     readingNum:
#       mode       02
#       modell     01
#       status     04
#     readingOutdated:
#     requestReadings:
#       update:
#         mode       reading 02
#         modell     reading 01
#         status     reading 04
#
setstate adv5mpro2 <table>\
<tr>\
<td align="left">name: </td><td align="left">links_PLA_2h3m.gcode
</td>\
</tr><tr>\
<td align="left">modus: </td><td align="left">MOVING
</td></td>\
</tr><tr>\
<td align="left">zustand: </td><td align="left">BUILDING_FROM_SD
</td></td>\
</tr>\
</table>
setstate adv5mpro2 2024-09-21 14:53:10 mode MOVING
setstate adv5mpro2 2024-09-21 14:53:10 modell links_PLA_2h3m.gcode
setstate adv5mpro2 2024-09-21 14:53:10 modell_simpel links PLA 2h3m
setstate adv5mpro2 2024-09-21 14:53:10 status BUILDING_FROM_SD

→do↑p!dnʇs↓shit←

Damian

Ich vermute, dass irgendwelche Zeichen das Problem auslösen. Hier offenbar Zeilenumbruch.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

#13
jo, nur seh ich keinen - kann ich die - vielleicht testweise gleich in
attr adv5mpro2 userReadings modell_simpel { my $js = ReadingsVal($NAME,"modell",0);; $js=~s/.gcode//;; $js=~s/_/ /g;;$js;;}
für das eine reading auf verdacht herausfiltern? zeilenumbrüche können dann ja eigentlich eh nur am anfang oder ende des readings sein, denk' ich mal.

viel schlimmer - weils nicht nur mich selber im haushalt betrifft - ist allerdings aus beirag 10 die 1).
wie verhindere ich, dass vor dem neuen zustand jemand wie irre auf den button klopft und dann gar nix mehr passiert?
also z.b. - wie oben angedacht - ein 3. icon erscheint, wenn es keinen definierten zustand gibt?

---

ich denke aber mal, ich lag flasch, dass ichuitable für ein ganzes interface nenutzen könnte.
da mir aber z.b. deine card's gefallen folgende alternative frage:
kann ich bei den card_s hintergrundfarben anpassen?
→do↑p!dnʇs↓shit←

Damian

#14
Auf jeden Fall weiß ich, dass die Schnittstelle keine einfachen Hochkommas ' verträgt, vielleicht ist das der Auslöser für die Fehlermeldung.

uiTable unterstützt über die Funktion widget zumindest alle FHEM-widgets: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Vordefinierte_uiTable-Funktionen

ob das für dich reicht, musst du für dich beurteilen, mehr geht in der Standard-FHEM-UI auch nicht.

Die Funktion switch ist nur ein Aufruf von IconSwitch, dort kannst du schauen, was alles geht. Hier sind alle FHEM-Widgets aufgeführt: https://wiki.fhem.de/wiki/FHEMWEB/Widgets

Der dunkle Hintergrund von card ist für die farbigen Verläufe optimiert. Experimente mit anderen vor allem helleren Hintergründen waren nicht zufriedenstellend, daher ist die Änderung des Hintergrundes für Benutzer nicht vorgesehen.

Edit: Die Doku zu iconSwitch habe ich in der Commandref unter FHEMWEB gefunden:

ZitaticonSwitch,[class<classname>@]<reference value>,[<icon>][@<color>][,<reference value>,[<icon>][@<color>]]... - schaltet zyklisch nach jeder Betätigung in den angezeigten Zustand, dabei wird der aktuelle Wert auf den Vergleichswert gesetzt. Ein Zustand wird durch ein Parameterpaar beschrieben. Es können beliebig viele Paare angegeben werden. Ein Paar besteht aus einem Vergleichswert <reference value> und einem optionalen Anzeigewert mit optionaler mit Farbangabe [,<reference value>,[<icon>][@<color>]].
<reference value> kann eine Zahl oder eine Zeichenkette sein.
Wenn <icon> keinem Iconnamen entspricht, wird der Text angezeigt, sonst das Icon. Wird <icon> nicht angegeben, wird der Vergleichwert angezeigt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF