Bug in JSONList - Ausgabe ungültig

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

Vorheriges Thema - Nächstes Thema

Johannes

Hallo,

Habe gestern ein Update auf FHEM gemacht, voriges war schon eine Weile her.
Seitdem generiert mir der Aufruf von
jsonlist
eine ungültige JSON Ausgabe (z.B. prüfbar über http://jsonlint.com )

Es wird ein Objekt am Ende nicht geschlossen, oder mal wird vergessen ein Array zu schließen.
Das ist natürlich fatal für alle, die mit dem Befehl arbeiten.

Kann es mit dem letzten Commit an dem Modul zusammenhängen? :

http://sourceforge.net/p/fhem/code/3271/

Ich bekomme nämlich im Log die Meldung:

2013.12.08 15:47:04 3: JsonList: device (room=all) without TYPE

Kann bei mir kein solches Device finden, wo auch immer das herkommt....

Falls meine fhem.cfg benötigt wird bitte Bescheid geben. Eigentlich sollte aber, egal was in der cfg steht, keine ungültige Ausgabe bei jsonlist herumkommen...


Grüße,
Johannes


Johannes

Problem hat sich scheinbar seit heutigem Update wieder gelöst. Evtl. war FHEMWEB daran beteiligt, das lieferte mir gestern noch

Use of uninitialized value $type in hash element at ./FHEM/01_FHEMWEB.pm line 2097.

Ist jetzt aber verschwunden, JSON ist wieder valide, von daher alles gut :-)

Mitch

Hallo,

habe gerade das Front installiert und bekomme eine Fehlermeldung:

ZitatJsonList did not respond correctly. This is a bug in FHEM. This Frontend cannot work without a valid JsonList response. See this link for details and complain there: http://forum.fhem.de/index.php/topic,17292.msg113132.html#msg113132

diese verweist hier her, allerdings steht hier keine Lösung?
FHEM im Proxmox Container

Bkel

Gleiches Problem hier.

shutdown restart hilft bei mir immer kurzzeitig.

Boris

Mitch

Bei mir geht es jetzt, warum auch immer
FHEM im Proxmox Container

Bkel


seppy

Hallo Zusammen,

ich bekomme grundsätzlich unbrauchbaren JSON Response. Habe aber immer noch keine Ahnung warum.
Durch Anpassen der jsonlist.pm kann ich das zwar korrigieren, aber die Ursache muss wohl woanders liegen :-(

Johannes

Ich habe auch keinen Auslöser geschweige denn eine Lösung dafür gefunden.
Ich habe aber das Frontend vor einer Weile komplett auf jsonlist2 umgestellt (neues Modul).
Damit habe ich bisher keine Probleme. Sobald ich Zeit finde werde ich den aktuellen Code bereitstellen und im zugehörigen Thread Bescheid geben.
Grüße

seppy

Hallo Zusammen,

ich habe mir heute die jsonlist Ausgabe (bisher nur die Ausgabe) genauer angeschaut. Das erste Problem was mir aufgefallen ist liegt in jsonlist2. Ich wollte ursprünglich diese Funktion nutzen, da ich hier irgendwo gelesen habe, das die "alte" jsonlist sterben soll.

jsonlist2 liefert bei mir immer einen Fehler in der verarbeitenden Methode, da die eckigen Klammern fehlen:

jsonlist2:
{
Arg: "",
Results: [
  {
   Name: "WEB",
   PossibleSets: "clearSvgCache:noArg rereadicons:noArg",


jsonlist:
[
{
  ResultSet: "full",
  Results: [
   {
      list: "Global",


Das gleiche Problem habe ich bei jsonlist ROOMS:
{
ResultSet: "rooms",
Results: [
"Testraum",
"Testraum2",
"Testraum3",
"Testraum4",
"test"
],
totalResultsReturned: 5
}

Vielleicht bringt uns das weiter. In die Perlscripte schaue ich am Wochenende, aber perl ist nicht gerade meine Stärke  :P

Grüße,
Seppy

krikan

Poste das doch mal im richtigen Bereich; laut http://fhem.de/MAINTAINER.txt:
FHEM/98_JsonList2.pm         rudolfkoenig         http://forum.fhem.de Automatisierung
Oder lasst es dorthin verschieben.  Dort gibt es dann auch eher Chancen auf qualifizierte Antworten.....

seppy

Du hast recht. @Mod: bitte verschieben! Danke


Sent from my iPhone using Tapatalk

rudolfkoenig

Verschobene Threads kriege ich normalerweise nicht mit, bitte in sochen Faellen zusaetzlich einen neuen Thread im richtigen Forums-Bereich aufmachen.

jsonlist werde ich nicht fixen, da ich selbst Schwierigkeiten mit dem geerbten Code habe, und die "gefixte" Version heisst jsonlist2. Und es soll ja auch eine Motivation zum Umstieg geben.

jsonlist2 Probleme werde ich beheben, dazu brauche ich aber unbedingt eine (abgespeckte) fhem.config, damit ich das Problem selbst reproduzieren kann. Ein Screenshot von der (angeblich) fehlerhaften Stelle im JSON hilft mir nicht.

seppy

Werden auch die includes alle benötigt?
Anbei die fhem.cfg

rudolfkoenig

#13
ZitatWerden auch die includes alle benötigt?
Vermutlich ja. Ich habe mit diesem fhem.cfg und jsonlist2 eine Datei generiert, und sie http://jsonlint.com gezeigt, und sie meint:
Zitat
Valid JSON


Vielleicht ist es einfacher, die "kaputte" JSON Datei hier anzuhaengen, auch wenn das fuer mich wiederum mehr Arbeit bedeutet.

seppy

ok, hier noch die beiden include files.

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