0

有没有一种简单的方法来发现和区分恒温器设备 ID?我本来希望能够在设备接口的某处或使用 Firebase 库中找到 deviceId,但我没有发现任何一种情况。

我的 Firebase 对象是这样创建的(网址以恒温器结尾):

Firebase fb = new Firebase("https://developer-api.nest.com/devices/thermostats/");

要更改恒温器上的属性,我的代码如下所示...

/*此方法执行 http get(不是 firebase)以将整个恒温器数据结构作为 JSON 对象获取。然后它遍历每个恒温器 deviceId 结构以寻找匹配的房间名称。当它找到匹配项时,它会中断并以字符串形式返回 deviceID。需要设备 ID 才能使用 firebase 更改特定于该恒温器设备的所有数据。*/

deviceId = getDeviceIdFromRoomName(roomName); 

//然后我执行类似的操作将“target_temperature_f”更改为新值。

fb.child(deviceId).child(NestConstants.TARGET_TEMP_F).setValue(newValue);

似乎应该有一种更简单、更可靠的方法来使用 Firebase 库来做到这一点,但我一直没能找到它。有什么建议么?

为了帮助可视化,这是我正在解析的数据结构,我正在寻找有关获取“CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5”(如果存在)的更好方法的建议。

{
    "thermostats": {
        "CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5": {
            "locale": "en-US",
            "temperature_scale": "F",
            "is_using_emergency_heat": false,
            "has_fan": true,
            "software_version": "4.1",
            "has_leaf": true,
            "device_id": "CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5",
            "name": "Master Bedroom",
            "can_heat": true,
            "can_cool": false,
            "hvac_mode": "heat",
            "target_temperature_c": 18.5,
            "target_temperature_f": 66,
            "target_temperature_high_c": 24,
            "target_temperature_high_f": 75,
            "target_temperature_low_c": 20,
            "target_temperature_low_f": 68,
            "ambient_temperature_c": 12,
            "ambient_temperature_f": 54,
            "away_temperature_high_c": 24,
            "away_temperature_high_f": 76,
            "away_temperature_low_c": 12.5,
            "away_temperature_low_f": 55,
            "structure_id": "xF7P6wyrR7-8VHerOAcHYDMBc_odGpO2CIpQO_g5EpM13LINO9Oxdg",
            "fan_timer_active": false,
            "name_long": "Master Bedroom Thermostat",
            "is_online": true
        }``
4

3 回答 3

2

免责声明:我没有使用过 NEST API。我在下面的回答是基于使用常规 Firebase API 的经验。

从外观上看thermostats是一个Firebase 列表。在这种情况下,您可以使用以下方式轻松处理所有孩子:

var thermostats = new Firebase("https://developer-api.nest.com/devices/thermostats/");
thermostats .on('child_added', function(snapshot) {
  var thermostat = snapshot.val();
  alert(thermostat.device_id+' is '+thermostat.name);
});

我假设您在这里使用 JavaScript API。

于 2014-07-07T18:44:03.537 回答
1

我不确定我在这里是否正确理解了您,但是您是否尝试过调用结构 ID?当我这样做时,它会列出与该结构相关的所有恒温器。一旦你拥有了所有的恒温器,你可以调用它们并存储相关的名称吗?如果我离题了,请告诉我,我会再看一遍。

于 2014-07-07T16:56:40.270 回答
0

格雷格,

该结构包含相关设备 ID 的列表。如果可发现性是您的意图,我建议开始聆听结构。您只需要这样做一次,因为设备 ID 不会改变。一旦您遍历结构并获得所需的设备 ID,您可能永远不需要再次执行该步骤。

列弗。

于 2014-07-07T16:07:51.490 回答