[Gelöst] Data-Items werden ständig erneuert

Begonnen von manne44, 22 Oktober 2019, 05:16:18

Vorheriges Thema - Nächstes Thema

manne44

Hallo,
ich lese ein Directory ein, sortiere es und schreibe eine HTML-Datei, in der mit select eine dieser Dateien ausgewählt werden kann. Dazu wird bei jedem neuen Einlesen des Directories die ganze Datei neu geschrieben wobei nur "data-items" immer wieder aktualisiert wird. Eine bessere Lösung ist mir nicht eingefallen.
Problem ist, dass die neue Datei immer nur dann in der Oberfläche angezeigt wird, wenn man mit F12 den Buffer des Browsers Chrome gelöscht hat. Ich weiß nicht worauf ich hier triggern soll, damit ein Update ausgelöst wird, denn es gibt erst einmal kein neues Reading.


<div data-type="select"
data-device="logDir"
class="top-space orange"
data-items='["tracking-2019-10-20.log","tracking-2019-10-21.log","tracking-2019-10-22.log"]'>
</div>


Mit dieser Include-Anweisung wird das Select angezeigt.


<div data-type="include" data-url="dir_select.html" data-parameter='{}'></div>


Geht allles tadellos, nur erfolgt keine Aktualisierung, was mir auch klar ist, aber ich weiß nicht, wie ich das hin bekommen kann.
Vielen Dank schon mal.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

Thorsten Pferdekaemper

Hi,
der "übliche" Trick bei solchen Sachen ist glaube ich, die URL eindeutig zu machen. Also in etwa

div data-type="include" data-url="dir_select.html?time=<aktuelle Uhrzeit>" data-parameter='{}'></div>

...oder sowas.
Dummerweise musst Du dann halt auch die übergeordnete Datei generieren. ...und dann kannst Du das mit dem Include auch gleich sein lassen.
...oder Du machst Dir Deine eigene Version des include-Widgets, das per Ajax mit  "cache: false" den Cache abschaltet.
...oder Du schaltest den Cache komplett ab mit

$.ajaxSetup({ cache: false });

...irgendwo am Anfang. Dann könnte aber alles etwas langsam werden.
Gruß,
   Thorsten

FUIP

manne44

#2
@ Thorsten Pferdekaemper
Vielen Dank, aber ich kann alles außer C++ nur rudimentär und bin aus dem Stand nicht in der Lage mir irgendwelche Widgets zu bauen. Wenn ich das könnte, dann würde ich mir ein eigenes Widget "select" bauen, das beim Druck auf den Auswahlbutton die Funktion aufruft, die das Directory liest, ordnet, sortiert und das html-File schreibt und dann das ganze zur Auswahl anbieten. Aber das kann ich nicht und muss Klimmzüge machen.
Vielleicht fällt Dir noch mehr ein.
Einen Erfolg habe ich schon mal, der zwar das Grundproblem nicht löst, aber step to step ...
Damit die Änderung des html-files ohne "Zutun" erfolgt, nutze ich inotify, das das Verzeichnis überwacht und bei jeder Änderung dort das Verzeichnis neu einliest.

Internals:
   CFGFN     
   DEF        /opt/fhem/log tracking.*
   FD         36
   FILES      tracking.*
   MID        inotify_optfhemlogtracking
   NAME       tracking_inotify
   NOTIFYDEV  global
   NR         143809
   NTFY_ORDER 81-inotify
   PATH       /opt/fhem/log
   STATE      active
   TYPE       inotify
   VERSION    0.6.1
   READINGS:
     2019-10-22 17:38:30   lastEventFile   /opt/fhem/log/tracking-2019-10-17.log
     2019-10-22 17:38:30   lastEventMask   IN_CREATE
     2019-10-22 15:32:20   state           active
   helper:
     dirs:
       /opt/fhem/log
     events:
       0:
         file       /opt/fhem/log/tracking-2019-10-17.log
         mask       IN_CREATE
         time       2019-10-22 17:38:30
       1:
         file       /opt/fhem/log/tracking-2019-10-17.log
         mask       IN_DELETE
         time       2019-10-22 17:37:18
       2:
       3:
       4:
       5:
       6:
       7:
       8:
     masks:
       IN_CREATE
       IN_DELETE
Attributes:
   DbLogExclude .*
   mask       IN_CREATE,IN_DELETE
   room       Presence,System

In einem DOIF wird dann auf lastEventFile getriggert und das Verzeichnis neu eingelesen und die html-Datei geschrieben, die leider (noch) nicht in FTUI aktualisiert wird.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

Thorsten Pferdekaemper

Hi,
Dir geht's doch eigentlich nur um die Auswahloptionen, oder? Dann könntest Du auch mit data-list arbeiten und die Optionen in ein Reading schreiben.
Gruß,
  Thorsten
FUIP

manne44

@ Thorsten Pferdekaemper
Vielen Dank Thorsten, das mit "data-list" hatte ich einfach überlesen. Funktioniert nun genau so, wie ich mir das dachte und ist etwas einfacher.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm