PyCharm使用技巧:Raspberry Pi的远程开发

PyCharm v2018.2最新版本下载

 

Raspberry Pi的远程开发

介绍

互联网连接的关键指标之一是它对互联网上其他主机的ping时间。因此,编写一个程序,定期ping其他主机并记录结果。对于那些想要在其他远程计算机上远程执行代码的人,例如AWS实例或DigitalOcean Droplet,过程完全相同。

本教程是在Windows上创建的,代码是在RPi上执行的,RPi是一台Linux计算机。在其他受支持的操作系统上,某些路径和工作流程可能略有不同。

先决条件

确保满足以下先决条件:

  • 你有专业版的PyCharm
  • 代码将在任何Linux机器上运行。您也可以使用本地VM。

您还需要一些额外的软件:

  • PostgreSQL,因为它将用于创建数据库。
  • Libpq-dev,Psycopg2需要。
  • Python-dev,需要编译Psycopg2。

要一次安装所有这些,请运行以下命令:

sudo apt-get update && sudo apt-get install -y postgresql libpq-dev python-dev

Raspberry Ping

构建的应用程序包含两部分:

  • 首先,实际进行测量。为了测量结果,可以调用每个Linux机器(包括Raspberry Pi)附带的ping命令行工具。然后,将结果存储在PostgreSQL数据库中。
  • 其次,使用Flask应用程序对结果进行可视化,该应用程序使用Matplotlib绘制最近结果的图表。

准备你的Raspberry Pi

由于希望以后能够查看带有结果的网页,因此在网络中为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中设置权限和创建数据库

现在需要在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。

捕获pings

要获取有关Internet连接质量的信息,请使用系统的ping实用程序ping服务器 ,然后使用正则表达式读取结果。输出 ping:

所有具有单独往返时间的行都以64字节开头。 所以让我们创建一个文件ping.pyFile | New - Python File),然后开始编码。

这里可以先获取ping的输出,然后遍历这些行,选择以数字开头,后跟“bytes from”字样的行:

此时,如果您运行代码(Ctrl+Shift+F10),您应该看到此代码在Raspberry Pi上远程运行:

要检查部署设置是否已正确设置,请指向主菜单上的Tools | Deployment 。应检查检查命令“ Automatic Upload”。

存储ping

如果要存储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页面,然后使用"+"图标来安装包

Cron

实际上会定期记录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 在屏幕右侧),然后双击该表。您应该看到它包含值:

创建Flask应用程序

如果看不到有关它们的统计数据,那么记录ping是没有好处的。因此,编写一个小型Flask应用程序(安装Flask,pip install在终端中使用),并使用 matplotlib绘制最近ping时间的图表。

在Flask应用程序中,将创建两个路径:

  • On /,这里将列出在过去一小时内使用基本统计数据确定的destinations(最后一小时的最小,平均,最长时间)。
  • 在/ graphs / 上,我们将绘制过去3小时内ping的图表。

该路线很简单:只是执行一个查询来获取感兴趣的数据,并传递给模板。为了确保一切正常,在调用时设置一个断点 render_template:

然后启动调试会话(图标动作startDebugger svg)并在浏览器中查看结果。/ graphs / 路线要复杂得多。首先,必须在合理大小的垃圾箱中获得过去三个小时的平均值(比方说,10分钟)。其次,必须绘制图形。

查询数据

要寻找的数据是:

  • 在过去3小时内每10分钟一次
  • 获取指定目标的最小,平均和最长ping时间

第一部分使这个查询相当复杂。即使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,一切都安排好了。

所以最终的结果是:

概要

  • 创建了一个项目
  • 在终端中,设置权限并创建用户。
  • 创建了一个数据库。
  • 捕获ping。
  • 在特殊数据库中存储ping。
  • 创建了Flask应用程序
  • 查询数据
  • 绘制数据

 

更多资源请查看【PyCharm入门视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值