アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

クリスマスツリーのLEDをリモートで電源をOFF/ONさせる

12月にも入り、家族がクリスマスツリーなるものを購入しました。

それは良いのですが・・・ 飾りのライトがただのLEDで点灯する機能しかなく、スイッチも付いていない。
(そもそも去年のクリスマス過ぎにヤマダ電機で叩き売られていたものを購入したらしいです。)

そんなわけで、LEDライトのON/OFFする度にコンセントを抜くのも面倒だし・・(省電力の)LEDなのに点灯させないのも寂しいな・・と思い、以下の物を購入しました。




○使い方

使い方は至って簡単です。
普通にコンセント繋いで、QRコードのアプリをダウンロードして、デバイスにWiFi接続して設定するだけです。

IMG_5656.png




1) スケジュール
付属アプリで、18:40にLEDライトを点灯して深夜1:00に消灯するように設定できます。

IMG_5660.PNG



2) Google Smart Home
付属アプリからON/OFFもできますが、こんな感じでGoogle Homeに追加することもできます。
Google Homeから"クリスマスツリーのライトを消して"と言えば、普通に消える様になります。

IMG_000.png



中々便利なので、使ってみてはいかがでしょうか。

クリスマス後には、夜間の加湿器のタイマにでも使おうかと考えています。

まだまだ、2週間以上ありますが、メリークリスマス!

IMG_5657.JPG




Google Homeでエアコンの制御

○エアコンの対応

今回は、Google Homeでエアコンの対応について書きます。

ただ、あまり、難しいことはできないみたいで、 冷暖房・ドライ、温度調整ぐらいです。

ライトの時 と同じように以下のようにデバイスの追加を行います。


device.properties.type="action.devices.types.THERMOSTAT";
device.properties.traits=
new Array("action.devices.traits.TemperatureSetting");
device.properties.attributes={};
device.properties.attributes["availableThermostatModes"]= "off,heat,cool,dry,on";
device.properties.attributes["thermostatTemperatureUnit"]="C";


参考までに私が独自で作成したモジュール smart-home-device.js を置いておきます。


ここで、ちなみに飛んでくるイベントは以下の二つです。


action.devices.commands.ThermostatTemperatureSetpoint
action.devices.commands.ThermostatSetMode


ThermostatTemperatureSetpointの方は、暑い、寒い、温度を上げて具体的な室温設定で呼ばれます。

ThermostatSetModeの方は、エアコンつけて、ドライにして、冷房にして、暖房にしてとモードの設定で呼ばれます。



○コマンド

基本は以下の通りです。


日本語 : (部屋)のエアコンを点けて
English : Turn on (room) AC

日本語 : (部屋)のエアコンを消して
English : Turn off (room) AC


ドライにしてなどのモード指定では以下のように"エアコン"すらいりません。
この言い方を見つけるのに結構時間がかかりました。


日本語 : (部屋)をドライにして
English : Make (room) dry



○デモ








Google homeでライトの機能を拡張

○はじめに


最近といえば、 Google home hub を受け取った直後に5月のGoogle IOで、日本語版の Nest Hub が発売決定の発表がありました。

ちなみに入手した Google home hubは英語のみの対応なので、子供にいたずらされにくいという面もありますが、両方に対応されていれば良かったかな・・と思います。


ちなみに、Google Home Miniは 英語・日本語のどちらも対応 しています。




さて、話を変わりますが、家で使っている照明は、以下のようなPanasonicの調光機能付きLEDなので、コードをちょいちょいと弄れば、Google SmartHomeからでもコントロールできる筈です。

折角なので、ライトに 調光機能を追加して対応するようにします。







○調光の追加

・・・というわけで、 action.devices.traits.Brightness action.devices.traits.ColorTemperatureを以下のようにして追加してデバイス登録すれば、色変更や色の明るさが受け付けられる様になります。

if('brightness' in data[deviceType]){
device.properties.traits.push("action.devices.traits.Brightness");
device.properties.customData={};
device.properties.customData["onBrightness"]=100;
device.states.brightness = 0;
}
if('color' in data[deviceType]){
device.properties.traits.push("action.devices.traits.ColorTemperature");
device.properties.attributes={};
device.properties.attributes["temperatureMinK"]=2700;
device.properties.attributes["temperatureMaxK"]=6500;
device.properties.customData["onTemperature"]=6200;
device.states.color = {};
device.states.color["temperature"]=device.properties.attributes["temperatureMinK"];
}



○色の変更

ちなみに、色変更を行うと、 "action.devices.commands.ColorAbsolute"と一緒に 色温度の値が飛んできます。

日本語の場合、以下の色が使えるようです。

{"name":"電球色","temperature":3000}
{"name":"白色","temperature":4000}
{"name":"昼白色","temperature":5000}
{"name":"昼光色","temperature":6500}

ここのアイリスオオヤマのページ を参考に以下のコマンドが使えます。

「OK Google, 明かりを電球色(でんきゅうしょく)にして」

また、英語の場合、以下の通りです。英語では、 "OK Google, Adjust my light to soft white".

{"name":"candle light","temperature":2700}
{"name":"warm white","temperature":3000}
{"name":"ivory","temperature":6000}
{"name":"daylight","temperature":5000}



○明るさの変更

明るさを調整する場合、 "action.devices.commands.BrightnessAbsolute"コマンドとその値が飛んできます。

以下のセリフで変更が可能です。

日本語の場合 : "OK Google, 明かりを50(%)にして"
英語の場合 : ”OK Google, Adjust my light to 65% brightness."


○デモ






Google home hubで変更

Google Home Hubを購入

○はじめに

やっと購入しました。

「Google Home Hub」


ご存知ないですか?  ここ に日本語の記事があるので貼り付けておきますが、私の中では、日本語化を待って購入する予定でした・・・。残念なことに、待てど暮らせど 日本市場での発売予定が発表されず、仕方なく購入に至ったわけです。


○購入方法

eBay で本体 $89.95 + 送料$19.71= 総額 $109.66で購入しました。

4/21にオーダーして、今日 5/6に届いたので、ちょっと時間がかかった感じは否めません。

当初の予定ではGW前に入手して存分に遊ぶ予定でしたが、まぁ、仕方ないです。



○セットアップ
ちなみにセットアップ等は非常に簡単です。

1. 箱から取り出して、電源を入れる。

IMG_2871.png


IMG_2872.png



2.Google Homeアプリから設定してあげれば終了です。
私の場合、iPhoneのGoogle Homeアプリから操作しましたが、特に問題ありませんでした。

IMG_2874.png



3.ちなみに言語は 英語しか選べません。


4.あと 室温の設定がデフォルトで華氏(Fahrenheit)になっており、摂氏(Celsius)に直す必要があります。

ここ を参考に"Okay, google"、"change to celsius"と言えば、修正されます。



○使い勝手

英語しか受け付けませんが、以下の用途で使っており、 画面がある分、Google Home Miniと比較して便利に思えます。

1. Google Photoからフォトフレーム
2. Google Play Musicから音楽再生
3. Google Smart homeで家電操作
4. 天気情報など

色んな便利な使い方もあると思うので、もう少し使ってみます。

IMG_2875.png








ルンバをGoogle smart homeから動かす

○はじめに

今回、Google smart homeでルンバを動かします・・・というか、既に 製品としてGoogle smart homeに対応しています




ルンバのHPによると980、890、690などのWiFi対応モデルであれば動作するようです。

iROBOT ロボットクリーナー ルンバ980 R980060 ブラック系 R980060

新品価格
¥129,800 から
(2018/12/31 20:31時点)



iRobot ロボット掃除機 ルンバ890 R890060 R890060

新品価格
¥45,500 から
(2018/12/31 20:32時点)



iRobot ロボット掃除機 ルンバ690 R690060 R690060

新品価格
¥48,060 から
(2018/12/31 20:33時点)








○Google smart homeへの登録手順
以下の通りで、通常のSmart homeの登録と違いがありません。

ただし、 既に iRobot HOMEアプリのアカウント を持っていることが前提条件になります。

1) Google Assistantを開く

2) 右上のアカウントアイコンをタップ

3) アシスタントタブを開く

4) スマートホームをタップ、"+"をタップして"iRobot Smart Home"をタップ。
(見つからない場合は、以下のように検索をかければ見つかります)
IMG_2334.png

5) ログインメニューが表示されるので、iRobot HOMEアプリと同一のアカウント・パスワードでログイン。

6) 以下のようにデバイスが自動に登録されます。
IMG_2335.png

7) また、以下のようにiRobot smart homeが登録されていることが確認できます。
IMG_2336.png


○コマンド

Google Assistantから"掃除をして"と言えば動作します。
それ以外にも以下のようなコマンドがあり、 ここ にコマンドの詳細が記載されています。

Screen Shot 2018-12-31 at 20.56.39.png



○デモ
"掃除をして"と言えば、ルンバがスタートします。



Google smart homeで家電操作 - その4

○起動手順

今回、私が実際に変更した内容を記載します。
その前に今回のサンプルコードの起動手順は以下の通りとなっています。

1) Raspberry Piからサンプルアプリを起動
2) GoogleサイトでAction on consoleからアプリの起動。
3) https://your subdoamin.ngrok.ioにアクセスして使用するデバイスを選択。
4) iPhoneでGoogle Assistantを開き、Smart homeを選択してデバイスを追加。
5) Google Assistantで登録されたデバイスの部屋の割り当て、ルーティンの設定。

特に何かサンプルコードに不備があった場合など、何度も上記の手順が必要となり、かなり面倒です。


私の場合、どうしているかというと・・・

2) に関しては固定のsubdomainを使用することで、一度、起動しておけば、再度走らせる必要はなくなります。

3) に関しては、既にHomeKitで使用しているデバイスを登録するだけなので、サンプルアプリ側で起動時に登録するようにコードを変更します。

4)、5)に関しては、サンプルコードを変更して、4)で登録されたユーザー・デバイス情報をサンプルコードを再起動させても保持させるので、4)、5)の手順は二度目から必要なくなります。
ただし、デバイスリストの変更やデバイスIDの変更が必要になった場合は必要となります。



○変更内容

(1) デバイス情報・ユーザ情報を保持するように変更
Googleのサンプルコードは再起動をかけるとdatasotre.jsにあるAuth, Data(デバイス情報・ユーザー情報)の配列が全て初期化されます。
そうすると、4)、5)のデバイス登録作業が必要になるので、ここではその配列を一旦ファイルに書き込み、起動時に再読込するように変更しました。

smart-home-provider/cloud/datastore.jsを以下のように変更

ファイルの先頭に以下を挿入
const fs=require('fs');
const file_Data="Data.json";
const file_Auth="Auth.json";




以下の関数の最後にfs.writeFileを追加
Data.registerUser = function(uid, authToken) {
.....
.....
// ===
fs.writeFile(file_Auth, JSON.stringify(Auth));
// ===
};



以下の関数の最終行にfs.writeFileを追加

Data.registerDevice = function(uid, device) {
......
// ===
fs.writeFile(file_Data, JSON.stringify(Data));
// ===
};



ファイルの最終行に以下のコードを追加


// ===
try {
fs.statSync(file_Data);
console.log('file=', file_Data, ' exists');
let tempData=JSON.parse(fs.readFileSync(file_Data, 'utf8'));
for(let uid in tempData){
Data[uid] = {};
for(let devId in tempData[uid]){
tempData[uid][devId].id=devId;
Data.execDevice(uid,tempData[uid][devId]);
}
}
console.log('Data=',JSON.stringify(Data));

fs.statSync(file_Auth);
console.log('file=', file_Auth, ' exists');
let tempAuth=JSON.parse(fs.readFileSync(file_Auth, 'utf8'));
for(let uid in tempAuth){
Auth[uid]=tempAuth[uid];
}
console.log('Auth=',JSON.stringify(Auth));


} catch (error) {
if (error.code === 'ENOENT') {
console.log('file=', file_Data, ' does not exist');
} else {
console.log(error);
}
}
// ===



(2) デバイスを登録
サンプルアプリを起動し、Google AssistantをiPhoneで開くとGoogleのAssistant ServiceからSYNC Intentが発行され、Raspi側からはDeviceリストを渡します。この辺りはGoogleの Smart Home のページに記載されています。

このタイミングでデバイスを登録するようにします。

ちなみに、GoogleのAssistant Service, HomeGraphから飛んでくるコマンドは、大きく分けて以下の3種類なので、それに対応して何かアクションを起こすように変更を加えていきます。

  1. SYNC: デバイス登録時
  2. QUERY: デイバスのステータスチェック
  3. EXEC: コマンド実行時


smart-home-provider/smart-home-app.jsに以下の箇所を変更。

ファイルの先頭に以下のように独自モジュールを追加します。
私の場合、既に家電がコントロールできるようになっているので、そこのI/Fだけを合わせるモジュールを作成し、追加しました。



const deviceProvider=require('./device/smart-home-device.js');



SYNCコマンドに以下を追加。



app.post('/smarthome', function(request, response) {
...
switch (intent) {
case 'action.devices.SYNC':
console.log('post /smarthome SYNC');
// ====
datastore.registerUser(uid, authToken);
var deviceList=deviceProvider.getDeviceList();
for(let j=0; j < deviceList.length; j++) {
datastore.registerDevice(uid,deviceList[j]);
}
// ===
...
}
}



QUERYでは、deviceの最新stateを返すように以下のコードを追加。

function query(data, response) {
console.log('query', JSON.stringify(data));
let deviceIds = getDeviceIds(data.devices);

// ===
{
let updateDevs=app.smartHomeQuery(data.uid, deviceIds);
// console.log('devices=', JSON.stringify(updateDevs));
for(let i in updateDevs){
deviceProvider.updateState(updateDevs[i]);
}
}
// ===
...




EXECが呼ばれたときに、ステータスのアップデートとコマンドを実行するように以下を変更。

function execDevice(uid, command, device) {
...
...
let deviceCommand = {
type: 'change',
name: null,
state: {},
};
// ===
deviceProvider.executeCommand(command,execDevice[curDevice.id]);
// ===




また、参考までに私が独自で作成したモジュール smart-home-device.js を置いておきます。


変更内容は以上ですが、内容を見ていただければなんとなくイメージがつかめるのではないかと思います。



○参考までに

このGoogleのサンプルコードですが、凄腕達が認証をGoogleに任せたり、Firebaseを使ったりと進化させているのを見つけました。

解説ページ
Githubのリポジトリ

私が調べた中で一番進んでいるのではないかと思いました。





Google smart homeで家電操作 - その3

今回、私が実際に行った作業を書いていきます。


○準備
Googleからサンプルコードとして actionssdk-smart-home-nodejs が提供されていますので、これを使います。

1) Raspberry Pi, nodeの設定
Raspberry Piを設定してNode.jsをインストールに関しては、以前記載した ここ この ページを参考にしてください。
私の場合、nodeのversionに関しては、Hap-node JS、Homebridgeで使っている関係でv6.12.3という古いバージョンを使っていますが、v8.12.0あたりの新しいバージョンの方が良いと思います。

2) サンプルコードのインストール・設定方法
actionssdk-smart-home-nodejsの設定方法については、 ここ に詳しく記載されているので参考にしてください。

3) ngrokの設定
今回、サーバーがRaspbery Piになるので外部からアクセスできるようにする必要があり、サンプルコードでは ngrok という外部サービスが使われています。

そんなわけでsmart-home-provider/cloud/config-provider.jsのファイルを以下に変更しておくと、ngrokが立ち上がって、自分のマシンがサーバになります。

// Running server locally using ngrok
Config.isLocal = true;


4) サブドメインの固定
ただし、ngrokはフリーの場合、起動する度に毎回サブドメインが変更され、デバッグを行うときに面倒なのProで1ヶ月だけ有料にしました。とっくに1ヶ月経過していますが、いまでも使えています。

ngrokの有料に関しては、 ここ に詳しく載っています。

ngrokのtokenとsubdomainは、smart-home-provider/cloud/smart-home-provider-cloud.jsを以下のように変更して設定しています。

if (config.isLocal) {
// ngrok.connect(config.devPortSmartHome, (err, url) => {
ngrok.connect({
addr: config.devPortSmartHome,
authtoken: "your authtoken",
subdomain: 'your subdomain',
region: 'us'
}, (err, url) => {



ここまでくれば、以下のコマンドで動作すると思います。

npm install
npm start



Google smart homeで家電操作 - その2

○現在の状況

とりあえず、エアコンを含めた家のデバイスをこんな感じで登録、一通り動かせるようにできました。

IMG_2304.png



我が家のエアコンは普通の赤外線リモコンで動く製品なので、部屋の温度・湿度に関しては温度湿度センサーから値を取得するようにしています。

以下は、エアコンのコントロール時のデモです。





○ルーティン

Google homeには ルーティンという仕組みが存在します。 詳しくは本家のページ で書いてありますが、 登録しておけば、一つのコマンドで複数のタスクを行うことができます。

例えば、「おはよう」と言ったときに、ライト・エアコンをつけて、ニュースを流すように設定することができます。

もちろん、AppleのHomeKitにも シーンという仕組み がありますが、家電デバイスだけではなくニュースや音楽なども合わせて動かせるようになっています。

IMG_2299.png



実際のデモがこちらです。

1) おはよう - リビングルームのライト・エアコンがONになります




2) おやすみ - 家のデバイスが全てOFFになります





○気になる点

普通に動いていますが、気になることが一点あります。

なぜか、 エアコンに対して部屋の割り当てが上手く動かない場合があります。

例えば、 「リビングルームのエアコンを22Cに設定して」と言った場合、リビングルームに関係なく登録してある3つの"エアコン"に温度設定のコマンドがGoogleから発行される場合があります。

USではセントラルヒーティングが主流で、ベースの作りをそちらに寄せているために、たまにそのような動作になるかもしれません。

エアコン以外のデバイスでは、以下のように部屋の名前まで表示されるのですが・・・

IMG_2300.png



エアコンの場合、部屋を割り当てているにも関わらず、部屋名が表示されません。

IMG_2280.png



しばらく、様子を見ることにします。


ちなみにGoogle Homeでみるとこんな感じです。

IMG_2308.PNG





Google smart homeで家電操作 - その1

○はじめに

2ヶ月前にGoogle Home Miniを購入して スマートスピーカデビューをしました。
残念ながら、Appleからは日本語対応が出ておらず、苦渋の選択でしたが仕方ありません。





はじめのうちは、Spotifyに加入して音楽聞いたり、 slakから喋らせたり して遊んでましたが、折角なので 我が家の家電コントロールさせることにしました。


やり方は IFTTT を使ったり色々あるみたいですが、王道の Actions on googleに定義されているSmart Home を使うことにしました。

とはいえ、リファレンスソフトがGitに置いてあるので、それを有効活用しています。


○家電コントロールのデモ

Ok Google, Hey Siriで家電をコントロールするデモです。





○用意するもの

参考までに使った環境を以下に書いておきますが、まだまだ組み込み途中なです。
完了次第、手順・変更内容を含めてアップデートしようと思います。

ハードウェア

1) Google Home Mini (Google Assistantが動くスマホがあれば、必要ありません。)



2) Raspberry Pi3 (Partner Cloud Serviceのサーバーを用意するために必要)


Raspberry Pi3の電源

Raspberry Pi用電源セット(5V 3.0A)−Pi3フル負荷検証済

新品価格
¥1,580 から
(2018/12/1 14:02時点)




3) Homekitなどで動作する家電システム


ソフトウェア

1) ngrok Partner Cloud Serviceのサーバーを用意するために必要)
2) Smart Homeのサンプルコード




×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: