2017年03月18日
センサーが追加されたのでHap-node JSを最新にアップデート
○Hap-Node JSのアップデート
前回、ここでHap-node JSにセンサー類が無かったため、Occupancy Sensorを作って適当に使ってましたが、最近 Motion Sensorが追加されたのでそちらを使いたいと思います。
私の場合、accessoriesディレクトリ以外は触っていないので、こんな感じで強制的に最新にしました。
// 自分のaccessoriesディレクトリの退避
> mv accessories accesories_org
> sudo rm -R persist
> git reset --hard origin/master
> sudo npm rebuild
> sudo npm update <--これがないとHap-node JSが起動しなかった。
// 自分のaccessoriesディレクトリの復活
> cp accessories accessories_new
> mv accesories_org accessories
○Motion Sensorの変更
さて、MotionSensorの方も普通に温度センサーと同じようにTimeIntervalが使えるみたいで、ポーリングで定期的にモニターしておくと常に最新の情報をHomeKitの方に通知することができます。
私の場合は以下のように変更しました。
ここに参考になりそうなサンプルコードがあります。
var MOTION_SENSOR_CORE = {
number: id,
device: device,
room: room,
motionDetected: false,
getStatus: function() {
//set the boolean here, this will be returned to the device
MOTION_SENSOR_CORE.motionDetected =
Boolean(remote.getDetection(MOTION_SENSOR_CORE.room));
},
identify: function() {
console.log("Identify the motion sensor!");
}
}
.....中略.....
setInterval(function() {
if(MOTION_SENSOR_CORE.motionDetected !=Boolean(remote.getDetection(MOTION_SENSOR_CORE.room))){
MOTION_SENSOR_CORE.getStatus();
console.log("Motion sensor(" + MOTION_SENSOR_CORE.room + ") updated status to: " + MOTION_SENSOR_CORE.motionDetected);
motionSensor
.getService(Service.MotionSensor)
.setCharacteristic(Characteristic.MotionDetected, MOTION_SENSOR_CORE.motionDetected);
}
}, 10000);
○ホームアプリ側の変更
あとは、ホームアプリ側でセンサーの通知を許可する必要があります。
Motion Sensorを長押しします。
以下のように設定画面が出てくるので、「状況と通知」を選択。
以下の画面で「通知を許可」をONにします。
そうすると普通に外にいる状態でも以下のようにMotion Sensorの通知が届くようになります。
○ホームハブの設定
ここにも書いてありますが、iPad または Apple TV(第4世代) をホームハブとして設定して、HomeKitアクセサリを自動化し、iOS デバイスからリモートコントロールすることができます。
私自身はApple TV(第3世代)とiPadを持っており、今までApple TVを常時ONの状態にしてハブの役割を担っていましたが、オートメーションに興味があって、iPadの方に移行しました。
ちなみに、Apple TVの方はiCloudをサインオフしてハブ機能を使われないようにしないと登録デバイスが全て見えなくなるというおかしな現象が起きました。
iPadをハブにすると以下のようなオートメーションが使えるようになりましたが・・・既に組み込んでいる機能もあって特につかっていませんがそのうち使うかもしれません。
前回、ここでHap-node JSにセンサー類が無かったため、Occupancy Sensorを作って適当に使ってましたが、最近 Motion Sensorが追加されたのでそちらを使いたいと思います。
私の場合、accessoriesディレクトリ以外は触っていないので、こんな感じで強制的に最新にしました。
// 自分のaccessoriesディレクトリの退避
> mv accessories accesories_org
> sudo rm -R persist
> git reset --hard origin/master
> sudo npm rebuild
> sudo npm update <--これがないとHap-node JSが起動しなかった。
// 自分のaccessoriesディレクトリの復活
> cp accessories accessories_new
> mv accesories_org accessories
○Motion Sensorの変更
さて、MotionSensorの方も普通に温度センサーと同じようにTimeIntervalが使えるみたいで、ポーリングで定期的にモニターしておくと常に最新の情報をHomeKitの方に通知することができます。
私の場合は以下のように変更しました。
ここに参考になりそうなサンプルコードがあります。
var MOTION_SENSOR_CORE = {
number: id,
device: device,
room: room,
motionDetected: false,
getStatus: function() {
//set the boolean here, this will be returned to the device
MOTION_SENSOR_CORE.motionDetected =
Boolean(remote.getDetection(MOTION_SENSOR_CORE.room));
},
identify: function() {
console.log("Identify the motion sensor!");
}
}
.....中略.....
setInterval(function() {
if(MOTION_SENSOR_CORE.motionDetected !=Boolean(remote.getDetection(MOTION_SENSOR_CORE.room))){
MOTION_SENSOR_CORE.getStatus();
console.log("Motion sensor(" + MOTION_SENSOR_CORE.room + ") updated status to: " + MOTION_SENSOR_CORE.motionDetected);
motionSensor
.getService(Service.MotionSensor)
.setCharacteristic(Characteristic.MotionDetected, MOTION_SENSOR_CORE.motionDetected);
}
}, 10000);
○ホームアプリ側の変更
あとは、ホームアプリ側でセンサーの通知を許可する必要があります。
Motion Sensorを長押しします。
以下のように設定画面が出てくるので、「状況と通知」を選択。
以下の画面で「通知を許可」をONにします。
そうすると普通に外にいる状態でも以下のようにMotion Sensorの通知が届くようになります。
○ホームハブの設定
ここにも書いてありますが、iPad または Apple TV(第4世代) をホームハブとして設定して、HomeKitアクセサリを自動化し、iOS デバイスからリモートコントロールすることができます。
私自身はApple TV(第3世代)とiPadを持っており、今までApple TVを常時ONの状態にしてハブの役割を担っていましたが、オートメーションに興味があって、iPadの方に移行しました。
ちなみに、Apple TVの方はiCloudをサインオフしてハブ機能を使われないようにしないと登録デバイスが全て見えなくなるというおかしな現象が起きました。
iPadをハブにすると以下のようなオートメーションが使えるようになりましたが・・・既に組み込んでいる機能もあって特につかっていませんがそのうち使うかもしれません。