Hauptmenü

uiTable export des raw HTML

Begonnen von bstaeheli, 15 November 2023, 11:17:26

Vorheriges Thema - Nächstes Thema

bstaeheli

Hallo Damian,

gibt es eine Möglichkeit das erzeugte HTML beim uiTable sich irgendwie zu holen bzw. als raw String in ein Reading zwischen zu speichern? Wir würden die HTML-Tabelle gerne mittels Fronthem an smartvisu weiterreichen, um eine Ubersicht über alle Batteriezustände unserer Sensoren zu haben.

Beste Grüße

Boris

Damian

Zitat von: bstaeheli am 15 November 2023, 11:17:26Hallo Damian,

gibt es eine Möglichkeit das erzeugte HTML beim uiTable sich irgendwie zu holen bzw. als raw String in ein Reading zwischen zu speichern? Wir würden die HTML-Tabelle gerne mittels Fronthem an smartvisu weiterreichen, um eine Ubersicht über alle Batteriezustände unserer Sensoren zu haben.

Beste Grüße

Boris

In uiTable gibt es verschiedene Funktionen für die Visualisierung wie z. B. ring oder card.

Ring kann man einfach aus dem ui_Table-package mit einem Reading aufrufen, dann erhält man den HTML-Code. card dagegen sammelt Daten für die Visualisierung, das funktioniert nur innerhalb eines DOIFs, hier und davor https://forum.fhem.de/index.php?topic=129898.msg1241987#msg1241987 wurden verschiede Ansätze diskutiert, wie man die Ausgabe in anderen Frontends nutzen kann.

Man kann ebenfalls die ganze Tabelle im Status eines DOIFs darstellen. Dazu nutzt man das Attribut uiState statt uiTable. Den erzeugten HTML-Code im Status kann man woanders darstellen.



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

bstaeheli

Vielen Dank für die Anregung mit uiState zu arbeiten. Ich dachte, das wäre die Lösung. Leider geht es bei mir nicht. Ich erstelle nur eine Tabelle, die wird auch in der UI angezeigt (jetzt oben in der Statuszeile des DOIFs). Allerdings sind der state sowohl als internal als auch als reading auf "initialized" gesetzt (auch nachdem das DOIF ausgeführt wurde). Folglich bekomme ich in Smartvisu per fronthem auch nur den Wert "initialized" zu sehen und nicht die HTML Tabelle. Gibt es eine Möglichkeit uiTable von Hand für ein Gerät auszuführen und man erhält das HTML als String zurück?

Damian

Zitat von: bstaeheli am 16 November 2023, 21:18:53Vielen Dank für die Anregung mit uiState zu arbeiten. Ich dachte, das wäre die Lösung. Leider geht es bei mir nicht. Ich erstelle nur eine Tabelle, die wird auch in der UI angezeigt (jetzt oben in der Statuszeile des DOIFs). Allerdings sind der state sowohl als internal als auch als reading auf "initialized" gesetzt (auch nachdem das DOIF ausgeführt wurde). Folglich bekomme ich in Smartvisu per fronthem auch nur den Wert "initialized" zu sehen und nicht die HTML Tabelle. Gibt es eine Möglichkeit uiTable von Hand für ein Gerät auszuführen und man erhält das HTML als String zurück?

Floorplan kommt wohl damit zurecht. Sonst bleibt nur noch die Möglichkeit einzelne Funktionen als Visualisierungselemente zu nutzen. Die ganze Tabelle wird ja im DOIF eventbasiert ständig aktualisiert, daher sollte auch der Zugriff darauf eventbasiert sein, ansonsten hätte man nicht den aktuellen Stand der Tabelle.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bstaeheli

#4
Ich bin mit smartvisu und der damit einhergehenden fronthem Schnittstelle recht zufrieden und wechsle davon nicht so schnell weg. Ich hätte mir etwas mehr Unterstützung gewünscht, wie und ob man die Funktion DOIF_RegisterEvalAll in 98_DOIF von außen (bzw. in meinem DOIF) aufrufen hätte können. Nachdem ich zu viel Zeit mit erfolglosem Reverse Engineering verbracht habe, habe ich lieber eine eigene Funktion im DOIF geschrieben, die in den jeweiligen Triggern aufgerufen wird.

sub x63e27ec2_createSmartvisuHTMLTable {

  my $tableStyle = "width:1000px;;";
  my $trStyle = "style='font-weight:bold;;'";
  my $tdStyle = "style='padding-left: 2px;; padding-right: 2px;; text-align:left;;'";
 
  my $result = "<table $tableStyle>";

  foreach my $current (@{$_bw}) {
 
my ($id, $geraet, $reading, $wertOK, $readingActivityCheck, $daysOfInactivityTolerated, $pushNotificationSend) = @{$current};


my $readingsValueBattery = ::ReadingsVal("$SELF",$id."_statusBattery","na");
my $readingsValueActivity = ::ReadingsVal("$SELF",$id."_statusActivity","na");

my $batterySymbol = $reading eq "undef"?" ":$readingsValueBattery eq "ok"?"🔋":$readingsValueBattery eq "na"?"❔":"❌";
my $activitySymbol = $readingsValueActivity eq "ok"?"✅":$readingsValueActivity eq "na"?"❔":"⚠️";


if (($readingsValueBattery ne "ok" and $reading ne "undef") || $readingsValueActivity ne "ok") {
$result = $result . "<tr $trStyle><td $tdStyle>$geraet</td><td $tdStyle>$batterySymbol</td><td $tdStyle>$activitySymbol</td></tr>";
}


  }
  $result = $result . "</table>";
 
  fhem("sleep .1; setreading $SELF html $result");

}

Sieht dann am Ende so aus:

Du darfst diesen Dateianhang nicht ansehen.

Adimarantis

Ich hatte da vor einiger Zeit eine Funktion gebaut, mit der ich uiTable als komplette SVG extrahiere und dann per Signalbot verschicke - oder eben in FTUI3 darstellen kann.
Siehe https://forum.fhem.de/index.php?topic=129898
Vielleicht in diesem Zusammenhang auch interessant.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Ellert

Mit
{"<html>".fhem("get <doifname> html", 1)."</html>"}in der Befehlszeile bekommt man die komplette uiTable angezeigt.

Damian

Zitat von: Ellert am 06 Dezember 2023, 13:02:46Mit
{"<html>".fhem("get <doifname> html", 1)."</html>"}in der Befehlszeile bekommt man die komplette uiTable angezeigt.

Diese Option habe ich schon verdrängt, vielleicht deswegen, weil du sie eingebaut hast :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert


Damian

Zitat von: Ellert am 07 Dezember 2023, 19:18:31Ja, es ist sogar in der Befehlsreferenz dokumentiert  ;) https://commandref.fhem.de/commandref_DE.html#HTML-Code%20von%20uiTable

ja, das habe ich gesehen, wahrscheinlich lese ich die Doku zu DOIF zu selten ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF