店の予約が入ったときすぐ気づきたいとか、店から自宅に呼び出しかけたりとか細々としたとこ改善したいので自宅用通知マシンを作成開始する。
第一段階としては、店に予約が入ったときにすぐ気づけるように予約が入ったら通知としてLEDを光らせる機能をつくる。
予約が入ったらじゃらんとかアソビューから通知メールが飛んでくる。数分以内に気づけたら十分なので、自宅側の通知マシンから定期的に通知メールがあるか確認する方式にする。
ちなみにメールサーバは自前(VPS)でpostfix&dovecotなのでそっちで一部処理しておく。自宅側の端末はESP8266(ESP-WROOM-02)で作成する。秋月で現在420円するので今ならESP-WROOM-32とほとんど値段変わらないのでそっち使ってもよい。(200円台の時に買ったのが数10個余っているので消費もかねて)
全体構成
- VPS上メールサーバのdovecotに予約メールが入ったときに、表題をみてメールを指定フォルダに振り分け。使用ツールはseive
- メールサーバ上にpythonで立てた未読予約メールカウント返却APIを準備。(最前面はnginx)
- espからAPIを定期的に呼び出し、未読の予約メールがあったらLEDを光らせて通知する。(既読にするのはPC上のメーラーで)
メールサーバサイド
seiveの設定
seiveで予約メールが届いた際に指定フォルダ(今回はINBOX.ジム.予約)に振り分け。(seiveのインストールは手順まとめていない。)
予約メールはとりあえず件名で判断。設定ファイルは以下。件名がXXだったらYYフォルダに振り分ける。
require ["fileinto"];
if header :contains "Subject" "予約確定通知" {
fileinto "INBOX.ジム.予約";
}
予約確定通知if header :contains "Subject" "予約が確定" {
fileinto "INBOX.ジム.予約";
}
APIの準備
以前書いていた。こちら
APIのサービス化
/etc/systemd/system/mailapi.service作成
※ ~/apiをベースパスにしていたけどgit cloneの時のパスがずれたので後ほど~/yobidashi/server/apiに変更
[Unit]
Description=MAIL API Daemon
[Service]
EnvironmentFile=/home/yoshitake/api/mailapi.conf
WorkingDirectory=/home/yoshitake/api
ExecStart=/home/yoshitake/api/mail_api.py
ExecStop=/bin/kill ${MAINPID}
Restart=always
Type=simple
User=yoshitake
Group=yoshitake
[Install]
WantedBy=multi-user.target
一応メールアカウントとパスワードは外部から読み出しに(/home/yoshitake/api/mailapi.conf)
MAIL_ID=hoge
MAIL_PW=huga
サービスに登録
yoshitake@mail:~/api$ ls -la /etc/systemd/system/mailapi.service
-rwxr--r-- 1 root root 299 3月 4 17:53 /etc/systemd/system/mailapi.service
yoshitake@mail:~/api$ sudo systemctl list-unit-files --type=service | grep mail
mailapi.service disabled enabled
yoshitake@mail:~/api$ sudo systemctl enable mailapi
Created symlink /etc/systemd/system/multi-user.target.wants/mailapi.service → /etc/systemd/system/mailapi.service.
yoshitake@mail:~/api$ sudo systemctl start mailapi
yoshitake@mail:~/api$ sudo systemctl status mailapi
● mailapi.service - MAIL API Daemon
Loaded: loaded (/etc/systemd/system/mailapi.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-03-04 17:55:30 JST; 6s ago
Main PID: 494820 (python3)
Tasks: 1 (limit: 1012)
Memory: 10.7M
CPU: 73ms
CGroup: /system.slice/mailapi.service
└─494820 python3 /home/yoshitake/api/mail_api.py
3月 04 17:55:30 mail.epea.co.jp systemd[1]: Started MAIL API Daemon.