Servermodul für New FHEM Tablet UI - 02_FTUISRV.pm

Begonnen von viegener, 27 Oktober 2015, 22:57:13

Vorheriges Thema - Nächstes Thema

DocCyber


Hallo zusammen,

Mit ftui-if habe ich Folgendes probiert, aber das Ergebnis ist falsch:

Aufruf:
<?ftui-inc="test.ftui.part" color="blue" ?>

test.ftui.part
<?ftui-header="test" color ?>

<?ftui-if=( <?ftui-key=color ?> eq "red" ) ?>
    Richtig
<?ftui-else ?>
    Falsch, das ist nicht rot!
<?ftui-endif ?>


Ausgabe: Richtig


Funktioniert das ftui-if - Statement nicht beim Vergleich mit übergebenen Variablen, also mit ftui-key ??  Oder ist der Vergleichsoperator eq hier nicht korrekt?
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

viegener

Doch die Variablenersetzung wird gemacht, aber der Ausdruck wird nicht als perl-Ausdruck evaluiert.

Wenn Du den if so schreibst, müsste es gehen:

<?ftui-if=( {( "<?ftui-key=color ?>" eq "red" )} ) ?>

Dadurch wird der Ausdruck in Perl evaluiert und es kommt entweder 1 oder 0 heraus und dann geht der if auch

Ich gebe zu, dass das in der Doku nicht sehr ausführlich formuliert ist, das ändere ich.
Vielleicht macht es auch Sinn einen ftui-ifeval einzuführen, der den Ausdruck nochmals in Perl evaluiert.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DocCyber

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

viegener

Da es durch Veränderungen in FHEM zu Warnungen in fhem.pl kommt
Use of uninitialized value $v in substitution (s///) at fhem.pl line 1061.
Use of uninitialized value $v in concatenation (.) or string at fhem.pl line 1062.


habe ich eine Korrektur an FTUISRV vorgenommen und in SVN eingecheckt, damit diese Warnung nicht entsteht -> kommt mit dem nächsten update
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

derHeimwerker

Hallo zusammen,

kann mir jemand sagen, was sich hinter "ftui-loopinc" verbirgt. Ich habe die ref gelesen, aber ehrlich gesagt ist mein Englisch nicht so das Wahre.
Ich möchte einen swiper-widget mit mehreren Rollladen Buttons bauen, wenn in diesem Raum mehrere Rollladen vorhanden sind. Kann ich mit "ftui-loopinc" so eine Liste bauen ?

viegener

Die einfachste Erklärung ftui-loopinc ist so ähnlich wie ftui-inc allerdings wird die Datei mehrfach eingebunden. Dazu wird als erste Parameter eine Liste von Werten (z.B. eine Liste von Devicenamen) übergeben.

Beispiel:
<?ftui-loopinc="temphuml.ftui.part" thdev=(list room=TEMP:FILTER=TYPE=LaCrosse) showdes="0" showlabel="1"  ?>

Hier wird für jeden device, auf den die Filterkriterien aus dem list-Befehl passen, der Inhalt von temphuml.ftui.part im Ergebnis enthalten sein. Wobei der Inhalt von thdev jeweils einen Wert aus der Liste der Devices annimmt. Die anderen Parameter bleiben wie angegeben.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

derHeimwerker

Ok. Danke.

So ganz bin ich da aber noch nicht durchgestiegen. Konkret möchte ich einen swiper aufbauen, wenn es in meinem Raum mehrere Rollläden gibt. Die <?ftui-if ... <?ftui-endif ?>  klappt schon wunderbar. Hier werte ein ein vorhandenes reading aus


<?ftui-if=( {(ReadingsNum("Auto_Roll_Config_du","Anzahl_Roll_<?ftui-key=raum ?>", 1) > 1 )} ) ?>
<div data-type="swiper" data-height="540px" data-width="720px" class="top-space navbuttons nopagination">
<ul>
<li>
<?ftui-endif ?>


Nun möchte ich noch , dass für alle devices mit dem subType "blind" und dem userAttr "Raumname" = "Wohnzimmer" die Datei xy.ftui.part eingefügt wird.

Geht das ?

viegener

@derHeimwerker:
- Der erste Schritt ist ein list-Befehl in FHEM, der genau Deine Devices ausgibt
- Statt thdev muss da vermutlich der Parameter stehen, der in xy.ftui.part verwendet wird
- Dann nimmst Du mein Beispiel von oben fügst Deinen FHEM-List Befehl da ein wo der Beispiel list-Befehl steht und xy.ftui.part setzt Du für temphuml.ftui.part ein
- Im hinteren Teil musst Du dann noch die anderen Parameter anpassen (oder entfernen) - also showdes und showlabel - aber das kommt eben auf den Inhalt von xy.ftui.part an

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DocCyber

Hallo FHEMisten,

nochmal eine Frage bzgl. Schleife mit ftui-loopinc
Ich würde es sehr gern verwenden, um dynamisch eine Art Tabelle aufzubauen.
Angenommen, ich hätte mehrere Dummy-Devices namens auto_1, auto_2, auto_3, ...auto_n.
Jeder Dummy hat nun bspw. ein Reading namens colours, das eine Liste mehrerer Farben farbe_1, farbe_2, ... farbe_m enthält.

Meine Wunschtabelle in FTUI soll dann etwa so aussehen:

+-----------------------------------------------------------+
|  auto_1                                                   |
+-----------------------------------------------------------+
|  farbe_1  |  farbe_2  |  farbe_3  |  farbe_4  |  farbe_5  |
+===========================================================+
|  auto_2   |           |           |           |           |                                     |
+-----------------------------------------------------------+
|  farbe_1  |  farbe_2  |           |           |           |                                     |
+===========================================================+
|  auto_3   |           |           |           |           |
+-----------------------------------------------------------+
|  farbe_1  |  farbe_2  |  farbe_3  |  farbe_4  |           |
+===========================================================+
|  ...                                                      |
+-----------------------------------------------------------+
|  ...                                                      |


Das Abrufen der Dummys ist mir klar.
Aber wie kann ich mit loopinc über die einzelnen Listenelemente, also z.B. auto_2:colours, iterieren?
Geht das überhaupt?

Danke für eure Hilfe!
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

viegener

@DocCyber: Du kannst für die Schelife ja alle Möglichkeiten von FHEM-Kommandos verwenden. Hier kann auch ein Perlbefehl stehen.

<?ftui-loopinc="test.ftui.part" value=({ return "abc\ndef\nghi"; }) ?>


Hier wird das innere Skript mit den drei Werten "abc", "def" und "ghi" aufgerufen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DocCyber

Zitat von: viegener am 07 September 2017, 23:59:50
... Hier kann auch ein Perlbefehl stehen.

Ach so...! Das probiere ich aus!
Vielen Dank für deine Antwort!
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

OdfFhem

@viegener

Hallo,

aktuell kämpfe ich ein wenig mit den stockenden FTUI-Updates, so dass ich gezwungen bin, immer mehr eigene Modulstände vorzuhalten. Um diese ohne viel Aufwand parallel zum offiziellen Stand halten und gleichzeitig leicht zum Einsatz bringen zu können, habe ich mir überlegt, dass ich eine Einschleusstelle bräuchte, an der die offiziellen Module quasi ausgetauscht werden.

Bei den Umsetzszenarien bin ich zufällig über dieses Modul "gestolpert" und sehe es als äußerst naheliegenden Platz für meine angedachte Lösungsmöglichkeit.

Ich würde gerne ein neues Attribut filenameMap einführen, in dem man Paare von Modulen festhalten kann. Jedes Paar enthält dabei das eigentlich angefragte Modul und das stattdessen auszuliefernde Modul.

Siehst Du Möglichkeiten, eine derartige Funktionalität - (höchstwahrscheinlich) von mir programmiert - offiziell in Dein Modul zu übernehmen?

viegener

@OdfFhem: Generell kann ich mir das vorstellen, ich kann das auch nachvollziehen, habe deshalb auf manchen Instanzen meine FTUI-Dateien eingefroren

Um das zu realisieren würde mir aber noch etwas mehr Info fehlen. Was steht genau in filenamemap und wie ist das gewünschte Verhalten.
Beispielfragen
- Nur feste Namen ersetzen oder auch teilnamen/muster
- Nur Datei oder auch Pfadbestandteile
- Nur bei URLanfragen oder soll auch in Dateien etwas ersetzt werden
...



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

OdfFhem

@viegener

Ich habe das versuchsweise schon mal umgesetzt; die Änderungen waren eigentlich sehr überschaubar:
- AttrList um filenameMap:textField-long erweitert
- FTUISRV_Attr um das Handling für filenameMap erweitert
- unmittelbar vor Zeile 317 Aufruf der neuen Routine FTUISRV_filenameMap
- neue Routine FTUISRV_filenameMap ( $hash, $filename ) integriert

Zum Test nutze ich derzeit folgende Attribut-Definition:

attr myFTUISRV filenameMap js/widget_knob.js:js/widget_knob_3rd.js js/widget_label.js:js/widget_label_3rd.js

Es ist also quasi eine Endlosliste von $filename-Paaren (relativer URL-Anteil - bezogen auf infix).


  • Nach jetziger Einschätzung reicht es vollkommen aus, sich auf URL-Anfragen zu beschränken
  • In Dateien muss aus Sicht von filenameMap nichts ersetzt werden, da der Inhalt der neuen Datei ja unter dem alten Namen ausgeliefert wird. Es ist also nicht notwendig, in Dateien diesbezüglich etwas zu ersetzen.
  • Momentan enthält filenameMap feste Namen; bin auch nicht sicher, ob es Bedarf für z.B. reguläre Ausdrücke gibt.

OdfFhem

@viegener

Es war niemals meine Absicht und hoffe natürlich auch, dass kein falscher Eindruck entstanden ist: Ich muss für die endgültige Lösung nicht selbst programmieren. Ich habe lediglich für eigene Experimente zunächst einmal eine Q&D-Programmierung vorgenommen - einfach um zu sehen, ob die Idee umgesetzt werden kann.

Für mich ist ausschließlich interessant, dass eine nützlliche Funktionalität an zentraler/passender Stelle untergebracht wird.

Besteht noch Hoffnung für eine Realisierung in Deinem Modul?