資料介紹
描述
介紹
Nest Thermostat 是一款支持 Wi-Fi 的設備,可以使用天氣信息和本地傳感器數(shù)據(jù)優(yōu)化加熱和冷卻系統(tǒng)的使用。該設備也可以遠程控制,因此您可以在下班開車回家時做一些很酷的事情,例如將房子設置為加熱/冷卻。不過,該設備有點像一個黑匣子,它使用一些底層的機器學習機制(無論如何我都聽到了)來創(chuàng)建您特定使用習慣的模型,并嘗試確定您是否在家。
問題是 Nest 并不總是正確地確定家/離家。例如,我有兩個 Nest 單元控制家里的兩個 HVAC 單元(一個在樓上控制我房子的左側(cè),另一個在樓下控制右側(cè))。通常,我發(fā)現(xiàn)自己在樓上的辦公室(位于房子的右側(cè))工作,并且由于認為我離開房子而關閉了空調(diào)。這是一個問題,通常涉及通過移動/Web 應用程序手動啟動 Nest 控制器,或者跑出辦公室并觸發(fā)我的其他 Nest 設備之一上的運動傳感器。
Nest 是一款支持 Wi-Fi 的設備,所以為什么不在家時使用運動感應或類似的東西告訴它呢?Nest 意識到了這個問題,并出售了一個運動傳感器和一個附加監(jiān)控恒溫器,用于控制 Nest 控制器位置以外房間的溫度。這些傳感器非常昂貴,并且僅與 Nest v3 恒溫器兼容(我們中的許多人都有 v2 型號)。Nest v2 已啟用 Wi-Fi,因此您會認為存在基于 Wi-Fi 的設備來解決此問題,但事實并非如此。
解決方案
我們真正需要的是一種使用某種形式的基于硬件的觸發(fā)器(PIR 運動/簧片開關/更復雜的東西)通知 Nest 我們在家的方法。有人會認為If This Then That將通過他們的 Nest 集成支持此功能,但目前沒有任何具體設置 Nest 的 Home / Away 狀態(tài)。這不是破壞交易,我們可以自己動手。
要創(chuàng)建我們自己的更新 Nest Home / Away 狀態(tài)的機制,我們只需要幾個要素:
- 一個有效的 Oauth 令牌,允許我們通過Nest 的開發(fā)人員 API發(fā)出 API 請求以更新 Home / Away 狀態(tài)
- 可以檢測存在并發(fā)送事件以觸發(fā)此 API 調(diào)用的設備。我們將使用粒子核心/光子和 PIR 運動傳感器以及集成將消息轉(zhuǎn)發(fā)到 Azure IoT 中心。
- 對 Nest API 進行實際調(diào)用的服務。我們將使用無服務器 Azure 函數(shù)來調(diào)用 Nest API,當事件通過上述 Azure IoT 中心到達時將觸發(fā)該 API。
下面提供了概述整體架構的圖表:
獲取 Oauth Token 以訪問 Nest API
1. 您需要創(chuàng)建一個活躍的 Nest 開發(fā)者帳戶
2. 在創(chuàng)建一個新的 OAuth 客戶端
確保啟用“離開讀/寫”設置!
3. 從下面的屏幕獲取 OAuth 客戶端的授權 URL 值,然后選擇“允許”。允許您的申請后,您將收到一個密碼,請務必將其復制下來。授權 URL 可以從 OAuth 客戶端的概覽屏幕獲取,如下所示。
4. 在您??獲得授權 URL 的概覽屏幕中,記下“客戶端 ID”和“客戶端密碼”值。接下來,從安裝了“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 設備相關聯(lián)。以下將返回一個 json 有效負載。您需要記下 structure_id 屬性的值。
curl --location-trusted \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -X GET "https://developer-api.nest.com/
構建硬件
我們將使用提供的 Particle Photon 或 Particle Core 設備以及數(shù)字 PIR 傳感器來創(chuàng)建一個設備,該設備可以監(jiān)控運動并能夠?qū)⑹录l(fā)布到 Particle.io。
1. 首先獲取一個數(shù)字 PIR 傳感器并根據(jù)以下示意圖連接到可用的粒子設備:
2. 在粒子 Web IDE 中創(chuàng)建一個新程序
您將需要刷新附加的nest-motion.ino并確保包含相關的 CircularBuffer.h
該程序使用 CircularBuffer 來允許通過采樣窗口監(jiān)控傳感器讀數(shù)。這使我們能夠非常精確地從硬件控制運動觸發(fā)事件的靈敏度。通常,PIR 傳感器很容易產(chǎn)生誤報事件,而沒有根據(jù)調(diào)速器評估樣本讀數(shù)的機制。要獲得更高的靈敏度,請減少“PostiveSamplesToTriggerMotion”變量。要為觸發(fā)器需要更長的運動窗口,您可以調(diào)整“SampleWindowSize”。
為了方便起見,下面提供了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;
}
設置粒子集成以將事件轉(zhuǎn)發(fā)到 Azure IoT 中心
此步驟需要一個活動的 Azure 帳戶。我們將創(chuàng)建的服務將是免費的,或者幾乎不需要任何費用來運營。
1. 在http://azure.com創(chuàng)建一個 Azure IoT 中心
2.創(chuàng)建粒子集成
在創(chuàng)建一個新的粒子集成。請務必遵循所有說明,并特別注意有關創(chuàng)建“共享訪問策略”的部分。在生成的設置頁面上使用值“motion”作為事件名稱。
填寫相應信息后,啟用集成。
現(xiàn)在,當Particle.publish("motion", "true", PRIVATE);
在nestmotion.ino中調(diào)用時,該事件將被發(fā)送到Particle.io ,然后轉(zhuǎn)發(fā)到您的 Azure IoT Hub。
使用 Azure 函數(shù)設置嵌套“離開”狀態(tài)
我們幾乎完成了,我們只需要觸發(fā)對 Nest 的 API 的調(diào)用,以便在檢測到運動時將 Nest 的“離開”狀態(tài)設置為 home。
我已盡我最大的努力使用執(zhí)行此任務的預制 Azure 函數(shù)使此操作盡可能簡單。
1. 在創(chuàng)建一個新的 Azure Function 應用
2. 在Visual Studio Code中,打開源代碼庫中包含的Nest-Controller文件夾,
您將需要編輯local.settings.json配置文件:
ACCESS_TOKEN和STRUCTURE_ID應設置為“獲取 Oauth 令牌以訪問 Nest API ”的步驟 4 和 5 中獲得的值
在 Azure 門戶中,導航到 IoT 中心并選擇“設置”下的“內(nèi)置終結點”部分。
< EventHub-Compatible-Endpoint> 應更改為“Event Hub-compatible endpoint”的值。
您現(xiàn)在可以調(diào)試和測試 Azure 函數(shù)。當從粒子設備發(fā)送運動事件時,您應該會看到函數(shù)觸發(fā)器。
當您能夠驗證函數(shù)是否按預期工作時,您可以通過右鍵單擊項目并選擇“部署到函數(shù)應用程序”來將函數(shù)發(fā)布到 Visual Studio 中的 Azure。
可選:如果您知道自己在做什么,則可以使用下面提供的代碼完全在 Azure 門戶中創(chuàng)建函數(shù)。請注意,您必須通過訪問http://
、導航到“wwwroot”并發(fā)出命令“ npm install request -g ”來滿足“request.js”的依賴項,在 kudu cli 中安裝“請求”依賴項。
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_ID和particle-iot-hub_events_IOTHUB應設置為在“使用Azure 函數(shù)設置嵌套”狀態(tài)“的步驟2 中配置的local.settings.json配置文件的值。
您可以在 Azure 門戶中使用sample.dat的內(nèi)容測試函數(shù):
你有它!您現(xiàn)在應該在 Azure 中有一個完整的管道來處理來自 Hardware => Particle.io => Azure IoT Hub => Azure Function => Nest API 的消息。
您可以在監(jiān)控粒子積分點的運動事件,然后選擇您的積分并向下滾動到歷史記錄。請務必檢查此區(qū)域以確保您沒有發(fā)送誤報運動事件:
我的傳感器在我的辦公室里工作,我巧合地在過去 5 天不在城里。很高興看到發(fā)送了零誤報!
結論
Nest 擁有一系列非常棒的產(chǎn)品,但是,我們已經(jīng)證明,通過訪問他們的開發(fā)人員 API,我們可以讓它們變得更好!我再也不用擔心在樓上工作時我的空調(diào)會關閉。我可以簡單地將nest-motion.ino代碼閃爍到多個粒子設備,并在房子的多個房間內(nèi)提醒Nest 家庭入住。目前,我有一個設備連接到我辦公室打印機的 USB 端口(始終開啟),另一個在我兄弟的房間里插入墻上,還有一個連接到我樓下電視的 USB 端口,只有在電視開著。這種設置可以讓 Nest 真正知道我們何時在家。
我們使用的服務都是免費的,只需大約 22 美元,您就可以根據(jù)需要構建任意數(shù)量的設備。硬件是節(jié)能的,因為它在運動檢測事件發(fā)生后默認進入深度睡眠模式 10 分鐘,僅消耗200uA 。此外,我們可以通過使用各種附加傳感器來擴展功能。我們甚至可以通過使用溫度傳感器和顯示器來創(chuàng)建自己的Nest Thermostat 。
在評論中讓我們知道您的想法,并隨時分享您的想法以改進設計!
- 智能恒溫器開源項目
- 手機控制的撥號恒溫器
- 使用螺栓的恒溫器
- Arduino供電恒溫器和風扇控制器 0次下載
- 藍牙控制恒溫器
- 智能恒溫器開源案例
- 迷你恒溫器開源分享
- Vishay NTC恒溫器的模擬
- 智能恒溫器開源分享
- 恒溫器開源分享
- 如何使用固態(tài)繼電器驅(qū)動恒溫器
- 恒溫器控制電路原理圖 56次下載
- 烙鐵恒溫器電路圖 34次下載
- 恒溫器控制電路原理圖免費下載 11次下載
- 2017全球WiFi恒溫器市場發(fā)展現(xiàn)狀及趨勢研究 4次下載
- 高壓隔離開關用途 2478次閱讀
- 使用MOSFET作為恒溫加熱器 1154次閱讀
- 如何制作一個通過本地WiFi網(wǎng)絡瀏覽器進行控制的恒溫器 1873次閱讀
- 高壓隔離開關型號含義_高壓隔離開關檢修 6819次閱讀
- 恒溫加熱器的工作原理_恒溫加熱器保養(yǎng) 1.8w次閱讀
- 恒溫電烙鐵的選擇及使用注意事項 1.1w次閱讀
- 即熱式熱水器自動恒溫實驗電路圖 1.9w次閱讀
- 電熨斗自動調(diào)溫原理 3.2w次閱讀
- 恒溫電烙鐵及焊接知識 3147次閱讀
- 電子恒溫器 4168次閱讀
- 用于植物的土壤加熱器 3770次閱讀
- 小型恒溫控制器 2519次閱讀
- 魚缸電子恒溫器電路圖 3403次閱讀
- 雙線遙控交流電子恒溫器電路圖 2168次閱讀
- 三線電子恒溫器電路圖 6041次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多