nestって「ねぐら」って意味なんですね。心地よいねぐらを作ってくれるって事か。
先日のnestお勉強編にて、アメリカのサーモスタットの必要性と、しかし文化の違い?からかnestは日本において出番が少ないという状態なのはよくわかりました。そもそも、日本で24VoltageACのサーモスタットなんて代物は存在しない??少なくとも我が家にはない。Googleが買収する前から、「自分の家ではつかえねぇなぁ・・・」てことでスルーしてたんですよね。でもなぜか今nestが会社にあってですね、ほんのちょっと触る機会がありまして、再びワクワクしております。数年ぶりに「自宅スマートホーム化計画」が自分の中で再燃中、是非とも使えるようにしてみたいわけですよ。
で、最終的にやりたいのは、「ベンツのように車が自宅に近づいたら暖房or冷房ON」をしてみたいという、それだけなのです。まあ、nestに対応した冷暖房があるわけではないので、実際に実現はできませんが。実際は我が家であれば「IRKit」のほうがやりたいことを実現できるのだけれど。
というわけでnestは持っていないし買っても設置出来ないわけですから、ここは実機無しで開発環境を構築して、サンプルアプリでも動かしてることとしましょう。
まずは、クロームのプラグインを導入します。
https://home.nest.com/を開きます。
クロームのメニューより その他ツール>デベロッパーツール を開きます。
タブのNestを選択
Thermostatsの+ボタンを押してサーモスタットを追加します。
ではサンプルを動作させてみたいと思いますが、その前に、nestアプリで動作させてみましょうか。iPhoneのApp Storeにてnestで検索するとすぐ見つかります。
すると何の事はない、単にWebと同じ画面が開くだけのアプリのようです。
気を取り直してサンプル動作です。さて、事前知識としてnest APIがどのように動作するか確認します。
- サーモスタットからのデータはnestのサーバーにupされる。
- Nest APIが提供されており、サーモスタットにはREST、Firebaseでアクセス可能。
- Developer Serviceを介してNest APIにアクセスすることも、iPhoneなどから直接Nest APIを呼ぶことも可能。
- OAuth2.0で認証するようだ。
ではSample Codeの一番上にあるThermostat Controlから試してみます。
control-jquery-master.zip をダウンロード、展開。
まずはツール類をダウンロード、インストール。
node.jsをインストールします。
$ brew uninstall node $ brew update $ brew install nodebrew $ nodebrew install latest
ビルドにはそこそこ時間がかかります。次にバージョンを確認
$ nodebrew list v0.11.14 current: none
上記バージョンを有効にする
$ nodebrew use v0.11.14 use v0.11.14
パスを設定する。
$ echo export PATH=\$PATH:/Users/$(whoami)/.nodebrew/current/bin >> ~/.bashrc
反映して、バージョン確認
$ source ~/.bashrc
$ node -v
v0.11.14
ちなみにyosemiteでbrew updateがうまう行かない場合、次の記事および次の記事で無事解決しました。
つぎにYeomanです。Yeomanについてはこちらの記事を参考。
Yeomanはnode.jsのパッケージ管理コマンドであるnpmコマンドを使用してインストールします。こちらのページを参考にインストールしましょう。
$ npm install -g yo bower grunt-cli gulp
展開したサンプルのフォルダに入ります。 例えば以下のように。
cd ~/Documents/Projects/nest/sample/control-jquery-master
次に、展開したサンプルの環境構築を行います。bower installを行うとbower.jsonに記載されているdependenciesのとおり、ライブラリが構築されます。
$ cat bower.json { "name": "Control", "dependencies": { "jquery": "= 2.1.1", "jquery-cookie": "= 1.4.1", "firebase": "= 1.0.15" }, "private": true }
jqueryとjquery–cookie、それにfirebaseが導入されるようですね。それではbower installしてみましょう。
$ bower install [?] May bower anonymously report usage statistics to improve the tool over time? No/n) n bower not-cached git://github.com/jquery/jquery.git#= 2.1.1 bower resolve git://github.com/jquery/jquery.git#= 2.1.1 bower not-cached git://github.com/carhartl/jquery-cookie.git#= 1.4.1 bower resolve git://github.com/carhartl/jquery-cookie.git#= 1.4.1 bower not-cached git://github.com/firebase/firebase-bower.git#= 1.0.15 bower resolve git://github.com/firebase/firebase-bower.git#= 1.0.15 bower download https://github.com/firebase/firebase-bower/archive/v1.0.15.tar.gz bower download https://github.com/carhartl/jquery-cookie/archive/v1.4.1.tar.gz bower download https://github.com/jquery/jquery/archive/2.1.1.tar.gz bower extract jquery-cookie#= 1.4.1 archive.tar.gz bower resolved git://github.com/carhartl/jquery-cookie.git#1.4.1 bower not-cached git://github.com/jquery/jquery.git#>=1.2 bower resolve git://github.com/jquery/jquery.git#>=1.2 bower download https://github.com/jquery/jquery/archive/2.1.3.tar.gz bower extract firebase#= 1.0.15 archive.tar.gz bower resolved git://github.com/firebase/firebase-bower.git#1.0.15 bower extract jquery#= 2.1.1 archive.tar.gz bower resolved git://github.com/jquery/jquery.git#2.1.1 bower extract jquery#>=1.2 archive.tar.gz bower resolved git://github.com/jquery/jquery.git#2.1.3 bower install jquery-cookie#1.4.1 bower install firebase#1.0.15 bower install jquery#2.1.1 jquery-cookie#1.4.1 bower_components/jquery-cookie └── jquery#2.1.1 firebase#1.0.15 bower_components/firebase jquery#2.1.1 bower_components/jquery
次にnpm installします。npm installをオプション無しで実行すると、package.jsonの内容に従って、packageをインストールします。
$ cat package.json { "dependencies": { "body-parser": "latest", "cookie-parser": "latest", "express": "latest", "express-session": "latest", "passport": "latest", "passport-nest": "latest" } }
ではインストールします。
$ npm install npm WARN package.json @ No repository field. cookie-parser@1.3.3 node_modules/cookie-parser ├── cookie@0.1.2 └── cookie-signature@1.0.5 passport@0.2.1 node_modules/passport ├── pause@0.0.1 └── passport-strategy@1.0.0 express-session@1.10.1 node_modules/express-session ├── cookie@0.1.2 ├── utils-merge@1.0.0 ├── cookie-signature@1.0.5 ├── on-headers@1.0.0 ├── parseurl@1.3.0 ├── crc@3.2.1 ├── depd@1.0.0 ├── uid-safe@1.0.2 (native-or-bluebird@1.1.2, base64-url@1.1.0) └── debug@2.1.1 (ms@0.6.2) body-parser@1.10.1 node_modules/body-parser ├── media-typer@0.3.0 ├── bytes@1.0.0 ├── raw-body@1.3.1 ├── depd@1.0.0 ├── qs@2.3.3 ├── on-finished@2.2.0 (ee-first@1.1.0) ├── iconv-lite@0.4.5 └── type-is@1.5.5 (mime-types@2.0.7) express@4.11.0 node_modules/express ├── utils-merge@1.0.0 ├── cookie@0.1.2 ├── merge-descriptors@0.0.2 ├── methods@1.1.1 ├── cookie-signature@1.0.5 ├── fresh@0.2.4 ├── escape-html@1.0.1 ├── range-parser@1.0.2 ├── media-typer@0.3.0 ├── finalhandler@0.3.3 ├── vary@1.0.0 ├── serve-static@1.8.0 ├── content-disposition@0.5.0 ├── parseurl@1.3.0 ├── path-to-regexp@0.1.3 ├── etag@1.5.1 (crc@3.2.1) ├── on-finished@2.2.0 (ee-first@1.1.0) ├── depd@1.0.0 ├── debug@2.1.1 (ms@0.6.2) ├── qs@2.3.3 ├── proxy-addr@1.0.5 (forwarded@0.1.0, ipaddr.js@0.1.6) ├── send@0.11.0 (destroy@1.0.3, ms@0.7.0, mime@1.2.11) ├── type-is@1.5.5 (mime-types@2.0.7) └── accepts@1.2.2 (negotiator@0.5.0, mime-types@2.0.7) passport-nest@1.0.0 node_modules/passport-nest ├── pkginfo@0.3.0 └── passport-oauth@1.0.0 (passport-oauth1@1.0.1, passport-oauth2@1.1.2)
次に、https://developer.nest.com/clients/より環境変数を取得します。
空っぽなので作成します。
Clientの説明とパーミッションを設定。* の欄は必須なのでここだけ埋めていきます。今のところ個人用なのでIndivisualで設定。Select up two categoriesも適当に選択。Support URLは適当に記載。
テストなのでパーミッションはすべてONのread/writeにしていきます。説明も適当に記載。
作成されたCliantのCliant IDとClient Selectを環境変数にセットします。
$ export NEST_ID=<CLIENT ID> $ export NEST_SECRET=<CLIENT SECRET>
では、サンプルを実行してみましよう。
$ grunt grunt-cli: The grunt command line interface. (v0.1.13) Fatal error: Unable to find local grunt. If you're seeing this message, either a Gruntfile wasn't found or grunt hasn't been installed locally to your project. For more information about installing and configuring grunt, please see the Getting Started guide: http://gruntjs.com/getting-started
エラーが出ます。プロジェクトにgruntがインストールされていない?下のコマンドを打ち込みます。
$ npm install grunt npm WARN package.json @ No repository field. npm WARN package.json passport-nest@1.0.0 No repository field. grunt@0.4.5 node_modules/grunt ├── which@1.0.8 ├── dateformat@1.0.2-1.2.3 ├── eventemitter2@0.4.14 ├── getobject@0.1.0 ├── rimraf@2.2.8 ├── colors@0.6.2 ├── async@0.1.22 ├── grunt-legacy-util@0.2.0 ├── hooker@0.2.3 ├── exit@0.1.2 ├── nopt@1.0.10 (abbrev@1.0.5) ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0) ├── lodash@0.9.2 ├── glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3) ├── coffee-script@1.3.3 ├── underscore.string@2.2.1 ├── iconv-lite@0.2.11 ├── findup-sync@0.1.3 (glob@3.2.11, lodash@2.4.1) ├── grunt-legacy-log@0.1.1 (underscore.string@2.3.3, lodash@2.4.1) └── js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.16)
再度サンプルを実行してみましょう。
$ grunt >> Local Npm module "grunt-wiredep" not found. Is it installed? Running "server" task body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:58:9 body-parser deprecated undefined extended: provide extended option node_modules/body-parser/index.js:85:29 express-session deprecated undefined resave option; provide resave option server.js:59:9 express-session deprecated undefined saveUninitialized option; provide saveUninitialized option server.js:59:9 Web server running at http://localhost:8080.
こんどはうまく動きました。でも上記の通りエラーが出ています。
>> Local Npm module "grunt-wiredep" not found. Is it installed?
足りないモジュールをインストールして再度gruntを実行します。
npm install grunt-wirede
gruntを実行してlocalhostを開くと、認証プロセスに遷移します。
ログインするとPincodeが表示されます。しかし、ここから、どうすればいいのかわかりません。
どうすればいいんだ!そうこうしているとそろそ出勤時間です。続きはまた明日。