客户想评估不同地理位置的各种电信运营商的速度,以便了解在使用LTE连接安装设备(例如,视频广播)时,哪个移动运营商对他最合适。同时,必须在没有昂贵设备的情况下尽可能简单,廉价地解决任务。
我必须马上说任务不是最简单,最密集的知识,我将告诉您我遇到了什么问题以及如何解决它们。所以走吧
注意
测量LTE连接的速度是一件非常困难的事情:您需要选择正确的设备和测量方法,并且还对蜂窝网络的拓扑和操作有一个很好的了解。此外,速度可能受到以下几个因素的影响:每个小区的订户数量,天气状况,甚至每个小区之间的速度,由于网络拓扑结构的不同,其速度也可能会显着不同。通常,这是一个未知数众多的问题,只有电信运营商才能正确解决。
最初,客户只是想用运营商的电话来开快递,直接在电话上进行测量,然后将速度测量结果记录在笔记本中。我的用于测量LTE网络速度的解决方案虽然不理想,但解决了该问题。
由于时间不足,我做出的决定不是为了方便或实用,而是为了发展速度。例如,对于远程访问,提出了反向ssh而不是更实用的vpn,以节省设置服务器和每个客户端的时间。
技术任务
如文章“ 没有传统知识:客户为什么不想要它:没有传统知识就不要工作!”中所述。从不,无处!
技术任务非常简单,我将对其进行扩展以了解最终用户。技术解决方案和设备的选择由客户决定。因此,经过所有批准,TK本身:
vim2 lte- Huawei e3372h — 153 ( n). GPS-, UART. www.speedtest.net :
csv. - 6 . , GPIO.
经过许多批准,我以自由形式描述了传统知识。但是任务的含义已经可见。一切的截止日期是一周。但实际上它持续了三个星期。有鉴于此,我只在主要工作之后和周末才这样做。
在此,我想提请您注意以下事实:客户之前已经同意使用速度测量服务和硬件,这极大地限制了我的能力。预算也很有限,因此什么也没买。所以我必须遵守这些规则。
建筑与发展
该方案简单明了。因此,我将不加任何特殊评论。
尽管我完全没有使用这种语言进行开发的经验,但我还是决定用python实现整个项目。我之所以选择它,是因为有许多现成的示例和解决方案可以加快开发速度。因此,我要求所有专业程序员不要责骂我的第一个python开发经验,并且我总是很高兴听到建设性的批评以提高我的技能。
同样在此过程中,我发现python有两个正在运行的版本2和3,因此,我在第三个版本停止了运行。
硬件节点
单板vim2
作为主机,我得到了单板vim2
出色,功能强大的媒体可用于智能家居和SMART-TV,但极其不适合此任务,或者,我们说它不太适合。例如,它的主要操作系统是Android,而Linux是一个经过的操作系统,因此没有人可以保证Linux下所有节点和驱动程序的高质量运行。而且我认为某些问题与该平台的USB驱动程序有关,因此调制解调器无法在此板上正常工作。他的文档也很差很零散,因此每次操作都要花很多时间在码头上进行挖掘。即使是使用GPIO的普通工作也消耗了很多血。例如,我花了几个小时来设置LED的工作。但是,客观地说,哪种单板设备根本不重要,主要是它应该可以工作并具有USB端口。
首先,我需要在此板上安装Linux。为了避免为所有人以及将要使用此单板设备的人员打乱所有文档,我正在撰写本章。
有两种安装Linux的选项:在外部SD卡或内部MMC上。我在晚上用卡苦苦挣扎,不知道如何使它工作,所以我决定将它安装在MMC上,尽管毫无疑问,使用外部卡会容易得多。
固件在此处歪斜描述。我正在从陌生翻译成俄语。为了使开发板刷新,我需要连接硬件UART。我将其连接如下。
- 工具引脚GND:<—> VIM的GPIO的引脚17
- 工具引脚TXD:<—> VIM的GPIO的引脚18(Linux_Rx)
- 工具引脚RXD:<—> VIM的GPIO的引脚19(Linux_Tx)
- 工具引脚VCC:VIM的GPIO的<—>引脚20
之后,我从这里下载固件。特定固件版本为VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231。
为了上传此固件,我需要某些实用程序。在此处阅读有关此内容的更多信息。我没有尝试在Windows下刷新它,但是我需要告诉您一些有关Linux固件的信息。首先,我将根据说明安装实用程序。
git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL
我……什么都没有。我花了几个小时来编辑安装脚本,以便为我正确安装所有内容。我不记得我在那里做过什么,也记得那匹马戏团。所以要小心 但是,如果没有这些实用程序,就不会进一步折磨vim2。最好不要惹他!
经过七周的苦难,脚本配置和安装,我得到了一个可以使用的实用程序包。我通过USB将开发板连接到我的Linux计算机,并且UART也按照上图连接。
我将我最喜欢的minicom终端设置为115200,没有硬件或软件错误控制。让我们开始吧。
在UART终端中引导VIM2时,我按任意键(例如空格键)以停止引导。该行出现之后
kvim2#
我输入命令:
kvim2# run update
在我们下载的主机上,执行:
burn-tool -v aml -b VIM2 -i VIM2_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.img
大家 我问,主板上有Linux。登录名/密码khadas:khadas。
之后,进行小的初始设置。为了进行进一步的工作,我禁用了sudo的密码(是的,不安全,但是很方便)。
sudo visudo
我将线编辑到视图并保存
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
然后,我更改当前语言环境,以使时间在莫斯科,否则将是格林尼治标准时间。
sudo timedatectl set-timezone Europe/Moscow
要么
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
如果发现困难,则不要使用此板,Raspberry Pi更好。公平。
调制解调器华为e3372h-153
这个调制解调器很好地吸收了我的血液,实际上,它成为了整个项目的瓶颈。通常,这些设备的``调制解调器''名称完全不能反映工作的实质:这是一个功能强大的组合,该硬件具有一个复合设备,该设备假装为CD-ROM以安装驱动程序,然后进入网卡模式。
从Linux用户的角度来看,在结构上,完成所有设置后,如下所示:连接调制解调器后,我有了eth *网络接口,该接口通过dhcp接收IP地址192.168.8.100,以及默认网关192.168.8.1。
而最重要的一点!此调制解调器模型不知道如何在由AT命令控制的调制解调器模式下工作。一切将变得更加容易,为每个调制解调器创建ppp连接,然后对其进行操作。但是在我的情况下,“ myself”(更确切地说是根据udev规则的Linux潜水员)创建了一个eth-interface,并通过dhcp为其分配了ip-address。
为了不引起进一步的混淆,我建议忘记使用“调制解调器”一词,而是说网卡和网关,因为实际上这就像将新的网卡与网关相连。
当有一个调制解调器时,这不会引起任何特殊问题,但是当有多个调制解调器(即n个)时,将出现以下网络图。
即,n个网卡具有相同的IP地址,每个网卡具有相同的默认网关。但实际上,它们每个都连接到其自己的操作员。
最初,我有一个简单的解决方案:使用ifconfig或ip命令消除所有接口,然后依次打开一个接口并对其进行测试。该解决方案对每个人都很好,除了在切换的那一刻,我无法连接到设备。而且由于切换频繁且快速,因此实际上我根本没有机会进行连接。
因此,我选择了“手动”更改调制解调器IP地址并继续使用路由设置来驱动流量的方法。
这不是我的调制解调器问题的终点:万一电源出现问题,它们掉线了,则需要为USB集线器提供稳定的电源。通过将电源直接硬焊接到集线器可以解决此问题。我面临的另一个问题是整个项目的失败:重新启动设备或冷启动设备后,并非所有调制解调器都被检测到并且并非总是被检测到,以及为什么会发生这种情况以及无法通过哪种算法安装。但是首先是第一件事。
为了使调制解调器正常工作,我安装了usb-modeswitch软件包。
sudo apt update
sudo apt install -y usb-modeswitch
之后,udev子系统将正确检测和配置连接后的调制解调器。我只需插入调制解调器并确保网络正常就可以进行检查。
我无法解决的另一个问题:如何从此调制解调器获取与我们合作的运营商的名称?运营商的名称包含在调制解调器的Web界面中,地址为192.168.8.1。这是一个动态网页,它通过ajax请求接收数据,因此您不能仅仅获取页面并解析名称。因此,我开始研究如何制作网页等,并意识到自己在做些废话。结果,他吐口水,并开始使用Speedtest本身的API来接收操作员。
如果可以通过AT命令访问调制解调器,那么许多事情将变得更加容易。可以重新配置它,创建ppp连接,分配IP,获取运营商等。但是,a,我会尽我所能。
全球定位系统
给我的GPS接收器具有UART接口和电源。它不是最好的解决方案,但是仍然有效且简单。接收器是这样的。
老实说,这是我第一次使用GPS接收器,但是正如所料,一切都是在很久以前为我们发明的。因此,我们只使用现成的解决方案。
首先,我打开uart_AO_B(UART_RX_AO_B,UART_TX_AO_B)以连接GPS。
khadas@Khadas:~$ sudo fdtput -t s /dtb.img /serial@c81004e0 status okay
然后,我检查操作是否成功。
khadas@Khadas:~$ fdtget /dtb.img /serial@c81004e0 status
okay
显然,此命令可以即时编辑devtree,这非常方便。
成功完成此操作后,重新启动并安装gps守护程序。
khadas@Khadas:~$ sudo reboot
安装gps守护程序。我安装了所有内容并立即将其砍掉,以进行进一步的配置。
sudo apt install gpsd gpsd-clients -y
sudo killall gpsd
/* GPS daemon stop/disable */
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
编辑设置文件。
sudo vim /etc/default/gpsd
我安装了可挂GPS的UART。
DEVICES="/dev/ttyS4"
然后,我们打开所有内容并开始。
/* GPS daemon enable/start */
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket
之后,我连接了GPS。
GPS线在手中,调试器的UART线在手指下可见。
我重新启动并使用gpsmon程序检查GPS。
在此屏幕截图中,您看不到卫星,但可以看到与GPS接收器的通信,这说明一切都很好。
在python中,我尝试了许多使用此守护程序的选项,但我决定使用与python 3正确配合的选项。
安装所需的库。
sudo -H pip3 install gps3
我雕刻了工作代码。
from gps3.agps3threaded import AGPS3mechanism
...
def getPositionData(agps_thread):
counter = 0;
while True:
longitude = agps_thread.data_stream.lon
latitude = agps_thread.data_stream.lat
if latitude != 'n/a' and longitude != 'n/a':
return '{}' .format(longitude), '{}' .format(latitude)
counter = counter + 1
print ("Wait gps counter = %d" % counter)
if counter == 10:
ErrorMessage(" GPS !!!")
return "NA", "NA"
time.sleep(1.0)
...
f __name__ == '__main__':
...
#gps
agps_thread = AGPS3mechanism() # Instantiate AGPS3 Mechanisms
agps_thread.stream_data() # From localhost (), or other hosts, by example, (host='gps.ddns.net')
agps_thread.run_thread() # Throttle time to sleep after an empty lookup, default '()' 0.2 two tenths of a second
如果我需要获取坐标,则可以通过以下调用完成:
longitude, latitude = getPositionData(agps_thread)
在1到10秒钟之内,我是否会得到坐标。是的,我有十次尝试获取坐标。不是最佳的,弯曲的和歪斜的,但是可以工作。我之所以决定这样做,是因为GPS的捕捉能力很差,而且并不总是接收数据。如果您等待接收数据,那么如果您在偏远的房间工作,程序将在此位置冻结。因此,我实现了这样一个不太好的选择。
原则上,将有更多时间,有可能直接通过UART从GPS接收数据,将其解析为单独的流并与它们一起使用。但是根本没有时间,因此凶悍的丑陋代码。是的,我不感到羞耻。
发光二极管
同时连接LED既简单又复杂。主要困难在于系统中的针脚编号与板上的针脚编号不对应,并且因为文档使用左脚跟书写。要匹配硬件引脚号和操作系统中的引脚号,您需要运行以下命令:
gpio readall
将显示系统中和板上的引脚对应表。之后,我已经可以在OS本身中操作该引脚了。在我的情况下,LED连接到GPIOH_5。
我将GPIO引脚转换为输出模式。
gpio -g mode 421 out
我写下零。
gpio -g write 421 0
我写下一个。
gpio -g write 421 1
录制“ 1”后一切都打开
#gpio subsistem
def gpio_init():
os.system("gpio -g mode 421 out")
os.system("gpio -g write 421 1")
def gpio_set(val):
os.system("gpio -g write 421 %d" % val)
def error_blink():
gpio_set(0)
time.sleep(0.1)
gpio_set(1)
time.sleep(0.1)
gpio_set(0)
time.sleep(0.1)
gpio_set(1)
time.sleep(0.1)
gpio_set(0)
time.sleep(1.0)
gpio_set(1)
def good_blink():
gpio_set(1)
现在,在发生错误的情况下,我调用error_blink(),LED会为我们很好地闪烁。
软件节点
速度测试API
speedtest.net服务拥有自己的python-API非常高兴,您可以在Github上看到它。
好消息是,有些源代码也可以查看。在相应的部分中可以找到如何使用此API(最简单的示例)。
使用以下命令安装python库。
sudo -H pip3 install speedtest-cli
例如,您甚至可以直接从rep在Ubuntu中安装速度测试仪。这是相同的python应用程序,您可以直接从控制台运行它。
sudo apt install speedtest-cli -y
并衡量您的互联网速度。 结果,就像我一样。为了更充分地将其实施到我的项目中,我不得不深入研究此速度测试的源代码。最重要的任务之一是获得电信运营商的名称,以便在牌照中替换它。
speedtest-cli
Retrieving speedtest.net configuration...
Testing from B***** (*.*.*.*)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by MTS (Moscow) [0.12 km]: 11.8 ms
Testing download speed................................................................................
Download: 7.10 Mbit/s
Testing upload speed......................................................................................................
Upload: 3.86 Mbit/s
import speedtest
from datetime import datetime
...
#
#6053) MaximaTelecom (Moscow, Russian Federation)
servers = ["6053"]
# If you want to use a single threaded test
threads = None
s = speedtest.Speedtest()
#
opos = '%(isp)s' % s.config['client']
s.get_servers(servers)
#
testserver = '%(sponsor)s (%(name)s) [%(d)0.2f km]: %(latency)s ms' % s.results.server
#
s.download(threads=threads)
#
s.upload(threads=threads)
#
s.results.share()
# csv-.
# GPS
longitude, latitude = getPositionData(agps_thread)
#
curdata = datetime.now().strftime('%d.%m.%Y')
curtime = datetime.now().strftime('%H:%M:%S')
delimiter = ';'
result_string = opos + delimiter + str(curpos) + delimiter + \
curdata + delimiter + curtime + delimiter + longitude + ', ' + latitude + delimiter + \
str(s.results.download/1000.0/1000.0) + delimiter + str(s.results.upload / 1000.0 / 1000.0) + \
delimiter + str(s.results.ping) + delimiter + testserver + "\n"
#
在这里,虽然看起来似乎要容易得多,但事实并非如此简单。最初,服务器参数等于[],他们说,选择最佳服务器。结果,我有了随机服务器,并且您可能猜到了浮动速度。这是一个相当复杂的主题,使用固定服务器(如果是),则需要进行静态或动态的研究。但是,这里有一个图表示例,用于通过动态选择测试服务器和静态固定服务器来测量Beeline运算符的速度。
选择动态服务器时测量速度的结果。
速度测试结果,一台严格选择一台服务器。
在测试过程中,“羊毛”无处不在,必须通过数学方法将其除去。但是,使用固定服务器时,它要少一些,并且振幅更稳定。
总的来说,这是一个值得研究的地方。然后,我将使用iperf实用程序测量服务器的速度。但是我们坚持传统知识。
发送邮件和错误
我尝试了数十种不同的选项来发送邮件,但结果我选择了以下几种方法。我在yandex上注册了一个邮箱,然后以发送邮件为例。我检查了它并将其实现到程序中。本示例探讨了各种选项,包括从gmail发送等。我不想打扰我的邮件服务器,也没有时间这样做,但是后来发现,它也没有用。如果有连接,
则按调度程序发送日志,如果有连接,则每6小时发送一次:00小时,上午6点,中午12点和下午18点。我发送如下。
from send_email import *
...
message_log = " №1"
EmailForSend = ["dlinyj@trololo.ru", "pupkin@trololo.ru"]
files = ["/home/khadas/modems_speedtest/csv"]
...
def sendLogs():
global EmailForSend
curdata = datetime.now().strftime('%d.%m.%Y')
urtime = datetime.now().strftime('%H:%M:%S')
try:
for addr_to in EmailForSend:
send_email(addr_to, message_log, " " + curdata + " " + urtime, files)
except:
print("Network problem for send mail")
return False
return True
最初也提交了错误。首先,它们会累积在列表中,然后在存在连接的情况下也使用调度程序发送它们。但是,然后存在一个问题,即yandex对每天发送的消息数量有限制(这是痛苦,悲伤和屈辱)。由于即使在一分钟内也会出现大量错误,因此有必要拒绝通过邮件发送错误。因此,在通过Yandex服务自动发送有关此问题时,请记住。
反馈服务器
为了能够访问远程硬件并进行调整和重新配置,我需要一台外部服务器。通常,公平地说,将所有数据发送到服务器并在Web界面中构建所有精美的图形是正确的。但不是一次全部。
我选择ruvds.com作为VPS 。可以采用最简单的服务器。通常,就我的目的而言,这对于眼睛来说就足够了。但是由于我没有为服务器付费,所以我决定花一点钱,如果我们部署Web界面,我们自己的SMTP服务器,VPN等就足够了。另外,为了能够设置Telegram机器人,并且在阻止它方面没有问题。因此,我选择了Amsterdam和以下参数。
作为与硬件进行通信的一种方式,vim2选择了反向ssh连接,而实践证明,这不是最好的方法。如果连接断开,则服务器保留该端口,并且一段时间无法通过该端口进行连接。因此,最好使用其他通信方法,例如vpn。将来,我想切换到vpn,但没有时间。
我不会详细介绍设置防火墙,限制权限,禁用ssh根连接以及VPS设置的其他常见问题。我想相信您已经了解了一切。对于远程连接,我在服务器上创建一个新用户。
adduser vimssh
在我们的硬件上,我生成ssh连接密钥。
ssh-keygen
然后将它们复制到我们的服务器。
ssh-copy-id vimssh@host.com
在我们的硬件上,我会在每次启动时创建反向ssh的自动连接。 注意端口8083:它确定我将通过反向ssh连接到哪个端口。添加到启动并启动。
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
User=khadas
ExecStart=/usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -CD 8080 -R 8083:localhost:22 vimssh@host.com
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable autossh.service
sudo systemctl start autossh.service
您甚至可以查看状态:
sudo systemctl status autossh.service
现在,在我们的VPS服务器上,如果您运行:
ssh -p 8083 khadas@localhost
然后我去试了。从铁片上,我还可以通过ssh将日志和任何数据发送到我的服务器,这非常方便。
放在一起
打开后,我们开始开发和调试
Fuh,好吧,似乎所有内容都描述了所有节点。现在是时候将它们放在一起。可以在这里查看代码。
代码的重点:像“ vlob”这样的项目可能不会启动,因为它已针对特定体系结构的特定任务进行了改进。尽管我提供了源代码,但我仍将在本文中分析最有价值的内容,否则将是完全无法理解的。
首先,我要初始化gps,gpio和启动单独的调度程序线程。
#
pShedulerThread = threading.Thread(target=ShedulerThread, args=(1,))
pShedulerThread.start()
调度程序非常简单:它看起来是否已经到了发送消息的时间以及现在的错误状态了。如果有错误标志,请使LED闪烁。
#sheduler
def ShedulerThread(name):
global ready_to_send
while True:
d = datetime.today()
time_x = d.strftime('%H:%M')
if time_x in time_send_csv:
ready_to_send = True
if error_status:
error_blink()
else:
good_blink()
time.sleep(1)
该项目中最困难的一点是在每次测试中都保持反向ssh连接。在每个测试中,将重新配置默认网关和dns服务器。由于仍然没有人阅读,因此请注意,火车不会在木制栏杆上滚动。谁发现复活节彩蛋,谁都会爱吃甜食。
为此,我创建了一个单独的路由表--set-mark 0x2和一个用于重定向流量的规则。
def InitRouteForSSH():
cmd_run("sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 0x2")
cmd_run("sudo ip rule add fwmark 0x2/0x2 lookup 102")
您可以在本文中阅读有关此工作原理的更多信息。
然后,我陷入无尽的循环,每次我们获得连接的调制解调器的列表时(以了解网络配置是否已更改)。
network_list = getNetworklist()
获取网络接口列表非常简单。
def getNetworklist():
full_networklist = os.listdir('/sys/class/net/')
network_list = [x for x in full_networklist if "eth" in x and x != "eth0"]
return network_list
收到列表后,我将IP地址分配给所有接口,如调制解调器章节中的图片所示。
SetIpAllNetwork(network_list)
def SetIpAllNetwork(network_list):
for iface in network_list:
lastip = "%d" % (3 + network_list.index(iface))
cmd_run ("sudo ifconfig " + iface + " 192.168.8." + lastip +" up")
然后,我只是循环浏览每个接口。然后我配置每个接口。
for iface in network_list:
ConfigNetwork(iface)
def ConfigNetwork(iface):
#
cmd_run("sudo ip route flush all")
#
cmd_run("sudo route add default gw 192.168.8.1 " + iface)
# dns- ( speedtest)
cmd_run ("sudo bash -c 'echo nameserver 8.8.8.8 > /etc/resolv.conf'")
我检查接口的可操作性,如果没有网络,则会产生错误。如果有网络,那么该采取行动了!
在这里,我设置了到该接口的ssh路由(如果未完成),将错误发送到服务器,如果时间到了,发送日志,最后运行speedtest并将日志保存到csv文件。
if not NetworkAvalible():
....
#
....
else: # , , !
# , ssh,
if (sshint == lastbanint or sshint =="free"):
print("********** Setup SSH ********************")
if sshint !="free":
md_run("sudo ip route del default via 192.168.8.1 dev " + sshint +" table 102")
SetupReverseSSH(iface)
sshint = iface
# , !!!
if ready_to_send:
print ("**** Ready to send!!!")
if sendLogs():
ready_to_send = False
if error_status:
SendErrors()
# .
反向ssh配置功能除外。
def SetupReverseSSH(iface):
cmd_run("sudo systemctl stop autossh.service")
cmd_run("sudo ip route add default via 192.168.8.1 dev " + iface +" table 102")
cmd_run("sudo systemctl start autossh.service")
当然,您需要将所有这些优点添加到启动中。为此,我创建一个文件:
sudo vim /etc/systemd/system/modems_speedtest.service
我写道: 我打开自动加载并启动!
[Unit]
Description=Modem Speed Test
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
User=khadas
ExecStart=/usr/bin/python3.6 /home/khadas/modems_speedtest/networks.py
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable modems_speedtest.service
sudo systemctl start modems_speedtest.service
现在,我可以使用以下命令查看发生的情况的日志:
journalctl -u modems_speedtest.service --no-pager -f
结果
好吧,现在最重要的是结果如何?这是我在开发和调试过程中设法捕获的一些图形。这些图是使用gnuplot和以下脚本构建的。
#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced color solid
set output "Rostelecom.ps"
#set terminal png size 1024, 768
#set output "Rostelecom.png"
set datafile separator ';'
set grid xtics ytics
set xdata time
set ylabel "Speed Mb/s"
set xlabel 'Time'
set timefmt '%d.%m.%Y;%H:%M:%S'
set title "Rostelecom Speed"
plot "Rostelecom.csv" using 3:6 with lines title "Download", '' using 3:7 with lines title "Upload"
set title "Rostelecom 2 Ping"
set ylabel "Ping ms"
plot "Rostelecom.csv" using 3:8 with lines title "Ping"
最初的经验是运营商Tele2,我花了几天时间。
我在这里使用了动态计量服务器。速度测量有效,但它们浮动很大,但是仍然可以看到一些平均值,并且可以通过过滤数据(例如,使用移动平均值)获得该平均值。
后来,我为其他电信运营商构建了一系列图形。在这种情况下,已经有一台测试服务器,结果也非常有趣。
如您所见,该主题涉及这些数据的研究和处理,涉及面很广,显然不会持续数周的工作。但…
工作成果
由于我无法控制的情况,这项工作突然完成了。在我的主观意见中,该项目的弱点之一是调制解调器,它实际上并不想与其他调制解调器同时工作,并且每次启动时都会犯下这些诡计。出于这些目的,还有大量其他型号的调制解调器,通常它们已经具有Mini PCI-e格式,并已安装在设备内部并且易于配置。但这是一个完全不同的故事。该项目很有趣,并且很高兴我们能够参与其中。