簡體   English   中英

使用Firebase控制多個Nest恆溫器

[英]Controlling multiple Nest Thermostats using Firebase

有沒有一種簡單的方法來發現和區分恆溫器設備ID? 我本來希望能夠在設備界面中的某個位置或使用Firebase庫找到deviceId,但事實並非如此。

我的Firebase對象是這樣創建的(URL以恆溫器結尾):

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
        }``

免責聲明:我尚未使用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。

我不確定我是否在這里正確理解了您,但是您是否嘗試調用結構ID? 當我這樣做時,它將列出與該結構關聯的所有恆溫器。 擁有所有恆溫器后,您可以調用它們並存儲相關名稱嗎? 如果我要離開,請告訴我,我將嘗試再次查看。

格雷格

該結構包含關聯設備ID的列表。 如果可發現性是您的意圖,我建議您開始偵聽結構。 您只需執行一次操作,因為設備ID不會更改。 遍歷結構並獲得所需的設備ID后,您可能再也不需要執行該步驟了。

列夫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM