Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - JSON Abfrage mit http Binding

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] - √ - JSON Abfrage mit http Binding

    Hallo,

    ich habe ein Gerät das ich über JSON ansprechen kann. Die zurückgelieferten Werte möchte ich in openHAB ausgeben. Wie ich in der openHAB Wiki gesehen habe, sollte das mit dem http-Binding möglich sein.

    Auf folgender Seite wird das Thema JSON mit openHAB diskutiert.
    https://groups.google.com/forum/#!ms...I/I_E03pMBpNIJ

    Das Beispiel verstehe ich so:
    Es wird von folgender JSON-Struktur ausgegangen:
    Code:
    { "callsign": "KSBW",
       "date": "20131126",
       "duration": 3600,
       "isOffAir": false,
       "isPclocked": 3,
       "isPpv": false,
       "isRecording": false,
       "isVod": false,
       "major": 8,
       "minor": 65535,
       "offset": 3157,
       "programId": "11269591",
       "rating": "No Rating",
       "startTime": 1385485200,
       "stationId": 3910459,
       "status": {     "code": 200,     "commandResult": 0,     "msg": "OK.",
       "query": "/tv/getTuned"   },
       "title": "Today"
     }
    Mit folgender Item-Definition wird der Titel zurückgegeben (vorausgesetzt die Datei getValue.js ist im Verzeichnis $OPENHAB_DIR/configuration/transform/ angelegt)
    Code:
    String DirecTV1_Channel    "Current Channel" { http="<[[URL="http://10.90.30.100:8080/tv/getTuned:30000:REGEX%28/"]http://10.90.30.100:8080/tv/getTuned:30000:JS(getValue.js)][/URL]" }
    In der Datei getValue.js muss folgender Inhalt stehen um den Wert von value zu erhalten:
    JSON.parse(input).title;
    Wie müsste die Datei getValue.js aussehen wenn die Struktur wie folgt aufgebaut ist und der Wert employees[0].firstName ausgegeben werden soll?

    Code:
    "employees":[
        {"firstName":"John", "lastName":"Doe"}, 
        {"firstName":"Anna", "lastName":"Smith"}, 
        {"firstName":"Peter", "lastName":"Jones"}
    ]
    Sieht dann die getvalue.js Datei wie folgt aus?
    JSON.parse(input).employees[0].firstName;

    Gruß
    mepi0011

    #2
    Hallo,

    hatte nun etwas Zeit um mich dem Thema JSON zu widmen, leider komme ich nicht weiter.

    Das was ich vom Gerät zurückgeliefert bekomme (JSON Code) sieht wie folgt aus:

    Code:
    {
      "timestamp": "1410519690904500",
      "meters": [
        {
          "mode": "measuring",
          "order": 1,
          "timestamp": "1410519690893719",
          "serial": "M134",
          "channel": 1,
          "state": "online",
          "sw_version": "0.0.14",
          "hw_version": "29.65335.000",
          "production_date": "2014-07-17",
          "operating_hours": 17,
          "temperatur_boiler": 44,
        }
      ]
    }
    Die Entsprechende Datei im Ordner transform hat folgenden Inhalt:

    Code:
    JSON.parse(input).temperatur_boiler;
    Und das Item ist wie folgt definiert:

    Code:
    Number Smart_Heater_WW_Temp    "Wassertemperatur Boiler [%d]"            <energy>    (Heizung2)         { http="<[http://User:PW@192.168.xxx.xxx/Test.json:60000:JS(TemperaturBoiler.js)]"}
    Im Log-File bekomme ich keinen Fehler angezeigt, allerdings wird dem Item auch keinen Wert (bleibt undefiniert) zurückgegeben.

    Das Problem habe ich in der Zwischenzeit gefunden!

    Es liegt daran, dass temperatur_boiler sich innerhalb des Array meters befindet!

    Nun stellt sich die Frage wie ich ein Objekt innerhalb eines Array anspreche!



    Gruß
    mepi0011

    Kommentar


      #3
      Hallo,

      nun funktioniert alles wie gewünscht!

      Objekte innerhalb eines Array werden wie folgt angesprochen:

      Code:
      JSON.parse(input).employees[0].firstName;
      PS: Die Anfänglichen Probleme lagen daran, dass es sich in meinem Fall um zwei verschachtelte Arrays handelte.
      (Schreibweise: z.B.: JSON.parse(input).Array1[0].Array2[0].firstName; )


      Gruß
      mepi0011

      Kommentar

      Lädt...
      X