意外に便利! Google Home に ゴミの日をお知らせさせる | IT-DIY (knaga.click)
で、時刻設定をして、ゴミの日をお知らせするようにしたのですが、聞き逃したり、任意のタイミングでゴミの日の情報を知りたい時のために、GoogleHomeに「ゴミの日を教えて」と伝えたら、教えてくれるようにします。
やり方
オリジナル スマートホーム の 作り方 | IT-DIY (knaga.click)
この方法をベースにして、ちょっと小細工をします。
現時点で(2024年4月)GoogleHomeに話しかけた内容を、そのままテキストにして通知してくれるサービスは無いようです。(ご存知のかた教えて下さい)
よくあるのは、IFTTTを使う方法ですが、IFTTTも有料化されていてお遊び程度のことに利用するのは敷居が高くなっています。
何を小細工するかというと、スマートデバイス用にGoogleHomeからの指示を通知をしてくれるので、架空のスマートデバイスを定義して、GoogleHomeアプリのスクリプト機能で指示を変換するようにします。

SLACK Bot の改修
まずは、後ろ側のSLACK Bot から。
SLACK Botは受ける口がある前提で、今回の「ゴミ」というワードで動作するようにします。
「ゴミ」を見つけたら、2時から9時の時間帯は今日のゴミを、それ以外の時間帯は明日のゴミの種類を話すようにします。
<main.py>
import subprocess, datetime
:
### ゴミ
@app.message(re.compile(".*ゴミ.*"))
def message_GomiToday(message, say):
dt_now = datetime.datetime.now()
if dt_now.hour > 9 or dt_now.hour < 2: #2時から9時は今日のゴミをそれ以外は明日のゴミ
subprocess.run( ["python", "/path_to/gomi.py", "1"] )
else:
subprocess.run( ["python", "/path_to/gomi.py", "0"] )
say("gomi")
gomi.py は、意外に便利! Google Home に ゴミの日をお知らせさせる | IT-DIY (knaga.click) で作ったままを実行させる。
Action on Google 用 API の改修
元々のAction on Google で通知されるAPIに デバイスに、サロゲート というテレビ用のダミーのデバイスを登録して、その電源ON をトリガーに、SLACK に書込みをする。
※特にテレビに意味があるわけではないが、将来チャンネルを使えば、色々と細工が出来るかもと。。
<surrogate.json>
{
"id": "40",
"type": "action.devices.types.TV",
"traits": [
"action.devices.traits.OnOff",
"action.devices.traits.Channel",
"action.devices.traits.Volume"
],
"name": {
"defaultNames": [
"サロゲート"
],
"name": "サロゲート",
"nicknames": [
"サロゲート"
]
},
"willReportState": false,
"roomHint": "リビング",
"attributes": {
"commandOnlyOnOff": true,
"commandOnlyBrightness": true
},
"deviceInfo": {
"manufacturer": "自作",
"model": "サロゲート",
"hwVersion": "1.0",
"swVersion": "1.0"
},
"customData": {}
}
<main.py>
:
# ゴミの日確認
with open('/path_to/surrogate.json', 'r', encoding='utf-8') as f:
surrogate_sync = json.load(f, strict=False)
#デバイスの定義
:
DEV_SURROGATE = "40" #ゴミの確認のためのにサロゲートとして定義
# デバイスリスト登録
dev = [ ・・・, surrogate_sync ]
#デバイスの電源んON指示で、SLACKに「ゴミ」と投稿する
def executecmd( device_id, execute ):
:
### ゴミ ###
elif device_id == DEV_SURROGATE :
if execute["command"] == "action.devices.commands.OnOff": # つける / 消す
if execute["params"]["on"]:
goSlack( "ゴミ" )
:
GoogleHomeから再接続
新しいデバイス(サロゲート)を認識させるために、スマホでGoogleHomeアプリで再接続する。


「ゴミの日を教えて」を「サロゲートをつけて」に変換
同様にGoogleHomeアプリで、ルーティンを設定。
「ゴミの日を教えて」っていうと、スマートホームデバイスで、「サロゲート」を「オン」にするように設定する。


コメント