Bug in JSONList - Ausgabe ungültig

Begonnen von Johannes, 08 Dezember 2013, 15:46:05

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Auch gueltig. Ich rufe zunaechst
  http://localhost:8083/fhem&cmd=jsonlist2&XHR=1
auf, und kopiere die Ausgabe nach jsonlint.com

Falls du mit dieser Methode Fehler produzieren kannst, dann liegt es entweder an der zwischenzeitlich geaenderten Readings (== fhem.state) oder an deiner Laufzeitumgebung (OS/etc).
Ist vermutlich zielfuehrender im Problemfall die json Datei hier direkt anzuhaengen.

seppy

Ich rufe auf:
http://mediaserver:8083/fhem?cmd=jsonlist2&XHR=1

Das Ergebnis und ein Screenshot aus JSONLint habe ich beigefügt. Das Anonymisieren hat keinen Einfluss.

rudolfkoenig

Es hat etwas gedauert, aber jetzt habe ich es endlich gesehen: in deiner Version erzeugt jsonlist2 die Variablennamen ohne "" (Arg vs. "Arg"). Ich weiss nicht wie Du das hingekriegt hast, und habe nicht mal eine gute Idee, mWn und auch laut SVN log hat jsonlist2 (und auch jsonlist, ohne die 2) die Variablennamen schon immer in "" gesteckt.

Der Anfang in meiner Version schaut so aus:
{ "Arg":"", "Results": [ { "Name":"WEB",

seppy

Hmm das ist seltsam, ich habe kein perlscript angepasst. Letzes Update ist von 10.08.2014
version $Id: fhem.pl 6387 2014-08-10 11:55:40Z

Ich mache jetzt noch mal ein update force. Und schaue ob sich was verändert.

seppy

Nach update force:
version $Id: fhem.pl 6425 2014-08-19 20:55:00Z

Problem besteht immer noch. Evtl. perl Json Modul die Ursache?

rudolfkoenig

Sicher nicht, beide Module generieren die Zeilen selbst mit sprintf.

Ich vermute, dass dein Browser/etc die Konvertierung uebernimmt, und die verdaute Datenstruktur ausgibt. Bei mir schaut es aber in FireFox/Chrome/Safari richtig aus.

seppy

Danke, ich checke das gleich zu Hause und gebe dann eine Rückmeldung.
Danke.

seppy

#22
Also es liegt an einem Chromeplugin, welches - wie Du vermutet hast - die Antwort des Servers "aufbereitet"  :-[

Danke dafür, jetzt hätte ich noch eine Frage, da ich jsonlist2 etwas erweitern möchte, aber keine Antwort im Forum oder im Wiki finde, bräuchte ich nochmal Eure Unterstützung.
Wie kann ich in einem Modul auf die URI, bzw. die übergebenen GET Parameter zugreifen. Da ich von einem anderen Device (also domainübergreifend) auf FHEM zugreifen will, muss ich JSONP verwenden.
JsonP erwartet aber den Callback Parameter, der immer dynamisch generiert wird. Um in Jsonlist2 darauf reagiern zu können, müsste ich aber die URI zum zerlegen bekommen.
Ich werde es natürlich als eigenes Modul bauen.

Wer kann mir Rat geben.  ;D

rudolfkoenig

ZitatAlso es liegt an einem Chromeplugin
http://www.tty1.net/smart-questions_de.html#dontclaimbug

ZitatWie kann ich in einem Modul auf die URI, bzw. die übergebenen GET Parameter zugreifen.
Man kann im JavaScript (oder was auch immer) cmd=set oder cmd=get mit beliebigen Parameter absetzen, das wird direkt an dem betroffenen Modul weitergeleitet. Wenn es sein soll (und ich sehe es noch nicht, wieso), dann kan das FHEM Modul via %FW_webArgs  auf alle Parameter im URL zugreifen. Alerdings ist das nur bei einem direkten Aufruf via FHEMWEB gesetzt.

seppy

Zu dem ersten Zitat ... Asche über mein Haupt, und ist vollkommen richtig :-/
Was den zweiten Punkt angeht, vielen Dank, %FW_webArgs hatte ich gesucht. Ich hatte mich wahrscheinlich unklar ausgedrückt, mir geht es nicht um get und set im fhem Sinne, da nutze ich die bestehenden Möglichkeiten. Sondern um HTTP-GET, da der jsonp Request einen Parameter callback per url übergibt, in der Form callback=xyzCallbackfunktion. Die Antwort muss dann ja lauten xyzCallbackfunktion({JSONDATA});
Um diese Ausgabe zu erzeugen, habe ich mit meinen sehr begrenzten perl Fähigkeiten jsonlist2 erweitert, so dass die callbackfunktion berücksichtigt wird.

In diesem Zusammenhang habe ich mich gefragt, ob es möglich ist den Content-Type der Ausgabe aus einem Modul herraus zu beeinflussen?

seppy

Die Anpassungen kann ich bei Bedarf natürlich gerne zu Verfügung stellen!

rudolfkoenig

Content-Type kann man nur beeinflussen, wenn man ein FHEMWEB-Extension baut, wie z.Bsp.
FLOORPLAN und SVG_showLog