Schleifen in ftui-code

Begonnen von Marko1976, 08 August 2025, 23:31:56

Vorheriges Thema - Nächstes Thema

Marko1976

Hallo, kann mir jemand sagen ob es möglich ist in einem ftui-code eine Schleife einzubauen. Für ein ftui-content müsste ich ja dennoch für jedes mögliche Element einen Aufruf auf ein Tempate und den jeweiligen Namen angeben.

Es geht um Auflistungen verschiedener Elemente wie z.b. offene Fenster/Türen, wo man im Vorfeld aber nicht weiß wie viele Fenster/Türen geöffnet sind, aber alle gelistet haben möchte.
Am besten wäre ein for-each, so dass man nur einmal den Code schreiben muss.

juemuc

#1
Hi,

FTUI(3) ist für die Darstellung von Inhalten gedacht. Die Ermittlung der Daten sollte/muss in FHEM erfolgen.

Was Du möchtest, kann mit einem DOIF realisiert werden. Schaue dort einmal nach. Da gibt es Beispiele.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Guybrush

ich denke er meinte schon die Darstellung. Es gibt ja viele Sachen, die man gut über Templates darstellen kann, aber diese dann zig mal hintereinander in den code packen muss, wo sich nur der devicename dann zb ändert. sowas per schleife machen zu können wäre daher schon nicht verkehrt um den code schlanker halten zu können. wäre vor allem interessant, für devices mit filter, die eine unbekannten anzahl an treffern liefert

Marko1976

Genau das meinte ich.

Beispiel Batterien, alle sing gleich aufgebaut vom Namen und den Readings, ich weiß aber nicht welche und vor allen Dingen wie viele schlecht/unzureichend sind.

Aktuell müsste ich für jedes Batteriebetriebene Device einen Verweis  auf ein Template erstellen und dann wieder künstlich die wo die Batterie noch gut mit hidden ausblenden.

Das ist doch sehr aufwändig und unnötiger Code wenn man eine Schleife bauen könnte.

Nobbynews

Na ja, Batterien habe ich über readingsGroup zusammengefasst:
Zitatdefmod rg_battery readingsGroup .*:(battery|batteryVoltage)
Die Auswertung erfolgt einmal täglich über ein at:
define at_Batteriewarnung at *07:10 {\
  my @devs = devspec2array("battery=low,batteryPercent<=10");;\
  if (@devs) {\
   my $string = join(", ",@devs);;\
   $string =~ s/_/-/ig;;\
   fhem ("set mySignal send \@TabletNorbert \@HandyNorbert Batterie leer: $string");;\
  }\
}\

attr at_Batteriewarnung room Batterien
#   COMMAND    {
#  my @devs = devspec2array("battery=low,batteryPercent<=10");
#  if (@devs) {
#   my $string = join(", ",@devs);
#   $string =~ s/_/-/ig;
#   fhem ("set mySignal send \@TabletNorbert \@HandyNorbert Batterie leer: $string");
#  }
#}
#
#   DEF        *07:10 {
#  my @devs = devspec2array("battery=low,batteryPercent<=10");
#  if (@devs) {
#   my $string = join(", ",@devs);
#   $string =~ s/_/-/ig;
#   fhem ("set mySignal send \@TabletNorbert \@HandyNorbert Batterie leer: $string");
#  }
#}
#
#   FUUID      606946d3-f33f-8873-c575-8aa5bfc616f41840
#   FVERSION   90_at.pm:0.287110/2024-03-27
#   NAME       at_Batteriewarnung
#   NR         497
#   PERIODIC   yes
#   RELATIVE   no
#   REP        -1
#   STATE      Next: 07:10:00
#   TIMESPEC   07:10
#   TRIGGERTIME 1754889000
#   TRIGGERTIME_FMT 2025-08-11 07:10:00
#   TYPE       at
#   READINGS:
#     2025-08-10 07:10:00   state           Next: 07:10:00
#
setstate at_Batteriewarnung Next: 07:10:00
setstate at_Batteriewarnung 2025-08-10 07:10:00 state Next: 07:10:00


Marko1976

Zum einen verstehe ich nicht warum bei deinem at dreiviertel auskommentiert sind, zum Anderen löst das ja nicht das Anzeigeproblem in ftui.

Eine ReadingsGroup habe ich auch, aber außer mir hat keiner Zugriff auf FHEM, es läuft ALLES über ftui als Frontend/Bedienung.

Nobbynews

#6
Zitat von: Marko1976 am 10 August 2025, 09:48:46Zum einen verstehe ich nicht warum bei deinem at dreiviertel auskommentiert sind
Da ist gar nichts auskommentiert. Schon mal Copy for forum.fhem.de benutzt?
War ja nur als Anregung gedacht.

juemuc

#7
Warum schaut Ihr Euch nicht einfach mal die Vorschläge an  ::)

Dann würdet ihr auch so etwas sehen  O:-)

offene Fenster

Die gleiche Methode nutze ich auch für leere Batterien  ;D
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Marko1976

@Nobbynews
Die Raute vorweg ist doch eine auskommentierung oder verwechsel ich hier irgend eine Programmiersprache.

@juermuc
Es entspricht nicht der Fragestellung. Ich hatte gefragt wie man eine Auflistung aller offenen Fenster darstellen kann, nicht nur die Anzahl. Mit der Anzahl agiere ich bereits, doch sie sagt mir eben nicht welche Fenster offen sind/welche Batterien schlecht sind.

Ich möchte eine Anzeige wo drin steht:
Wohnzmmerfenster links: offen
Küchenfenster: offen
Schlafzimmerfenster rechts: offen

Ich weiß dabei vorher nicht welche Fenster offen sind.

Deshalb nochmal: klar kann ich auf jedes Fenster/jede Batterie/jedes xyz einen Content-Eintrag erstellen und dann alles unzutreffende ausblenden. Doch das ist doch unpraktikable und muss bei jeder Veränderung angepasst werden.

Nobbynews

#9
Zitat von: Marko1976 am 10 August 2025, 10:35:29@Nobbynews
Die Raute vorweg ist doch eine auskommentierung oder verwechsel ich hier irgend eine Programmiersprache.
Wer hat denn behauptet, dass das vollständige list eines device eine Programmiersprache repräsentiert?
Der Teil, der einer Programmiersprache zuzuordnen ist (unmittelbar hinter der Zeile mit dem define), ist auch nicht auskommentiert.

juemuc

#10
Ich habe schon die Fragestellung verstanden. Du willst nur die Lösung nicht haben.

Du darfst diesen Dateianhang nicht ansehen.
Du darfst diesen Dateianhang nicht ansehen.

Hier am Beispiel der Steckdosen, die an sind. Und auch Türen und Fenster  ;D

Das Coding kann man in eine Content-Datei auslagern und dann mit Parametern aufrufen. Dies dann halt x-mal.

      <ftui-content
            file="./content/Rollo.html" Rollo="Rollo_Wohnzimmer" Rollo_WT="Rollo_Wohnzimmer_WT" Rollo_pop="rwz_timer">
      </ftui-content>

3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Guybrush

Zitat von: juemuc am 10 August 2025, 11:17:47Das Coding kann man in eine Content-Datei auslagern und dann mit Parametern aufrufen. Dies dann halt x-mal.

du hast die Frage leider nicht richtig verstanden meine ich. Es geht ihm ja gerade drum nicht x-mal ein identisches template include zu machen wo sich nur das device ändert. Es geht drum, dass man eine unbestimmte anzahl an devices identisch darstellen will, wofür eine schleife der code übersichtlichkeit  zu gute kommt. insbesondere wenn man ungewünschte einträge hat, müsste man dann die nicht extra mit hidden ausblenden

Marko1976

Nicht nur das, man muss den Code auch nicht jedesmal anpassen wenn sich ein Device ändert/hinzukommt oder wegfällt.

Marko1976

ZitatDas Coding kann man in eine Content-Datei auslagern und dann mit Parametern aufrufen. Dies dann halt x-mal.
Das ist ja genau das was ich selbst gepostet habe und umgehen möchte.
1. Muss ich es dann für jedes Fenster machen, da ich ja nicht weiß ob ein Fenster offen oder nicht ist.
2. Muss dann bei jeden neuen, getauschten oder wegfallendem Device der Code angepasst werden.

Und deine Beispiele zeigen innerhalb von ftui3 nur die Gesamtansicht mit Anzahl. Und wie gesagt sieht außer mir die Fhem-Ansicht niemand, eine derartige Lösung fällt also aus.

juemuc

Ich versuche es noch ein letztes Mal.

Das DOIF enthält dynamisch nur die Devices, die Du definierts. Also z.B. nur alle offenen Fenster/Türen oder auch nur die Steckdosen, die an sind (und nicht ALLE!).
Wenn Du es richtig machst, musst Du bei neuen, geänderten oder auch gelöschten Devices das Coding im DOIF nicht ändern. Ich verarbeite hier die diversesten Geräte unterschiedlicher Hersteller.

Wie Du das in FTUI3 anzeigst, bleibt Dir überlassen. Ich mache es über ein Popup.

Eine "Schleifen-Funktion" gibt es meines Wissens nicht in FTUI3.

Damit "Over and out".



 
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).