ラズパイ 読む時間 約9分

ホームページが止まったら、ラズパイが声で知らせる:SiteBeacon のお知らせのメールを件名で見分けて鳴らす

ホームページの監視サービス SiteBeacon から「停止」「復旧」のメールが届いたら、ラズパイが声で知らせる仕組みです。売れたメールの声の通知に、件名を見分ける 2 行と、VOICEVOX で作った声 2 つを足すだけ。夜は鳴らさずに朝に知らせます。

ホームページが止まったら、ラズパイが声で:SiteBeacon のお知らせのメールを件名で見分けて鳴らす。siteb@s-m.biz からの [SiteBeacon][警告] 【停止】のメールで siteb_down.wav、【復旧】で siteb_back.wav

ホームページが止まっていても、自分では意外と気づきません。お客さんに言われてはじめて知る、ということもあります。わたしは、ホームページが止まったらメールで知らせてくれる SiteBeacon(サイトビーコン)を使っていますが、メールも、ほかのメールに埋もれると見落とします。

そこで、SiteBeacon から「止まりました」「戻りました」のメールが届いたら、ラズパイが声で知らせるようにしました。サーバーの側は何も変えず、ラズパイがメールの件名を見分けて、前もって作った声を鳴らすだけです。

この記事の前にできていること

この記事でできるようになること

  • SiteBeacon の「停止」「復旧」のお知らせのメールが届いたら、ラズパイが声で知らせる
  • それ以外のお知らせ(【要確認】【アクセス制限】など)では鳴らさない
  • 夜に止まったときは、朝まで取っておいて、朝に知らせる

SiteBeacon とは

SiteBeacon は、ホームページを 5 分ごとに外から開いて、止まっていたらメールで知らせるサービスです。ホームページ 2 つまでは無料で、ホームページの側には何も足しません。直ったときも「戻りました」と、止まっていた時間と一緒に知らせてくれます。SSL 証明書やドメインの期限が近いときのお知らせもあります。

SiteBeacon は、わたし(フリースタイル)が作って運営しているサービスです。この記事では、自分のホームページを見守るのに、実際にこう使っている、という形で紹介します。お知らせのメールの件名さえ決まった形なら、ほかの監視サービスでも同じように作れます。

仕組みの流れ

  1. SiteBeacon が、ホームページが止まったのを見つけて、メールを送る
  2. ラズパイが 3 分ごとにメールの箱をのぞき、件名と差出人を見る(既読にしない・消さない)
  3. 「停止」「復旧」のお知らせなら、決まった声のファイルを、鳴らす順番待ち(queue)に置く
  4. 鳴らす係が、1 分以内に鳴らす。夜(21 時〜朝 8 時)は鳴らさずに取っておき、朝になってから鳴らす

2〜4 は、売れたメールの仕組みのままです。今回足すのは、SiteBeacon のお知らせを見分ける 2 行と、声のファイル 2 つだけです。

手順 A:お知らせのメールの件名を確認する

SiteBeacon のお知らせのメールは、件名の頭が「[SiteBeacon]」で、そのあとに大事さのラベル([警告]・[復旧] など)と、お知らせの種類(【停止】・【復旧】など)が続きます。差出人は siteb@s-m.biz です。

件名の例 声で知らせるか
[SiteBeacon][警告] 【停止】〇〇 のホームページが表示できません 知らせる(すぐ見てほしい)
[SiteBeacon][復旧] 【復旧】〇〇 が表示できるようになりました 知らせる(安心できる)
[SiteBeacon] 【要確認】〇〇 のページで、ご確認いただきたい点があります 知らせない(メールを見て確認する)
[SiteBeacon][注意] 【アクセス制限】〇〇 でチェックが制限されています 知らせない(ホームページは止まっていない)

〇〇には、SiteBeacon に登録したホームページの名前が入ります。声で知らせるのは、止まった・戻ったの 2 つだけにしました。何でも鳴らすと、声に慣れて聞き流すようになるからです。

手順 B:声を 2 つ作って、ラズパイに置く

VOICEVOX の記事の make_voice.py で、声のファイルを 2 つ作ります。PC で VOICEVOX を起動してから、PowerShell で実行します。

python make_voice.py 126 siteb_down.wav "サイトビーコンが、ホームページの停止を見つけました。メールを確認してください。"
python make_voice.py 126 siteb_back.wav "サイトビーコンから、ホームページが復旧したと、知らせがありました。"
scp siteb_down.wav siteb_back.wav mypi:notify/sounds/

「停止」の声には「メールを確認してください」と、次にすることも加えました。メールには、いつから止まっているか、どのページかが書いてあるので、それを見て、ホームページを作った人やサーバーの会社に連絡します。

手順 C:見分ける 2 行を足す

足す先は、売れたメールの記事で作った、メールをのぞくプログラムです(家では ~/notify/mail_notify.py という名前で、RULES・match()・enqueue()・quiet_now() が入っています。鳴らさない時間などの設定は、同じフォルダの config.ini の [notify] に書いています)。

この RULES に、次の 2 行を足します。足す前に、cp mail_notify.py mail_notify.py.bak でバックアップを取っておきます。

RULES = [
    # …売れたメールなどの行…
    # SiteBeacon のお知らせ(停止・復旧だけ。件名の頭は [SiteBeacon][警告] など)
    (re.compile(r"^\[SiteBeacon\](\[[^\]]*\])?\s*【停止】"), ("s-m.biz",), "siteb_down.wav"),
    (re.compile(r"^\[SiteBeacon\](\[[^\]]*\])?\s*【復旧】"), ("s-m.biz",), "siteb_back.wav"),
]

書き方と役目

  • ^\[SiteBeacon\]:件名の頭が「[SiteBeacon]」のメールだけを見る
  • (\[[^\]]*\])?:そのあとの [警告]・[復旧] などのラベルは、あってもなくてもよい(ラベルの言葉が変わっても止まらないように)
  • 【停止】・【復旧】:お知らせの種類で、鳴らす声を分ける。【要確認】などは、どの行にも合わないので鳴らさない
  • ("s-m.biz",):差出人が s-m.biz のメールだけ。同じ件名をほかの人が送ってきても鳴らさない

手順 D:鳴らさずに、見分け方を試す

本物のホームページを止めて試すわけにはいかないので、件名の見分け方だけを先に試します。件名の例を match()(件名と差出人から鳴らす声を決める関数)に渡すだけなので、メールは見ず、声も鳴りません。

この試し方は、mail_notify.py の一番下が if __name__ == "__main__": の形(直接動かしたときだけメールを見る形)になっていることが前提です。一番下で処理を直接呼んでいると、import しただけでメールを見に行き、声を順番待ちに置いてしまいます。

cd ~/notify
python3 -c '
import mail_notify as m
for s in ["[SiteBeacon][警告] 【停止】自分のサイト のホームページが表示できません",
          "[SiteBeacon][復旧] 【復旧】自分のサイト が表示できるようになりました",
          "[SiteBeacon] 【要確認】自分のサイト のページで、ご確認いただきたい点があります",
          "[SiteBeacon][注意] 【アクセス制限】自分のサイト でチェックが制限されています"]:
    print(m.match(s, "siteb@s-m.biz") or "(鳴らさない)", "←", s)
print(m.match("[SiteBeacon][警告] 【停止】自分のサイト のホームページが表示できません", "alert@example.com") or "(鳴らさない)", "← 差出人がほかのドメイン")
'
siteb_down.wav ← [SiteBeacon][警告] 【停止】自分のサイト のホームページが表示できません
siteb_back.wav ← [SiteBeacon][復旧] 【復旧】自分のサイト が表示できるようになりました
(鳴らさない) ← [SiteBeacon] 【要確認】自分のサイト のページで、ご確認いただきたい点があります
(鳴らさない) ← [SiteBeacon][注意] 【アクセス制限】自分のサイト でチェックが制限されています
(鳴らさない) ← 差出人がほかのドメイン
  • 停止と復旧だけが声になり、要確認とアクセス制限は鳴らしません。
  • 家のラズパイでは、件名が日本語の文字コード(ISO-2022-JP・UTF-8)で包まれて届いた形でも試し、同じように見分けられました(件名を元の文字に戻してから match() に渡しているため)。
  • 差出人がほかのドメインのときは、件名が同じでも鳴らしません。

最後に、2 つの声を鳴らす順番待ちに置いて、家のスピーカーで実際に鳴らしました。鳴らす係が 1 分ごとに見に来て、置いた 1 分後に続けて鳴りました。

2026-11-11 08:02:02 queue を鳴らします: 20261111-080106-mail-siteb_down.wav
2026-11-11 08:02:08 queue を鳴らします: 20261111-080107-mail-siteb_back.wav

夜に止まったときは、朝に知らせる

夜中にホームページが止まったときに、ラズパイに起こされるかどうかは、決めておいたほうがよいところです。この記事では、夜は鳴らさずに朝まで取っておくことにしました。夜中に知っても、その場でできることは少なく、朝にメールを見て連絡すれば間に合うことがほとんどだからです。

メールを見るのは夜も続けているので、夜のあいだに止まって戻ったときは、朝に「停止」と「復旧」の声が続けて鳴ります。止まっていた時間は、復旧のメールに書いてあります。

ただ、これは人によって違います。お店の予約や注文を夜も受けているホームページなら、夜中でもすぐ知りたいことが多いと思います。夜も知らせてほしいときは、次のどちらかにします。

全部の声を、夜も鳴らす

ラズパイの ~/notify/config.ini の、鳴らさない時間の始まりと終わりを同じ数字にします。鳴らさない時間がなくなり、売れたメールの声なども、夜中にすぐ鳴るようになります。

[notify]
quiet_start = 0
quiet_end = 0

「停止」の声だけ、夜もすぐ鳴らす

ほかの声は朝まで待たせて、ホームページが止まったときだけ夜中でも知らせる形です。mail_notify.py に次の deliver() を足し、見つけたメールの声を順番待ちに置いている所の enqueue(wav) を deliver(wav, cfg) に変えます。play_path() は、売れたメールの記事の「鳴らす側」の関数です。mail_notify.py からも呼べるようにしておきます(同じ関数をコピーするか、鳴らす側のファイルから読み込む)。

NIGHT_OK = ("siteb_down.wav",)  # 夜でもすぐ鳴らす声
def deliver(wav, cfg):
    if wav in NIGHT_OK and quiet_now(cfg):
        # 鳴らさない時間でも、順番待ちを通さずにその場で鳴らす
        play_path(os.path.join(HERE, "sounds", wav), cfg.get("notify", "device", fallback="") or None)
    else:
        enqueue(wav)  # いつもどおり順番待ちに置く(夜は朝まで待つ)
  • NIGHT_OK:夜でもすぐ鳴らす声の一覧。「復旧」も夜に知りたければ、"siteb_back.wav" を足します
  • quiet_now(cfg):今が鳴らさない時間かどうか。鳴らさない時間なら、順番待ちを通さずにその場で鳴らします
  • それ以外の声は、今までどおり順番待ちに置き、朝になってから鳴ります

play_path() と enqueue() を、鳴らさずに記録だけする形に差しかえて試した結果です(夜:停止だけすぐ鳴らし、復旧と売れたメールは順番待ちに置いて朝まで待つ/昼:全部いつもどおり順番待ちへ)。家のラズパイは、朝まで待つ形のまま使っています。

夜 [('すぐ鳴らす', 'siteb_down.wav'), ('順番待ちへ', 'siteb_back.wav'), ('順番待ちへ', 'mercari.wav')]
昼 [('順番待ちへ', 'siteb_down.wav'), ('順番待ちへ', 'siteb_back.wav'), ('順番待ちへ', 'mercari.wav')]

セキュリティの考え方

  • メールは、のぞくだけです。既読にせず、消さず、メールを送ることもしません。本文も取らず、件名と差出人だけを見ます。
  • メールのパスワードは、ラズパイの設定ファイル(config.ini)だけに書き、ほかの人が読めないようにしておきます(chmod 600 config.ini)。
  • 差出人の欄は送る側が書き換えられるので、差出人のドメインで見分けても、なりすましを全部防げるわけではありません。声は「メールを確認してください」のきっかけにとどめ、何をするかは、メールの内容を見てから決めます。

まとめ

SiteBeacon のお知らせのメールを件名で見分けて、ラズパイに「停止を見つけました」「復旧しました」と話させるようにしました。足したのは、見分ける 2 行と、声のファイル 2 つだけです。メールに気づかなくても、声で知らせてくれるので、ホームページが止まったままになるのを防げます。

自分のホームページを見守りたいときは、SiteBeacon も使ってみてください。

次に読む

この記事を書いた人

フリースタイル

Web の仕事 25 年以上。WordPress の保守・引っ越しと、PHP の業務の仕組みづくり。 プロフィール →

まずは、お気軽にご相談ください。

相談と見積りは無料です。急ぎのときは、フォームで「急ぎ」を選んでください。