1

Hue-Bridge から HTTP-GET 応答として取得するネストされた JSON-Object を繰り返し処理しようとしています。応答は次のようなものです。

{
    "name": "ViKo",
    "type": "GroupScene",
    "group": "2",
    "lights": [
        "1",
        "2",
        "6",
        "9",
        "11",
        "17",
        "18"
    ],
    "recycle": false,
    "locked": false,
    "picture": "",
    "version": 2,
    "lightstates": {
        "1": {
            "on": false,
            "bri": 254,
            "ct": 230
        },
        "2": {
            "on": false,
            "bri": 254,
            "ct": 230
        },
        "6": {
            "on": true,
            "bri": 254,
            "ct": 230
        },
        "9": {
            "on": false,
            "bri": 254,
            "ct": 230
        },
        "11": {
            "on": true,
            "bri": 254,
            "ct": 230
        },
        "17": {
            "on": true,
            "bri": 254,
            "ct": 230
        },
        "18": {
            "on": true,
            "bri": 254,
            "ct": 230
        }
    }
}

今、私はメンバーのlightstatesとそれを含むサブオブジェクトに興味があり、ループ(またはthsiのようなもの)でサブアイテムを繰り返し処理しています。

私のArduino(NodeMCU)コードは次のようになります。

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>

void loop()
{

  if (digitalRead(BUTTON) == HIGH)
  {

    //Check WiFi connection status
    if (WiFi.status() == WL_CONNECTED)
    {
      HTTPClient http;
      WiFiClient client;

      http.begin(client, BRIDGE_SCENE_URL + SCENE_VIKO);

      int httpCode = http.GET();
      String payload = http.getString();

      if (httpCode == 200)
      {
        const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;

        DynamicJsonDocument doc(capacity);
        deserializeJson(doc, payload);
        JsonObject root = doc.as<JsonObject>();

        JsonObject name = root.getMember("lightstates").as<JsonObject>();

        for (JsonPair kv : name)
        {
          Serial.println(kv.key().c_str());
        }

      }

      http.end(); //Close connection

      delay(500);
    }

  }

}

したがって、ブリッジから有効な json 応答を取得していますが、for ループは何も出力しません。目標は、ライトステートを反復処理し、値を次のようなシグネチャを持つメソッドに入れることです

void changeLightState(int id, boolean on, int bri, int ct)

誰かが私にアイデアを持っているなら、それは素晴らしいことです.

4

1 に答える 1