讓 Telegram bot 告訴你樹莓派的 IP 吧!

hms5232
7 min readOct 18, 2020

--

使用本文方式需要以下條件:
Telegram(通訊軟體)
Raspberry Pi + Linux based 的作業系統(例如: Raspberry Pi OS )

前言(廢話)

這個其實已經是老問題了,Paspberry Pi 各種教學文除了教你安裝 OS 外,還會教你怎樣設定連上網路,之後拿到 IP 來遠端。可是,如果常常帶來帶去移動到不同的網路環境底下也就算了,為什麼在固定環境底下 IP 還是一個禮拜換一次阿阿阿(原 PO 因為租屋處網路奇怪的設定崩潰中)

為了解決這個問題,有很多前輩們弄了各種方案:開機自動寄 e-mail、連接一個小螢幕(需要另外加購)充分利用 GPIO 等等。

可是我不想買小螢幕(不然我外殼蓋子蓋不上,好心酸阿),也不想用 e-mail 的方式(還要開信箱好麻煩,重點還要搞一堆設定才能存取 SMTP)。之前寫了一個批次檔來掃描,每次都要等他跑完(指定範圍內掃一輪)花費的時間不說,我還記不起樹莓派的 mac 位置,掃完了還要去翻到底 mac 是多少才能對照出 IP,整個!$%#&^&&*%$%@

有天靈機一動,我為什麼不用 Telegram bot 呢?開機連上網路自動執行,抓到 IP 用 Telegram 傳給我,我也不用開信箱、不擔心要多買 N 個小螢幕,也不用開機前擔心會需要外接螢幕就只為了看 IP,聽起來多棒啊~那就開始看要如何實作吧

正文開始前

先提一下我的環境,不過大家都是樹莓派不用分那麼清(X)基本上應該都能用(O)所以別擔心

硬體:Raspberry pi 4 B 8GB
OS:Raspberry Pi OS

這邊也先給大家已經寫好的 Github 專案,如果您對 Linux 算熟悉、也有 Telegram 且有開過 bot 的經驗,想直接跳到部署的話可以參考:

前置作業

OS 和連上網路

安裝 OS 和設定連線想必大家應該都做好了,沒做好也沒關係,中文教學文很多自己找看順眼的。

Telegram

接著是 Telegram,這是一個相當好用幾乎各方面都屌打 LINE 的通訊軟體,會看到這邊的人應該都有了吧?沒有的話也歡迎下載來試試看。

有 Telegram 帳號後,首先必須開一個機器人(我自己是有一個機器人專門開發測試用,平常不會有連線,所以直接用那隻)。關於在 Telegram 上開一隻 bot 的方法,也有很多文章。這篇文章我認為講得滿詳細,過程和原理都有講解,不知道看哪篇的人可以參考看看。

確定手上有機器人的 token 後,我們就繼續下一步吧

Python & pip3 & Pipenv

基本上各 Linux 的發行版應該都有 Python3 了吧?沒有的話請自行依照各發行版不同安裝。

接著安裝 pip3: sudo apt install python3-pip

(可選)如果怕環境被安裝的套件影響,或是有什麼特殊需求需要使用虛擬環境的話,請安裝 Pipenv: pip3 install pipenv

系統必須要的相依套件

sudo apt install libffi-dev libssl-dev

開始部署

這邊已經幫大家寫好機器人了,請直接下載或 clone 使用:
https://github.com/hms5232/get-LAN-IP-telegram-bot

專案位置請自行依照習慣即可,此處以 /home/pi/Documents/get-LAN-IP-telegram-bot 做示範。

Python 第三方套件

如果您剛剛有安裝 Pipenv 的話,只需要進入專案資料夾後使用以下指令即可:

pipenv install

沒有的話請接著使用 pip3 來直接安裝於系統上:

pip3 install python-telegram-bot==12.5
pip3 install ifcfg

設定環境設定檔案

cd into project dir, cp config.py secret.py and edit secret.py file for your env.

簡單來說,設定檔要什麼你就填入什麼就對了。

讓機器人跑起來吧

啟動指令

這邊先介紹下啟動的指令

python3 bot.py  # 使用一般方法安裝者
pipenv run python3 bot.py # 使用 Pipenv 者

執行後如果成功,那就可以做最後一哩路──開機自動執行。

開機自動執行──將啟動指令寫成 shell script

這邊可以參考我之前寫的另外一篇教學文
https://hms5232.medium.com/raspberry-pi-%E9%96%8B%E6%A9%9F%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C-shell-script-e5b60781bfa0

首先,修改專案根目錄中的 autobotstart.sh (或是自己寫一個,放在自己喜歡的位置等都可以)依照自己專案放置的位置、執行機器人的方式(是否使用 pipenv)來修改內容。

舉例來說,autobotstart.sh 預設是使用 Pipenv 並放在 /home/pi/Documents/get-LAN-IP-telegram-bot,所以 shell script 的內容就是:

pipenv run python3 bot.py

如果有需要確認輸出內容或 debug 的則可依照專案內的寫法:

pipenv run python3 bot.py > /home/pi/Documents/get-LAN-IP-telegram-bot/autorunbot.log 2>&1 &

如此一來,執行機器人的輸出就會放在專案根目錄下。

這邊建議最好是採用專案提供的範例寫法,我自己就是一開始沒寫,結果都沒成功,但確定有執行,覺得很疑惑。一輸出才發現原來是 root 找不到pipenv 這個指令Orz因此才會看到 shell script 中將 pipenv 的執行檔路徑完整標示出來,系統才能成功執行。

當然,別忘了加上執行權限:

chmod +x /home/pi/Documents/get-LAN-IP-telegram-bot/autobotstart.sh

開機自動執行──讓系統開機時執行 Shell script

這邊就我之前寫的教學文中說的,將 Shell script 寫在 /etc/rc.local 裡,大概長成這樣:

/home/pi/Documents/get-LAN-IP-telegram-bot/autobotstart.sh

重新開機,有收到訊息就完成了,恭喜恭喜~

結語

完成專案超爽的!雖然樹莓派開機很快,但有時候還是不知道到底開機完成沒,還要看燈號閃爍情形;即便確定開好機了,也不知道到底 IP 是不是被換掉了(就看到 Windows 遠端桌面在那邊跑啊跑,最後跳失敗)現在我只要看到 telegram 訊息來了就知道開機完成、IP 是多少了。

希望這篇文可以幫助到各位,有任何問題,歡迎留言或發 issue 詢問;如果有幫助或覺得我寫的不錯,也歡迎對這篇文按讚拍手或是幫 repo 按星星,甚至要贊助一下也可以XD那我們就有機會再見囉。

--

--