トップ 一覧 Farm 検索 ヘルプ 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)

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