Hallo zusammen.
Leider konnte ich nichts zu dem octet-stream finden, der die Aktualisierungen auf der FHEM Seite vornimmt. Ich würde gerne in einer eigenen Web-Anwendung die ich geschrieben habe, diesen Stream nutzen und die Events die dort passieren auswerten.
Was passiert da genau und wie kann ich das am besten abfangen? Als Framework nutze ich Angular, kann aber diesen Stream mit nativem JavaScript abfragen und verarbeiten. Nur habe ich leider keine Ahnung wie ich da anfangen soll.
http://192.168.178.77:9083/fhem?XHR=1&inform=type=status;filter=room=all×tamp=1418809918405
Danke für jeden Anregung.
Oliver
Habe es hinbekommen. Danke.
Wärst Du so nett, ein paar Infos zur jetzigen Lösung zu geben?
Auch wenn keiner helfen konnte, könnte das ja trotzdem eine interessante Sache sein, auf die man zu einem späteren Zeitpunkt mal zurückgreifen kann.
Gruß,
Hollo
Klar.
Da der Stream speziell auf das Reagieren von Veränderungen und das manipulieren der normalen FHEM Ansicht konzipiert ist, habe ich mir einen neuen unabhängigen Stream gebaut, der mit dem Filter "filter=room=all;" alle Veränderungen überwacht.
Die Infos die vom Stream kommen, sind in meinem Fall leider nicht vollständig zu gebrauchen, da wie oben erwähnt, speziell für die FHEM Web Ansicht gebaut. Wichtig dabei ist aber der Actor der gemeldet wurde. Der steckt dann nach dem
var d = l.split("<<", 3);
in
var Actor = d[0];
Den Actor Übergebe ich dann in meine Logik und starte einen Call auf
FHEMManager + ":" + FHEMManagerPort + "/fhem?cmd=jsonlist+" + Actor + "&XHR=1
Mit diesen "sauberen" JSON Daten, kann ich dann alles in meiner Ansicht verändern und manipulieren wie ich möchte.
Hintergrund der ganzen Geschichte ist das ich einen Touchscreen in der Küche an der Wand hängen habe und mir dafür eine Touch optimierte WEB Ansicht gebaut habe, die im Hintergrund FHEM auf dem Rasperry als Zentrale nutzt. Alle Befehle von dieser Anwendung werden an die Zentrale gesendet.
FHEMManager + ":" + FHEMManagerPort + "/fhem?cmd=set%20" + Actor + "%20" + Status + "&XHR=1
alle Veränderungen die unabhängig von dem Touchscreen passieren, werden jetzt über den Stream in der Anwendung aktualisiert und visualisiert.
Hoffe das hilft.
Grüße
Oliver
Nach einem Update bei FHEM hat sich der Longpoll Stream verändert.
Hauptsächlich hat sich geändert das "responseText" nicht nur noch ein reiner String ist der mittels split zerlegt wird, sondern ein JSON String ankommt.
Anstelle von
var d = l.split("<<", 3);
erfolgt die Umwandlung jetzt mittels
var d = JSON.parse(l);
Der Aktor selbst steckt dann aber immer noch in
d[0]
Hallo Bavaglino,
kannst du mir genau sagen wie du an den Longpoll Stream aus angular kommst? Ich habe das auch vor einiger Zeit probiert und nicht hinbekommen. Zur Zeit bin ich dabei meine Anwendung auf WebSockets umzubauen. Allerdings würde ich die Longpoll Variante als Fallback implementieren wollen.
Gruß A.