電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>NEST恒溫器的自動(dòng)離開(kāi)輔助

NEST恒溫器的自動(dòng)離開(kāi)輔助

2022-11-10 | zip | 0.17 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

Nest Thermostat 是一款支持 Wi-Fi 的設(shè)備,可以使用天氣信息和本地傳感器數(shù)據(jù)優(yōu)化加熱和冷卻系統(tǒng)的使用。該設(shè)備也可以遠(yuǎn)程控制,因此您可以在下班開(kāi)車回家時(shí)做一些很酷的事情,例如將房子設(shè)置為加熱/冷卻。不過(guò),該設(shè)備有點(diǎn)像一個(gè)黑匣子,它使用一些底層的機(jī)器學(xué)習(xí)機(jī)制(無(wú)論如何我都聽(tīng)到了)來(lái)創(chuàng)建您特定使用習(xí)慣的模型,并嘗試確定您是否在家。

問(wèn)題是 Nest 并不總是正確地確定家/離家。例如,我有兩個(gè) Nest 單元控制家里的兩個(gè) HVAC 單元(一個(gè)在樓上控制我房子的左側(cè),另一個(gè)在樓下控制右側(cè))。通常,我發(fā)現(xiàn)自己在樓上的辦公室(位于房子的右側(cè))工作,并且由于認(rèn)為我離開(kāi)房子而關(guān)閉了空調(diào)。這是一個(gè)問(wèn)題,通常涉及通過(guò)移動(dòng)/Web 應(yīng)用程序手動(dòng)啟動(dòng) Nest 控制器,或者跑出辦公室并觸發(fā)我的其他 Nest 設(shè)備之一上的運(yùn)動(dòng)傳感器。

Nest 是一款支持 Wi-Fi 的設(shè)備,所以為什么不在家時(shí)使用運(yùn)動(dòng)感應(yīng)或類似的東西告訴它呢?Nest 意識(shí)到了這個(gè)問(wèn)題,并出售了一個(gè)運(yùn)動(dòng)傳感器和一個(gè)附加監(jiān)控恒溫器,用于控制 Nest 控制器位置以外房間的溫度。這些傳感器非常昂貴,并且僅與 Nest v3 恒溫器兼容(我們中的許多人都有 v2 型號(hào))。Nest v2 已啟用 Wi-Fi,因此您會(huì)認(rèn)為存在基于 Wi-Fi 的設(shè)備來(lái)解決此問(wèn)題,但事實(shí)并非如此。

解決方案

我們真正需要的是一種使用某種形式的基于硬件的觸發(fā)器(PIR 運(yùn)動(dòng)/簧片開(kāi)關(guān)/更復(fù)雜的東西)通知 Nest 我們?cè)诩业姆椒ā?/font>有人會(huì)認(rèn)為If This Then That將通過(guò)他們的 Nest 集成支持此功能,但目前沒(méi)有任何具體設(shè)置 Nest 的 Home / Away 狀態(tài)。這不是破壞交易,我們可以自己動(dòng)手。

要?jiǎng)?chuàng)建我們自己的更新 Nest Home / Away 狀態(tài)的機(jī)制,我們只需要幾個(gè)要素:

  • 一個(gè)有效的 Oauth 令牌,允許我們通過(guò)Nest 的開(kāi)發(fā)人員 API發(fā)出 API 請(qǐng)求以更新 Home / Away 狀態(tài)
  • 可以檢測(cè)存在并發(fā)送事件以觸發(fā)此 API 調(diào)用的設(shè)備。我們將使用粒子核心/光子和 PIR 運(yùn)動(dòng)傳感器以及集成將消息轉(zhuǎn)發(fā)到 Azure IoT 中心。
  • 對(duì) Nest API 進(jìn)行實(shí)際調(diào)用的服務(wù)。我們將使用無(wú)服務(wù)器 Azure 函數(shù)來(lái)調(diào)用 Nest API,當(dāng)事件通過(guò)上述 Azure IoT 中心到達(dá)時(shí)將觸發(fā)該 API。

下面提供了概述整體架構(gòu)的圖表:

?
pYYBAGNsTs6AV1PQAADDS0xbb0o386.png
硬件 => Particle.io => Azure IoT Hub => Azure Function => Nest API。
?

獲取 Oauth Token 以訪問(wèn) Nest API

1. 您需要創(chuàng)建一個(gè)活躍的 Nest 開(kāi)發(fā)者帳戶

2. 在創(chuàng)建一個(gè)新的 OAuth 客戶端

確保啟用“離開(kāi)讀/寫”設(shè)置!

?
poYBAGNsTtGALnG0AAE-NRdmtgE440.png
?

3. 從下面的屏幕獲取 OAuth 客戶端的授權(quán) URL 值,然后選擇“允許”。允許您的申請(qǐng)后,您將收到一個(gè)密碼,請(qǐng)務(wù)必將其復(fù)制下來(lái)。授權(quán) URL 可以從 OAuth 客戶端的概覽屏幕獲取,如下所示。

?
poYBAGNsTtOALyz1AACc1y0_oHs236.png
?

4. 在您??獲得授權(quán) URL 的概覽屏幕中,記下“客戶端 ID”和“客戶端密碼”值。接下來(lái),從安裝了“curl”的合適命令提示符處,執(zhí)行以下命令以獲取您的 AUTH_TOKEN:

curl -X POST "https://api.home.nest.com/oauth2/access_token?client_id=<YOUR_CLIENT_ID>&code=<YOUR_PIN_CODE>&client_secret=<YOUR_CLIENT_SECRET>&grant_type=authorization_code"

5. 最后,我們需要獲取您想要的 STRUCTURE_ID,這是您的 Home 的表示,它與特定的 Nest 設(shè)備相關(guān)聯(lián)。以下將返回一個(gè) json 有效負(fù)載。您需要記下 structure_id 屬性的值。

curl --location-trusted \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -X GET "https://developer-api.nest.com/

構(gòu)建硬件

我們將使用提供的 Particle Photon 或 Particle Core 設(shè)備以及數(shù)字 PIR 傳感器來(lái)創(chuàng)建一個(gè)設(shè)備,該設(shè)備可以監(jiān)控運(yùn)動(dòng)并能夠?qū)⑹录l(fā)布到 Particle.io。

1. 首先獲取一個(gè)數(shù)字 PIR 傳感器并根據(jù)以下示意圖連接到可用的粒子設(shè)備:

?
pYYBAGNsTtaAPHgDAAFbrjbltgQ270.png
?
?
poYBAGNsTveAShkbAAs3XLzyFog535.jpg
?

2. 在粒子 Web IDE 中創(chuàng)建一個(gè)新程序

您將需要刷新附加的nest-motion.ino并確保包含相關(guān)的 CircularBuffer.h

該程序使用 CircularBuffer 來(lái)允許通過(guò)采樣窗口監(jiān)控傳感器讀數(shù)。這使我們能夠非常精確地從硬件控制運(yùn)動(dòng)觸發(fā)事件的靈敏度。通常,PIR 傳感器很容易產(chǎn)生誤報(bào)事件,而沒(méi)有根據(jù)調(diào)速器評(píng)估樣本讀數(shù)的機(jī)制。要獲得更高的靈敏度,請(qǐng)減少“PostiveSamplesToTriggerMotion”變量。要為觸發(fā)器需要更長(zhǎng)的運(yùn)動(dòng)窗口,您可以調(diào)整“SampleWindowSize”。

為了方便起見(jiàn),下面提供了nest-motion.ino :

/*
*********************
Nest Motion Detection
*********************
A tunable program for determining motion events using a PIR sensor, with an emphasis on reducing false-positives and minimizing energy consumption.
When motion is detected, an event is published to Particle.io.
This event is then forwarded to an Azure IoT Hub which calls a Serverless function informing Nest to set Away Status to "Home"
Instruction for end-to-end configuration are avaiable @ 
*/
#include "CircularBuffer.h"
#define PIRPIN D0 //The Pin attached to the PIR Sensor
const int CalibrationTimeInSeconds = 30; //Seconds to await for calibration of the PIR sensor
const int SampleWindowSize = 10; //Ex: SampleWindowSize is the amount of samples to keep track of for evaluating the occurence of a motion event
const int PostiveSamplesToTriggerMotion = 10; //Ex: A value of x will require that at least x samples produced within the sampleWindow are postive to trigger a motion event 
const int SleepIntervalInSeconds = 600;  //The amount of time to go into deep sleep mode afer motion is reported, 600 seconds equates to a max of 10 alerts per hour
CircularBuffer<bool, SampleWindowSize> sampleWindow;
char output[50];
//Per PIR spec, allow 30s to calibrate (warm up) the sensor
void CalibrateSensor()
{
   Serial.print("Calibrating Sensor... ");
   for(int i = 0; i < CalibrationTimeInSeconds; i++){
       delay(1000);
   }
   Serial.println("PIR Sensor Calibrated");
}
void setup() {
   Serial.begin(9600);
   Serial.println("***************************************");
   Serial.println("    Nest Motion Detection Started ");
   Serial.println("***************************************");
   pinMode(PIRPIN, INPUT);
   CalibrateSensor();
}
void loop() {
   sampleWindow.push(SamplePIR());
   if(CheckSampleWindowForMotion())
   {
       Serial.print("Publishing motion event... ");
       //Motion accurately detected, time to inform Nest that we are we are home
       Particle.publish("motion",  "true", PRIVATE); //Trigger the integration
       delay(1000); //Extra sleep to ensure message delivery
       Serial.println("Motion event published");
       Serial.println("Going to sleep now...");
       System.sleep(SLEEP_MODE_DEEP, SleepIntervalInSeconds); //Go into deep sleep low-power mode for SleepIntervalInSeconds seconds
       CalibrateSensor();//Recalibrate Sesnor on awaken
   }
}
//Takes ten readings per second, returns true if a postive reading is encountered
bool SamplePIR() {
   Serial.print("Sampling PIR... ");
   int val = 0;
   for(int i = 0; i < 10; i += 1)
   {
       if(val == LOW)
           val = digitalRead(PIRPIN);
       delay(100);
   }
   if(val)
    {
        Serial.println(" Motion Detected in sample!");
        return true;
    }
   else
   {
       Serial.println(" No Motion Detected in sample");
       return false;
   }
}
//Loops through the sampleWindow, returns true if enough positive samples are found
bool CheckSampleWindowForMotion()
{
   Serial.print("Checking Sample Window... ");
   int positiveSamples = 0;
   for(int i = 0; i < SampleWindowSize ; i++){
       if(sampleWindow.pop() == true)
           positiveSamples++;
   }
   Serial.print(positiveSamples);
   Serial.println(" positive samples were found in sample window");
   if(positiveSamples >= PostiveSamplesToTriggerMotion)
       return true;
   else
       return false;
}

設(shè)置粒子集成以將事件轉(zhuǎn)發(fā)到 Azure IoT 中心

此步驟需要一個(gè)活動(dòng)的 Azure 帳戶。我們將創(chuàng)建的服務(wù)將是免費(fèi)的,或者幾乎不需要任何費(fèi)用來(lái)運(yùn)營(yíng)。

1. 在http://azure.com創(chuàng)建一個(gè) Azure IoT 中心

?
poYBAGNsTv2AL3d-AALkOGaa_J4557.png
?

2.創(chuàng)建粒子集成

創(chuàng)建一個(gè)新的粒子集成。請(qǐng)務(wù)必遵循所有說(shuō)明,并特別注意有關(guān)創(chuàng)建“共享訪問(wèn)策略”的部分。在生成的設(shè)置頁(yè)面上使用值“motion”作為事件名稱。

填寫相應(yīng)信息后,啟用集成。

?
pYYBAGNsTv-ADtmhAADvrG8tiUM644.png
?

現(xiàn)在,當(dāng)Particle.publish("motion", "true", PRIVATE);nestmotion.ino中調(diào)用時(shí),該事件將被發(fā)送到Particle.io ,然后轉(zhuǎn)發(fā)到您的 Azure IoT Hub。

使用 Azure 函數(shù)設(shè)置嵌套“離開(kāi)”狀態(tài)

我們幾乎完成了,我們只需要觸發(fā)對(duì) Nest 的 API 的調(diào)用,以便在檢測(cè)到運(yùn)動(dòng)時(shí)將 Nest 的“離開(kāi)”狀態(tài)設(shè)置為 home。

我已盡我最大的努力使用執(zhí)行此任務(wù)的預(yù)制 Azure 函數(shù)使此操作盡可能簡(jiǎn)單。

1. 在創(chuàng)建一個(gè)新的 Azure Function 應(yīng)用

2. 在Visual Studio Code中,打開(kāi)源代碼庫(kù)中包含的Nest-Controller文件夾,

您將需要編輯local.settings.json配置文件:

ACCESS_TOKENSTRUCTURE_ID應(yīng)設(shè)置為“獲取 Oauth 令牌以訪問(wèn) Nest API ”的步驟 4 和 5 中獲得的值

在 Azure 門戶中,導(dǎo)航到 IoT 中心并選擇“設(shè)置”下的“內(nèi)置終結(jié)點(diǎn)”部分。

< EventHub-Compatible-Endpoint> 應(yīng)更改為“Event Hub-compatible endpoint”的值。

?
poYBAGNsTwOAHjFDAAFCf7XR_vs074.png
?

您現(xiàn)在可以調(diào)試和測(cè)試 Azure 函數(shù)。當(dāng)從粒子設(shè)備發(fā)送運(yùn)動(dòng)事件時(shí),您應(yīng)該會(huì)看到函數(shù)觸發(fā)器。

?
poYBAGNsTxKAfuBEAALWobGHuUw240.png
?

當(dāng)您能夠驗(yàn)證函數(shù)是否按預(yù)期工作時(shí),您可以通過(guò)右鍵單擊項(xiàng)目并選擇“部署到函數(shù)應(yīng)用程序”來(lái)將函數(shù)發(fā)布到 Visual Studio 中的 Azure。

可選:如果您知道自己在做什么,則可以使用下面提供的代碼完全在 Azure 門戶中創(chuàng)建函數(shù)。請(qǐng)注意,您必須通過(guò)訪問(wèn)http://.scm.azurewebsites.net、導(dǎo)航到“wwwroot”并發(fā)出命令“ npm install request -g ”來(lái)滿足“request.js”的依賴項(xiàng),在 kudu cli 中安裝“請(qǐng)求”依賴項(xiàng)。

module.exports = function (context, eventInput) {
   context.log('Triggered!');
   if(eventInput.event === "motion" && eventInput.data === "true");
   {
       var url = 'https://developer-api.nest.com/structures/' + process.env.STRUCTURE_ID + '/away?auth=' + process.env.ACCESS_TOKEN;
       var request = require('request');
       request({ method: 'PUT', url: url, followAllRedirects : true, 'content-type': 'application/json', body: '"home"' }, function (err, res, body) {        
               context.log('Away status set to: ' + JSON.parse(body));
               context.done();
       });
   }             
}

4. 更新函數(shù) AppSettings 以使用您的值

ACCESS_TOKEN、STRUCTURE_IDparticle-iot-hub_events_IOTHUB應(yīng)設(shè)置為在“使用Azure 函數(shù)設(shè)置嵌套”狀態(tài)“的步驟2 中配置的local.settings.json配置文件的值。

?
pYYBAGNsTxaAanZlAAI7AWKSR38510.png
?

您可以在 Azure 門戶中使用sample.dat的內(nèi)容測(cè)試函數(shù):

?
poYBAGNsTxmAVk6oAAFRMIiIMJA788.png
?

你有它!您現(xiàn)在應(yīng)該在 Azure 中有一個(gè)完整的管道來(lái)處理來(lái)自 Hardware => Particle.io => Azure IoT Hub => Azure Function => Nest API 的消息。

您可以在監(jiān)控粒子積分點(diǎn)的運(yùn)動(dòng)事件,然后選擇您的積分并向下滾動(dòng)到歷史記錄。請(qǐng)務(wù)必檢查此區(qū)域以確保您沒(méi)有發(fā)送誤報(bào)運(yùn)動(dòng)事件:

?
pYYBAGNsTxyAOtntAAEnLTQd-kA865.png
?

我的傳感器在我的辦公室里工作,我巧合地在過(guò)去 5 天不在城里。很高興看到發(fā)送了零誤報(bào)!

結(jié)論

Nest 擁有一系列非常棒的產(chǎn)品,但是,我們已經(jīng)證明,通過(guò)訪問(wèn)他們的開(kāi)發(fā)人員 API,我們可以讓它們變得更好!我再也不用擔(dān)心在樓上工作時(shí)我的空調(diào)會(huì)關(guān)閉。我可以簡(jiǎn)單地將nest-motion.ino代碼閃爍到多個(gè)粒子設(shè)備,并在房子的多個(gè)房間內(nèi)提醒Nest 家庭入住。目前,我有一個(gè)設(shè)備連接到我辦公室打印機(jī)的 USB 端口(始終開(kāi)啟),另一個(gè)在我兄弟的房間里插入墻上,還有一個(gè)連接到我樓下電視的 USB 端口,只有在電視開(kāi)著。這種設(shè)置可以讓 Nest 真正知道我們何時(shí)在家。

我們使用的服務(wù)都是免費(fèi)的,只需大約 22 美元,您就可以根據(jù)需要構(gòu)建任意數(shù)量的設(shè)備。硬件是節(jié)能的,因?yàn)樗谶\(yùn)動(dòng)檢測(cè)事件發(fā)生后默認(rèn)進(jìn)入深度睡眠模式 10 分鐘,僅消耗200uA 。此外,我們可以通過(guò)使用各種附加傳感器來(lái)擴(kuò)展功能。我們甚至可以通過(guò)使用溫度傳感器和顯示器來(lái)創(chuàng)建自己的Nest Thermostat 。

在評(píng)論中讓我們知道您的想法,并隨時(shí)分享您的想法以改進(jìn)設(shè)計(jì)!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)