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)
誰かが私にアイデアを持っているなら、それは素晴らしいことです.