讓 Telegram bot 告訴你樹莓派的 IP 吧!(Rust version)

更新於 2024/03/03閱讀時間約 6 分鐘
本文同步發表於筆者個人網站:https://hhming.moe/post/get-lan-ip-through-telegram-bot-rs-version/

本文撰寫的時間剛好是大年初三,因此開頭先祝大家新年快樂!本專案其實在過年前就已經初步開發完成了,但因為隨後就是過年,所以一些相關的心得記錄就拖到現在──其實 README 也才剛 commit 上去不久就是。

先前情提要一下(關於樹梅派拿 IP 這件事情有接觸過的人應該會知道,就不贅述),先前已經做了一個 Python 版本的了,為什麼還要再開發一個用 Rust 重寫的版本呢?為什麼是 Rust?有什麼優勢?

首先,其實先前製作的 Python 版本,在我的樹梅派重新安裝成 64 位元(相關心得請見〈前進!Raspberry Pi OS 64 位元〉)+改用 Poetry 後,會出現異常情況:剛開機就立刻執行會無法正確地取得 IP。至於為什麼我到現在也還沒找到,觀察下來有在猜是否因為剛開機還沒連線所以抓不到?但即便如此,也應該要有 local 及 docker 網路介面卡資訊才對。在幾番測試下,最後找到了解法:延遲。

開機後先 sleep 7 秒(這是我反覆重新啟動後認為最保險不會出問題的秒數)再開始拿 IP 和送訊息。這招雖然解決了前面提到的問題,可是造成了其他問題:每次開機後(即便開機速度飛快)我也至少要等待 7 秒鐘,機器人把訊息送出我接收到了才能真的確認樹梅派開機完成且連上網路。空等在現在這個硬體速度飛快的年代是難以接受的一件事,不過當時手邊可運用的資源沒更好的解法,只能先這樣,當成十年前沒有 SSD 的老電腦開機。

去年我開始學習 Rust,過年前某個周末,想說來練習一下 leetcode 好了,用 Rust 一寫、提交,我靠,這什麼數字!

Leetcode 提交且被接受後的執行時間統計數字

Leetcode 提交且被接受後的執行時間統計數字

Leetcode 提交且被接受後的記憶體使用量統計數字

Leetcode 提交且被接受後的記憶體使用量統計數字

0 ms!令人震驚的數字!然後過幾天我突然想到,既然 Rust 跨平台、高效能,那運用在效能有限的樹梅派上,不是很剛好嗎?因此就開始動手實作用 Rust 重寫的工作。

準備

先提一下我的樹梅派環境:Raspberry Pi 4 8GB with Raspberry Pi OS 64 bit

基本上這應該是不影響本專案使用,不過以防萬一就還是提出來做為參考。

然後要自備的其他東西:

  • Telegram:如果你沒有 Telegram,趕快一起加入吧!
  • Telegram bot:如同我之前教學文中說的,如果不會開機器人,可參考這位大大寫的教學文,即使放到今日也是相當詳細的好文章
  • (選,想直接使用二進位執行檔者不需要)Rust:請至官網依指示安裝,直接裝最新版就對了

使用

設定

設定方式有兩種:環境變數或是 .env

使用環境變數的人,請在執行程式碼之前設定好環境變數:

export TOKEN='bot token'
export NOTIFY_USER_ID='chat id'

使用 .env 的話,請先複製出專案的範例設定檔:

cp .env.example .env
# 或直接到 https://raw.githubusercontent.com/hms5232/get-LAN-IP-telegram-bot-rs/main/.env.example 複製

然後編輯 .env 的內容。

這個 .env 必須要放在和二進位執行檔相同或上層的資料夾。

Binary

目前我沒有把編譯好的執行檔放在 GitHub,這部分還在思考該怎麼進行(例如:是否使用 GitHub Release 搭配 Action,還是直接保留最新執行 job 產出的 artifact 就好等等)。

如果想直接使用二進位執行檔,需要有其他人或裝置先完成編譯,再放到樹梅派中。

現在已經有在 GitHub Release 放上打包好的二進位執行檔囉,歡迎需要的人下載使用!

Source

請直接 Clone 或下載 repo,進入專案後直接

cargo build --release

雖然我曾擔心過這個編譯的動作(尤其為 release 的編譯)會不會讓樹梅派無法負荷,不過事實證明我想太多了。我自己的樹梅派是裸著沒有散熱片和風扇等東西的,在冬天的時候(沒有寒流)編譯可以順利完成;反而是在安裝或更新 Rust 的時候常常 ssh 直接斷掉或重開。因此我也有在想是否要使用 CI 的方式編譯出執行檔,樹梅派直接下載回來用即可。不過這部分目前還在衡量,因此比較簡單快速的方式仍是直接從原始碼編譯。

執行

Add the following line into /etc/rc.local:

(cd /path/to/binary && ./get-LAN-IP-telegram-bot-rs; cd -)&

for example:

(cd /home/pi/Documents/get-LAN-IP-telegram-bot-rs && ./target/release/get-LAN-IP-telegram-bot-rs; cd -)&

結語

IP 來了

IP 來了

這次也是一個小小的 Rust 專案,雖然我曾經想過要不要直接用 http 請求來做這個需求(畢竟 Telegram API 還算單純)但後來想想日後或許會再添增一些功能上去,故還是安裝了他人寫好了 Telegram bot client 來用。雖然執行檔體積和編譯時間都會增加,不過換取日後新增功能方便,應該是還可以接受的犧牲。

就我自己實測結果來看,我前面推測的沒錯,開機執行到樹梅派設定的開機手稿時,IP 資訊早就有了,Python 版本在那個階段執行確實出了點問題。我懷疑是取得 IP 的套件有問題,不過現在有 Rust 版本後,那邊的問題我也懶得去測試了,後面順利的話可能就會直接封存 Python 版本了吧。

這次撰寫本文分享,希望能夠幫助到有相同需求的人。如果覺得專案有幫上忙,也希望可以幫忙在 GitHub 上點個星星,讓我知道這個小東西也有在其他地方默默地發揮它的功能。本次文章就到這邊,最後再次祝大家新年快樂。

avatar-img
4會員
17內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
hms5232的沙龍 的其他內容
最近和同事在聊天時,因為手邊剛好在操作 MySQL,無聊間想到,不知道能不能輸入 bye 來結束連線呢?實際測試了下,沒有。於是開啟了我的第一個 Rust 練習作品之路。
在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
本教學文章目標為使用 GitLab Pages 來協助達成隨機分配問卷或網址入口等需求
最近在幫家裡弄網站,規畫都好了,也買了 domain。結果過幾天被女友慫恿(他還自己身先士卒的也買了一個自己喜歡的 domain)下,也買了一個自己的網域名稱,開啟個人網站之路!
轉眼間又到了 10 月,說起 10 月除了國慶連假,當然還有不可錯過的開源界活動 Hacktoberfest! 什麼是 Hacktoberfest? Hacktoberfest 是由 Hack、 October、 Festival 組合而成的單字,為 DigitalOcean 每年舉辦的全球性活動,
本文目標是用 gh-pages 來部署靜態網頁達成需求 最近有人剛好有兩個版本的問卷,需要在使用者進入時隨機給予其中一份。他也找了程式碼,只差部署到一個地方來做隨機派發的需求。 簡單看一下發現其實用 Github Pages 就能達成(單純的前端而已),可是程式碼內容比較不符個人習慣,所以就改了一下
最近和同事在聊天時,因為手邊剛好在操作 MySQL,無聊間想到,不知道能不能輸入 bye 來結束連線呢?實際測試了下,沒有。於是開啟了我的第一個 Rust 練習作品之路。
在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
本教學文章目標為使用 GitLab Pages 來協助達成隨機分配問卷或網址入口等需求
最近在幫家裡弄網站,規畫都好了,也買了 domain。結果過幾天被女友慫恿(他還自己身先士卒的也買了一個自己喜歡的 domain)下,也買了一個自己的網域名稱,開啟個人網站之路!
轉眼間又到了 10 月,說起 10 月除了國慶連假,當然還有不可錯過的開源界活動 Hacktoberfest! 什麼是 Hacktoberfest? Hacktoberfest 是由 Hack、 October、 Festival 組合而成的單字,為 DigitalOcean 每年舉辦的全球性活動,
本文目標是用 gh-pages 來部署靜態網頁達成需求 最近有人剛好有兩個版本的問卷,需要在使用者進入時隨機給予其中一份。他也找了程式碼,只差部署到一個地方來做隨機派發的需求。 簡單看一下發現其實用 Github Pages 就能達成(單純的前端而已),可是程式碼內容比較不符個人習慣,所以就改了一下
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
女兒: 「媽媽,學校的那些人說妳是女巫。」 媽媽:「好吧...」 女兒:「而且你會施咒語。」 媽媽:「好的...我是一個女巫呀」 女兒:「還有,他們說妳是邪惡的」 媽媽:「親愛的,我的愛,你知道女巫是由什麼構成的嗎?」 女兒:「我不知道。」 「那麼,我來解釋一下… 女巫是因愛而生。
Thumbnail
到底什麼是不務正業?專業化分工的時代,跨領域人才能生存嗎?跨領域是不務正業,那這樣不務正業是不是很爛? 事實上,每個人都在做專業化的工作,但都同時在應用跨領域的才能。我對本科沒興趣,但要怎麼說服長輩?
Thumbnail
保鮮防腐的魔法:探索防腐劑和防腐方法 當我們購買食品或使用化妝品時,我們常常會看到一個重要的字眼:防腐劑。防腐劑是一種被廣泛使用的化學物質,可以延長產品的保質期並防止細菌、黴菌和其他微生物的生長。本文將帶您深入探索防腐劑和防腐方法的奧秘,了解其原理和應用。
Thumbnail
讓心情告訴我想聽的音樂 每次上課都會提早到教室,又或是盡量隔開課程時間,讓自己有時間重新整理上課心情,而這對自己與療育的服務對象是重要的。
Thumbnail
「改變」的第一個要素是「察覺」,觀察你自己,你的想法、你的恐懼、你的信念、你的習慣、你的行動、甚至是你的不行動-《有錢人想得和你不一樣》    從0到1的第一步是最令人恐懼的,尤其在面對陌生的環境,但當你的右腳勇敢踏出第一步的同時,為了支撐身體平衡,左腳勢必得跟上,一步步登上那個高峰。
Thumbnail
中央氣象局今天說,未來一週,受到東北季風的影響,三不五時的短暫雨之外,天氣也比較涼冷,冷空氣會越來越強.... 所以,上頭說,公司沒有冬天制服的情況下!要我們大家一起緊密行動! #什麼是緊密行動? . 唉唷!就是出來行動時候,要緊密的貼近一些啦! 這樣就可以相互取暖了! . #你找不到人
Thumbnail
我不是一個很出名、站到人前一呼就會有人響應的人!我想要傳遞的是一種:人與人之間即使透過網路那樣虛擬的交流,還是能夠有著真心、誠摯的互動。不需要常在左右,但可以感受有人陪伴;無法用雙手觸摸,卻能感受互相往來的的溫柔! 謝謝你相信我、跟隨我、支持我!
Thumbnail
前天才剛寫完卡爾維諾,巧的是接續著我讀的書,其中作者也引了兩次卡爾維諾《看不見的城市》,可見作者也喜歡卡爾維諾。這本書名叫《我所告訴你關於那座山的一切》,作者劉宸君,這是她的處女作,也是最後一本,因為她已於 2017 年四月在尼泊爾漫天惡雪的山上過世,年僅 19 歲。
Thumbnail
《鏡子森林》這部戲劇裡面,除了可以看到土地開發的黑暗面,也可看到,另一個深刻的新聞產業問題。正因媒體從業人員向來有所謂的無冕王的美稱,能相當程度的將權利轉化成「權力」;但何謂新聞人的價值呢?是否能堅持到最後呢?
Thumbnail
我私下調查過很多人在職場工作的各種酸甜苦辣,不同的是情節,相同的是大家都想知道成功的方法,如果這個方法是宇宙能量告訴你的,是不是值得參考或分享呢?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
女兒: 「媽媽,學校的那些人說妳是女巫。」 媽媽:「好吧...」 女兒:「而且你會施咒語。」 媽媽:「好的...我是一個女巫呀」 女兒:「還有,他們說妳是邪惡的」 媽媽:「親愛的,我的愛,你知道女巫是由什麼構成的嗎?」 女兒:「我不知道。」 「那麼,我來解釋一下… 女巫是因愛而生。
Thumbnail
到底什麼是不務正業?專業化分工的時代,跨領域人才能生存嗎?跨領域是不務正業,那這樣不務正業是不是很爛? 事實上,每個人都在做專業化的工作,但都同時在應用跨領域的才能。我對本科沒興趣,但要怎麼說服長輩?
Thumbnail
保鮮防腐的魔法:探索防腐劑和防腐方法 當我們購買食品或使用化妝品時,我們常常會看到一個重要的字眼:防腐劑。防腐劑是一種被廣泛使用的化學物質,可以延長產品的保質期並防止細菌、黴菌和其他微生物的生長。本文將帶您深入探索防腐劑和防腐方法的奧秘,了解其原理和應用。
Thumbnail
讓心情告訴我想聽的音樂 每次上課都會提早到教室,又或是盡量隔開課程時間,讓自己有時間重新整理上課心情,而這對自己與療育的服務對象是重要的。
Thumbnail
「改變」的第一個要素是「察覺」,觀察你自己,你的想法、你的恐懼、你的信念、你的習慣、你的行動、甚至是你的不行動-《有錢人想得和你不一樣》    從0到1的第一步是最令人恐懼的,尤其在面對陌生的環境,但當你的右腳勇敢踏出第一步的同時,為了支撐身體平衡,左腳勢必得跟上,一步步登上那個高峰。
Thumbnail
中央氣象局今天說,未來一週,受到東北季風的影響,三不五時的短暫雨之外,天氣也比較涼冷,冷空氣會越來越強.... 所以,上頭說,公司沒有冬天制服的情況下!要我們大家一起緊密行動! #什麼是緊密行動? . 唉唷!就是出來行動時候,要緊密的貼近一些啦! 這樣就可以相互取暖了! . #你找不到人
Thumbnail
我不是一個很出名、站到人前一呼就會有人響應的人!我想要傳遞的是一種:人與人之間即使透過網路那樣虛擬的交流,還是能夠有著真心、誠摯的互動。不需要常在左右,但可以感受有人陪伴;無法用雙手觸摸,卻能感受互相往來的的溫柔! 謝謝你相信我、跟隨我、支持我!
Thumbnail
前天才剛寫完卡爾維諾,巧的是接續著我讀的書,其中作者也引了兩次卡爾維諾《看不見的城市》,可見作者也喜歡卡爾維諾。這本書名叫《我所告訴你關於那座山的一切》,作者劉宸君,這是她的處女作,也是最後一本,因為她已於 2017 年四月在尼泊爾漫天惡雪的山上過世,年僅 19 歲。
Thumbnail
《鏡子森林》這部戲劇裡面,除了可以看到土地開發的黑暗面,也可看到,另一個深刻的新聞產業問題。正因媒體從業人員向來有所謂的無冕王的美稱,能相當程度的將權利轉化成「權力」;但何謂新聞人的價值呢?是否能堅持到最後呢?
Thumbnail
我私下調查過很多人在職場工作的各種酸甜苦辣,不同的是情節,相同的是大家都想知道成功的方法,如果這個方法是宇宙能量告訴你的,是不是值得參考或分享呢?