如果我提前起床,鬧鐘你就別響

鬧鐘已經(jīng)成了我們生活中必不可少的東西。如果全球每個國家的當(dāng)?shù)貢r間明天早上,所有的鬧鐘突然都不響了,不知道會發(fā)生什么樣的混亂。

然而我們要討論另外一種情況,鬧鐘每天定時響起來,真的是最好的情況嗎?你有過醒來以后等鬧鐘的經(jīng)歷嗎?如果你有時候在鬧鐘響之前就起來了,那么你會不會希望鬧鐘能知道你已經(jīng)起來了?如果你提前醒了,那么鬧鐘就不響,只有你一直睡著的時候,鬧鐘才會按時響起來。

這個項(xiàng)目基于 Andorid 上面的自動化 workflow 程序 Automate 和 Python 制作??偞a量非常小。

做這個東西目的,是因?yàn)槲椰F(xiàn)在早上有時候會在 7 點(diǎn)起床寫東西,然后再去上班。但有時候可能會直接睡到 7 點(diǎn) 45 ,讓鬧鐘把我鬧醒。提前起床可能會忘記關(guān)鬧鐘,但是我不希望在我早上寫作的時候被鬧鐘打擾。

如果我早上提前起床使用電腦,那么 Automate 可以得到信息,并關(guān)閉鬧鐘。如果 Automate 發(fā)現(xiàn)我 7 點(diǎn) 45 都還沒有碰電腦,就會把我鬧醒。整個過程,我不需要和鬧鐘有任何的交互。

這就是AutoAlarmClock這個項(xiàng)目存在的意義。

設(shè)計(jì)思路

AutoAlarmClock分為三個部分,安卓手機(jī)上的Automate,VPS上面的Web Server和Mac OS上面的一行命令。

每天早上7點(diǎn)40,手機(jī)上的Automate會訪問一個URL A:http://autoemo.kingname.info:745/alarm_clock,只要沒有得到返回信息“No”,無論是網(wǎng)絡(luò)問題,還是因?yàn)榉?wù)器返回的是其他信息,都會設(shè)定一個鬧鐘,在7點(diǎn)45分響起來。只有訪問URL以后,服務(wù)器返回“No”,那么就不設(shè)鬧鐘。

對于電腦來說,每天早上7點(diǎn)30分,如果電腦是開著的,說明我正在工作。這個時候電腦就會自動訪問一個URL B:http://autoemo.kingname.info:745/set_alarm.只有這個URL被訪問過,之前給Automate訪問的URL A才會返回“No”。

設(shè)計(jì)實(shí)現(xiàn)

Web Server

Web Server是手機(jī)和電腦之間的橋梁。它是使用Python的Flask框架寫成的。代碼已經(jīng)放在了Github上:AutoAlarmClock. 包括空行總共只有32行代碼。

from flask import Flask
from datetime import date
import os

app = Flask(__name__)

@app.route('/')
def index():
    return 'please visit my blog at http://kingname.info'

@app.route("/alarm_clock")
def alarm_clock():
    if os.path.exists('alarmclock.txt'):
        with open('alarmclock.txt') as f:
            date_in_txt = f.read()
            today = str(date.today())
            if date_in_txt == today:
                return 'No'
    return 'Yes'

@app.route('/set_alarm')
def set_alarm():
    with open('alarmclock.txt', 'w') as f:
        f.write(str(date.today()))
    return 'OK'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=745)

由于這個Web Server每天只訪問兩次,所以沒有必要使用數(shù)據(jù)庫或者做線程安全的設(shè)置。數(shù)據(jù)只需要使用一個文本文件作為中轉(zhuǎn)即可。一旦http://autoemo.kingname.info:745/set_alarm這個鏈接被訪問,就會在當(dāng)前目錄創(chuàng)建一個alarmclock.txt文件,里面存放的是今天的日期。當(dāng)http://autoemo.kingname.info:745/alarm_clock被訪問的時候,它會去檢查alarmclock.txt,如果這個文件不存在,或者里面的日期不是今天的日期,那么它就會返回“Yes”。只有當(dāng)alarmclock.txt存在,并且里面的內(nèi)容為今天的日期,它才會返回“No”。

電腦端

電腦只需要訪問http://autoemo.kingname.info:745/set_alarm.由于Mac Book Pro只休眠,不關(guān)機(jī),無法使用開機(jī)啟動的方法來觸發(fā)這個URL的訪問。所以我使用了Crontab這個定時任務(wù)。因?yàn)樵陔娔X休眠的時候,Crontab的定時任務(wù)是不會執(zhí)行的,只有我在電腦上工作的時候,電腦開著才會訪問這個URL,并讓它生成記錄今天日期的文本文件。

通過下面的命令設(shè)定Crontab定時任務(wù),編輯器我選擇的是VIM:

env EDITOR=vim crontab -e

定時任務(wù)設(shè)定為:

30 07 * * * curl -G http://autoemo.kingname.info:745/set_alarm

表示每天的7點(diǎn)30分使用curl訪問后面的鏈接。

Crontab在Linux下面也可以正常使用。

如果你的電腦為Windows,因?yàn)閃indows電腦一般在晚上睡覺時會關(guān)機(jī),所以訪問URL的工作可以設(shè)定開機(jī)啟動來完成。

首先創(chuàng)建一個EnableAlarmClock.py文件:

import requests

requests.get('http://autoemo.kingname.info:745/set_alarm')

這個文件用到了Python的requests庫,如果你沒有的話,請使用pip安裝。

再創(chuàng)建一個EnableAlarmClock.bat文件,文件內(nèi)容如下:

python EnableAlarmClock.py

打開Windows的 任務(wù)計(jì)劃 ,觸發(fā)器選擇“當(dāng)前用戶登錄時”,操作選擇“啟動程序”,并填寫EnableAlarmClock.bat的路徑,如下圖所示:

這樣,每次開機(jī)登錄桌面的時候,程序自動就會訪問設(shè)定鬧鐘的頁面了。

手機(jī)端

Automate是安卓上面的一個強(qiáng)大的自動化工具,類似于IFTTT和iOS上面的Workflow。

在Automate中創(chuàng)建一個Flow,如下圖所示:



其中涉及到了"Time await", "HTTP request", "Expression true?", "Alarm add"這幾個組件。

  • "Time await"的設(shè)置如下圖所示:


  • "HTTP request"的設(shè)置為下面兩張圖:



  • "Alarm add"的設(shè)置為下圖:



    這里由于沒有設(shè)置“REPEAT WEEKDAYS”這一項(xiàng),所以鬧鐘都是一次性的,關(guān)了以后,第二天需要再根據(jù)實(shí)際情況來讓Automate來決定是否需要創(chuàng)建。

設(shè)置并啟動這個Flow以后,每天早上的鬧鐘就可以根據(jù)你是否在電腦前面工作而決定要不要鬧響了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容