FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Det20 am 29 September 2022, 08:13:46

Titel: FTUI3: Daten manuell aktualisieren [Erledigt]
Beitrag von: Det20 am 29 September 2022, 08:13:46
Hallo,

ich habe hin und wieder das Problem, dass einige Controls wie "ftui-switch" auf dem Tab nicht korrekt aktualisiert werden. Ich muss dann die Seite mehrmals neu laden, damit die Controls korrekt aktualisiert und die Daten angezeigt werden. Das Phänomen ist, dass es nicht alles betrifft, Labels sind oftmals korrekt, aber auch nicht immer. Das alles passiert nur sporadisch, aber immerhin 3-4 mal die Woche.

Kann ich die aktualisierung irgendwie händisch aufrufen? Wie ein Refresh Button, der dann die Daten nochmals abruft und die Controls aktualisiert oder ein (JavaScript) Timer, der das sicherheitshalber alle 15 Minuten macht?

PS: Bitte nicht wieder eine 'dann läuft was in deinem Netzwerk falsch' Diskussion.
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 29 September 2022, 10:04:21
Würdet ihr die Suchfunktion im Haupthread benutzen, dann brauch man auch nicht immer gleich ein neues Thema erstellen.
Erster Treffer in der Sufu mit Refresh:
https://forum.fhem.de/index.php/topic,115259.msg1233412/topicseen.html#msg1233412

Anders wird es nicht gehen...
LG
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 29 September 2022, 11:04:25
Also tatsächlich nur durch Refresh der Seite? Schade, aber trotzdem vielen Dank
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 29 September 2022, 11:13:29
Es geht sicherlich auch mit einem Interval (timer)...
Aber wieder nur auf ein Device und mit extra js. Wird aber dabei wieder sehr Ressourcenlastig (soviel javascript)...
Ich denke, wenn die einzelnen Seiten überladen sind mit Komponenten, kommt es zu solchen Fehlern.
Einfach mal das entsprechende Device:Reading separat (irgendwo anders) laufen lassen und beobachten.
Oder das entsprechende Device mal beobachten ob es Readings/Events bekommt:

<script>
  setInterval(
    () => myout.innerText =
      ftuiApp.fhemService.getReadingItem('AussenTemp:temperature').data.time,
      //ftuiApp.fhemService.getReadingItem('AussenTemp:temperature').data.update,
    6000
  );
</script>
<div id="myout">Timestamp von Fhem</div>

AussenTemp:temperature durch dein Device ersetzen...

stammt von hier:
https://forum.fhem.de/index.php/topic,115259.msg1190823.html#msg1190823

Edit. OK mit:

ftuiApp.fhemService.getReadingItem('Device').data.value

holst du das value...

LG
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 29 September 2022, 17:23:11
Hierüber werden Controls, die nicht aktualisiert wurden, nachträglich aktualisiert.
Rufe einfach die function main aus der ftui.js auf; funktioniert :)


<ftui-icon class="size-1" name="refresh" @click="javascript:main();"></ftui-icon>
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 29 September 2022, 17:55:29
Ok, ich würde trotzdem eine Ursachenforschung betreiben an deiner Stelle. Irgendeinen Grund muss es ja bei dir geben???
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 29 September 2022, 17:57:06
Habe schon recht viele controls, teilweise für dieselben Devices, nur halt einmal visible, einmal invisible. Dazu jede Menge popups und Charts. Denke, die startup Zeit reicht reicht manchmal nicht aus.
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: setstate am 29 September 2022, 22:06:46

      <ftui-view-toolbar>My Home
        <ftui-row slot="end" width="6em">
          <ftui-label [text]="ftui:lastEvent:time | toDate() | format('hh:mm:ss')" color="primary" size="1">
          </ftui-label>
          <ftui-icon name="refresh" color="primary" size="-2" @click="forceRefresh()"></ftui-icon>
        </ftui-row>
      </ftui-view-toolbar>
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 30 September 2022, 07:43:45
Danke dir. Laut Label wird regelmäßig aktualisiert, die switches sind trotzdem nicht aktuell. Muss mal schauen, ob die Event-Handler von main() und "readystatechange" korrekt gesetzt werden, das wäre noch eine Idee.

Hinterher bekomme ich sie mit "forceRefresh" nicht aktualisiert, nur mit "javascript:main()". Ich denke ich mache einen Timer, der 10 Sekunden nach Seitenaufbau die "main()" nochmal aufruft. Oder alle 30 Minuten. Schaden kann es, wenn ich mir die main() so anschaue, ja eigentlich nicht, oder was meinst du?
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 30 September 2022, 09:54:20
Bei mir geht es nur so mit vorangesetzten fhemService:

<ftui-icon name="refresh" color="primary" size="-2" @click="fhemService.forceRefresh()"></ftui-icon>

oder:

<ftui-icon name="refresh" color="primary" size="-2" @click="ftuiApp.fhemService.forceRefresh()"></ftui-icon>


Edit:
Zur Kontrolle kannst du für dein Device auch mal ein label mit der UpdateTime anzeigen lassen:

<ftui-label [text]="Device | ()=>fhemService.getReadingItem('Device').data.update | toDate() | format('DD.MM. - hh:mm:ss')" color="primary" size="1">

2xDevice durch deins ersetzen...

LG
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 30 September 2022, 19:06:52
Ja, mit refresforce klappt es, sieht mir eleganter aus als die interne Main  :)
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 30 September 2022, 19:31:43
Zitat von: Det20 am 30 September 2022, 07:43:45
Danke dir. Laut Label wird regelmäßig aktualisiert, die switches sind trotzdem nicht aktuell.
.....
Zeige mal eine Definition vom switch und was für Readingvalues kommen sollen...
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 01 Oktober 2022, 22:18:41
Nix wildes an sich, nur halt jede Menge davon:


<ftui-view-item [disabled]="Wallbox.Modus | isNot('Manuell')">
  <div class="cell">
   <ftui-label size=3>Wallbox</ftui-label>
   <ftui-label [text]="Wallbox.Modus | replace('_', ' ')" unit=")">(</ftui-label>
  </div>
  <ftui-switch [value]="Wallbox:reportedState" (value)="set Wallbox $value"></ftui-switch>
</ftui-view-item>


Wallbox.Modus ist


defmod Wallbox.Modus dummy
attr Wallbox.Modus readingList state
attr Wallbox.Modus setList state:Manuell,Immer_An,Immer_Aus,wenn_PV-Strom,wenn_1KW
attr Wallbox.Modus webCmd state


Habe im Header der index.html direkt testhalber geschrieben, damit es in jedem Fall aufgerufen wird:


  function refreshData()
{
  fhemService.forceRefresh();
}

  setTimeout(refreshData, 10000);


Klappt leider nicht, wird nicht ausgeführt, über einen Button aber schon. Hast du eine Idee, wieso?
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: mr_petz am 02 Oktober 2022, 08:32:37
Zitat von: Det20 am 01 Oktober 2022, 22:18:41
Nix wildes an sich, nur halt jede Menge davon:


<ftui-view-item [disabled]="Wallbox.Modus | isNot('Manuell')">
  <div class="cell">
   <ftui-label size=3>Wallbox</ftui-label>
   <ftui-label [text]="Wallbox.Modus | replace('_', ' ')" unit=")">(</ftui-label>
  </div>
  <ftui-switch [value]="Wallbox:reportedState" (value)="set Wallbox $value"></ftui-switch>
</ftui-view-item>


Hier muss von deinem Wallbox:reportedState ausschließlich on oder off kommen (alles andere wird vom switch ignoriert). Ansonsten states angeben.
Was ich hier nicht verstehe ist, du liest von Wallbox:reportedState das value und schreibst in den state von Wallbox dieses value.?
Des Weiteren ist

(value)="set Wallbox $value"

das gleiche wie:

(value)="Wallbox"

Zumindest wenn on und/oder off kommen. Ich denke bei dir soll was anderes kommen? Und /oder ein anderes Device drin stehen??? Ansonsten musst du die states mit angeben, da sonst der switch nicht weis welchen Zustand er hat.
Hier passt was nicht???


Zitat
...

Habe im Header der index.html direkt testhalber geschrieben, damit es in jedem Fall aufgerufen wird:


  function refreshData()
{
  fhemService.forceRefresh();
}

  setTimeout(refreshData, 10000);


Klappt leider nicht, wird nicht ausgeführt, über einen Button aber schon. Hast du eine Idee, wieso?

Hier wie oben gezeigt für header so:

<script>
  setInterval(
    () => ftuiApp.fhemService.forceRefresh(),
    10000
  );
</script>

Du möchtest ja einen interval statt timeout.

LG mr_petz
Titel: Antw:FTUI3: Daten manuell aktualisieren
Beitrag von: Det20 am 04 Oktober 2022, 21:37:05
Hi,

Zitat von: mr_petz
Hier muss von deinem Wallbox:reportedState ausschließlich on oder off kommen (alles andere wird vom switch ignoriert). Ansonsten states angeben.
Was ich hier nicht verstehe ist, du liest von Wallbox:reportedState das value und schreibst in den state von Wallbox dieses value.?

Yap. Weil state manchmal nicht den wirklichen Wert enthält, der ist in reportedState enthalten. On/Off geht jedoch über state und nicht reportedState.
Position (on/off) basiert auf reportedState, gesetzt wird aber state.

Zitat von: mr_petz
Des Weiteren ist

(value)="set Wallbox $value"

das gleiche wie:

(value)="Wallbox"


Ok, habe ich angepasst.

Zitat von: mr_petz
Hier wie oben gezeigt für header so:

<script>
  setInterval(
    () => ftuiApp.fhemService.forceRefresh(),
    10000
  );
</script>

Du möchtest ja einen interval statt timeout.

LG mr_petz

Funktioniert leider nicht. Da es aber über den Refresh-Button funktioniert (der letztendlich dieselbe Funktion aufruft), passt das für mich.

VG