Wildcard in JSON Abfrage

Begonnen von kud, 08 März 2014, 10:41:49

Vorheriges Thema - Nächstes Thema

kud

Hallo,
frage mit einem Eigenprogramm mit folgenden Code Werte ab:
http://192.168.1.104:8083/fhem?cmd=jsonlist%20Heizung1

Das funktioniert auch gut. Jedoch muß ich für jedes Device einzeln abfragen also

http://192.168.1.104:8083/fhem?cmd=jsonlist%20Heizung2     / 3 / 4 etc.

etc.
Gibt es eine Möglichkeit hier auch Wildcards zu benutzen um zb. alle Heizungen mit einmal abzufragen?

Danke und Gruß

Kai-Uwe


marvin78

Mach in deinem Programm doch eine Schleife mit einer Zählvariablen (hier $i) und frage dann innerhalb der Schleife so ab:

http://192.168.1.104:8083/fhem?cmd=jsonlist%20Heizung$i

kud

Hmm... Wäre eine Idee. Aber dann sollte ich vorher wissen um wieviele Schleifenwiederholungen es geht.

rudolfkoenig


rudolfkoenig

Sorry, sehe gerade das devspec in jsonlist nicht funktioniert.
Da ich das Modul leider geerbt habe, werde ich schauen, dass es gefixt wird.

kud

 :) Toll , dann wird der erzeugte Traffic doch eine ganze Ecke weniger und das Laden/Nachladen der Daten schneller.

rudolfkoenig

Ich habe es leider nicht geschafft, JsonList so anzupassen, dass alle meiner Ansicht nach noetigen Daten auch bei Angabe von devspec liefert. Deswegen gibt es ab sofort ein JsonList2. Das alte JsonList wird irgendwannmal nach contrib wandern, die Verwendung ist ab sofort unerwuenscht.

Bei Problemen mit JsonList2 bitte melden.

kud

Habe das neue 98_JsonList2.pm eingebunden.

Die Abfrage in FHEM-Interface geht und liefert Werte.

http://192.168.1.104:8083/fhem?cmd=jsonlist2%20Heizung_.*


Im Eigenprogramm mittels Ajax kommt jedoch nichts an.
Code:
jQuery.ajax({
          type: "GET",
          dataType: 'json',
          async: false,
          cache: false,
          url: 'http://192.168.1.104:8083/fhem',
          data: {
           cmd : 'jsonlist2 '+attribut,
           XHR : 1
          },
          success: function (data) {
...usw.

Hier wurde nur "jsonlist" auf "jsonlist2" geändert.
Muss noch irgend was anderes angepasst werden??




kud

Die Ausgabe habe ich gerade mal verglichen... >:( alles anders  ???

rudolfkoenig

ZitatIm Eigenprogramm mittels Ajax kommt jedoch nichts an.
Ich vermute ein Escape-Problem bei einem speziellen Wert, mit meinem Setup funktioniert es.
Kannst du bitte die per Browser zurueckgelieferten Daten mit einem JSON Validator (gibts auch online) pruefen?
Wenndas nicht geht, dann braeuchte ich dein komplettes Konfig.

Zitat...alles anders
Klar ist es anders, sonst haette ich dafuer auch kein neues Modul geschrieben.

kud

Sicherlich gehört das Folgende in die Anfängersparde aber wie bekomme ich nun die Werte ?
Ein http://192.168.1.104:8083/fhem?cmd=jsonlist2%20CUL_WS_2
liefert :
{
  "Arg":"CUL_WS_2",
  "Results": [
  {
    "Name":"CUL_WS_2",
    "PossibleSets":"",
    "PossibleAttrs":"verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings IODev do_not_notify:0,1 showtime:0,1 model:S300TH,KS300,ASH2200 ignore:0,1 event-on-change-reading event-on-update-reading event-min-interval stateFormat devStateIcon devStateStyle fm_fav fm_groups fm_name fm_order fp_Grundriss fp_Kameras fp_image icon item.* sortby structexclude webCmd",
    "Internals": {
      "CFGFN": "FHEM/cfg.Temperatur.cfg",
      "CODE": "2",
      "CUL_0_MSGCNT": "260",
      "CUL_0_RAWMSG": "K1117824116",
      "CUL_0_RSSI": "-63",
      "CUL_0_TIME": "2014-03-12 16:28:33",
      "DEF": "2",
      "LASTInputDev": "CUL_0",
      "MSGCNT": "260",
      "NAME": "CUL_WS_2",
      "NR": "120",
      "STATE": "T: 21.7  H: 41.8",
      "TYPE": "CUL_WS",
      "corr1": "0",
      "corr2": "0",
      "corr3": "0",
      "corr4": "0"
    },
    "Readings": {
      "DEVFAMILY": { "Value":"WS300", "Time":"2014-03-12 16:28:33" },
      "DEVTYPE": { "Value":"S300TH", "Time":"2014-03-12 16:28:33" },
      "humidity": { "Value":"41.8", "Time":"2014-03-12 16:28:33" },
      "state": { "Value":"T: 21.7  H: 41.8", "Time":"2014-03-12 16:28:33" },
      "temperature": { "Value":"21.7", "Time":"2014-03-12 16:28:33" }
    },
    "Attributes": {
      "alias": "Temperatur_Arbeitszimmer",
      "room": "Temperaturen"
    }
  }
  ],
  "totalResultsReturned":1
}

Mein Ajax liefert :
success: function (data) { alert(data.Arg); ......

braf "CUL_WS_2"
Aber an die "Results" Felder komme ich nicht .
Wie rufe ich zB. Results.Internals.STATE ab ?


rudolfkoenig


for(var i1=0; i1<data.Results.length; i1++) {
  console.log(data.Results[i1].Internals.STATE);
}

P.S.: alert() ist verpoent :)

kud


kud

Die Abfrage bei einem zB. HM-RT funktioniert nur wenn die Readings Attribute KEINEN Bindestrich im Namen haben.
Also zb. geht
Readings.PairedTo.Value;
es geht nicht
Readings.R-backOnTime.Value;
oder
Readings.desired-temp.Value;

Kann das bitte geändert werden.


rudolfkoenig

#14
Readings["R-backOnTime"].Value;
oder
Readings["R-backOnTime"]["Value"];

Fuer JavaScript-Syntax-Beibringen fuehle ich mich aber wirklich nicht zustaendig.