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