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

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

Vorheriges Thema - Nächstes Thema

viegener

Wie schon im Tablet UI thread beschrieben, habe ich in meinem tablet UI viele gleichartige Widgets oder gar Widgetgruppen.
Bei Änderungen heisst das immer sehr viel manueller Aufwand und das löse ich lieber über ein Programm  ;D

Idee ist ein Servermodul, dass andere Dateien (Parts) vor der Übertragung an den Browser einfügen kann und dabei auch gleich Variablen (mit default-Werten) ersetzen. So können nicht nur der Devicename und Texte sondern auch Formatierungen angepasst werden. Solche Dateien, in die etwas eingefügt werden soll nenne ich Formulare.

Das ganze basiert auf dem 02_HTTPSrv von Boris Neubert und verhält sich für Nichtformulare auch genauso wie das Original. Wenn die Datei aber ein .ftui. im Namen trägt, so wird nach Elementen gesucht, die ersetzt werden sollen.

- Durch das tag <?ftui-inc="dateiname.part" ?> wird die durch dateiname.part angegebene Datei (mit Pfad) an der Stelle des tags eingesetzt.
- Bei ftui-inc können auch Ersetzungen für Variablen angegeben werden. <?ftui-inc="dateiname" variable1="ersetzung1" ... variablen="ersetzung20" ?>
- In der part-Datei werden Variablen durch Angabe des Tags <?ftui-key=variable ?> angegeben. Das gesamte tag wird dann durch den in ftui-inc angegebenen Wert ersetzt.
- Ausserdem kann man in der part-Datei auch Standardwerte für Variablen angeben, so dass im ftui-inc nicht alle Variablen mit Werten versehen werden. Dazu wird im Kopf der part-Datei ein <?ftui-header="Name" variable="defaultwert" ... ?> tag eingeführt, dass den defaultwert für die variable definiert. Das ftui-header-Tag wird bei der Einfügung entfernt und findet sich nicht mehr in der an FTUI übergebenen Datei.

WICHTIG: Eingefügte Dateien können selbst wieder Formulare sein, dazu müssen diese aber auch wieder im Dateinamen den Teil ".ftui." enthalten

WICHTIG: Dateinamen und Ersetzungen müssen in Anführungsstriche (") eingeschlossen werden.





Aktualisierung: 25.4. Das Modul ist jetzt auch über den normalen Update verfügbar.

Die neueste Version findet sich aber nur in github unter folgendem Link:
https://github.com/viegener/Telegram-fhem/blob/master/ftuisrv/02_FTUISRV.pm.

Achtung: Der Link verweist nicht direkt auf die Datei, sondern auf eine Seite in Githuib --> von dort kann man die Datei über den Knopf "raw" herunterladen.

Um es mit dem  FHEM Tablet UI (FTUI) zu verwenden ersetzt man einfach den existierenden define für HTTPSrv durch einen define mit FTUISrv
also z.B. so

define nftui FTUISRV ftui ./www/tablet New-FTUI




Damit es etwas klarer wird hier ein Beispiel:

In der Datei roomx.ftui.html findet sich folgender Inhalt:


<li data-row="1" data-col="2" data-sizex="2" data-sizey="1">
        <header>Bad</header>
        <?ftui-inc="temphum.part" dev="temp_gb" format="left cell" ?>
</li>


Die Datei temphum.part sieht dann wie folgt aus:


<?ftui-header="TempHum" dev format tempreading="temperature" ?>
       <div class="<?ftui-key=format ?>">
                <div data-type="label" data-device="<?ftui-key=dev ?>" data-get="<?ftui-key=tempreading ?>" data-unit="%B0C%0A" class="large"></div>
                <div data-type="label" class="small fixedlabel">Temperatur</div>
                <div data-type="label" data-device="<?ftui-key=dev ?>" data-get="humidity" data-unit="%" class="large top-space"></div>
                <div data-type="label" class="small fixedlabel">Luftfeucht.</div>
        </div>


Daraus entsteht dann folgendes Ergebnis, das an den Server gesendet wird:


<li data-row="1" data-col="2" data-sizex="2" data-sizey="1">
        <header>Bad</header>
       <div class="left cell">
                <div data-type="label" data-device="temp_gb" data-get="temperature" data-unit="%B0C%0A" class="large"></div>
                <div data-type="label" class="small fixedlabel">Temperatur</div>
                <div data-type="label" data-device="temp_gb" data-get="humidity" data-unit="%" class="large top-space"></div>
                <div data-type="label" class="small fixedlabel">Luftfeucht.</div>
        </div>
</li>


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

wkarl

#1
Hallo Johannes,

ich habe nun versucht FTUISRV umzusetzen, leider ohne Erfolg. Hier die einzelnen Informationen:

list der FTUISRV Definition:
Internals:
   CFGFN      ./MyFHEM/WEB/WEBtablet_iPad.cfg
   DEF        tablet_iPad ./www/tablet_iPad/ Tablet_iPad_Frontend
   NAME       MyTablet_iPad_UI
   NR         20
   STATE      MyTablet_iPad_UI
   TYPE       FTUISRV
   Fhem:
     directory  ./www/tablet_iPad/
     friendlyname Tablet_iPad_Frontend
     infix      tablet_iPad
Attributes:
   room       Z-HA-fhem
   verbose    1


Die ftui Datei wird wie folgt aufgerufen:
   <div  class="cell"
    data-type="pagetab"
data-url="h-eg-r.ftui.html"
data-icon="oa-control_building_eg"
      data-background-icon="fa-circle"
data-off-background-color="dimgrey"
      data-on-background-color="darkorange"
data-on-color="black"
data-off-color="black">
   </div>


Inhalt von h-eg-r.ftui.html:
<!DOCTYPE html>
<html>
<head>

   <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="widget_base_width" content="100">
<meta name="widget_base_height" content="120">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="longpoll" content="1"> <!-- 1=longpoll;0=shortpoll every 30sec -->
<meta name="debug" content="0"> <!-- 1=output to console;0=not output -->
<meta name="gridster_disable" content="0"> <!-- verschieben abschalten -->

<link rel="stylesheet" href="/fhem/tablet/lib/jquery.gridster.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/font-awesome.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.toast.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/powerange.min.css"/>

<!-- Charts Theme CSS -->
<link rel="stylesheet" href="/fhem/tablet/lib/openautomation.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/fhemSVG.css" /> 

   <!-- define your personal style here, it wont be overwritten  -->
   <link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-user.css" />

<!-- Javascript -->
<script type="text/javascript" src="/fhem/pgm2/jquery.min.js"></script>
   <script type="text/javascript" src="/fhem/tablet/lib/jquery.knob.mod.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.toast.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.circlemenu.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/powerange.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.gridster.min.js"></script>
   <script type="text/javascript" src="/fhem/tablet/lib/fa-multi-button.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/js/fhem-tablet-ui.js"></script>

<title>EG Heizung</title>

</head>
<body>
<div class="gridster">

<ul>
<!-- Menu -->
<div class="container">
<li data-row="1" data-col="1" data-sizex="1" data-sizey="5" data-template="menu-main.html"></li>
<li data-row="6" data-col="1" data-sizex="1" data-sizey="1.5" data-template="menu-datetime.html"></li>
</div>

<!-- Content -->
<li data-row="2" data-col="2" data-sizex="2" data-sizey="3">
<header><font size="+1">Büro</font></header>
<?ftui-inc="h-hz-template_HKFH.part" dev="Buero" ?>
</li>
</ul>

</div>

</body>
</html>


Und die part Datei selber:

<?ftui-header="HKFH" dev ?>

<div class="container">
<div class="container row big top-space">
<div class="col-1-2 left">
<div data-type="label"
data-device="<?ftuikey=dev ?>_TC" data-get="measured-temp" data-unit="%B0C%0A" data-fix="1"
data-limits='[-20,20,24]' data-colors='["skyblue","darkorange","orangered"]'>
</div>
</div>
<div class="col-1-2 right">
<div data-type="label"
data-device="<?ftuikey=dev ?>_TC" data-get="humidity" data-unit="%%0A" data-fix="1"
data-limits='[0,40,60]' data-colors='["skyblue","darkorange","orangered"]'>
</div>
</div>
</div>
<div class="container row">
<div class="top-space" data-type="label">Heizkörper</div>
<div class="container top-space">
<div class="col-2-3 left">
<div data-type="thermostat"
data-device="<?ftuikey=dev ?>_HK_Clima" data-get="desired-temp" data-set="desired-temp" data-temp="measured-temp" data-valve="ValvePosition"
                                  data-min="0" data-max="30" data-step="0.5"
data-mode="controlMode"
data-off="controlManu off" data-boost="controlMode boost"
data-fgColor="darkorange"
data-height="96px"
data-width="96px">
</div>
</div>
<div class="col-1-3 top-space right"><font size="-2">
<div data-type="multistatebutton"
data-device="<?ftuikey=dev ?>_HK_Clima" data-get="controlMode" data-get-on='["auto","manual"]'
data-set='["controlMode manual","controlMode auto"]' data-icons='["oa-sani_heating_automatic","oa-sani_heating_manual"]' data-colors='["darkgreen","darkblue"]'
data-background-icon="fa-square" data-background-colors='["dimgrey","dimgrey"]'
>
</div><br>
<div data-type="multistatebutton"
data-device="<?ftuikey=dev ?>_HK" data-get="R-btnLock" data-get-on='["on","off"]'
data-set='["regSet btnLock off","regSet btnLock on"]' data-icons='["oa-secur_locked","oa-secur_open"]' data-colors='["darkred","darkblue"]'
data-background-icon="fa-square" data-background-colors='["dimgrey","dimgrey"]'
>
</div>
</font>
</div>
</div>
</div>

<div class="container row">
<div data-type="label">Fussboden</div>
<div class="container top-space">
<div class="col-2-3 left">
<div data-type="thermostat"
data-device="<?ftuikey=dev ?>_TC" data-get="desired-temp" data-set="desired-temp" data-temp="measured-temp" data-valve="actuator"
                                  data-min="0" data-max="30" data-step="0.5"
         data-mode="controlMode"
data-off="controlManu off" data-boost="controlMode boost"
data-fgColor="darkorange"
data-height="96px"
data-width="96px">
</div>
</div>
<div class="col-1-3 top-space right"><font size="-2">
<div data-type="multistatebutton"
data-device="<?ftuikey=dev ?>_TC_Climate" data-get="controlMode" data-get-on='["auto","manual"]'
data-set='["controlMode manual","controlMode auto"]' data-icons='["oa-sani_heating_automatic","oa-sani_heating_manual"]' data-colors='["darkgreen","darkblue"]'
data-background-icon="fa-square" data-background-colors='["dimgrey","dimgrey"]'
>
</div><br>
<div data-type="multistatebutton"
data-device="<?ftuikey=dev ?>_TC" data-get="R-btnLock" data-get-on='["on","off"]'
data-set='["regSet btnLock off","regSet btnLock on"]' data-icons='["oa-secur_locked","oa-secur_open"]' data-colors='["darkred","darkblue"]'
data-background-icon="fa-square" data-background-colors='["dimgrey","dimgrey"]'
>
</div>
</font>
</div>
</div>
</div>


</div>


Der screenshot zeigt das Ergebnis.

Ein Tipp wo ich weiter nach dem Fehler suchen kann?

Danke und ciao Walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

andreas13

Hallo zusammen,

Ich glaube das Modul ist seit der Existenz parametriesierter Templates nicht mehr nötig, oder?

Viele Grüße

Andreas


Gesendet von iPad mit Tapatalk
Maintainer des Vitoconnect Moduls
In Betrieb: FritzBox 7590, Homematic
piko Wechelrichter (HTTPMOD). Sonos ....
noch: IT

andreas13

Hallo zusammen,

Ich glaube das Modul ist seit der Existenz parametriesierter Templates nicht mehr nötig, oder?

Viele Grüße

Andreas


Gesendet von iPad mit Tapatalk
Maintainer des Vitoconnect Moduls
In Betrieb: FritzBox 7590, Homematic
piko Wechelrichter (HTTPMOD). Sonos ....
noch: IT

viegener

@Walter

Ich habe Deine Definitionen mal bei mir nachgestellt, dabei sind mir verschiedene Probleme aufgefallen:

1) Der Define für das Modul enthält meines Erachtens noch einen / zuviel
Ich würde die Definition nochmals löschen und dann folgendes anlegen:
define tablet_iPad FTUISRV ./www/tablet_iPad Tablet_iPad_Frontend

2) Zumindest in h-eg-r.ftui.html befinden sich Referenzen auf einen Pfad: /fhem/tablet/... selbst wenn das möglicherweise auch so existiert, ist es doch problematisch, es wäre besser in tablet_iPad ein kompletten Satz des tablet uis zu haben. Eigentlich betrifft das aber eher Deine index.html-Datei

3) Ich denke in h-eg-r.ftui.html können aber die gesamten css / js-Includes entfallen, die werden ja vom index.html eingelesen.

Nur als Seitenanmerkung, die Umlaute sind als äöü geschrieben, hier müsste in html eigentlich als &auml; etc stehen, sonst bekommst Du falsche Zeichen.

Wenn Du die Änderungen umstellst, habe ich hier noch eine Version von FTUISRV angehängt, die mehr Info herausgibt, wenn man das Attribut verbose auf den Wert 5 setzt. Hinweis wenn bei verbose 5 keine Einträge im log entstehen, dann kommen Deine Requests gar nicht beim Modul an. Diese lässt sich ganz gut verhindern, wenn man das Verzeichnis im www-Verzeichnis anders nennt als den Teil im URL. Also das Verzeichnis z.B. nur iPad (die urls bleiben natürl,ich bei fhem/tablet_iPad).



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

viegener

Zitat von: andreas13 am 01 Januar 2016, 16:31:18
Hallo zusammen,

Ich glaube das Modul ist seit der Existenz parametriesierter Templates nicht mehr nötig, oder?


Aus meiner Sicht schon, da der Zusammenbau auf Server-Seite besser geeignet ist um Probleme mit Javascript bei den dynamischen Ladevorgängen zu vermeiden. Für das Javascript kommt dann wenigstens nur 1 Datei heraus. Ausserdem würde ich gerne immer noch eine Seite dynamisch aufbauen können.

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

wkarl

Zitat von: viegener am 01 Januar 2016, 19:48:20
Aus meiner Sicht schon, da der Zusammenbau auf Server-Seite besser geeignet ist um Probleme mit Javascript bei den dynamischen Ladevorgängen zu vermeiden. Für das Javascript kommt dann wenigstens nur 1 Datei heraus. Ausserdem würde ich gerne immer noch eine Seite dynamisch aufbauen können.

Hallo Andreas,
in dieses Problem bin ich gelaufen. Ich habe ein Template für meine Thermostate erstellt und es mehrmals innerhalb einer Darstellung aufgerufen. Eine 100% richtige Darstellung kommt fast nie zustande.
Deswegen teste ich aktuell die Lösung von Johannes.

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

wkarl

Zitat von: viegener am 01 Januar 2016, 19:46:09
Wenn Du die Änderungen umstellst, habe ich hier noch eine Version von FTUISRV angehängt, die mehr Info herausgibt, wenn man das Attribut verbose auf den Wert 5 setzt.

Hallo Johannes,

habe zum Testen alles soweit abgespeckt, dass sowenig wie möglich Nebeneffekte entstehen.
Im Log findet sich nun z.B. Folgendes (auf MyTestUI gefiltert):
2016.01.02 13:43:32.904 5: MyTestUI: Request to :/TEST/menu-datetime.html:
2016.01.02 13:43:32.904 5: MyTestUI: handletemplatefile :./www/TEST/menu-datetime.html:
2016.01.02 13:43:33.434 5: MyTestUI: Request to :/TEST/js/widget_pagetab.js:
2016.01.02 13:43:33.434 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_pagetab.js:
2016.01.02 13:43:33.442 5: MyTestUI: Request to :/TEST/js/widget_clock.js:
2016.01.02 13:43:33.443 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_clock.js:
2016.01.02 13:43:34.047 5: MyTestUI: Request to :/TEST/js/widget_famultibutton.js:
2016.01.02 13:43:34.047 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_famultibutton.js:
2016.01.02 13:43:34.075 5: MyTestUI: Request to :/TEST/js/widget_widget.js:
2016.01.02 13:43:34.075 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_widget.js:
2016.01.02 13:43:34.132 5: MyTestUI: Request to :/TEST/hegr.ftui.html:
2016.01.02 13:43:34.133 5: MyTestUI: handletemplatefile :./www/TEST/hegr.ftui.html:
2016.01.02 13:43:34.134 4: MyTestUI: is real template :./www/TEST/hegr.ftui.html:


Jedoch stirbt fhem mit der letzten Zeile :-(

Das ungefilterte Log sieht dann so aus:
2016.01.02 13:43:34.047 5: MyTestUI: Request to :/TEST/js/widget_famultibutton.js:
2016.01.02 13:43:34.047 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_famultibutton.js:
2016.01.02 13:43:34.075 5: MyTestUI: Request to :/TEST/js/widget_widget.js:
2016.01.02 13:43:34.075 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_widget.js:
2016.01.02 13:43:34.080 0: HMLAN_Parse: HMLAN_03 R:EA11B22   stat:0000 t:52375363 d:FF r:FFBE     m:02 A001 A11B22 1C3828 010E
2016.01.02 13:43:34.084 0: HMLAN_Parse: HMLAN_02 R:EA11B22   stat:0000 t:525A9784 d:FF r:FFBB     m:02 A001 A11B22 1C3828 010E
2016.01.02 13:43:34.132 5: MyTestUI: Request to :/TEST/hegr.ftui.html:
2016.01.02 13:43:34.133 5: MyTestUI: handletemplatefile :./www/TEST/hegr.ftui.html:
2016.01.02 13:43:34.134 4: MyTestUI: is real template :./www/TEST/hegr.ftui.html:
Undefined subroutine &main::fileparse called at ./FHEM/02_FTUISRV.pm line 330.


Die Zeile 330 sieht so aus:
    my ($dum, $curdir) = fileparse( $filename );


Was könnte hier der Grund sein?

Danke und ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

viegener

Zitat von: wkarl am 02 Januar 2016, 13:58:44
Die Zeile 330 sieht so aus:
    my ($dum, $curdir) = fileparse( $filename );


Was könnte hier der Grund sein?


Sieht so aus als ob das Dateinamenmodul (File::Basename) bei Dir nicht standardmässig geladen ist. OK, das hätte ich gleichexplizit hinzufügen sollen.

Anbei das neue Modul mit der einen Zeile hinzugefügt:
use File::Basename;

Bitte nochmals damit ausprobieren.
Generell ist der Logfile aber schon gut, denn die Anfragen kommen vorbei und das Template wurde auch erkannt, dann sollten auch die Ersetzungen gehen, denn die sahen soweit gut aus.

Danke für die Geduld...

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

wkarl

Hallo Johannes,

funktioniert jetzt. Super.

Und ne Frage - folgendes Konstrukt wird vermutlich nicht unterstützt?
data-device="<?ftuikey=dev ?>_TC"

Danke und ciao
walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

viegener

Klasse, doch auch auch eine solche Umsetzung sollte kein Problem sein. Ich habe zwar keinen Versuch gemacht, aber da keine Vorbedingungen für die Umgebung gelten, sollte auch hier die Umsetzung funktionieren.

Eine Funktionalität, die ich bisher noch nicht umgesetzt habe ist ein IF-Konstrukt, das es erlaubt basierend auf Variableninhalten unterschiedliche Teile auszugeben.

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

wkarl

Hallo Johannes,

bin nochmal Deine Beschreibung durchgegangen, um sicher zu gehen keinen grundlegenden Fehler zu haben. Aber das Ersetzen klappt nicht so.

Inhalt der Datei, die das Formular aufruft:
<!DOCTYPE html>
<html>
<head>


<title>EG Heizung</title>

</head>
<body>
<div class="gridster">

<ul>
<!-- Menu -->

<!-- Content -->
<li data-row="2" data-col="2" data-sizex="2" data-sizey="3">
<header><font size="+1">Bro</font></header>
<?ftui-inc="hhztemplateHKFH.part" dev="Buero_TC" ?>
</li>
</ul>

</div>

</body>
</html>



Das Formular selber:

<?ftui-header="HKFH" dev ?>

<div class="container">
<div class="container row big top-space">
<div class="col-1-2 left">
<div data-type="label"
data-device="<?ftuikey=dev ?>" data-get="measured-temp" data-unit="%B0C%0A" data-fix="1"
data-limits='[-20,20,24]' data-colors='["skyblue","darkorange","orangered"]'>
</div>
</div>
<div class="col-1-2 right">
<div data-type="label"
data-device="<?ftuikey=dev ?>" data-get="humidity" data-unit="%%0A" data-fix="1"
data-limits='[0,40,60]' data-colors='["skyblue","darkorange","orangered"]'>
</div>
</div>
</div>


</div>



Das gefilterte log:
2016.01.02 16:42:47.692 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_widget.js:
2016.01.02 16:42:47.742 5: MyTestUI: Request to :/TEST/hegr.ftui.html:
2016.01.02 16:42:47.743 5: MyTestUI: handletemplatefile :./www/TEST/hegr.ftui.html:
2016.01.02 16:42:47.744 4: MyTestUI: is real template :./www/TEST/hegr.ftui.html:
2016.01.02 16:42:47.744 4: MyTestUI: look for includes :./www/TEST/hegr.ftui.html:
2016.01.02 16:42:47.745 4: MyTestUI: include found :./www/TEST/hegr.ftui.html:    inc :hhztemplateHKFH.part:   vals :dev="Buero_TC" :
2016.01.02 16:42:47.745 4: MyTestUI: a key :dev: = :Buero_TC:
2016.01.02 16:42:47.746 4: MyTestUI: start handling include (rec) :./www/TEST/hhztemplateHKFH.part:
2016.01.02 16:42:47.746 5: MyTestUI: handletemplatefile :./www/TEST/hhztemplateHKFH.part:
2016.01.02 16:42:47.747 4: MyTestUI: done handling include (rec) :./www/TEST/hhztemplateHKFH.part: ok
2016.01.02 16:42:47.865 5: MyTestUI: Request to :/TEST/js/widget_label.js:
2016.01.02 16:42:47.865 5: MyTestUI: handletemplatefile :./www/TEST/js/widget_label.js:


Im screenshot siehst Du das Ergebnis.

Wo kann das Problem liegen?

Danke und ciao
walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

viegener

Zitat von: wkarl am 02 Januar 2016, 16:54:25
Hallo Johannes,

bin nochmal Deine Beschreibung durchgegangen, um sicher zu gehen keinen grundlegenden Fehler zu haben. Aber das Ersetzen klappt nicht so.


Ich habe es mir gerade angeschaut:

1) Nur Dateien, die den Teil ".ftui." im Dateinamen enthalten werden als templates behandelt und nur darin werden Ersetzungen durchgeführt. Das hat den Sinn, dass der Aufwand für die Suche nach Ersetzungen nur dann durchgeführt wird, wenn das auch notwenidgt ist.
hhztemplateHKFH.part müsste also besser hhztemplateHKFH.ftui.part heissen

2) In der Datei hhztemplateHKFH.part müsste statt ftuikey korrekterweise ftui-key stehen. Alle FTUISRV Schlüsselworte beginnen mit <?ftui-

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

wkarl

Hallo Johannes,

jetzt funktioniert es, Danke.

Zwei Probleme waren der Grund:

  • es muss narürlich ftui-key heissen
  • in Deiner Beschreibung beinhaltet der Name der .part Datei kein ftui

Ich nehme mal an, dass sowohl die aufrufende Datei als auch die .part Datei im Namen ein ftui haben muss. (nicht getestet, keine Zeit wg Schneeschippen)

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

wkarl

Hallo Johannes,

nun habe ich das erste Geschoss fertig basierend auf FTUISRV. Du hast einen Super-Job gemacht. Thumbs up.

Ich hätte gerne Dein Modul als Alternative zu der template-Lösung. Wie bekommen wir das realisiert?

Danke für Deine Arbeit und Geduld.
ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

kvo1

Hallo Johannes, hallo Walter,

Das hört sich ja gut an. Wenn ich mit meiner FTUI mal fertig bin schau ich mir das sicher auch an.
@Johannes, soll das mal über das normale Fhem-Update mit kommen, oder wo findet man dann DIE aktuelle Version.

Grüße an Euch  :D
Klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

viegener

Gute Frage  ;)

Die aktuelle Version findet sich in github hier:

https://github.com/viegener/Telegram-fhem/blob/master/ftuisrv/02_FTUISRV.pm

Das habe ich jetzt auch mal im ersten Post verlinkt. Wenn es mehr Benutzer gibt, wird es auch in die offizielle Verteilung aufgenommen. momentan muss man es noch manuell installieren.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

dancatt

Hi,

bezugnehmend auf meinen Post:
http://forum.fhem.de/index.php/topic,37378.msg395801.html#msg395801

Ich versuche auch gerade das Modul einzubinden aber ich bekomme folgenden Fehler:

Undefined subroutine &main::fileparse called at ./FHEM/02_FTUISRV.pm line 330.

Von wo kommt diese Methode "fileparse"?
Fehlt mir hier noch etwas?

Vielen Dank.
Gruß Daniel.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

viegener

Hallo Daniel,

Sorry war zwei Tage unterwegs und konnte deshalb nicht antworten. Im github
https://github.com/viegener/Telegram-fhem/blob/master/ftuisrv/02_FTUISRV.pm
findet sich eine neue Version. Zur Erklärung, das Problem tritt auf, weil bei Dir ein bestimmtes Modul nicht geladen ist, ich habe jetzt dafür gesorgt, dass das Modul für FTUISRV immer geladen wird. Damit sollte es funktionieren.

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

dancatt

Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

dancatt

Jetzt habe ich aber direkt die nächste Frage:

Bei folgender Definition:

<li data-row="1" data-col="2" data-sizex="2" data-sizey="2">
  <header>Esszimmer</header>
  <?ftui-inc="thermostat.ftui.part" device="1_01_EZ_Heizungsthermostat" ?>
</li>
<li data-row="1" data-col="4" data-sizex="2" data-sizey="2">
  <header>Esszimmer</header>
  <?ftui-inc="thermostat.ftui.part" device="1_01_EZ_2_Heizungsthermostat" ?>
</li>
<li data-row="1" data-col="6" data-sizex="2" data-sizey="2">
  <header>Wohnzimmer</header>
  <?ftui-inc="thermostat.ftui.part" device="1_02_WZ_Heizungsthermostat" ?>
</li>


wird mir nur ein Thermostat angezeigt (Siehe Anhang).

Gibt es noch irgendwas zu berücksichtigen?
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

viegener

Zitat von: dancatt am 23 Januar 2016, 15:32:42
wird mir nur ein Thermostat angezeigt (Siehe Anhang).

Gibt es noch irgendwas zu berücksichtigen?

Eigentlich sollte das so gehen, kann es sein, dass es in der .part-Datei ein problem mit nicht geschlossenen Elementen gibt?
kannst Du die Datei mal hier posten, dann kann ich sie mir anschauen?

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

dancatt

Zitat von: viegener am 24 Januar 2016, 02:13:48
Eigentlich sollte das so gehen, kann es sein, dass es in der .part-Datei ein problem mit nicht geschlossenen Elementen gibt?
Das wars. Danke.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

RoBra81

Hallo,

ich habe jetzt auch mal FTUISRV ausprobiert und es funktioniert prinzipiell. Wurde diese Frage schon beantwortet:

Zitat von: wkarl am 02 Januar 2016, 16:03:45
Und ne Frage - folgendes Konstrukt wird vermutlich nicht unterstützt?
data-device="<?ftuikey=dev ?>_TC"

??
Bei mir funktioniert nämlich folgendes Konstrukt nicht:

          <div data-type="label"
              data-device="Proplanta.de"
              data-get="fc<?ftui-key=number ?>_tempMax"
              data-unit="°C&nbsp;"
              class="bottom gigantic inline verticalLine">
          </div>


Wenn das nicht ginge, müsste ich nämlich statt einem Parameter fünf übergeben  :(

Ronny

wkarl

Hallo Ronny,

das läuft bei mir ohne Probleme.

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

RoBra81

#25
Zitat von: wkarl am 25 Januar 2016, 08:47:06
Hallo Ronny,

das läuft bei mir ohne Probleme.

ciao walter

Hast du da vielleicht eine Idee, wo mein Fehler liegen könnte? Hier ein Auszug meiner index.ftui.html:

        <li data-row="1" data-col="7" data-sizex="4" data-sizey="2" class="halbTransparent">
          <header class="headerTransparent">WETTER</header>
          <div data-type="swiper" data-height="220px" data-width="500px" class="top-space-2x left-space-2x transparent">
            <ul>
              <?ftui-inc="templates/wetter.part" fcnum="fc1" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc1" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc2" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc3" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc4" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc5" ?>
              <?ftui-inc="templates/wetter.part" fcnum="fc6" ?>
            </ul>
          </div>
        </li>


und hier die wetter.part:

<li class="transparent">
  <div>
    <div class="left">
      <div data-type="label"
          data-device="Proplanta.de"
          data-get="<?ftui-key=fcnum ?>_tempMax"
          data-unit="°C&nbsp;"
          class="bottom gigantic inline verticalLine">
      </div>
      <div class="inline">
        <div data-type="label"
            data-device="Proplanta.de"
            data-get="<?ftui-key=fcnum ?>_weatherDay"
            class="large cell">
        </div>
        <div data-type="weather"
            data-device="Proplanta.de"
            data-get="<?ftui-key=fcnum ?>_weatherDay"
            class="bigplus thin">
        </div>
        min:&nbsp;
        <div data-type="label"
            data-device="Proplanta.de"
            data-get="<?ftui-key=fcnum ?>_tempMin"
            data-unit="%B0C%0A"
            class="inline medium">
        </div>
      </div>
    </div>
    <div class="row">
    </div>
    <div class="left">
      <div data-type="label"
          data-device="Proplanta.de"
          data-get="<?ftui-key=fcnum ?>_date"
          data-substitution="toDate().eeee()+','"
          class="left large cell darker">
      </div>
      <div data-type="label"
          data-device="Proplanta.de"
          data-get="<?ftui-key=fcnum ?>_date"
          data-substitution="toDate().ddmm()"
          class="left large cell darker">
      </div>
    </div>
  </div>
</li>


Ronny

RoBra81

Hallo,

ich habe die Lösung gefunden: die wetter.part muss wetter.ftui.part heißen...

Eine Frage hätte ich dann noch: Wie kann ich FTUISRV (bzw. HTTPSRV) dazu bringen, nicht immer index.html laden zu wollen? Ich möchte die index.ftui.html als Startseite, er hängt aber immer ein #index.html dran  :(

Ronny

RoBra81

Zitat von: RoBra81 am 25 Januar 2016, 09:35:21
Hallo,

ich habe die Lösung gefunden: die wetter.part muss wetter.ftui.part heißen...

Eine Frage hätte ich dann noch: Wie kann ich FTUISRV (bzw. HTTPSRV) dazu bringen, nicht immer index.html laden zu wollen? Ich möchte die index.ftui.html als Startseite, er hängt aber immer ein #index.html dran  :(

Ronny

Hat sich auch erledigt, es lag am pagetab...

dancatt

Ist es auch möglich eine part-Datei in einer anderen part-Datei zu inkludieren?
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

viegener

Zitat von: dancatt am 27 Januar 2016, 13:35:11
Ist es auch möglich eine part-Datei in einer anderen part-Datei zu inkludieren?

Ja, solange es eine part-Datei ist funktioniert das und dabei werden auch die Variablen aus der übergeordneten Datei weitergeleitet, also kann man weitere Variablen hinzufügen und die vorherigen aus der umgebenden Datei auch verwenden.

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

Haecksler

Zitat von: viegener am 01 Januar 2016, 19:48:20
Aus meiner Sicht schon, da der Zusammenbau auf Server-Seite besser geeignet ist um Probleme mit Javascript bei den dynamischen Ladevorgängen zu vermeiden. Für das Javascript kommt dann wenigstens nur 1 Datei heraus. Ausserdem würde ich gerne immer noch eine Seite dynamisch aufbauen können.

Hallo viegener,
ist es denn irgendwie möglich, Werte aus einem Fhem dummy als Variable einzubinden?
Dann könnte man super eine dynamische Formatierungen in Abhängigkeit von Fhem-Werte machen.

Gruß,
Stefan

viegener

Zitat von: Haecksler am 07 Februar 2016, 11:34:26
Hallo viegener,
ist es denn irgendwie möglich, Werte aus einem Fhem dummy als Variable einzubinden?
Dann könnte man super eine dynamische Formatierungen in Abhängigkeit von Fhem-Werte machen.

Gruß,
Stefan

Hallo Stefan,
bisher nicht, wenn Du mir das Szenario genauer beschreibst, kann man das vermutlich machen?
Möchtest Du den Wert eines Readings, nur den State oder auch andere Werte einbeziehen?
Allerdings kann das Servermodul natürlich kein Auffrischen der Seite bei Events/Veränderungen am device machen. Das gehört in diesem Fall wieder ins tablet UI.
Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Haecksler

Hallo Johannes,
habe mir eine Wochenansicht der Heizzeiten (siehe Anhang).
Jetzt würde ich noch gerne den aktuellen Tag von semitransparent auf normal umstellen, um diesen hervorzuheben.
Ich könnte über Fhem ein Reading bereitsstellen welches "semitransparent" enthält oder eben nicht.

Gruß,
Stefan

viegener

Zitat von: Haecksler am 08 Februar 2016, 12:32:28
Hallo Johannes,
habe mir eine Wochenansicht der Heizzeiten (siehe Anhang).
Jetzt würde ich noch gerne den aktuellen Tag von semitransparent auf normal umstellen, um diesen hervorzuheben.
Ich könnte über Fhem ein Reading bereitsstellen welches "semitransparent" enthält oder eben nicht.

Gruß,
Stefan

Ich habe mal eine quick and Dirty-Lösung gebaut, die befindet sich in Github:

Darin kann man im Header von ftui-part-Dateien auch device-readings als default werte anfordern:

<?ftui-header="EinHeader dev="MeinDevice" dummy="NormalerWert" fhemwert="[eindevice:einreading]" ?>

Damit wird im folgenden für den key fhemwert das angebebene Reading eingesetzt (wenn es nicht beim include mit einem anderen Wert überschrieben wurde).

Kannst Du mal probieren ob das Deine Anforderung löst?
(Im Prinzip wären hier sogar beliebige perl statements möglich, denn ich habe einfach Rudi's set-logic hierfür verwendet)

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

dancatt

Hallo Johannes,

wann wandert denn nun das Modul ins SVN?
Das Modul scheint ja zu laufen bei denen die das im Einsatz haben.

Vielen Dank.

Gruß Daniel
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Haecksler

Zitat von: viegener am 09 Februar 2016, 01:27:18
Ich habe mal eine quick and Dirty-Lösung gebaut, die befindet sich in Github:

Darin kann man im Header von ftui-part-Dateien auch device-readings als default werte anfordern:

<?ftui-header="EinHeader dev="MeinDevice" dummy="NormalerWert" fhemwert="[eindevice:einreading]" ?>

Damit wird im folgenden für den key fhemwert das angebebene Reading eingesetzt (wenn es nicht beim include mit einem anderen Wert überschrieben wurde).

Kannst Du mal probieren ob das Deine Anforderung löst?
(Im Prinzip wären hier sogar beliebige perl statements möglich, denn ich habe einfach Rudi's set-logic hierfür verwendet)

Johannes
Danke! Werde ich testen, wird aber wahrscheinlich erst am WE passieren...melde mich wieder.
Gruß, Stefan

viegener

Zitat von: dancatt am 09 Februar 2016, 07:07:38
Hallo Johannes,

wann wandert denn nun das Modul ins SVN?
Das Modul scheint ja zu laufen bei denen die das im Einsatz haben.

Vielen Dank.

Gruß Daniel

Hallo Daniel,
das Ziel ist immer noch das in den nächsten Wochen freizugeben, ich wollte die neuen Funktionalitäten aber noch explizit von Leuten mit der neuesten Version getestet haben, bevor ich das an alle freigebe. Eine weitere ist gerade hinzugekommen, siehe unten:
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Ich habe gerade ins github eine Version 0.2 gestellt, die neben den bereits oben beschriebenen Änderungen eine Validierung für HTML enthält.

Hintergrund: Für das Tablet UI kann es relativ leicht passieren, dass invalides HTML entsteht, weil Tags nicht korrekt geschlossen werden. Dann kann die Darstellung zwar immer noch richtig aussehen, manche Browser sind dann aber pingeliger als andere und ohne Validierungstools sind solche Fehler auch schwer zu finden.

Es gibt deshalb im FTUISRV zwei Attribute um .htm(l) und .part-Dateien entsprechend on the fly zu prüfen.
validateFiles - schaltet die Prüfung für die Originaldateien ein
ValidateResult - schaltet die Prüdung für das geparste Ergebnis vor Übergabe an den Browser ein (Achtung Zeilennummern ändern sich)

Wenn die Werte auf (1 oder 2) gesetzt sind, kostet das natürlich Performance, wenn es zu langsam wird, kann man die Validierung auch nur temporär nach Umbauten einschalten.

Ausserdem enthält die 0.2 natürlich alle vorherigen Erweiterungen --> Header / default values / device Readings

Wenn ich positive Rückmeldung erhalte, würde ich diese Version auch in SVN überstellen.



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

Haecksler

Hallo Daniel,
habe nun mal folgendes getestet:

<?ftui-inc="templates/templateheizungTest.ftui.part" par01="HeizungZ1Mo" par02="HeizungZ2Mo" par03="HeizungZ3Mo" par04="HeizungZ4Mo" par05="HeizungAuto1_Montag" Tag="Montag" Layout="[HeizungAuto1_Montag:Layout]" Spalte="3"?>

Template sieht wie folgt aus:
<?ftui-header="TemplateHeizung" par01 par02 par03 par04 par05 Tag Layout Spalte>
<li data-row="2" data-col="<?ftui-key=Spalte ?>" data-sizex="1" data-sizey="4" class="<?ftui-key=Layout ?>">
<header><?ftui-key=Tag ?></header>
<div class="inline"><div data-type="range" data-color="green" data-color-low="green" data-color-high="green" data-device="<?ftui-key=par01 ?>" data-width="20" data-height="350" data-limit-low="8" data-limit-high="16" data-low="ZeitBerechnetMin" data-high="ZeitBerechnetMax" data-min="0" data-max="24" class="top-space left-space narrow"></div><br></div>
<div class="inline"><div data-type="range" data-color="orange" data-color-low="orange" data-color-high="orange" data-device="<?ftui-key=par03 ?>" data-width="20" data-height="350" data-limit-low="8" data-limit-high="16" data-low="ZeitBerechnetMin" data-high="ZeitBerechnetMax" data-min="0" data-max="24" class="top-space narrow nolabels"></div><br></div>
<div data-type="popup" data-draggable="true" data-height="480px" data-width="450px">
<div data-type="label" class="container round padding bg-gray semitransparent cell green">Einstellung<br>Heizzeiten</div>
<div class="dialog">
<header>Einstellung Heizzeiten</header>
<div data-type="label" class="cell">Zeit 1 AN</div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par01 ?>" data-cmd="setreading" data-get="Stunde" data-set="Stunde" data-min="0" data-max="23" data-step="1"  data-unit=" h" data-background-color="green" class="valueonly"></div></div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par01 ?>" data-cmd="setreading" data-get="Minute" data-set="Minute" data-min="0" data-max="59" data-step="1"  data-unit=" min" data-background-color="green" class="valueonly"></div></div>
<div data-type="label" class="cell">Zeit 1 AUS</div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par02 ?>" data-cmd="setreading" data-get="Stunde" data-set="Stunde" data-min="0" data-max="23" data-step="1"  data-unit=" h" data-background-color="blue" class="valueonly"></div></div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par02 ?>" data-cmd="setreading" data-get="Minute" data-set="Minute" data-min="0" data-max="59" data-step="1"  data-unit=" min" data-background-color="blue" class="valueonly"></div></div>
<div data-type="label" class="cell"><br><br>Zeit 2 AN</div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par03 ?>" data-cmd="setreading" data-get="Stunde" data-set="Stunde" data-min="0" data-max="23" data-step="1"  data-unit=" h" data-background-color="green" class="valueonly"></div></div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par03 ?>" data-cmd="setreading" data-get="Minute" data-set="Minute" data-min="0" data-max="59" data-step="1"  data-unit=" min" data-background-color="green" class="valueonly"></div></div>
<div data-type="label" class="cell">Zeit 2 AUS</div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par04 ?>" data-cmd="setreading" data-get="Stunde" data-set="Stunde" data-min="0" data-max="23" data-step="1"  data-unit=" h" data-background-color="blue" class="valueonly"></div></div>
<div class="inline"><div data-type="spinner" data-device="<?ftui-key=par04 ?>" data-cmd="setreading" data-get="Minute" data-set="Minute" data-min="0" data-max="59" data-step="1"  data-unit=" min" data-background-color="blue" class="valueonly"></div></div>
</div></div>
<div data-type="switch" data-device="<?ftui-key=par05 ?>" data-get="disabled" data-set-on="enable" data-set-off="disable" data-get-off="1" data-get-on="0" data-icon="fa-power-off" data-on-background-color="green" data-doubleclick="1000" style="font-size:250%" class="top-space"></div>
</li>


Der Wert vom Reading "[HeizungAuto1_Montag:Layout]" wird leider bei meiner Umsetzung nicht korrekt geladen.
Habe ich wo einen Denkfehler?

Gruß,
Stefan

viegener

Zitat von: Haecksler am 14 Februar 2016, 19:06:11
Der Wert vom Reading "[HeizungAuto1_Montag:Layout]" wird leider bei meiner Umsetzung nicht korrekt geladen.
Habe ich wo einen Denkfehler?

Gruß,
Stefan


Die Ersetzung funktioniert nur innerhalb von ftui-header, also müsstest Du den Inhalt für eine Variable im ftui-header angeben,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Haecksler

Zitat von: viegener am 15 Februar 2016, 00:40:16
Die Ersetzung funktioniert nur innerhalb von ftui-header, also müsstest Du den Inhalt für eine Variable im ftui-header angeben,
Johannes
Dachte ich mir fast....habe nun für jeden Tag ein Header-Template erstellt...scheint zu funktionieren siehe Screenshot.
Nun sollte der aktuelle Tag immer grünlich eingefärbt sein.
Gruß,
Stefan


viegener

Zitat von: Haecksler am 15 Februar 2016, 21:36:00
Dachte ich mir fast....habe nun für jeden Tag ein Header-Template erstellt...scheint zu funktionieren siehe Screenshot.
Nun sollte der aktuelle Tag immer grünlich eingefärbt sein.
Gruß,
Stefan


Danke Dir für's testen!
Ich habe noch eine Erweiterung gemacht, das auch im ftui-inc tag Readings ersetzen werden. Das macht es vermutlich für manche Szenarien einfacher.

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

Haecksler

Hallo Johannes,
habe nun endlich mal gestest, ob das mit dem ftui-inc tag Readings ersetzen funktioniert.. tut es leider nicht.
Habe erst heute die "02_FTUISRV.pm" aus dem 1 Thread geladen...ist das die richtige?

Es gibt aber auch eine gute Nachricht 02_FTUISRV.pm scheint problemlos mit FTUI 2.2 zulaufen.

Gruß,
Stefan

viegener

Zitat von: Haecksler am 25 April 2016, 19:20:52
Hallo Johannes,
habe nun endlich mal gestest, ob das mit dem ftui-inc tag Readings ersetzen funktioniert.. tut es leider nicht.
Habe erst heute die "02_FTUISRV.pm" aus dem 1 Thread geladen...ist das die richtige?

Es gibt aber auch eine gute Nachricht 02_FTUISRV.pm scheint problemlos mit FTUI 2.2 zulaufen.

Gruß,
Stefan

Ich habe diese Version erst jetzt im ersten Beitrag hochgeladen.
Die neueste Version findet sich aber immer in github: https://github.com/viegener/Telegram-fhem/tree/master/ftuisrv

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

viegener

OK, dann habe ich auch gleich die letzte Version ins SVN hochgeladen, ab morgen gibt es das Modul über den normalen Update.
Ankündigung hier: https://forum.fhem.de/index.php/topic,52655.0.html


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

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

rhya

#60
Huhu und vielen Dank für Dein Feedback. Das mit den Code-Tags versuche ich mir mal anzugewöhnen, bin noch recht neu hier und an sich nicht sehr aktiv in Foren.

Das Problem mit den "variablen Variablen" konnte ich tatsächlich mit
<?ftui-header="part.heizung.ftui.html" deviceValve="<?ftui-key=device ?\>" ?>
lösen. Besten Dank für den Tipp.

Mein IF funktioniert nun ebenfalls mit
<?ftui-if=( {(  ReadingsNum("<?ftui-key=deviceValve ?>","ValvePosition", 0) > 30 )} ) ?>

Manmanman, so früh am Morgen und schon zwei Sachen erledigt. Der Wahnsinn :)

edit:
Habe außerdem mit folgendem Code
<?ftui-if=( {(length('<?ftui-key=cssfile ?>') > 0 )} ) ?>
abgeprüft ob eine Variable überhaupt gefüllt ist um davon abhängig etwas zu tun oder zu lassen ;)

Eisix

Hallo viegener,

gestern über das Modul gestolpert. Genau das hatte ich gesucht. Funktioniert einwandfrei. Top!
Nutze FTUI 2.4.
Was mir aufgefallen ist eine andere Darstellung/Handling des Video widgets. Nutze das ganze mit video.js zum stream abspielen und nun wird der Play Button richtig dargestellt was mit dem Standard server nicht der Fall ist.

Gruß
Eisix

viegener

Zitat von: Eisix am 13 Januar 2017, 17:59:26
Hallo viegener,

gestern über das Modul gestolpert. Genau das hatte ich gesucht. Funktioniert einwandfrei. Top!
Nutze FTUI 2.4.
Was mir aufgefallen ist eine andere Darstellung/Handling des Video widgets. Nutze das ganze mit video.js zum stream abspielen und nun wird der Play Button richtig dargestellt was mit dem Standard server nicht der Fall ist.

Gruß
Eisix


Schön das es geht!

Verstehe ich das richtig, dass mit FTUISRV der Button funktioniert, der mit HTTPSRV nicht funktioniert?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Eisix

Hallo,

habe gerade nochmal getestet und bin zurück zu HTTPSRV.
Hänge mal den Code an dann versteht man besser was ich meine.


<!DOCTYPE html>
<html>
<head>
<link href="node_modules/video.js/dist/alt/video-js-cdn.css" rel="stylesheet">
<script src="node_modules/video.js/dist/video.js"></script>
<script src="node_modules/videojs-contrib-hls.js/node_modules/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<header>Kamera1</header>
        <video id="my-video" class="video-js" controls preload="auto" width="345" height="200"
                poster="http_link/live/snapshot_720.jpg" data-setup="{}">
                <source src="http_link/live/files/medium/index.m3u8" type='application/x-mpegURL'>
        </video>
</body>
</html>



Damit spiele ich den livestream direkt von Netatmo Kameras ab. Mit HTTPSRV funktioniert das nur mit Fully und Safari, allerdings werden die controls des Players nicht so angezeigt wie sie normalerweise sein sollten nach video-js doku.
Mit FTUISRV funktioniert es auch mit Chrome und Firefox und die controls werden Korrekt angezeigt.
Somit scheint FTUISRV näher am Standard zu sein, zumindest im Video bereich ;).

Gruß
Eisix

viegener

Zitat von: Eisix am 13 Januar 2017, 21:57:03
Hallo,

habe gerade nochmal getestet und bin zurück zu HTTPSRV.
Hänge mal den Code an dann versteht man besser was ich meine.


<!DOCTYPE html>
<html>
<head>
<link href="node_modules/video.js/dist/alt/video-js-cdn.css" rel="stylesheet">
<script src="node_modules/video.js/dist/video.js"></script>
<script src="node_modules/videojs-contrib-hls.js/node_modules/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<header>Kamera1</header>
        <video id="my-video" class="video-js" controls preload="auto" width="345" height="200"
                poster="http_link/live/snapshot_720.jpg" data-setup="{}">
                <source src="http_link/live/files/medium/index.m3u8" type='application/x-mpegURL'>
        </video>
</body>
</html>



Damit spiele ich den livestream direkt von Netatmo Kameras ab. Mit HTTPSRV funktioniert das nur mit Fully und Safari, allerdings werden die controls des Players nicht so angezeigt wie sie normalerweise sein sollten nach video-js doku.
Mit FTUISRV funktioniert es auch mit Chrome und Firefox und die controls werden Korrekt angezeigt.
Somit scheint FTUISRV näher am Standard zu sein, zumindest im Video bereich ;).

Gruß
Eisix

So sehr mir das gefallen würde, aber da FTUISRV vom Grundsatz ein HTTPSRV ist (nur mit zusätzlichen Möglichkeiten) und die iegentlich Abhandlung des http_protokolls sowieso im FHEMWEB liegt muss der Unterschied irgendwo anders liegen (bei Firefox vielleicht caching)?

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

Eisix

Hallo,

bin davon ausgegangen das FTUISRV auf HTTPSRV aufbaut deshalb war ich auch so erstaunt über das unterschiedliche Verhalten. Vielleicht hast du durch deine Erweiterungen einen kleinen  Bug in HTTPSRV gefixt, ich weiss es nicht.

Wie auch immer, ich habe ein anderes Problem. Ich möchte die data-limits für die Temperaturanzeige dynamisch anpassen. Also eine Berechnung mit der übergebenen Variablen durchführen.


<?ftui-header="Thermostat" EINSCHALTTEMP STELLMOTOR SENSOR LOG MIN="<?ftui-key=EINSCHALTTEMP ?>-3" MED="<?ftui-key=EINSCHALTTEMP ?>-1"  MAX="<?ftui-key=EINSCHALTTEMP ?>+2"  ?>

Geht das und wenn wie?

Gruß
Eisix

viegener

Ja das geht, denn Du kannst ja set-logik verwenden und damit auch Perl-Befehle aufrufen oder direkt perl-code ausführen, ich habe zum Beispiel im Header eine Funktion, die den Aliasnamen eines Devices berechnet:

<?ftui-header="TempHum vertical" thdev thformat thalias="{(getAliasName( '<?ftui-key=thdev ?\>' ) )}" thtemp="temperature" showlabel=0 ?>
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Eisix

Hallo,

finde den Fehler! :)
Im ernst kann mal jemand drüber schauen wo meine Fehler liegen.

Header ftui.html

<!DOCTYPE html>
<html>
<head>

<script type="text/javascript" language="JavaScript">
function calcLIMITS (TEMPERATUR, OFFSET)
{
var LIMIT = (TEMPERATUR - (OFFSET));
return LIMIT;
}
</script>

</head>
<body>



Anfang Part file

<?ftui-header="Thermostat" EINSCHALTTEMP STELLMOTOR SENSOR LOG LIMITMIN="{(calcLIMITS('<?ftui-key=EINSCHALTTEMP ?\>',"-3"))}" LIMITMED="{(calcLIMITS('<?ftui-key=EINSCHALTTEMP ?\>',"-1"))}" LIMITMAX="{(calcLIMITS('<?ftui-key=EINSCHALTTEMP ?\>',"1"))}" ?>

<div class="container">
        <div class="top">
                <div data-type="spinner"
                        data-device="<?ftui-key=EINSCHALTTEMP ?>"
                        data-icon-left-color="blue"
                        data-icon-right-color="red"
                        data-step="0.5"
                        data-min="10"
                        data-max="30"
                        data-unit="°"
                        data-height="100%"
                        class="valueonly col-4-5"
                data-text-color="<?ftui-key=STELLMOTOR ?>:stateColor"
       ></div>
</div>
<div class="cell inline">
        <div data-type="popup" data-width="450px" data-height="310px" class="">
                <div data-type="label"
                        data-device="<?ftui-key=SENSOR ?>"
                        data-get="temperature"
                        data-limits='[<?ftui-key=LIMITMIN ?>,<?ftui-key=LIMITMED ?>,<?ftui-key=LIMITMAX ?>]'
                        data-colors='["#6699FF","#21a000","#bb6242"]'
                        data-unit="%B0C%0A"
                        class="cell big thick"
                        data-part="1"
                ></div>


Funktioniert so nicht ist was an der Übergabe der zwei Werte falsch?

Gruß
Eisix

viegener

Zitat von: Eisix am 20 Januar 2017, 15:52:10
Hallo,

finde den Fehler! :)
Im ernst kann mal jemand drüber schauen wo meine Fehler liegen.



Der Fehler ist einfach, Du versuchst aus perl eine Javascript-Funktion aufzurufen, der Teil im FTUI-Header wird in FHEM ausgeführt und es geht wie oben geschrieben um perl-code nicht um JS im HTML-File
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Eisix

Kannst du mir deine Funktion getAliasName als Beispiel schicken. Vielleicht verstehe ich es dann.

Gruß
Eisix

viegener

Zitat von: Eisix am 25 Januar 2017, 18:16:38
Kannst du mir deine Funktion getAliasName als Beispiel schicken. Vielleicht verstehe ich es dann.

Gruß
Eisix

Klar die Funktion findest Du unten.

Zur Erklärung nochmal, die FTUISRV-Elemente werden innerhalb auf FHEM ausgeführt und müssen deshalb in FHEM funktionieren also wie Code in myutils aufgebaut sein.

Du hast eine Javascript Funktion in Deinem Code, die läuft im Browser aber eben nicht in FHEM.

Das Konzept ist genauso wie in PHP, da wird der Code auch auf dem Server ausgeführt:


##############################################
# get alias if set or device name
sub getAliasName($) {

  my ($sdev) = @_;

  my $name = AttrVal( $sdev, "alias", $sdev );

  return $name
}


Die Funktion steht bei mir übrigens auch in myutils
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Eisix

Hallo viegener,

dein Satz
Zitat
ich habe zum Beispiel im Header eine Funktion, die den Aliasnamen eines Devices berechnet:
hat mich auf die falsche Bahn gebracht. Du rufst im Header eine Funktion auf und ich dachte die steht im Header.

myutilitys

##############################################
# Temperature offset for Thermostat spinner
##############################################
sub calcLIMITS($$)
{
my ($TEMPERATUR, $OFFSET) = @_;
my $LIMIT = $TEMPERATUR + ($OFFSET);
return $LIMIT;
}


Funktioniert jetzt. Danke.

Gruß
Eisix


DocCyber

#72
Hallo zusammen,

ich bekomme es nicht hin, eine übergebene Variable (hier: icon)  an eine weitere part-Datei durchzureichen. Kleines Beispiel zur Erläuterung hier:



<!-- subpage.ftui.part aufrufen, um einen Titel  auszugeben und einen Pagebutton zu erzeugen: -->
<?ftui-inc = "subpage.ftui.part" title="Telefon" icon="fa-phone" ?>



subpage.ftui.part

<?ftui-header="subpage" title icon ?>
<div class="medium"><?ftui-key=title?></div>  <!-- Titel ausgeben -->
<?ftui-inc = "pagebutton.ftui.part" icon=<?ftui-key=icon ?> url="eineSite.html" ?>
  ... ...

Ist der obige Ausdruck  icon=<?ftui-key=icon ?>  richtig?? Ich fürchte nein...


pagebutton.ftui.part

<?ftui-header = "pagebutton" icon url ?>
<div class="pagebutton"
    data-icon = "<?ftui-key=icon ?>"
    data-url = "<?ftui-key=url ?>"
    ... ...
</div>



Irgendwie stehe ich gerade auf dem Schlauch.  ::)
Danke euch vorab für eure Hilfe!


Sieht so aus, als hätte ich die Ursache gefunden -> der FTUISRV-Code ist offenbar sehr kritisch!
Bei Zuweisungen darf kein Blank vor oder nach dem Gleichheitszeichen stehen!
Im Gegensatz dazu muss vor jedem abschließenden Tag ?> ein Leezeichen stehen.

@Viegener: Siehst du eine Chance, das mit vertretbarem Aufwand zu ändern bzw anzupassen?
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: Nein das ist machbar, ich habe mal eine neue Version ins update gestellt, sollte morgen verfügbar sein. An vilen Stellen werden Leerzeichen jetzt akzeptiert und überlesen am Ende muss keines mehr vor dem ? sein. Es wird sicher nicht vollständig tolerant gegenüber fehlenden / zusätzlichen Trennzeichen sein.

Ausserdem ist das neue Attribut templatefile hinzugekommen um Dateien auch ohne .ftui. als templatefiles behandeln zu lassen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DocCyber

Zitat von: viegener am 08 Februar 2017, 22:17:57
... ich habe mal eine neue Version ins update gestellt, sollte morgen verfügbar sein.

Super - danke!!  :)
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.

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?

DocCyber

Hallo zusammen


Das FTUISRV-Modul finde ich hervorragend und ich nutze es sehr intensiv.


Allerdings stoße ich bei der Übergabe eines Daten-Arrays (wie z.B. data-items für das select-Widget) auf ein Problem:
Das Array wird nicht (korrekt) übergeben.

Ohne FTUISRV ist dies der korrekte Code:

data-type="select" data-device="wbsettings" data-items='["0","1"]' data-alias='["aus","ein"]' data-get="automode" data-set="automode" data-cmd="setreading"


Mein Aufruf mit FTUISRV sieht dann so aus:

<?ftui-inc="_settings.ftui.part" dtype="select" ddevice="wbsettings" dget="automode" dset="automode" dcmd="setreading" ditems='["0","1"]'  dalias='["aus","ein"]' ?>


_settings.ftui.part sieht so aus:

<?ftui-header="_settings" dtype ddevice dget dset dcmd ditems dalias ?>
<div data-type='<?ftui-key=dtype ?>'
  data-device='<?ftui-key=ddevice ?>'
  data-get='<?ftui-key=dget ?>'
  data-set='<?ftui-key=dset ?>'
  data-cmd='<?ftui-key=dcmd ?>'
  data-items='<?ftui-key=ditems ?>'
  data-alias='<?ftui-key=dalias ?>' >
</div>


Ich habe schon mit single Quotes(') und double Quotes(") experimentiert, aber egal wie ich es auch versuche:
Die Ersetzung liefert bei data-items stets ein leere Zeichenkette...


Kann mir hier jemand weiterhelfen?
Wie lautet der korrekte Aufruf? Oder geht's nicht?  :o

Wie gesagt: bei anderen Widgets habe ich keine Problem, aber mit dem Daten-Array klappt es nicht
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.