トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2021-8-26

アラーム

打合せまでの間仕事しようというときにスマホのタイマーを使っていたけど,
セットが面倒になったので,Pythonで.

#!/usr/bin/env python3

import time
import os
from datetime import datetime
from optparse import OptionParser

def timer_func(y, m, d, hh, mm, num, audio, mesg="", volume=65000):
        now = datetime.now()
        req = datetime(y, m, d, hh, mm)
        print("Now:", now)
        print("Request:", req)
        diff = req - now
        wait_sec = diff.total_seconds()
        if wait_sec > 0:
                time.sleep(wait_sec)

        print("Now:", datetime.now(), mesg)

        command = "timeout 3 paplay --volume={} {}".format(volume, audio)
        os.system(command)
        for i in range(num-1):
                time.sleep(1)
                os.system(command)

if __name__ == "__main__":
        now = datetime.now()
        
        usage = "usage: %prog [options] hh:mm"
        parser = OptionParser(usage=usage)
        parser.add_option("-y", "--year", dest="year", type="int", help="year", default=now.year)
        parser.add_option("-m", "--month", dest="month", type="int", help="month", default=now.month)
        parser.add_option("-d", "--day", dest="day", type="int", help="day", default=now.day)
        parser.add_option("-n", "--num", dest="num", type="int", help="the numbers of repetition", default=3)
        parser.add_option("-s", "--message", dest="mesg", help="message", default="")
        parser.add_option("-v", "--volume", dest="volume", type="int", help="volume", default=65000)
        parser.add_option("-a",
                          "--audio",
                          dest="audio",
                          help="audio file",
                          default="/usr/share/sounds/freedesktop/stereo/phone-incoming-call.oga")

        (options, args) = parser.parse_args()

        if len(args) < 1:
	        parser.print_help()
	        exit(0)

        (req_hour, req_min) = [int(v) for v in args[0].split(':')]
        
        timer_func(options.year,
                   options.month,
                   options.day,
                   req_hour,
                   req_min,
                   options.num,
                   options.audio,
                   options.mesg,
                   options.volume)

ちょうどスクリプト実行中に日付をまたぐくらいのタイミングで実行すると,
一日前の時間をセットしてしまうことになるけど,その時はすぐにアラートなるから,
運用上は問題ないかな,と.