翻譯|使用教程|編輯:龔雪|2018-08-13 15:27:23.000|閱讀 1781 次
概述:本教程介紹了Raspberry Pi上的遠(yuǎn)程開發(fā),需要的可以收藏分享哦~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
互聯(lián)網(wǎng)連接的關(guān)鍵指標(biāo)之一是它對(duì)互聯(lián)網(wǎng)上其他主機(jī)的ping時(shí)間。因此,編寫一個(gè)程序,定期ping其他主機(jī)并記錄結(jié)果。對(duì)于那些想要在其他遠(yuǎn)程計(jì)算機(jī)上遠(yuǎn)程執(zhí)行代碼的人,例如AWS實(shí)例或DigitalOcean Droplet,過程完全相同。
本教程是在Windows上創(chuàng)建的,代碼是在RPi上執(zhí)行的,RPi是一臺(tái)Linux計(jì)算機(jī)。在其他受支持的操作系統(tǒng)上,某些路徑和工作流程可能略有不同。
確保滿足以下先決條件:
您還需要一些額外的軟件:
要一次安裝所有這些,請(qǐng)運(yùn)行以下命令:
sudo apt-get update && sudo apt-get install -y postgresql libpq-dev python-dev
構(gòu)建的應(yīng)用程序包含兩部分:
由于希望以后能夠查看帶有結(jié)果的網(wǎng)頁,因此在網(wǎng)絡(luò)中為Pi提供固定IP非常重要。 為此,請(qǐng)編輯/ etc / network / interfaces。
將Pi設(shè)置為使用靜態(tài)IP后,請(qǐng)raspi-config在命令行中使用。轉(zhuǎn)到“ 高級(jí)選項(xiàng)”,選擇“ SSH”,然后選擇“ 是”。當(dāng)你完成這項(xiàng)工作后,你就可以開始使用PyCharm了。
創(chuàng)建一個(gè)純Python項(xiàng)目:選擇File | New Project。將項(xiàng)目命名為“raspberry.pi”。
然后按照 Configuring Remote Interpreters via SSH中所述添加SSH遠(yuǎn)程解釋器。配置SSH服務(wù)器時(shí),請(qǐng)指定Pi(主機(jī))的IP地址,例如172.27.120.177。另外,指定登錄到設(shè)備的憑據(jù)。
接下來,在PyCharm中,按Ctrl+Shift+A,開始輸入“啟動(dòng)SSH會(huì)話”:
然后從主機(jī)列表中選擇您的Raspberry Pi,您應(yīng)該連接。
接下來,安裝其他軟件。
現(xiàn)在需要在PostgreSQL中設(shè)置權(quán)限。最簡單的方法是返回SSH終端,并運(yùn)行以下命令以獲得Postgres用戶的SQL提示:
sudo -u postgres psql
現(xiàn)在創(chuàng)建一個(gè)用戶(Postgres術(shù)語中的 ‘role’),其名稱與運(yùn)行該過程的用戶的名稱相同:
CREATE ROLE pi WITH LOGIN PASSWORD ‘hunter2’;
重要注意事項(xiàng)!請(qǐng)確保PostgreSQL中的角色與Linux用戶名具有相同的名稱。您可能還需要替換更好的密碼。在PSQL中用分號(hào)(;)來結(jié)束SQL語句是很重要的,因?yàn)樗鼤?huì)假定您正在編寫多行語句,直到用分號(hào)終止。授予PI用戶登錄權(quán)限,這意味著用戶可以登錄。沒有登錄權(quán)限的角色用于創(chuàng)建組。
接下來,創(chuàng)建一個(gè)數(shù)據(jù)庫:
CREATE DATABASE pi WITH OWNER pi;
其次,出口psql用\q。
要獲取有關(guān)Internet連接質(zhì)量的信息,請(qǐng)使用系統(tǒng)的ping實(shí)用程序ping服務(wù)器 ,然后使用正則表達(dá)式讀取結(jié)果。輸出 ping:
所有具有單獨(dú)往返時(shí)間的行都以64字節(jié)開頭。 所以讓我們創(chuàng)建一個(gè)文件ping.pyFile | New - Python File),然后開始編碼。
這里可以先獲取ping的輸出,然后遍歷這些行,選擇以數(shù)字開頭,后跟“bytes from”字樣的行:
此時(shí),如果您運(yùn)行代碼(Ctrl+Shift+F10),您應(yīng)該看到此代碼在Raspberry Pi上遠(yuǎn)程運(yùn)行:
要檢查部署設(shè)置是否已正確設(shè)置,請(qǐng)指向主菜單上的Tools | Deployment 。應(yīng)檢查檢查命令“ Automatic Upload”。
如果要存儲(chǔ)ping PostgreSQL,為它們創(chuàng)建一個(gè)表。首先,需要?jiǎng)?chuàng)建一個(gè)PostgreSQL數(shù)據(jù)庫:
選擇PostgreSQL后,將打開數(shù)據(jù)源頁面:
在此頁面上,下載所需的驅(qū)動(dòng)程序,輸入所需的憑據(jù),然后單擊“Test Connection”按鈕以確保已連接。
由于我們的數(shù)據(jù)庫只暴露給localhost,所以需要使用SSH隧道:
在連接之后,通過執(zhí)行setup_db.sql腳本來創(chuàng)建表 。從GitHub復(fù)制粘貼腳本,連接后立即打開SQL控制臺(tái),然后使用綠色播放按鈕執(zhí)行。
現(xiàn)在已經(jīng)有了這個(gè)工作,然后擴(kuò)展腳本,將ping記錄到數(shù)據(jù)庫中。要從Python連接到數(shù)據(jù)庫,需要安裝psycopg2。為此,請(qǐng)指向 File | Settings(對(duì)于Windows和Linux)或PyCharm / Preferences (對(duì)于macOS用戶),然后單擊Project Interpreter頁面,然后使用"+"圖標(biāo)來安裝包
實(shí)際上會(huì)定期記錄ping,需要安排運(yùn)行此腳本。為此,將使用cron。當(dāng)對(duì)數(shù)據(jù)庫使用對(duì)等身份驗(yàn)證時(shí),需要確保腳本以pi用戶身份運(yùn)行。因此,打開一個(gè)SSH會(huì)話(確保已登錄 pi),然后運(yùn)行crontab -e以編輯用戶crontab。然后在文件的底部添加以下行:
*/5 * * * * /home/pi/raspberryping/ping.py jetbrains.com >> /var/log/raspberryping.log 2>&1
確保文件末尾有換行符!
第一個(gè)*/5意味著腳本將每5分鐘運(yùn)行一次。如果您想要不同的頻率,您可以了解有關(guān)crontabs的更多信息。現(xiàn)在還需要?jiǎng)?chuàng)建日志文件并確保腳本可以寫入它:
sudo touch /var/log/raspberryping.log
sudo chown pi:pi /var/log/raspberryping.log
此時(shí)花點(diǎn)時(shí)間,當(dāng)您稍后再回來時(shí),應(yīng)該記錄一些ping時(shí)間。讓查看PyCharm的數(shù)據(jù)庫工具。打開 Database tool window 在屏幕右側(cè)),然后雙擊該表。您應(yīng)該看到它包含值:
如果看不到有關(guān)它們的統(tǒng)計(jì)數(shù)據(jù),那么記錄ping是沒有好處的。因此,編寫一個(gè)小型Flask應(yīng)用程序(安裝Flask,pip install在終端中使用),并使用 matplotlib繪制最近ping時(shí)間的圖表。
在Flask應(yīng)用程序中,將創(chuàng)建兩個(gè)路徑:
該路線很簡單:只是執(zhí)行一個(gè)查詢來獲取感興趣的數(shù)據(jù),并傳遞給模板。為了確保一切正常,在調(diào)用時(shí)設(shè)置一個(gè)斷點(diǎn) render_template:
然后啟動(dòng)調(diào)試會(huì)話(圖標(biāo)動(dòng)作startDebugger svg)并在瀏覽器中查看結(jié)果。/ graphs / <destination>路線要復(fù)雜得多。首先,必須在合理大小的垃圾箱中獲得過去三個(gè)小時(shí)的平均值(比方說,10分鐘)。其次,必須繪制圖形。
要尋找的數(shù)據(jù)是:
第一部分使這個(gè)查詢相當(dāng)復(fù)雜。即使PostgreSQL支持間隔,日期范圍以及生成一系列日期的方法,也無法生成一系列范圍。這個(gè)問題的一個(gè)解決方案是公用表表達(dá)式(CTE),這是一種執(zhí)行子查詢的方法,您可以在以后將其稱為真實(shí)表。
要以10分鐘的間隔獲取過去三小時(shí)的一系列timestamps很簡單:
select begin_time from generate_series(now() - interval '3 hours', now(), interval '10 minutes') begin_time;
該generate_series函數(shù)有三個(gè)參數(shù):begin,end和step。該功能適用??于數(shù)字和timestamps,因此可以輕松實(shí)現(xiàn)。需要兩個(gè)timestamps之間的時(shí)間。可以使用另一個(gè)SQL magic: window functions,它允許在當(dāng)前所在的行之前或之后處理行。所以添加 end_time到查詢中:
LEAD獲取結(jié)果中下一行的值,按照OVER子句中指定的方式排序 。您可以使用LAG以類似方式獲取上一行。所以現(xiàn)在可以用這個(gè)查詢包裝WITH intervals as ( … query goes here … )使它成為一個(gè)CTE。然后可以加入ping表并獲得正在尋找的結(jié)果:
接下來,執(zhí)行此查詢。右鍵單擊?editor background,然后在context菜單中選擇Execute:
(如果您沒有看到Execute,請(qǐng)選擇 Attach Console讓PyCharm知道您要執(zhí)行查詢的數(shù)據(jù)庫)。
您可以使查詢工作速度提高30倍。要實(shí)現(xiàn)此顯著加速,請(qǐng)將此索引添加到查詢中:
CREATE INDEX pings_recorded_at ON pings(recorded_at);
獲取數(shù)據(jù)后,matplotlib用于生成一個(gè)折線圖,其中包含每個(gè)bin的最小,平均和最大ping時(shí)間。Matplotlib可以使用plot_date function輕松繪制基于時(shí)間的數(shù)據(jù)。
當(dāng)繪圖準(zhǔn)備好后,它將作為.png文件“保存” 到StringIO對(duì)象,然后用于創(chuàng)建HTTP響應(yīng)。通過設(shè)置content_type標(biāo)題image/png,一切都安排好了。
所以最終的結(jié)果是:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都