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

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

Vorheriges Thema - Nächstes Thema

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.