うちのあたりは毎月第4水曜日が金属ゴミの日。忘れると1か月待たなければならないので告知したい。
目指した姿は前日の「OK,Google おやすみ」と当日の「OK,Google おはよう」で言わせること。でもGoogleHomeに喋らせるのは意外と手間がかかる。おやすみの時刻が0時回った時の例外処理とかもめんどうそう。
次善の策で、スマートフォンに通知を出したら気づくのではないかと思い、Macrodoroid(有料ユーザー)の機能を調べてみる。通知を出せるだけでなく、言葉を喋らせることもできることがわかった。トリガーにはwebhookが使える。まずwebhookのためのphpスクリプトを書く。朝7時台だったら「きょう」を、22時だったら「あす」をday変数として投げる。
<?php $id="nanchara"; date_default_timezone_set('Asia/Tokyo'); $wed4 = date("Ymd",strtotime("fourth wednesday of this month")); $today = date("Ymd"); $tommorow = date("Ymd",time() + 60*60*24); if($wed4 == $tommorow){ $day = "あす"; }elseif($wed == $today){ $day = "きょう"; }else{ exit; } exec("curl --get --data-urlencode \"day=$day\" \"https://trigger.macrodroid.com/${id}/metaltrash\""); ?>
strtotimeの万能感。この関数はphp8.1で非推奨になったと思っていたけど、非推奨になったのはstrftime、strptimeだった。
これをおうちサーバのcronに登録して、毎週火曜日10時50分と水曜日の7時50分に実行させる。
50 7 * * 3 kazz php /var/www/scripts/smarthome/metaltrash.php 50 22 * * 2 kazz php /var/www/scripts/smarthome/metaltrash.php
wifiにつながっている、つまり自宅にいる時だけ動作(年24回だけだから出先で鳴ってもたかが知れているけど)。通知音とテキストが重なるので3秒待機。通知前に音量を0にして読み上げ前に80程度にしようとしたけど、通知音は消えなかった。
この過程で、通知音がならない状態になったが、一度外出したら鳴るようになった。自宅にいる時に通知音を鳴らさなない設定でもしてしまっていたかと思って調べてもそれらしきものはないし、戻ってきてからは順調に通知音が鳴っている。
これが検証できるのは3週間後。
おうちサーバにはスピーカーが常時接続しているので、音声ファイルを用意して喋らせようかとも考えたけど、自分の声で聞きたくないしなと思ってこんな方法にしてみたけど、変化してくれる便利なサイトがあった。
テキスト→音声 変換(読み上げ)【無料】