前回、雨雲レーダーとAlexaを連携させて、雨が振りそうだったらAlexaに喋ってもらうようにした。
これに、SwitchBotのAPI、Line Notifyを組み合わせて、雨が振りそうになったら2Fの窓の開閉状態をチェックして、窓があいていれば注意喚起をAlexaとLineに通知するようにしてみた。

こちらを参照
https://kita7.net/2022/10/alexa%e3%81%ab%e9%9b%a8%e3%81%8c%e6%8c%af%e3%82%8a%e3%81%9d%e3%81%86%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e5%96%8b%e3%81%a3%e3%81%a6%e3%82%82%e3%82%89%e3%81%86%e3%82%88%e3%81%86%e3%81%ab/

この状態に更にフローを追加して、下記のようなフローを作成してみた。
フロー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があれば、時間があれば対応したいと思う。

カテゴリー: 未分類

hiro

横浜に住むサラリーマン。 メーカー系プログラマ(時々SE)をしています。 太陽光発電を自宅に導入したので、そのレビューやNASのひとくちメモを中心に更新していきます。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です