色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>NEST恒溫器的自動離開輔助

NEST恒溫器的自動離開輔助

2022-11-10 | zip | 0.17 MB | 次下載 | 免費

資料介紹

描述

介紹

Nest Thermostat 是一款支持 Wi-Fi 的設備,可以使用天氣信息和本地傳感器數據優化加熱和冷卻系統的使用。該設備也可以遠程控制,因此您可以在下班開車回家時做一些很酷的事情,例如將房子設置為加熱/冷卻。不過,該設備有點像一個黑匣子,它使用一些底層的機器學習機制(無論如何我都聽到了)來創建您特定使用習慣的模型,并嘗試確定您是否在家。

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

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

解決方案

我們真正需要的是一種使用某種形式的基于硬件的觸發器(PIR 運動/簧片開關/更復雜的東西)通知 Nest 我們在家的方法。有人會認為If This Then That將通過他們的 Nest 集成支持此功能,但目前沒有任何具體設置 Nest 的 Home / Away 狀態。這不是破壞交易,我們可以自己動手。

要創建我們自己的更新 Nest Home / Away 狀態的機制,我們只需要幾個要素:

  • 一個有效的 Oauth 令牌,允許我們通過Nest 的開發人員 API發出 API 請求以更新 Home / Away 狀態
  • 可以檢測存在并發送事件以觸發此 API 調用的設備。我們將使用粒子核心/光子和 PIR 運動傳感器以及集成將消息轉發到 Azure IoT 中心
  • 對 Nest API 進行實際調用的服務。我們將使用無服務器 Azure 函數來調用 Nest API,當事件通過上述 Azure IoT 中心到達時將觸發該 API。

下面提供了概述整體架構的圖表:

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

獲取 Oauth Token 以訪問 Nest API

1. 您需要創建一個活躍的 Nest 開發者帳戶

2. 在創建一個新的 OAuth 客戶端

確保啟用“離開讀/寫”設置!

?
poYBAGNsTtGALnG0AAE-NRdmtgE440.png
?

3. 從下面的屏幕獲取 OAuth 客戶端的授權 URL 值,然后選擇“允許”。允許您的申請后,您將收到一個密碼,請務必將其復制下來。授權 URL 可以從 OAuth 客戶端的概覽屏幕獲取,如下所示。

?
poYBAGNsTtOALyz1AACc1y0_oHs236.png
?

4. 在您??獲得授權 URL 的概覽屏幕中,記下“客戶端 ID”和“客戶端密碼”值。接下來,從安裝了“curl”的合適命令提示符處,執行以下命令以獲取您的 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 設備相關聯。以下將返回一個 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 設備以及數字 PIR 傳感器來創建一個設備,該設備可以監控運動并能夠將事件發布到 Particle.io。

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

?
pYYBAGNsTtaAPHgDAAFbrjbltgQ270.png
?
?
poYBAGNsTveAShkbAAs3XLzyFog535.jpg
?

2. 在粒子 Web IDE 中創建一個新程序

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

該程序使用 CircularBuffer 來允許通過采樣窗口監控傳感器讀數。這使我們能夠非常精確地從硬件控制運動觸發事件的靈敏度。通常,PIR 傳感器很容易產生誤報事件,而沒有根據調速器評估樣本讀數的機制。要獲得更高的靈敏度,請減少“PostiveSamplesToTriggerMotion”變量。要為觸發器需要更長的運動窗口,您可以調整“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;
}

設置粒子集成以將事件轉發到 Azure IoT 中心

此步驟需要一個活動的 Azure 帳戶。我們將創建的服務將是免費的,或者幾乎不需要任何費用來運營。

1. 在http://azure.com創建一個 Azure IoT 中心

?
poYBAGNsTv2AL3d-AALkOGaa_J4557.png
?

2.創建粒子集成

創建一個新的粒子集成請務必遵循所有說明,并特別注意有關創建“共享訪問策略”的部分。在生成的設置頁面上使用值“motion”作為事件名稱。

填寫相應信息后,啟用集成。

?
pYYBAGNsTv-ADtmhAADvrG8tiUM644.png
?

現在,當Particle.publish("motion", "true", PRIVATE);nestmotion.ino中調用時,該事件將被發送到Particle.io ,然后轉發到您的 Azure IoT Hub。

使用 Azure 函數設置嵌套“離開”狀態

我們幾乎完成了,我們只需要觸發對 Nest 的 API 的調用,以便在檢測到運動時將 Nest 的“離開”狀態設置為 home。

我已盡我最大的努力使用執行此任務的預制 Azure 函數使此操作盡可能簡單。

1. 在創建一個新的 Azure Function 應用

2. 在Visual Studio Code中,打開源代碼庫中包含的Nest-Controller文件夾,

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

ACCESS_TOKENSTRUCTURE_ID應設置為“獲取 Oauth 令牌以訪問 Nest API ”的步驟 4 和 5 中獲得的值

在 Azure 門戶中,導航到 IoT 中心并選擇“設置”下的“內置終結點”部分。

< EventHub-Compatible-Endpoint> 應更改為“Event Hub-compatible endpoint”的值。

?
poYBAGNsTwOAHjFDAAFCf7XR_vs074.png
?

您現在可以調試和測試 Azure 函數。當從粒子設備發送運動事件時,您應該會看到函數觸發器。

?
poYBAGNsTxKAfuBEAALWobGHuUw240.png
?

當您能夠驗證函數是否按預期工作時,您可以通過右鍵單擊項目并選擇“部署到函數應用程序”來將函數發布到 Visual Studio 中的 Azure。

可選:如果您知道自己在做什么,則可以使用下面提供的代碼完全在 Azure 門戶中創建函數。請注意,您必須通過訪問http://.scm.azurewebsites.net、導航到“wwwroot”并發出命令“ 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. 更新函數 AppSettings 以使用您的值

ACCESS_TOKEN、STRUCTURE_IDparticle-iot-hub_events_IOTHUB應設置為在“使用Azure 函數設置嵌套”狀態“的步驟2 中配置的local.settings.json配置文件的值

?
pYYBAGNsTxaAanZlAAI7AWKSR38510.png
?

您可以在 Azure 門戶中使用sample.dat的內容測試函數:

?
poYBAGNsTxmAVk6oAAFRMIiIMJA788.png
?

你有它!您現在應該在 Azure 中有一個完整的管道來處理來自 Hardware => Particle.io => Azure IoT Hub => Azure Function => Nest API 的消息。

您可以在監控粒子積分點的運動事件,然后選擇您的積分并向下滾動到歷史記錄。請務必檢查此區域以確保您沒有發送誤報運動事件:

?
pYYBAGNsTxyAOtntAAEnLTQd-kA865.png
?

我的傳感器在我的辦公室里工作,我巧合地在過去 5 天不在城里。很高興看到發送了零誤報!

結論

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

我們使用的服務都是免費的,只需大約 22 美元,您就可以根據需要構建任意數量的設備。硬件是節能的,因為它在運動檢測事件發生后默認進入深度睡眠模式 10 分鐘,僅消耗200uA 此外,我們可以通過使用各種附加傳感器來擴展功能。我們甚至可以通過使用溫度傳感器和顯示器來創建自己的Nest Thermostat 。

在評論中讓我們知道您的想法,并隨時分享您的想法以改進設計!


評論

查看更多

下載排行

本周

  1. 1Keysight B1500A 半導體器件分析儀用戶手冊、說明書 (中文)
  2. 19.00 MB  |  4次下載  |  免費
  3. 2使用TL431設計電源
  4. 0.67 MB   |  2次下載  |  免費
  5. 3BT134雙向可控硅手冊
  6. 1.74 MB   |  2次下載  |  1 積分
  7. 4一種新型高效率的服務器電源系統
  8. 0.85 MB   |  1次下載  |  1 積分
  9. 5LabVIEW環形控件
  10. 0.01 MB   |  1次下載  |  1 積分
  11. 6PR735,使用UCC28060的600W交錯式PFC轉換器
  12. 540.03KB   |  1次下載  |  免費
  13. 751單片機核心板原理圖
  14. 0.12 MB   |  1次下載  |  5 積分
  15. 8BP2879DB支持調光調滅的非隔離低 PF LED 驅動器
  16. 1.44 MB  |  1次下載  |  免費

本月

  1. 1開關電源設計原理手冊
  2. 1.83 MB   |  54次下載  |  免費
  3. 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊
  4. 8.45 MB   |  23次下載  |  免費
  5. 3DMT0660數字萬用表產品說明書
  6. 0.70 MB   |  13次下載  |  免費
  7. 4UC3842/3/4/5電源管理芯片中文手冊
  8. 1.75 MB   |  12次下載  |  免費
  9. 5ST7789V2單芯片控制器/驅動器英文手冊
  10. 3.07 MB   |  11次下載  |  1 積分
  11. 6TPS54202H降壓轉換器評估模塊用戶指南
  12. 1.02MB   |  8次下載  |  免費
  13. 7STM32F101x8/STM32F101xB手冊
  14. 1.69 MB   |  8次下載  |  1 積分
  15. 8基于MSP430FR6043的超聲波氣體流量計快速入門指南
  16. 2.26MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 久久精品黄色| 国产亚洲精品久久久久苍井松| 国产精品亚欧美一区二区三区| 精品免费久久久久久成人影院| 女人被弄到高潮叫床免| 少妇连续高潮抽搐痉挛昏厥| 亚洲2017天堂色无码| 55夜色66夜亚洲精品播放| 福利视频一二三在线观看| 久久re热在线视频精99| 青柠在线观看视频在线高清完整| 亚洲国产精品久久人人爱| a免费在线观看视频| 国产最新进精品视频| 琪琪色在线播放| 一区二一二| 国产东北男同志videos网站| 伦理片天堂eeuss影院2o12| 小学生偷拍妈妈视频遭性教育 | 妹妹我要色| 欧美亚洲曰韩一本道| 日本一本在线播放| 亚洲视频在线观看地址| 越南女 黑人 痛苦 大叫| 成人女人A级毛片免费软件| 黄色免费网址在线观看| 免费国产成人高清在线看软件| 一级片mp4| 国产国产乱老熟女视频网站97| 亲女乱h文小兰第一次| 亚洲国产在线观看免费视频| XXX国产麻豆HD真实乱| 精品三级在线观看| 偷偷鲁青春草原视频| 无码日韩人妻精品久久蜜桃免费 | 亚洲黄色免费在线观看| 亚洲综合国产精品| 中文字幕A片视频一区二区| 国语自产视频在线不卡| 性色爽爱性色爽爱网站| 中文文字幕文字幕亚洲色|