[PATCH] FHEMWEB/FLOORPLAN: longpoll für Floorplan

526 views
Skip to first unread message

Matthias Gehre

unread,
Nov 24, 2012, 6:28:25 AM11/24/12
to fhem-de...@googlegroups.com
Hallo,

auf Anfrage habe ich einen Patch geschrieben, der auch mit dem Floorplan Modul longpoll erlaubt.

Als nächstes wäre es schön, wenn nicht nur STATE, sondern auch z.B. die dropdown box desiredTemperature per longpoll aktualisiert werden könnte.
Dazu würde ich aber gerne erstmal die Meinung des FHEMWEB Maintainers hören.


Außerdem Frage ich mich, warum dieses ziemlich coole Feature nicht per Default aktiviert ist. Hätte Uli mich nicht darauf angesprochen, hätte ich es gar nicht bemerkt.

Zum Patch:
In FHEMWEB wird der Aufruf der FHEMWEB Module hinter das bearbeiten von inform requests geschoben.
In FLOORPLAN wird longpoll aktiviert, und einige id="$devicename" geändert. Nur der HTML Tag vom State darf diese id haben,
da alle Tags mit dieser id vom fhemweb.js mit dem neuen State überschrieben werden.

Viele Grüße,
Matthias

Martin Fischer

unread,
Nov 24, 2012, 6:58:25 AM11/24/12
to fhem-de...@googlegroups.com
Am Samstag, 24. November 2012, 12:28:25 schrieb Matthias Gehre:
> [...]
> Außerdem Frage ich mich, warum dieses ziemlich coole Feature nicht per
> Default aktiviert ist. Hätte Uli mich nicht darauf angesprochen, hätte ich
> es gar nicht bemerkt.

weil es bei bei anderen werten zu fehlern führt, da wahrschlich das javascript
einen fehler enthält. bisher hatte ich noch nicht die lust und zeit mir das
näher anzusehen.

siehe bilder im anhang... auf "wundersame" weise werden die werte der sensoren
nach und nach geleert. passiert nur bei longpoll.

gruss
FHEM-longpoll-01.png
FHEM-longpoll-02.png
FHEM-longpoll-03.png

Matthias Gehre

unread,
Nov 25, 2012, 4:13:51 AM11/25/12
to fhem-de...@googlegroups.com
Hallo,

der Patch müsste auf den Überordner von FHEM angewendet werden.
Bei mir gibt's z.B. Projects/fhem/FHEM/95_FLOORPLAN.pm,
der Patch müsste dann im Order fhem angewandt werden.

Anbei die beiden vollständigen Dateien. (In FHEMWEB ist noch ein desired-temp/desiredTemperature Änderung mit drin
, die kannst du ignorieren). IT Funkschalter und die MAX Module
funktionieren bei mir mit Longpoll, anderes habe ich nicht getestet.

Viele Grüße,
Matthias


Am 24. November 2012 19:28 schrieb Ulrich Maass <uli....@gmail.com>:
Hi,
ah, ok.
Hab's grad versucht - setzt eine bestimmte Ordnerstruktur voraus, die ich leider nicht habe.

Hab beide Dateien manuell aktualisiert - jetzt funktioniert longpoll in keiner der beiden :(
Muss evtl auch was an einem der .js geändert werden?

Gute Reise + Grüße,
Uli


01_FHEMWEB.pm
95_FLOORPLAN.pm

UliM

unread,
Nov 25, 2012, 8:49:41 AM11/25/12
to fhem-de...@googlegroups.com


Am Sonntag, 25. November 2012 10:13:52 UTC+1 schrieb Matthias Gehre:
 IT Funkschalter und die MAX Module
funktionieren bei mir mit Longpoll, anderes habe ich nicht getestet.

Hi Matthias,
hab gerade mit den von Dir angehängten pm-Dateien probiert.
Nach state-Wechsel eines device durch Schalten im HW-System werden damit die icons sowohl in FHEMWEB als auch in FLOORPLAN aktualisiert :-)))))
Hab's mit FS20 gestetet. Sollte eigentlich unabhängig vom HW-System funzen.

Allerdings lässt sich im Webfrontend jedes icon nur einmal schalten: Nachdem es durch longpoll aktualisiert wurde oder einmal durch klick geschaltet wurde, zeigt danach ein klick auf das icon keinen Effekt mehr.  Kannst Du das bitte noch mal prüfen oder mir sagen, wie ich hier Fehleranalyse betreiben kann?


Durch das Anpassen in floorplan.pm von zB
FW_pO "   <tr class=\"devicename fp_$FP_name\" id=\"$d\">";
auf
FW_pO "   <tr class=\"devicename fp_$FP_name\" id=\"$d-devicename\">";

könnten bei anderen usern css-Formatierungen hops gehen, die sich auf
.<devicename>
beziehen.
Werde mal testen, ob longpoll weiter funzt, wenn ich die bisherige id zusätzlich drin lasse.
FW_pO "   <tr class=\"devicename fp_$FP_name\" id=\"$d $d-devicename\">";

Ist die Änderung denn bei table-$d, $d-devicename, $d-devicetimestamp und $d-devicecommands wirklich erforderlich? Es wird doch nur der state aktualisiert, oder?
Würde diese Änderungen wenn möglich lieber rauslassen, um wie gesagt die css-Formatierungen in den lokalen Installationen nicht zu beeinträchtigen.

Was meinst Du?

Gruß, Uli

Matthias Gehre

unread,
Nov 25, 2012, 9:13:40 AM11/25/12
to fhem-de...@googlegroups.com
fhemweb.js ersetzt innerhalb des Tags mit id="$d" den Inhalt durch den neuen State. Wenn jetzt alle (devicename, devicetimestamp etc) die gleiche Id haben, dann verschwinden die alle nach einem State update.

Wegen den Klicks: Muss ich gucken.


--
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.
Besuchen Sie https://groups.google.com/d/msg/fhem-developers/-/O4DCs7lHNigJ, um diese Diskussion im Web anzuzeigen.

Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-de...@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-develope...@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-developers?hl=de, um weitere Optionen zu erhalten.

Matthias Gehre

unread,
Nov 25, 2012, 1:10:32 PM11/25/12
to fhem-de...@googlegroups.com
Mit angehängter FHEMWEB funktionieren auch die Klicks.
Der Trick war, dass man FHEMWEB das Ausführen der Commands & das XHR
Handling überlässt, indem der Teil vor den Aufruf des Floorplans geschoben wird.

Der Unterschied kam daher, dass FHEMWEB im Longpoll Mode Links der Form
"<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$txt</a>"
anstatt
"<a href=\"$FW_ME$FW_subdir?$link$rf\">$txt</a>"
sendet.

FLOORPLAN sollte das eigentlich auch tun (im Moment passiert das erst nach der erster
Modusveränderung). Anstatt das nachzuprogramieren würde ich aber die Funktionalität in FHEMWEB
in eine Funktion ausgliedern und dann von FLOORPLAN nur aufrufen.
01_FHEMWEB.pm

Rudolf Koenig

unread,
Nov 26, 2012, 12:42:17 PM11/26/12
to fhem-de...@googlegroups.com
> Mit angeh�ngter FHEMWEB funktionieren auch die Klicks.

Die Aenderung:
$me->{inform} = ($FW_room ? $FW_room : "all");
schaltet das "Event-Log" (aka console) aus -> habs nicht eingespielt.

UliM

unread,
Nov 26, 2012, 1:07:00 PM11/26/12
to fhem-de...@googlegroups.com


Am Sonntag, 25. November 2012 19:10:33 UTC+1 schrieb Matthias Gehre:
Mit angehängter FHEMWEB funktionieren auch die Klicks.

Klasse, danke! 
Teste gerade alle möglichen Reihenfolgen von Klicks - erst fhemweb, dann floorplan, erst Statuswechsel durch HW, dann durch fhemweb, dann durch floorplan etc etc


 
Der Trick war, dass man FHEMWEB das Ausführen der Commands & das XHR
Handling überlässt, indem der Teil vor den Aufruf des Floorplans geschoben wird.

Der Unterschied kam daher, dass FHEMWEB im Longpoll Mode Links der Form
"<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$link')\">$txt</a>"
anstatt
"<a href=\"$FW_ME$FW_subdir?$link$rf\">$txt</a>"
sendet.

FLOORPLAN sollte das eigentlich auch tun (im Moment passiert das erst nach der erster
Modusveränderung). Anstatt das nachzuprogramieren würde ich aber die Funktionalität in FHEMWEB
in eine Funktion ausgliedern und dann von FLOORPLAN nur aufrufen.

Das ist schon so: Der Link wird durch Aufruf von FW_devState() in Zeile fp_416 gebaut.
Der Wert von $longpoll ist aber beim ersten Durchlauf undef. Suche noch ne passende Stelle in fhemweb, wo $longpoll sinnvoll initialisiert werden kann.
 
Würde (nicht nur) mich seeeehr freuen wenn das hinzubekommen wäre :)

LG, Uli

Matthias Gehre

unread,
Nov 26, 2012, 1:26:29 PM11/26/12
to fhem-de...@googlegroups.com
Danke für den Hinweis, ich wusste nicht dass inform=console funktioniert. Mit dem alten Patch funktionierte zwar noch
?room=console&XHR=1&inform=1
ich habs aber trotzdem rausgenommen.

Was mich überhaupt zu der Änderung

 $me->{inform} = ($FW_room ? $FW_room : "all");
bewog, habe ich eben erste gemerkt:
FW_digestCgi zerteilt die URL /fhem/floorplan/Grundriss?room=all&XHR=1&inform=1
in die Teile (floorplan/Grundriss?room, all), (XHR, 1), (inform, 1).
Dadurch wurde $FW_room nicht gesetzt, und FW_Notify funktionierte mit Floorplan nicht.
Das ist im Patch jetzt mit drin.



Am 26. November 2012 18:42 schrieb Rudolf Koenig <inf...@koeniglich.de>:
> Mit angehängter FHEMWEB funktionieren auch die Klicks.

Die Aenderung:
   $me->{inform} = ($FW_room ? $FW_room : "all");
schaltet das "Event-Log" (aka console) aus -> habs nicht eingespielt.
--
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.
FHEMWEB-FLOORPLAN-longpollV4.patch

Rudolf Koenig

unread,
Nov 27, 2012, 3:01:04 AM11/27/12
to fhem-de...@googlegroups.com
> Das ist im Patch jetzt mit drin.

Eingecheckt.

UliM

unread,
Nov 27, 2012, 3:14:38 PM11/27/12
to fhem-de...@googlegroups.com


Am Samstag, 24. November 2012 12:28:26 UTC+1 schrieb Matthias Gehre:
auf Anfrage habe ich einen Patch geschrieben, der auch mit dem Floorplan Modul longpoll erlaubt.

floorplan ebenfalls eingecheckt.

Nochmals vielen vielen Dank, Matthias!


UliM

unread,
Dec 7, 2012, 1:29:32 PM12/7/12
to fhem-de...@googlegroups.com
Hi Matthias,
In floorplan gibt's noch ein paar unschöne Effekte mit longpoll:
- devices mit style 3 (reading anzeigen) werden mit state aktualisiert - das sieht dann nicht so schön aus :) Da muss ich nur die css-id ändern, richtig?
- auf dem iPad verschwindet nach einem state-Wechsel das icon ganz und gar, hast Du ne Idee wie man das angehen könnte?

Auch gabs noch ein paar Meldungen aus fhem-users:
https://groups.google.com/d/topic/fhem-users/sVCNQH8iCwo/discussion
Leider weiss ich nicht, wie man die dort beschriebenen Effekte angehen/beheben kann. Kannst Du mir da bitte ein paar Ansatzpunkte geben?

Danke+Gruß,
Uli

Matthias Gehre

unread,
Dec 7, 2012, 4:24:10 PM12/7/12
to fhem-de...@googlegroups.com
Am 7. Dezember 2012 19:29 schrieb UliM <uli....@gmail.com>:
Hi Matthias,
In floorplan gibt's noch ein paar unschöne Effekte mit longpoll:
- devices mit style 3 (reading anzeigen) werden mit state aktualisiert - das sieht dann nicht so schön aus :) Da muss ich nur die css-id ändern, richtig?
Genau, nur tags mit der passenden css-id werden auf den neuen State aktualisiert.
- auf dem iPad verschwindet nach einem state-Wechsel das icon ganz und gar, hast Du ne Idee wie man das angehen könnte?
Da müsste man mit einem DOM/Javascript debugger wie Firebug mal rangehen. Sowas gibts bestimmt auch für Safari.
 
Auch gabs noch ein paar Meldungen aus fhem-users:
https://groups.google.com/d/topic/fhem-users/sVCNQH8iCwo/discussion
Leider weiss ich nicht, wie man die dort beschriebenen Effekte angehen/beheben kann. Kannst Du mir da bitte ein paar Ansatzpunkte geben?
Ich würde in fhemweb.js in FW_delayedStart() den UserAgent gegen eine Blacklist testen (z.B. die alten Android Browser, alte IE) und für diese 
dann gar nicht FW_longpoll() aufrufen. So müsste alles zumindest so gut wie ohne Longpoll funktionieren.

Danke+Gruß,
Uli

--
 
 

Reply all
Reply to author
Forward
0 new messages