前回、雨雲レーダーとAlexaを連携させて、雨が振りそうだったらAlexaに喋ってもらうようにした。
これに、SwitchBotのAPI、Line Notifyを組み合わせて、雨が振りそうになったら2Fの窓の開閉状態をチェックして、窓があいていれば注意喚起をAlexaとLineに通知するようにしてみた。
この状態に更にフローを追加して、下記のようなフローを作成してみた。
フロー1から接続される or アレクサに「二階の窓チェックをON」ということで発動。
「Request Headers~http request~**の窓確認」までが一つの窓の確認。
少し具体的には、switchBotのAPIキーを発行し、デバイスID一覧を取得し、deviceのstatusを取得。
近接センサー(開閉センサー)の状態がopenなのかcloseなのかを判定して、openならば窓の名前を覚えておく。というのを繰り返す。「**の窓確認」部分のコードは下記の通り
const openState = msg.payload.body.openState;
var windowsState = flow.get('windowsState') || 0;
var openWindowName = flow.get('openWindowName') || "";
msg.payload = openState;
if (msg.payload == 'close'){ //閉じているとき
msg.payload = "閉じています";
}else{
msg.payload = "開いています";
windowsState = windowsState || true;
openWindowName += "、右の部屋西側"
}
flow.set('windowsState', windowsState);
flow.set('openWindowName', openWindowName);
return msg;
flowに窓が一箇所でも空いているかのboolでの判定、空いていた窓の名前を連結した変数を記憶。
最後にどの窓を開いているかのアナウンスに使用する。という形で組んでみた。
もっときれいに組めそうな気がするけど、家での趣味レベルのものなのでその辺は考えないことにした。
これで最後の「喋る言葉作成」の部分では下記のようなコードで喋る言葉を作り、AlexaとLineに通知するようにした。
var windowsState = flow.get('windowsState') || 0;
var openWindowName = flow.get('openWindowName') || 0;
if (windowsState == false){
msg.payload = "すべての窓はしまっています";
}else{
msg.payload = openWindowName + "の窓があいています";
}
windowsState = false;
openWindowName = "";
flow.set('windowsState', windowsState);
flow.set('openWindowName', openWindowName);
return msg;
Yahooの気象APIには風速や風向きがないので、吹き込む可能性があるときだけ通知、ということができないのが残念。
そのあたりの情報がある、フリーで使える気象APIがあれば、時間があれば対応したいと思う。
0件のコメント