Hallo Rudi,
könnte man (Du ;-)) fhem beibringen, auf einen JSONP-Request zu reagieren und statt einem responseString den Callback zurückzuschicken?
Also, statt so:
http://fhemhost:8083/fhem?cmd=jsonlist&XHR=1
so, wobei die JSONList dann im myJSONPCallback zurückgeschickt wird:
http://fhemhost:8083/fhem?cmd=jsonlist&XHR=1&callback =myJSONPCallback
Dies ist extrem praktisch um flexibler mit den Restriktionen der SOP umzugehen.
Andy
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
On Mon, Jan 09, 2012 at 11:54:05AM +0100, Andy Fuchs wrote:
> Hallo Rudi,
>
> könnte man (Du ;-)) fhem beibringen, auf einen JSONP-Request zu reagieren und
> statt einem responseString den Callback zurückzuschicken?
Bitte es mit dem Author des Moduls (Martin Fischer) klaeren, will da erstmal
nicht reinreden.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hi Rudi,
hm - ist das nicht mehr eine Basis-Funktion, die eigentlich in fhem reingehört? Ich weiß jetzt im Moment leider nicht, wie fhem intern diese Requests abarbeitet. Aber ich dachte fhem schaut sich diese requests immer an:
http://fhemhost:8083/fhem?cmd=list&XHR=1
und könnte somit quasi alles auch als callback zurückschicken
http://fhemhost:8083/fhem?cmd=list&XHR=1&callback=myCallback
-> {result: ...list... }
Gruß
andy
Am 09.01.2012 um 14:23 schrieb Rudolf Koenig:
> On Mon, Jan 09, 2012 at 11:54:05AM +0100, Andy Fuchs wrote:
>> Hallo Rudi,
>>
>> könnte man (Du ;-)) fhem beibringen, auf einen JSONP-Request zu reagieren und
>> statt einem responseString den Callback zurückzuschicken?
>
> Bitte es mit dem Author des Moduls (Martin Fischer) klaeren, will da erstmal
> nicht reinreden.
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> hm - ist das nicht mehr eine Basis-Funktion, die eigentlich in fhem
> reingehört?
Basis-Funktion ist relativ, ich brauche jsonlist nicht :) Es ist aber Teil des
FHEM Verzeichnisses und damit genauso "Basis-Funktion", wie at, notify und
filelog.
> und könnte somit quasi alles auch als callback zurückschicken
Sicher, jsonlist waere auch einfach zu aendern, ich meine aber derjenige der es
gebaut hat, soll erstmal dafuer Support uebernehmen.
> http://fhemhost:8083/fhem?cmd=list&XHR=1&callback=myCallback
Wenn auf der Kommandozeile (== telnet) das als "jsonlist callback myCallback"
aufgerufen werden kann (nachdem man das implementiert hatte :), dann waere
daraus auf HTTP:
http://fhemhost:8083/fhem?cmd=list+callback+myCallback&XHR=1
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hi Rudi,
mir geht's nicht um jsonlist (das war nur ein Beispiel), sondern um die Möglichkeit den request an fhem als JSONP-Request zu schicken und damit die SOP zu umgehen, indem fhem das Ergebnis in einen callback wickelt.
http://fhemhost:8083/fhem?cmd=get%20myLog%20&XHR=1&callback=MyCallback
Andy
Am 09.01.2012 um 15:44 schrieb Rudolf Koenig:
>> hm - ist das nicht mehr eine Basis-Funktion, die eigentlich in fhem
>> reingehört?
>
> Basis-Funktion ist relativ, ich brauche jsonlist nicht :) Es ist aber Teil des
> FHEM Verzeichnisses und damit genauso "Basis-Funktion", wie at, notify und
> filelog.
>
>
>> und könnte somit quasi alles auch als callback zurückschicken
>
> Sicher, jsonlist waere auch einfach zu aendern, ich meine aber derjenige der es
> gebaut hat, soll erstmal dafuer Support uebernehmen.
>
>
>> http://fhemhost:8083/fhem?cmd=list&XHR=1&callback=myCallback
>
> Wenn auf der Kommandozeile (== telnet) das als "jsonlist callback myCallback"
> aufgerufen werden kann (nachdem man das implementiert hatte :), dann waere
> daraus auf HTTP:
>
> http://fhemhost:8083/fhem?cmd=list+callback+myCallback&XHR=1
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
>>> http://fhemhost:8083/fhem?cmd=list&XHR=1&callback=myCallback
>>
>> Wenn auf der Kommandozeile (== telnet) das als "jsonlist callback myCallback"
>> aufgerufen werden kann (nachdem man das implementiert hatte :), dann waere
>> daraus auf HTTP:
>>
>> http://fhemhost:8083/fhem?cmd=list+callback+myCallback&XHR=1
Auf der CommandLine braucht man das ja auch nicht, da die Same-Origin-Policy ja eine 'künstliche' Schranke im Browser ist.
Aber:
Wo müsste ich denn das reinschreiben (sofern ich es in Perl hinbekomme), dass fhem mir den callback ausfüllt und zurückschickt?
http://fhemhost:8083/fhem?cmd=list&callback=myCallback
Gehört das nicht eigentlich so irgendwie in 01_FHEMWEB.pm rein?
if($FW_CALLBACK) {
$FW_RETTYPE = "application/json; charset=$FW_encoding";
...
print $callback . '(' . $json . ');';
}
Bin für jeden Hinweis dankbar.
Andy
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Gehört das nicht eigentlich so irgendwie in 01_FHEMWEB.pm rein?
Doch, dein SOP Argument hat mich ueberzeugt. Ich meine es macht nur im
Zusammenhang mit XHR Sinn, also sollte im "if($FW_XHR) {" Abschnitt sein.
> if($FW_CALLBACK) {
> $FW_RETTYPE = "application/json; charset=$FW_encoding";
Wieso json? eher "text/javascript, wenn es unbeding sein muss.
FHEMWEB hat von jsonlist keine Ahnung, und das ist gut so :)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Am 11.01.2012 um 12:44 schrieb Rudolf Koenig:
>> Gehört das nicht eigentlich so irgendwie in 01_FHEMWEB.pm rein?
>
> Doch, dein SOP Argument hat mich ueberzeugt. Ich meine es macht nur im
> Zusammenhang mit XHR Sinn, also sollte im "if($FW_XHR) {" Abschnitt sein.
Freut mich - und das gibt eine Menge mehr Flexibilität für potentielle Frontends.
Kannst Du das auch reinmachen? Ich trau' mich nicht...
>
>> if($FW_CALLBACK) {
>> $FW_RETTYPE = "application/json; charset=$FW_encoding";
>
> Wieso json? eher "text/javascript, wenn es unbeding sein muss.
> FHEMWEB hat von jsonlist keine Ahnung, und das ist gut so :)
Ich bin mir nicht sicher, ob der Browser den returntype überhaupt interessiert, weil ja ein Callback zurückkommt (ich tippe mal auf 'nein'). Muss man mal ausprobieren.
Grüße
andy
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> mir geht's nicht um jsonlist (das war nur ein Beispiel), sondern um die
> Möglichkeit den request an fhem als JSONP-Request zu schicken und damit die
> SOP zu umgehen, indem fhem das Ergebnis in einen callback wickelt.
Habs eingebaut, aber statt callback habe ich die Variable jsonp genannt. Also:
http://fhemhost:8083/fhem?cmd=jsonlist&jsonp=MyCallback
XHR ist mit jsonp implicit. Eingecheckt und per fhemupdate zur Verfuegung
gestellt. Bitte testen.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo Rudi,
vielen Dank für das Einbauen vom JSONP. Es funktioniert schon fast ;-)
Allerdings wird bei dem Request ein STRING zurückgegeben, aber der müsste in JSON zurückkommen:
Der Request ist so: 'http:///fhem?cmd=jsonlist&jsonp=?';
und zurück kommt dann sowas:
jsonp2('{
"ResultSet": "full",
"Results": [
{
"list": "Global",
"devices": [
{
"DEF": "",
"NAME": "global",
"NR": "1",
...
"verbose": "3",
"version": "5.2+SVN from 2012-01-07 ($Id: fhem.pl 1177 2012-01-07 09:00:32Z rudolfkoenig $)"
},
"READINGS": []
}
]
},
...
],
"totalResultsReturned": 33
}
');
und ich bekomme: fhem:1SyntaxError: Unexpected EOF
Könntest Du das bitte noch anpassen?
Danke
Andy
Am 11.01.2012 um 12:44 schrieb Rudolf Koenig:
>> Gehört das nicht eigentlich so irgendwie in 01_FHEMWEB.pm rein?
>
> Doch, dein SOP Argument hat mich ueberzeugt. Ich meine es macht nur im
> Zusammenhang mit XHR Sinn, also sollte im "if($FW_XHR) {" Abschnitt sein.
>
>
>
>> if($FW_CALLBACK) {
>> $FW_RETTYPE = "application/json; charset=$FW_encoding";
>
> Wieso json? eher "text/javascript, wenn es unbeding sein muss.
> FHEMWEB hat von jsonlist keine Ahnung, und das ist gut so :)
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Allerdings wird bei dem Request ein STRING zurückgegeben, aber der müsste in
> JSON zurückkommen:
Da bin ich dagegen, sonst kann man nur jsonlist als Argument verwenden. Ein
eval wirst Du wohl auch selber hinkriegen :)
> Der Request ist so: 'http:///fhem?cmd=jsonlist&jsonp=?';
Falsch :) Der Request ist so:
http:///fhem?cmd=jsonlist&jsonp=MyFunc
Wo kommt der ' und ; her?
> und ich bekomme: fhem:1SyntaxError: Unexpected EOF
Kriege ich nicht. Auch bei jsonp=? nicht. Evtl. Proxy?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Am 14.01.2012 um 09:52 schrieb Rudolf Koenig:
>> Allerdings wird bei dem Request ein STRING zurückgegeben, aber der müsste in
>> JSON zurückkommen:
>
> Da bin ich dagegen, sonst kann man nur jsonlist als Argument verwenden. Ein
> eval wirst Du wohl auch selber hinkriegen :)
Nein - das geht nicht, da der Fehler bereits auf Browser-Ebene auftritt, d.h. BEVOR ich überhaupt ein eval ausführen kann (das 'jsonp' wird als Callback interpretiert).
Ausserdem kann man dann eben genau nicht nur jsonlist als Argument verwenden, sondern eben alles. Die Lösung ist eigentlich ganz einfach: Statt dem String zurückzugeben, wrappt man diesen in ein JSON, d.h.
statt
'{ x: [a:1]}' //also als String - so wie jetzt
macht man:
{ result: '{ x: [a:1]}'} //JSON
DANN kann man einen eval auf das 'result' machen. Also eval( myReturnedJSON.result)
>> Der Request ist so: 'http:///fhem?cmd=jsonlist&jsonp=?';
>
> Falsch :) Der Request ist so:
> http:///fhem?cmd=jsonlist&jsonp=MyFunc
> Wo kommt der ' und ; her?
das ' hatte ich nur zum markieren der Zeile benutzt und das ? steht für den Callback Namen:
Wenn ich von meinem Server (sagen wir mal Port 80) diesen Request abschicke:
http://:8083/fhem?cmd=jsonlist&jsonp=MyFunc
dann erhalte ich im Browser folgendes:
XMLHttpRequest cannot load http://:8083/fhem?cmd=jsonlist&jsonp=MyFunc. Origin http:// is not allowed by Access-Control-Allow-Origin.
Für den Browser sind die unterschiedlichen ports bereits eine Verletzung der SOP.
>> und ich bekomme: fhem:1SyntaxError: Unexpected EOF
>
> Kriege ich nicht. Auch bei jsonp=? nicht. Evtl. Proxy?
Vermutlich, weil Du Deinen Test von auf abschickst. Probier's doch mal von einem anderen Port (oder besser noch: anderen Rechner) aus.
Könntest Du das nochmal probieren? Ich hab' echt alles versucht, aber einen String zurück lässt der Browser nicht.
Gruß
Andy
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Nein - das geht nicht, da der Fehler bereits auf Browser-Ebene auftritt, d.h.
> BEVOR ich überhaupt ein eval ausführen kann (das 'jsonp' wird als Callback
> interpretiert).
Klar doch, das sollte doch auch der Sinn von jsonP sein.
Zitat http://de.wikipedia.org/wiki/JavaScript_Object_Notation
Im src-Attribut eines
Aber vielleicht verstehe ich auch was nicht.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hi Rudi,
Du hast es nicht ausprobiert, stimmts? ;-)
> Um die JSON-Daten auf dem Client verarbeiten zu können, verpackt der Server
> diese als Parameter in eine JavaScript-Funktion, die im Webbrowser bereits
> definiert ist. Der Name dieser Funktion wird dem Server über einen Query
> String der URL mitgeteilt.
>
>
Der Browser führt das aus, was er zurückbekommt, also im aktuellen falle
MyFunc('foo') {} // geht aber nicht
wohingegen:
MyFunc({'foo':'bar'}) {} // geht
The way JSONP works is simple, but requires a little bit of server-side cooperation. Basically, the idea is that you let the client decide on a small chunk of arbitrary text to prepend to the JSON document, and you wrap it in parentheses to create a valid JavaScript document (and possibly a valid function call).
The client decides on the arbitrary prepended text by using a query argument named jsonp with the text to prepend. Simple! With an empty jsonp argument, the result document is simply JSON wrapped in parentheses.
Ich habe in fhem mal die single-quotes bei FW_pO "$FW_jsonp('$FW_cmdret');"; entfernt:
FW_pO "$FW_jsonp($FW_cmdret);";
Dann geht alles wie geschnitten Brot (zumindest mit der JSONList). Möchte man das verallgemeinern gibt es meiner Meinung nach 2 Möglichkeiten:
1.) Wenn $FW_cmdret am Anfang ein { und am Ende ein } hat, dann schickt man es einfach wie oben zurück, ansonsten macht man vorn und hinten eine Klammer dran.
2. Man wrappt das $FW_cmdret in ein JSON:
FW_pO "$FW_jsonp({'jsonresult':'$FW_cmdret'});";
Das wiederum dürfte Ärger machen, wenn man die jsonlist zurückschickt, da diese ja dann als String eingebettet würde.
Egal wie: möchte man das Ergebnis nicht nur auf die jsonlist beschränken, muß man drauf achten, dass der Rückgabewert auch ein gültiges JSON ist, oder ihn encoden.
Mir würde die Variante 1 am besten gefallen.
Mein Perl ist leider viel zu schlecht, sonst würde ich Dir das Snippet schicken :)
Grüße
Andy
>
>
>
> Aber vielleicht verstehe ich auch was nicht.
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Du hast es nicht ausprobiert, stimmts? ;-)
Stimmts. Es sollte auch:
eval('result='+arg);
heissen. Damit geht es. Ausprobiert :)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Wie hast Du das denn ausprobiert? Ich bekomme bereits bei der Antwort vom Server eine DOM-Exception, so dass ich gar nicht mehr dazu komme das Ergebnis zu verwerten. Ich sehe zwar, dass die korrekten Daten ankommen, komme aber an die nicht dran, weil die DOM-Exception meine Programmfluss unterbricht.
Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und mir sagen was ich machen muß, damit das bei mir auch geht? ;-)
Grüße
andy
Am 14.01.2012 um 21:05 schrieb Rudolf Koenig:
>> Du hast es nicht ausprobiert, stimmts? ;-)
>
> Stimmts. Es sollte auch:
> eval('result='+arg);
> heissen. Damit geht es. Ausprobiert :)
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und
> mir sagen was ich machen muß, damit das bei mir auch geht? ;-)
Wie das im Wiki vorgeschlagen wurde:
test.html:
=======
Test
Test1.
=======
Aufruf:
http://webserver/test.html
fhemhost != webserver
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Geht nicht - auf keinem meiner Browser. Ich erhalte:
Firefox:
----------
unterminated string literal
MyFunc('{
fhem?c...=MyFunc (Zeile 1, Spalte 7)
Safari:
---------
MyFunc('{
fhem:1SyntaxError: Unexpected EOF
Google Chrome:
-----------------------
Uncaught SyntaxError: Unexpected token ILLEGAL
:-(
Alles MacOSX latest rev.
Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?
Gruß
Andy
Am 14.01.2012 um 22:44 schrieb Rudolf Koenig:
>> Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und
>> mir sagen was ich machen muß, damit das bei mir auch geht? ;-)
>
> Wie das im Wiki vorgeschlagen wurde:
>
> test.html:
> =======
>
>
>
Test
>
>
>
>
> Test1.
>
>
> =======
>
> Aufruf:
> http://webserver/test.html
>
> fhemhost != webserver
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?
Nichts dergleichen. Die Meldung deutet darauf hin, dass das schliessende '
fehlt, vermutlich hast Du sie bei deinem Experiment vergessen. Es sollte so
ausschauen:
$FW_cmdret =~ s/'/\\'/g;
FW_pO "$FW_jsonp('$FW_cmdret');";
Oder in Deinem fhem.cfg sind Sonderzeichen, die in jsonlist nicht geschuetzt
sind. Kannst Du dein Experiment auch mit einem minimalen fhem.cfg versuchen?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
>> Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?
>
> Nichts dergleichen. Die Meldung deutet darauf hin, dass das schliessende '
> fehlt, vermutlich hast Du sie bei deinem Experiment vergessen. Es sollte so
> ausschauen:
> $FW_cmdret =~ s/'/\\'/g;
> FW_pO "$FW_jsonp('$FW_cmdret');";
Nein - ich hab' für die Tests die Original fhem verwendet (ohne irgendwelche Modifikationen).
Mit meiner Variante
FW_pO "$FW_jsonp($FW_cmdret);";
tritt das Problem ja nicht auf (zumindest bei der jsonlist).
> Oder in Deinem fhem.cfg sind Sonderzeichen, die in jsonlist nicht geschuetzt
> sind. Kannst Du dein Experiment auch mit einem minimalen fhem.cfg versuchen?
OK - ich hab dasselbe mal (Original-fhem) mit folgender cfg gemacht - ohne Änderung der Ergebnisse. Auf allen Browsern gibt's Exceptions.
attr global modpath /usr/share/fhem
attr global nofork 1
attr global port 7072 global
attr global statefile /var/log/fhem/fhem.save
attr global verbose 3
define CUNO CUL 192.168.x.y:2323 1234
define WEB FHEMWEB 8083 global
Was für einen Browser verwendest Du denn? Und hast Du's mal mit einem anderen versucht?
Vielleicht wäre es doch einfacher das so zu machen, wie ich es vorgeschlagen habe ;-)
Danke für Deine Mühe
Andy
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
- auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
unterminated string literal
Da sind "zuviele" Zeilenumbrüche drin. Im Result des jsonp darf kein
Zeilenumbruch drin sein. Meine "myJSONPCallback" würde dann so
aussehen und x enthält dann das passende Object/Array. ("eval" is
"evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)
function myJSONPCallback(s){ var x = JSON.parse(s);
...}
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Die Formatierung ist ja echt grottig, sorry. Gibt's hier Tags, die man
nutzen kann ???
...Alex
On 16 Jan., 21:53, Alexander Brickwedde
wrote:
> On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
> - auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
> unterminated string literal
> Da sind "zuviele" Zeilenumbrüche drin. Im Result desjsonpdarf kein
> Zeilenumbruch drin sein. Meine "myJSONPCallback" würde dann so
> aussehen und x enthält dann das passende Object/Array. ("eval" is
> "evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)
>
> function myJSONPCallback(s){ var x = JSON.parse(s);
> ...}
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Am 16.01.2012 um 21:53 schrieb Alexander Brickwedde:
> On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
> - auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
> unterminated string literal
> Da sind "zuviele" Zeilenumbrüche drin. Im Result des jsonp darf kein
> Zeilenumbruch drin sein.
Deshalb ist's ja meiner Ansicht nach besser gleich alles als JSON zurückzugeben.
a) Sparst Du Dir damit das parsen im UI
b) Können da beliebig viele Returns drin sein (weil diese ja nicht als solche interpretiert werden)
c) Funktioniert das ganze dann auch ohne Umschweife mit den gängigen Javascript-Bibliotheken wie jQuery, Prototype, DoJo, etc...
Andy
> Meine "myJSONPCallback" würde dann so
> aussehen und x enthält dann das passende Object/Array. ("eval" is
> "evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)
>
> function myJSONPCallback(s){ var x = JSON.parse(s);
> ...}
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
> Deshalb ist's ja meiner Ansicht nach besser gleich alles als JSON
> zurückzugeben.
> a) Sparst Du Dir damit das parsen im UI
> b) Können da beliebig viele Returns drin sein (weil diese ja nicht als
> solche interpretiert werden)
> c) Funktioniert das ganze dann auch ohne Umschweife mit den gängigen
> Javascript-Bibliotheken wie jQuery, Prototype, DoJo, etc...
>
> Andy
>
Lange keine Antwort hier aber ich denke hier passts am besten rein.
Ich bin gerade dabei mir ein kleines Interface zu basteln und stand vor dem
Problem das ein normaler XMLHttpRequest per "jsonlist&XHR=1" nur vom selben
server möglich ist.
Per JSONP hab ich die Daten wegen der Zeilenumbrüche in der Datei aber auch
nicht geladen bekommen.
Ich habe daher die 01_FHEMWEB.pl so geändert das ein anhägen von "CORS=1",
durch setzen eines Headers, das Cross-origin resource sharing freigibt.
Ich hänge meine 01_FHEMWEB.pl mal hier an falls irgendwer das nochmal
benötigt.
(Änderungen in Zeile 91, 279-282, 614, 639)
Gruß
Gerrit
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Ich habe daher die 01_FHEMWEB.pl so geändert das ein anhägen von "CORS=1",
> durch setzen eines Headers, das Cross-origin resource sharing freigibt.
Hab die Aenderungen uebernommen und eingecheckt. Bitte das naechste mal den
Output von diff -u (oder einen anderen patch-faehigen diff) posten.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Danke sehr, nachdem ich gestern ein bisschen weitergebastelt hab viel mir
auf das jedoch weitere Header benötigt werden wenn das Webinterface über
Basic Auth geschützt ist.
Anbei auch noch ein diff für das EnOcean Funksendemodul FSM61 von Eltako um
wie beim FSB61 den released als state anzuzeigen falls an keinem der beiden
eingänge eine spannung anliegt.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Ich hab die 01_FHEMWEB.pl nochmal überarbeitet um CORS auch bei aktiviertem
basic auth benutzen zu können.
Außerdem noch ein Patch für das Eltako FSM61 EnOcean Modul um released als
Status zuzulassen.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Anmerkung zur 01_FHEMWEB.diff
Mir ist gerade aufgefallen das dort noch etwas geändert werden müsste,
undzwar wird ein OPTIONS request nun zwar wie vorgesehen auch
ohne Authorization Header entgegengenommen allerdings auch bearbeitet.
Dies hat zur Folge das wenn ich z.B. einen lichtschalter toggle das licht
nach dem OPTIONS request kurz an aber dann sofort beim folgendem GET
request wieder aus geht.
Ideal wäre es wenn auf einen OPTIONS request nur mit
HTTP/1.1 200 OK
Access-Control-Allow-Origin: ANFRAGEADRESSE
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Origin, Authorization, Accept
Access-Control-Allow-Credentials: true
Access-Control-Max-Age:86400
Content-Length: 0
antwortet und keine befehle an FHEM gesendet werden.
Deswegen anbei nochmal ein diff gegen die aktuelle SVN version, der obrige
hat sich dann erledigt.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hab beide diffs (EnOcean FSB61) + FHEMWEB Cors fix) nach kurzes Testen eingecheckt.
FSB61 habe ich in der commandref.html noch erwaehnt.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Hab beide diffs (EnOcean FSB61) + FHEMWEB Cors fix) nach kurzes Testen eingecheckt.
> FSB61 habe ich in der commandref.html noch erwaehnt.
Bin gerade ueber das CORS handling gestolpert, und ich finde, dass ein
CORS Flag (Cross-Origin-Resource-Sharing) gehoert nicht zum Aufruf-URL
sondern als FHEMWEB Attribut. Veto?
Weiterhin steht in diesem Fall im header, dass FHEMWEB GET, PUT und
OPTIONS verarbeitet: stimmt so nicht. PUT und OPTIONS habe ich erstmal
entfernt.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo!
Am Mittwoch, 5. September 2012 12:34:17 UTC+2 schrieb gaggi:
>
> Ich hab die 01_FHEMWEB.pl nochmal überarbeitet um CORS auch bei
> aktiviertem basic auth benutzen zu können.
> Außerdem noch ein Patch für das Eltako FSM61 EnOcean Modul um released als
> Status zuzulassen.
>
Ich möchte die Diskussion zu JSONP auch nochmal aufgreifen und zwei Patches
vorschlagen:
jsonp-newlines.patch:
JavaScript mag keine String-Definitionen über mehrere Zeilen. Daher
beschwert sich der Browser bei der bisherigen JSONP-Funktion, wenn es
mehrzeilige Ausgaben (z.B. von jsonlist) gibt. Man kann die Zeilenumbrüche
aber einfach mit \ vor dem Zurückschicken escapen. Danach funktioniert das
JSONP mit Firefox, IE 9 und Opera.
jsonlist-devicedetails.patch
Die Ausgabe von jsonlist ohne Parameter und mit einem Typ als Parameter ist
ein Objekt mit den Attributen Result und ResultSet[]. Übergibt man aber
einen konkreten Devicenamen als Parameter, dann enthält das Objekt nur ein
Attribut Result, das wiederum das Attribut ResultSet (diesmal kein Array)
enthält (also JSON.parse(answer).Result.ResultSet statt
JSON.parse(answer).ResultSet[0]). Eigentlich sollte hier auch eine Devspec
möglich sein, es wird aber immer nur das letzte passende Device angezeigt.
Ich habe in dem Patch die Ausgabe für den dritten Fall an die ersten beiden
angepaßt. Jetzt ist die Ausgabe aber nicht mehr mit dem alten Stand
kompatibel und ich bin mir nicht sicher, ob es vernüftigt ist, auf die
Anfrage nach einem konkreten Device mit einem Array zu antworten.
Viele Grüße
Jörg
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Ich möchte die Diskussion zu JSONP auch nochmal aufgreifen und zwei Patches
> vorschlagen:
Den FHEMWEB Patch habe ich eingecheckt.
Den anderen sollte Martin (Autor von jsonlist) uebernehmen.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo, stimme dir voll zu das CORS über eine attr aktiviert werden sollte.
Der im "Access-Control-Allow-Methods" Header muss laut spezifikation ausser
GET mindestens noch OPTIONS angegeben werden damit CORS funktioniert.
Alle modernen Browser handhaben es auch so das bei nicht gesetztem OPTIONS
die UserCredentials bei Ajax Requests nicht mitgesendet werden.
Eine Ausnahme stellt hierbei der InternetExplorer dar, dem ist das ganze
herzlich egal und man bräuchte theoretisch überhaupt keine Änderungen am
Header machen.
Am Donnerstag, 1. November 2012 09:26:46 UTC+1 schrieb Rudolf Koenig:
>
> > Hab beide diffs (EnOcean FSB61) + FHEMWEB Cors fix) nach kurzes Testen
> eingecheckt.
> > FSB61 habe ich in der commandref.html noch erwaehnt.
>
> Bin gerade ueber das CORS handling gestolpert, und ich finde, dass ein
> CORS Flag (Cross-Origin-Resource-Sharing) gehoert nicht zum Aufruf-URL
> sondern als FHEMWEB Attribut. Veto?
> Weiterhin steht in diesem Fall im header, dass FHEMWEB GET, PUT und
> OPTIONS verarbeitet: stimmt so nicht. PUT und OPTIONS habe ich erstmal
> entfernt.
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Hallo, stimme dir voll zu das CORS über eine attr aktiviert werden sollte.
Umgebaut, und eingecheckt: "attr WEB CORS 1" ist ab jetzt notwendig.
> Der im "Access-Control-Allow-Methods" Header muss laut spezifikation ausser
> GET mindestens noch OPTIONS angegeben werden damit CORS funktioniert.
Ok, OPTIONS ist wieder drin, aber auf OPTIONS antwortet FHEMWEB nicht richtig,
der kapiert nur GET :). Kannst Du es bitte testen, ich wuesste nicht wie.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Dienstag, 20. November 2012 18:52:02 UTC+1 schrieb Rudolf Koenig:
> Ok, OPTIONS ist wieder drin, aber auf OPTIONS antwortet FHEMWEB nicht
> richtig,
> der kapiert nur GET :). Kannst Du es bitte testen, ich wuesste nicht wie.
>
Gerade geladen und getestet funktioniert genau so wie es soll.
Klar antwortet FHEM auf einen Options Request sogar HTTP/1.1 konform ;)
Hab das damals so angelegt das er auf einen Options Request nur mit Headern
antwortet
if($headerOptions[0]) {
> print $c "HTTP/1.1 200 OK\r\n",
> $FW_headercors,
> "Content-Length: 0\r\n\r\n";
> $hash->{BUF}="";
> return;
> exit(1);
> };
Funktioniert ausgezeichnet ;)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com