前言(廢話)
這個其實已經是老問題了,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
重新開機,有收到訊息就完成了,恭喜恭喜~