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

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

Vorheriges Thema - Nächstes Thema

setstate

Danke für die Info. Fügt das Modul auch ein evtl. fehlendes '/' am Ende an die URL, wie man es normalerweise gewöhnt ist?

viegener

Zitat von: setstate am 26 April 2016, 10:04:01
Danke für die Info. Fügt das Modul auch ein evtl. fehlendes '/' am Ende an die URL, wie man es normalerweise gewöhnt ist?

Aber sicher, es verhält sich dabei wie HTTPSRV und die damalige Änderung war ja im Zusammenspiel von FHEMWeb und HTTPSRV. Wenn man keine Dateien mit .ftui. verwendet sollte es sogar keine Unterschiede geben auch performancetechnisch sollte es dann keinen merklichen Unterschied.

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

Haecksler

Hallo Johannes,
funktioniert jetzt super.
Danke!
Gruß,
Stefan

SirUli

#48
Hi Johannes,

Solved - siehe unten

ich habe derzeit ein Problem bei dem ich nicht auf die Lösung komme.

Meine Definition deines Moduls ist:
Internals:
   CFGFN
   DEF        ftui ./www/tablet Tablet-UI
   NAME       TEC_NTABLETUI
   NR         242
   STATE      TEC_NTABLETUI
   TYPE       FTUISRV
   Fhem:
     directory  ./www/tablet
     friendlyname Tablet-UI
     infix      ftui
Attributes:
   validateFiles 2
   validateResult 2
   verbose    5

(Ich habe es aber auch schon ohne validateFiles oder validateResult probiert, ändert nichts)

Im Log kommt bei einem Seitenaufruf genau nichts an. Was rufe ich auf?

<hostname>:8083/fhem/tablet/index.ftui.html

Bisher hatte das wunderbar geklappt (etwa eine Woche lang). Auch heute morgen (nach einem update) ging es noch und plötzlich bleiben die Templates unersetzt im Quellcode - ich verstehe das noch nicht ganz.

Wenn ich auf dem FHEMWEB device den verbose level hochdrehe, dann kommt das im Log:

2016.06.08 11:34:08 4: WEB_xxx.xxx.xxx.xxx_57122 GET /fhem/tablet/index.ftui.html; BUFLEN:0
2016.06.08 11:34:08 4: WEB_xxx.xxx.xxx.xxx_57122 => 304 Not Modified

(xxx habe ich ersetzt)

Ich habe nun auch schon mal die definition deines Moduls rausgeworfen und neu erstellt - hilft auch nicht :/ Ich bin irgendwie gerade ratlos, was da los sein könnte.

Stand deines Moduls:
# $Id: 02_FTUISRV.pm 11311 2016-04-25 18:36:16Z viegener $

EDIT: Sorry vergiss es... ich hatte eine redirection von /fhem/ftui/index.html und diese hatte ich aus gewohnheit auf /fhem/table/index.ftui.html gesetzt.... maaaann. Das klappt dann nicht.

Viele Grüße, Uli

SamNitro

#49
Hallo Zusammen,

ich versuche das ganze mit einem Circlemenü ans laufen zu bringen, angezeigt wird es mir aber das Device wird nicht anerkannt...

<div class="right inline middle">
         <?ftui-inc="cm.part" dev="rollo_ez"?>
         </div>


<?ftui-header="Circlemenu" ?>
<div data-type="circlemenu" class="cell" data-device="<?ftui-key=dev ?>" data-direction="right-half" data-circle-radius="90">
<ul>
<li class="circleborder">
<div data-type="label" data-limits='["0|off","[12]*[0-9]","[34][0-9]","[56][0-9]","[78][0-9]","([90][0-9]|100|on)"]' data-colors='["#FFFFFF","#666666","#999999","#BBBBBB","#DDDDDD","#FFFFFF"]' data-device='<?ftui-key=dev ?>' data-background-icon="fa-wrench">
</div>
</li>
<li><div data-type="push" data-cmd="set" data-device="<?ftui-key=dev ?>" data-set-on="on" data-icon="">auf</div></li>
<li><div data-type="push" data-cmd="set" data-device="<?ftui-key=dev ?>" data-set-on="75" data-icon="">75</div></li>
<li><div data-type="push" data-cmd="set" data-device="<?ftui-key=dev ?>" data-set-on="50" data-icon="">50</div></li>
<li><div data-type="push" data-cmd="set" data-device="<?ftui-key=dev ?>" data-set-on="25" data-icon="">25</div></li>
<li><div data-type="push" data-cmd="set" data-device="<?ftui-key=dev ?>" data-set-on="off" data-icon="">zu</div></li>
</ul>
</div>


Weiß einer woran es liegen kann?

Gruß SamNitro


Edit: Habe es hinbekommen, bei mir fehlte .ftui. in der "part" Datei...
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SamNitro

#50
Jetzt hatte ich alles schön abgeändert wie im oben beschrieben, und erst jetzt fallt mir auf, dass das Circlemenü nicht mehr von alleine aktualisiert wenn sich der status z.B. manuell ändert.
Wenn ich das ganze wieder zurück ändere ohne ".ftui." und ohne ".part" wird es wie gewohnt sofort aktualisiert...

Mache ich was falsch oder funktioniert das nicht in diesem Modul?

Edit: habe gerade in der Konsole das hier gefunden:

[Log] Error: (longpoll) ReferenceError: Can't find variable: deviceStates (fhem-tablet-ui.js, line 970, x2)
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

viegener

Zitat von: SamNitro am 28 August 2016, 19:19:13
Edit: Habe es hinbekommen, bei mir fehlte .ftui. in der "part" Datei...

Habe gerade im Eingangspost nochmal die notwendigkeit von .ftui. in Formularen deutlicher gemacht.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: SamNitro am 03 September 2016, 13:25:33
Jetzt hatte ich alles schön abgeändert wie im oben beschrieben, und erst jetzt fallt mir auf, dass das Circlemenü nicht mehr von alleine aktualisiert wenn sich der status z.B. manuell ändert.
Wenn ich das ganze wieder zurück ändere ohne ".ftui." und ohne ".part" wird es wie gewohnt sofort aktualisiert...

Mache ich was falsch oder funktioniert das nicht in diesem Modul?

Edit: habe gerade in der Konsole das hier gefunden:

[Log] Error: (longpoll) ReferenceError: Can't find variable: deviceStates (fhem-tablet-ui.js, line 970, x2)

Ich kann mir momentan nicht vorstellen, warum longpoll durch das Modul beeinflusst werden sollte. Ich habe trotzdem mal Deine Teile von oben testweise bei mir laufen und ich kann das Problem nicht nachstellen. Kann es sein, dass irgendwo anders ein Problem in den Dateien ist. Du kannst zum Beispiel mal prüfen, ob das erzeugte HTML korrekt ist (Attribut validateResult).

Die Fehlermeldung sieht eher nach Problemen bei der Initialisierung aus (Ladereihenfolge ?)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

SamNitro

#53
Sorry Habe gestern Abend noch getestet und herausgefunden welches Modul den Fehler rein bringt, und zwar verwende ich noch ein WeekdayTimer. sobald ich den entferne oder per Pagetab auf eine andere Seite verschiebe aktualisiert er den status wieder...

"warning: wdtimer does not implement update function"

Hier mal die wdt.ftui.part
<!DOCTYPE html>
<div style=""
data-type="wdtimer"
data-device="<?ftui-key=dev ?>"
data-style="round"
data-theme="dark"
data-title="<?ftui-key=titel ?>"
data-savecfg="true"
data-cmdlist='{"Auf":"100","Zu":"0","10%":"10","20%":"20","30%":"30","40%":"40","50%":"50","60%":"60","70%":"70","80%":"80","90%":"90"}'>
<div data-type="button" class="cell small readonly" data-icon="oa-edit_settings" data-background-icon="fa-square-o"
data-on-color="#505050" data-on-background-color="#505050">
</div>
</div>


und die verlinkung dazu:
<?ftui-inc="wdt.ftui.part" dev="timer_rollo_ez" titel="Timer Rollo Esszimmer"?>
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

viegener

@SamNitro: Ich bin mir nicht sicher,was der Doctype Eintrag hier anrichtet, aber im Part sollte er eigentlich nicht benötigt/enthalten sein. Ansonsten sehe ich nachwievor keinen Zusammenhang zum FTUISRV, wenn die resultierende HTML-Datei nach der Verarbeitung valides HTML ist, dann gibt es inhaltlich keinen Unterschied für das tablet UI. Also schau doch mal, ob Deine Version von wdtimer nicht zur tablet ui Version passt?
https://forum.fhem.de/index.php/topic,48106.msg474273.html#msg474273
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

SamNitro

Danke viegener,
habe die andere Version genommen, obwohl da nur Version 1.0 drin steht und ich 1.6 hatte funktioniert es jetzt wenigstens. Er zeigt aber immer noch den Fehler an, was ich aber in erster Linie ja nicht beachten muss... Ich habe FTUI 2.2eval.

Den Doctype habe ich nur in der part Datei damit mein editor mir das direkt im richtigen format anzeigt und das ganze farblich darstellt, es spielt aber keine rolle ob es enthalten ist oder nicht.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

viegener

Ich habe gerade eine neue Version von FTUISRV ins SVN hochgeladen, hier sind insbesondere neue Konstrukte für Schleifen (mehrfaches Einfügen eines includes / z.B. für mehrere Devices) und if-else-endif (um Blöcke nur unter bestimmten Bedingungen in die Ausgabe aufzunehmen)

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

rhya

#57
Peeerfekt, danke :D

Habe da aber so zwei kleine Fragen, auf die ich keine Lösung ergoogeln konnte.
Ich verwende Deine Includes um templatebasiert HTML zu erzeugen, klappt auch.

Jetzt habe ich ein Template in dem ich Temperatur und ValvePosition ausgeben möchte, bei normalen HK Reglern funktioniert das über das selbe Device (Heizung_Wohnzimmer_Clima liefert sowohl desired-temp als auch ValvePosition). In anderen Räumen habe ich Wandthermostate, hier möchte ich unterschiedliche Devices (Wandthermostat_Wohnzimmer_Climate für desired-temp und Heizung_Wohnzimmer_Clima für ValvePosition) verwenden.

Ich könnte jetzt einfach zwei Devices übergeben, bin aber von Natur aus faul und würde gerne mit ftui-header den Defaultwert für die zweite Variable auf den Wert der ersten Variable setzen.
Im Prinzip sowas: <?ftui-header="part.raumlabel.temperatur.ftui.html" deviceValve="ftui-key=device"?>
Das funktioniert aber nicht ... geht das an sich nicht oder ist meine Syntax falsch?
Wenn es nicht geht, dann übergebe ich halt überall zwei Parameter an das Template.

Dann würde ich gerne einen Block abhängig davon anzeigen ob eine Variable gesetzt ist oder nicht, also im Prinzip ein
<?ftui-if=(deviceValve.length > 0) ?>.
Das geht aber auch nicht, wahrscheinlich weil ich einfach keine Ahnung habe ;D

viegener

Zitat von: rhya am 10 Oktober 2016, 10:24:01
Dann würde ich gerne einen Block abhängig davon anzeigen ob eine Variable gesetzt ist oder nicht, also im Prinzip ein
<?ftui-if=(deviceValve.length > 0) ?>.
Das geht aber auch nicht, wahrscheinlich weil ich einfach keine Ahnung habe ;D

Hier erstmal etwas Hilfe für den Block (if)


<?ftui-if=( [eindummy:state:d] ) ?>
...
<?ftui-endif ?>

<?ftui-if=( {(ReadingsNum("eindummy","state",0) )}  ) ?>
...
<?ftui-endif ?>


Also entweder als Zugriff auf Readings (in diesem Fall numerisch), wie im ersten Fall. Oder als perl-expression wie im 2.Fall. Die Syntax innerhalb der runden klammern ist auch in der Command-ref bei set beschrieben. Wenn das Ergebnis des Ausdrucks einen Wert ungleich 0 ergibt, wird der Block in der Ausgabe enthalten sein.

Das mit dem dynamischen Defaultwert muss ich mir anschauen

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

viegener

Zitat von: rhya am 10 Oktober 2016, 10:24:01
Jetzt habe ich ein Template in dem ich Temperatur und ValvePosition ausgeben möchte, bei normalen HK Reglern funktioniert das über das selbe Device (Heizung_Wohnzimmer_Clima liefert sowohl desired-temp als auch ValvePosition). In anderen Räumen habe ich Wandthermostate, hier möchte ich unterschiedliche Devices (Wandthermostat_Wohnzimmer_Climate für desired-temp und Heizung_Wohnzimmer_Clima für ValvePosition) verwenden.

Ich könnte jetzt einfach zwei Devices übergeben, bin aber von Natur aus faul und würde gerne mit ftui-header den Defaultwert für die zweite Variable auf den Wert der ersten Variable setzen.
Im Prinzip sowas: <?ftui-header="part.raumlabel.temperatur.ftui.html" deviceValve="ftui-key=device"?>
Das funktioniert aber nicht ... geht das an sich nicht oder ist meine Syntax falsch?
Wenn es nicht geht, dann übergebe ich halt überall zwei Parameter an das Template.

Ich habe einen ähnlichen Fall, aber habe es nicht in der Doku beschrieben:

Also man kann auch im Header Variableninhalte verwenden, die ersetzt werden bevor die Variablen zugewiesen werden. Allerdings muss dazu der schliessende Teil ?> durch ?\> ersetzt werden, damit das funktioniert. Also für Dein Beispiel:

<?ftui-header="part.raumlabel.temperatur.ftui.html" deviceValve="<ftui-key=device ?\>"  ?>

Übrigens: Deine Texte wären durch die Verwendung von Code-Tags leichter lesbar
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können