SVG-uiTable-Funktionen (DOIF-Web-Interface)

Begonnen von Damian, 05 Mai 2020, 23:10:26

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Hmm mir ist grad eingefallen das das ja eigentlich nicht viel bringt, weil das Reading selbst ja da ist, aber nicht mehr geupdatet wird. Vielmehr müsste man stattdessen das Alter des Readings (ReadingsAge($name, $reading, $default);) übergeben und einen Schwellwert. Ich denke aber das man das besser als Perl Code hinterlegt und nicht im widget selbst. Da habe ich vorhin nicht genau drüber nachgedacht.

Ich denke mir da noch mal was aus...

Damian

Zitat von: mumpitzstuff am 27 Mai 2020, 21:39:52
Hmm mir ist grad eingefallen das das ja eigentlich nicht viel bringt, weil das Reading selbst ja da ist, aber nicht mehr geupdatet wird. Vielmehr müsste man stattdessen das Alter des Readings (ReadingsAge($name, $reading, $default);) übergeben und einen Schwellwert. Ich denke aber das man das besser als Perl Code hinterlegt und nicht im widget selbst. Da habe ich vorhin nicht genau drüber nachgedacht.

Ich denke mir da noch mal was aus...

Was ich machen wollte ist, Texte anzeigen statt 0.0, dann sieht man wenigstens, dass etwas nicht stimmt, ""  auf na umbiegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mumpitzstuff

{ui_Table::temp_hum_ring((ReadingsAge("$name","temperature",0) <= 21600 ? ReadingsVal("$name","temperature",0) : "na"),(ReadingsAge("$name","corrHumidity",0) <= 21600 ? ReadingsVal("$name","corrHumidity",0) : "na"))}

Wenn sowas gehen würde, wäre es super. Oder man kann undef übergeben und du setzt intern na als default.

BTW: Soll ich mal bei Rudi fragen ob man devStateIcon mal so umstellen kann, das sich ein Input Fenster öffnet und eine syntaktische Prüfung beim drücken von OK durchgeführt wird, so das der Dialog offen bleibt wenn man was falsch eingegeben hat. Die nur 3 cm lange Eingabemöglichkeit ist irgendwie nervig angesichts der recht langen Eingaben.

Damian

Zitat von: mumpitzstuff am 27 Mai 2020, 22:37:04
{ui_Table::temp_hum_ring((ReadingsAge("$name","temperature",0) <= 21600 ? ReadingsVal("$name","temperature",0) : "na"),(ReadingsAge("$name","corrHumidity",0) <= 21600 ? ReadingsVal("$name","corrHumidity",0) : "na"))}

Wenn sowas gehen würde, wäre es super. Oder man kann undef übergeben und du setzt intern na als default.

BTW: Soll ich mal bei Rudi fragen ob man devStateIcon mal so umstellen kann, das sich ein Input Fenster öffnet und eine syntaktische Prüfung beim drücken von OK durchgeführt wird, so das der Dialog offen bleibt wenn man was falsch eingegeben hat. Die nur 3 cm lange Eingabemöglichkeit ist irgendwie nervig angesichts der recht langen Eingaben.
Fragen kostet nichts. Ich habe in meiner Webinstanz das Attribut widgetOverride devStateIcon:textFieldNL-long gesetzt. Zusätzlich arbeite ich mit codemirror. Dann sieht die Sache schon viel besser aus
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Damian am 27 Mai 2020, 21:51:43
Was ich machen wollte ist, Texte anzeigen statt 0.0, dann sieht man wenigstens, dass etwas nicht stimmt, ""  auf na umbiegen.

neue Version wurde eingecheckt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mumpitzstuff

#35
Komme man irgendwie aus der uiTable heraus an $defs oder $FW_CSRF ran?

Ich würde gern innerhalb der Tabelle einen Link hinterlegen, um damit ein set Kommando an ein anderes Device zu schicken. Geht sowas irgendwie. Ich steh grad auf dem Schlauch und komme nicht drauf.

Mit der Funktion switch komme ich irgendwie auch nicht weiter, da diese das Icon immer in Abhängigkeit vom Reading setzen möchte. Ich bräuchte irgendwas wie:

set(device,icon,cmd)

Das schickt dann einfach nur ein set los, ohne sich darum zu kümmern was danach passiert. Ansonsten habe ich ein Problem, wenn sowas passiert:

set <device> abc
set <device> xyz
set <device> 0815

Spätestens beim 3ten set würde das Icon bei switch schlicht verschwinden, weil der Wert weder dem on noch dem off entspricht.

Damian

An globale Variablennamen wie z. B. $defs kommst du über die Angabe des main-package

$main::defs

einfacher

$::defs

Hinter der Perlfunktion switch im package ui_Table verbirgt sich das FHEM-Widget iconSwitch siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets

Das Widget iconSwitch stammt nicht von mir.

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

Ellert

Zitat von: mumpitzstuff am 19 Juni 2020, 00:36:31
Komme man irgendwie aus der uiTable heraus an $defs oder $FW_CSRF ran?

Ich würde gern innerhalb der Tabelle einen Link hinterlegen, um damit ein set Kommando an ein anderes Device zu schicken. Geht sowas irgendwie. Ich steh grad auf dem Schlauch und komme nicht drauf.

Mit der Funktion switch komme ich irgendwie auch nicht weiter, da diese das Icon immer in Abhängigkeit vom Reading setzen möchte. Ich bräuchte irgendwas wie:

set(device,icon,cmd)

Das schickt dann einfach nur ein set los, ohne sich darum zu kümmern was danach passiert. Ansonsten habe ich ein Problem, wenn sowas passiert:

set <device> abc
set <device> xyz
set <device> 0815

Spätestens beim 3ten set würde das Icon bei switch schlicht verschwinden, weil der Wert weder dem on noch dem off entspricht.

Hier gibt es ein Beispiel für den Befehl list https://wiki.fhem.de/wiki/DOIF/uiTable#FHEM-Befehl_mit_Icon_und_Text-Overlay


mumpitzstuff

Super. Danke für die Hinweise. Damit hat Teil eins geklappt.

Könnte man den Hinweis wie man Variablen anspricht vielleicht auch noch in der Doku aufnehmen? Da ist bisher nur von Funktionen die Rede und ich hatte dummerweise zuerst ::$defs anstatt $::defs probiert, was nicht geklappt hatte.

Was ich allerdings bisher nicht lösen konnte, ist die Abfrage, ob das DOIF aktuell durch FHEMWEB angezeigt wird oder nicht. Normalerweise geht sowas in einem Modul mit $hash->{CL}->{TYPE} eq 'FHEMWEB'. Ich hab verschiedene Varianten durchgespielt und bekomme diese Information leider nicht. Der Hintergrund ist, das man das DOIF anscheinend auch in FTUI einbinden kann und dann keine FHEMWEB Funktionen mehr aufgerufen werden können, wie z.B. FW_okDialog(). An dieser Stelle müsste ich stattdessen FTUI eigene Funktionen aufrufen. Fällt jemandem noch eine Möglichkeit ein raus zu bekommen, ob die Anzeige über FHEMWEB oder FTUI erfolgt?

Ellert

DOIF verwendet die Mechanismen von FHEMWEB. Die Bedienelemente sind daher FHEM-Widgets, diese fuktionieren in FTUI nicht. FHEMWEB(PGM2) und FTUI sind 2 verschiedene eigenständige Userinterfaces.

Es gibt nur die Möglichkeit per get <DOIFname> html unter Verwendung des FTUI-Widgets https://wiki.fhem.de/wiki/FTUI_Widget_Readingsgroup mit den genannten Einschränkungen,

Der Getter ist aus diesem Grunfd auch nicht dokumentiert.

mumpitzstuff

#40
Ich glaube das ist nicht mein Problem. Ich habe ein popup Dialog in einer uiTable definiert. Das funktioniert auch unter FHEMWEB. Ein anderer Anwender bindet das selbe DOIF in FTUI ein und dort geht das nicht. Warum das so ist, ist mir klar. Ich brauche eine Möglichkeit innerhalb der uiTable (im code) zu unterscheiden, ob das DOIF über FHEMWEB oder FTUI angezeigt wird. In Abhängigkeit davon könnte ich das Popup unterschiedlich machen, so das in beiden Oberflächen ein Popup angezeigt wird.

PS: Ich glaube der Anwender nimmt genau das von dir erwähnte Widget zu Anzeige des DOIF in FTUI.

Ellert

Wer beschreibt $hash->{CL}->{TYPE} und warum in diesem Fall nicht?

Vielleicht liefert die Beantwortung dieser Fragen eine Lösung.

ZitatFällt jemandem noch eine Möglichkeit ein raus zu bekommen, ob die Anzeige über FHEMWEB oder FTUI erfolgt?
Ich könnte mir auch vorstellen, dass im Head-Tag spezifische Attribute existieren, die einen Hinweis auf den aktuellen Client liefern.

mumpitzstuff

$SHOWNOSTATE = 1;

Funktioniert nur nach einem Reload der Seite. Wenn die uiTable Werte aktualisiert, dann erscheint der state wieder. Erst wenn man ein Reload der Page macht, dann ist der state wieder weg.

Ellert

Zitat von: mumpitzstuff am 24 Juni 2020, 23:23:26
$SHOWNOSTATE = 1;

Funktioniert nur nach einem Reload der Seite. Wenn die uiTable Werte aktualisiert, dann erscheint der state wieder. Erst wenn man ein Reload der Page macht, dann ist der state wieder weg.
Nimm $SHOWNODEVICELINE oder verhindere Events auf state, oder packe die uiTable in ein funktionsloses  DOIF oder setze state nicht in einem Perl-DOIF.

mumpitzstuff

Okay die ersten 3 Dinge kann ich tatsächlich ausprobieren, das 4te kann ich nicht machen, das setzt das DOIF selbst. Es sind diese cmd_x Dinge, die dort auftauchen, das wird intern vom DOIF gemacht.