【樹莓派自動化應用實例】整點提醒自己休息五分鐘

来源:http://www.cnblogs.com/ios122/archive/2017/11/16/7842269.html
-Advertisement-
Play Games

不過大部分手機鬧鐘都不支持這種以小時為單位的周期鬧鈴。所以,我以前每次都是都手動調整鬧鐘時間。總感覺有點 Low!於是,我就寫了個簡單的發郵件的 Lua 腳本,放到樹莓派上作為一個shell命令使用;然後在每周一到周五的9點至23點整點各執行一次發郵件的操作。郵件是發到了我的 QQ 郵箱。收到QQ郵... ...


背景介紹

show.png

我有一個習慣,定鬧鐘每隔60分鐘左右,提醒自己休息一次。我發現自己有時候長時間思考,很容易拘泥於細節之中。適當的簡單休息過後,往往會對正在解決和處理的問題有新的認識和發現,有事半功倍的奇效。

不過大部分手機鬧鐘都不支持這種以小時為單位的周期鬧鈴。所以,我以前每次都是都手動調整鬧鐘時間。總感覺有點 Low!於是,我就寫了個簡單的發郵件的 Lua 腳本,放到樹莓派上作為一個shell命令使用;然後在每周一到周五的9點至23點整點各執行一次發郵件的操作。郵件是發到了我的 QQ 郵箱。收到QQ郵件後,左上角會有一個通知懸浮窗,體驗比手機的震動聲好了很多。

另外,之所以會選擇使用 Lua 語言,只是最近自己剛好在看 Lua 而已,用其他語言也是可以的。

在樹莓派上配置必要的 Lua 環境

安裝 LuaJIT

樹莓派的 debian 官方推薦定製系統,內置有 Lua 5.1.5.但是 LuaJIT 使用了 JIT 技術,執行效率更高,所以更推薦安裝和使用。LuaJIT 對應的也是 Lua 5.1 的語法。

你可以在 LuaJIT 下載頁 右鍵查看最新的 LuaJIT 穩定版本,然後參照執行:

wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar xzf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
make && sudo make install

驗證是否安裝成功,請執行:

luajit -v

安裝成功,會輸出:

LuaJIT 2.0.5 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/

安裝 luarocks

luarocks 是 Lua 的包管理工具。在樹莓派上需要從源碼安裝 luarocks 。這需要一些技巧。

你可以到 luarocks下載頁 查看最新的luarocks版本,然後參考執行以下命令:

wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.3.tar.gz
tar xzf luarocks-2.4.3.tar.gz
cd luarocks-2.4.3

luarocks 在編譯前,需要先進行配置。完整的配置內容,參見:Customizing your settings。基於 LuaJIT 的配置命令如下:

./configure --lua-suffix="jit"

然後編譯安裝:

make build
sudo make install

驗證是否安裝成功:

luarocks

安裝 luasocket

luasocket 這個庫,下麵的代碼會用到,需要提前安裝下。 如果 luarocks 安裝成功,那其他的 lua 庫安裝就非常簡單了:

sudo luarocks install luasocket

簡單的 Lua 腳本: 發送郵件提示自己註意休息

新建一個 rest_reminder.lua 文件

vi rest_reminder.lua

然後輸入以下 Lua 代碼:

#!/usr/bin/env luajit
local smtp = require("socket.smtp")
from = "[email protected]" --發件人
--收件人列表
rcpt = {
    "[email protected]"
}
mesgt = {
    headers = { -- 只是文字顯示內容.
        to = "[email protected]", --收件人
        subject = "請休息五分鐘!" --主題
    },
    body = "您已連續思考一小時,請先休息五分鐘吧!"
}
r, e = smtp.send{
    from = from,
    rcpt = rcpt,
    source = smtp.message(mesgt),
    server = "smtp.example.com",
    user = "[email protected]",
    password = "username_pwd"
}
if not r then
    print(e)
else
    print("發送成功!")
end

如果你想實現一些更複雜的操作,最好在常用電腦上配置一個 Lua 完整的開發環境

想要文件能執行當做命令執行,還需要給文件添加可執行許可權:

chmod +x ./rest_reminder.lua

測試代碼是否有效:

./rest_reminder.lua

正常執行的話,你的收件人郵箱(或郵件垃圾箱),應該會收到一封郵箱。

test.png

註意:

  • headers 中的收件人會顯示在郵件頭,但是真正決定發送給誰的是 rcpt
  • smtp.example.com 要改為發信郵箱的 smtp 伺服器。
  • **[email protected]** 和 username_pwd 要改為真實的郵件用戶名和密碼
  • 部分郵箱的 smtp 功能,可能需要單獨開通。

使用 crontab 來定時執行

crontab 簡單實用,如果不是很熟悉,可以把它簡單當做一個高度自定義的定時器。

假設腳本的完整路徑是 /home/pi/task/rest_reminder.lua

執行:

crontab -e

在打開的內容區末尾新增:

00  9-23  *  *  *  /home/pi/task/rest_reminder.lua

保存退出,正常應該會看到提示:

crontab: installing new crontab

此時,我們的定時腳本已經生效了。即使重啟電腦,這個腳本依然可以正常定時執行。

crontab 藉助於 cron 服務。在必要時,你可以使用 sytemed 的命令來操作 cron 服務:

# 查看狀態
sudo systemctl status cron
# 激活服務
sudo systemctl enable cron

參考文檔


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 直接上代碼: 作為一個實習生,入職的第一家公司碰到的一點小挫折,找了好久都沒有找到方法,就詢問了公司前輩,以及帶我的大佬 當然,大佬們的幫助給了我很大的啟發,就想著先寫下來,省的以後用得著的時候給忘記了 也可以算是記錄自己一下剛入職時候學習的步伐, 總之,這是一個小技巧,大佬看過之後,請多多指點。 ...
  • 1. 創建解決方案 例:dotnet new sln -o HelloWorld.Solutions 其中 -o 表示輸出文件夾 2.創建類庫、web、mvc、webapi等項目 例:dotnet new classlib/web/mvc/webapi -o xxxx 3.將創建好的類庫、web、m ...
  • 主視窗代碼 c++ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; usi ...
  • 表格是組織整理數據的一種重要手段,應在生活中的方方面面。在Word文檔中將繁雜的文字表述內容表格化,能快速、直接地獲取關鍵內容信息。那麼,通過C#,我們也可以在Word文檔中添加表格,這裡將介紹兩種不同的表格添加方法。 使用工具:Spire.Doc for .NET 使用方法:安裝後,添加引用dll ...
  • 返回總目錄 九、Primitive Obsession(基本類型偏執) 這主要表現在過多的使用基本類型。 1、總是被放在一起的基本類型欄位,可以提煉一個類出來。 2、參數列中有基本類型數據,這個和第八個“壞味道”一樣,可以將參數提煉成對象。 3、如果你正在從數組中挑選數據,那麼將數組替換成對象。 十 ...
  • 一、創建一個Ado.net實體模型 二、根據實體模型創建上下文和實體映射 遇到的問題場景是:模型的屬性“代碼生成策略”如果是 使用“舊的 ObjectContext ”方式時,Linq預設返回的ObjectQuery可以直接賦值給combobox ,如果是使用的T4模板,則系統系統創建的上下文對象為... ...
  • 這兩天領導讓我做個噴泉的效果,要把一個個UserControl從一個位置噴出,然後,最後落在最終需要在的位置。 噴泉效果說白了,就是兩個步驟:1、放大,從0放大到需要的倍數;2、縮小,平移,從放大的倍數還原到UserControl的原始大小,並且定位到最終的位置。 雖然,只有兩步,但是,作為寫動畫的 ...
  • 面試題:寫一個固定容量同步容器,擁有put和get方法,以及getCount方法, 能夠支持2個生產者線程以及10個消費者線程的阻塞調用 有兩種方法 1.使用wait和notify/notifyAll來實現 2.使用Lock和Condition來實現 對比兩種方式,Condition的方式可以更加精 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...