Es ist etwas schwierig eine passende Überschrift zu finden, aber hier mal mein "Problem":
Ich nutze verschiedene Tablets/PCs/usw. gleichzeitig zur Anzeige meiner TabletUI Oberfläche. Bisher habe ich bestimmte Informationen (beispielsweise ob ein Kamerabild angezeigt wird oder nicht) in Dummys gesichert. Dummerweise verhält sich dann aber jedes TabletUI gleich.
Workaround:
Ich baue für jedes Gerät eine eigene index.html, in der das betreffende Dummy Device je Gerät angepasst wird (z.b: index_tablet1.html nutzt Dummy_Tablet1 usw.).
Allerdings ist das a) aufwändig und b) unflexibel.
Schöner wäre es, wenn ich z.B. die IP-Adresse des Gerätes nutzen könnte um gezielt auf ein Dummy Device zuzugreifen (z.B. Dummy_192.168.0.5 für einen Client mit IP 192.168.0.5).
Dazu hab' ich jetzt nur noch 3 kleine Fragen:
- woher bekomme ich die IP Adresse des Clients ?
- wie Übergebe ich die Adresse als Teil des Gerätenamens an ein Widget ?
- gibt es vielleicht eine einfachere Lösung, die ich übersehen habe ?
Hi,
könntest Du mal sagen, was genau Du im Endeffekt erreichen willst?
Gruß,
Thorsten
Ich hab' zum Beispiel bisher folgendes Umgesetzt:
- Bewegungsmelder an der Haustür stellt Bewegung fest
- ein userReading der Kamera wird entsprechend "on" gesetzt
- ein Timer wird gestartet
- ein Popup in TABLETUI mit dem Kamerabild öffnet sich
- nach Ablauf des Timers geht das Popup automatisch zu
Das gleiche Popup wird aber auch durch einen klick auf ein Vorschaubild angezeigt.
Dadurch, daß die Sichtbarkeit des Popups am userReading der Kamera hängt, öffnet sich das Popup auf allen Geräten und nicht nur auf dem, an dem ich selbst drauf clicke.
Ich hab' allerdings vor auf das Popup zu verzichten, wodurch diese Anwendung nicht mehr benötigt würde, aber interessieren würde es mich trotzdem.
Hi,
es ist tatsächlich nicht einfach, am Client die eigene IP-Adresse zu finden. Am Server geht das aber. Wenn irgendwas über FHEMWEB "reinkommt" (und das ist im Prinzip auch bei FTUI der Fall), dann steht die Client-IP normalerweise in
$defs{$main::FW_cname }{PEER}
Das könnte man sich möglicherweise per Javascript (Ajax) Aufruf holen und dann damit weiterarbeiten.
...das ist nur so eine erste Idee, vielleicht hilft's ja weiter.
Gruß,
Thorsten
Danke für die Info. Ich weiß wie gesagt noch nicht 100% ob ich es in der Form brauche, aber falls ja hab' ich schonmal einen Ansatz.
Also wenn ich das richtig verstehe sind die Clients die Tablets oder?
Die IP-Adressen bekomme ich doch durch den Webrouter raus. Ansonsten kann man doch in jedem Gerät/Tablet die IP auslesen oder feste IP vergeben.
Ich würde die PopUps für jedes Tablet anlegen, d.h. 5 Tablet = 5x Kamera-Popup, die anderen Userreadings, Timer usw. müssen ja nur einmal angelegt werden.
In dem Fall, dass eine automatische Meldung kommt würde ich ein Doif setzen, bei welchen Tablets dass PopUp aufgehen soll.
Ja, die Clients sind die Tablets, Handys usw. Die IP Adressen hab' ich im Router statisch vergeben, das ist nicht das Problem ... die passenden Dummies zur jeweiligen IP anzulegen auch nicht. Die Frage ist
- wie lese ich die Adresse aus und wie erzeuge ich dynamisch den Namen des Dummies für den Zugriff in TABLETUI
Beispiel:
Das Tablet hat die IP 192.168.100.50. Der zugehörige Dummy heißt dann z.B. entsprechend Dummy50 (letzer Teil reicht im lokalen Netz) und enthält die zugehörigen Userreadings.
Mein TABLETUI html/js müsste jetzt folgendes tun:
- IP Adresse 192.168.100.50 ermitteln (evtl. über $defs{$main::FW_cname }{PEER})
- in den data-device Angaben, die den Dummy verwenden, den Namen Dummy50 (Dummy51, Dummy52 usw.) einsetzen
Hi,
es hat mich doch nicht so ganz los gelassen...
Diese Seite hier zeigt die IP des Clients an, zumindest wenn sie ganz normal als FTUI-Seite läuft:
<!DOCTYPE html>
<html>
<head>
<script src="js/fhem-tablet-ui.js" defer></script>
<script src="lib/jquery.min.js"></script>
</head>
<body>
<div class="gridster">
<ul>
<li data-row="1" data-col="1" data-sizex="3" data-sizey="3">
<header>This is running on...</header>
<div id="herewego"></div>
</li>
</ul>
</div>
<script>
function getPeer() {
if(!ftui.config.csrf) {
ftui.getCSrf();
setTimeout(getPeer,5);
return;
};
ftui.sendFhemCommand('{ $defs{$main::FW_cname }{PEER} }')
.done(function (result) {
$("#herewego").html(result);
});
};
$(getPeer);
</script>
</body>
</html>
Dummerweise kann man damit (soweit ich weiß) nicht wirklich das data-device eines Widgets beeinflussen. FTUI liest glaube ich alles am Anfang einmal aus und speichert es in verschiedenen Listen. Ändern ist dann etwas schwierig.
Im Prinzip müsste man das machen, bevor die Seite überhaupt erzeugt wird. Mit FUIP könnte man da vielleicht was machen, aber mit "purem" FTUI wird das selbst dann schwierig, wenn man FTUI selbst ändert. (Außer jemand weiß, wie man data-device von Javascript aus "ordentlich" ändert.)
Gruß,
Thorsten