ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ในระหว่างการกักกัน ฉันได้รับการเสนอให้เข้าร่วมในการพัฒนาอุปกรณ์สำหรับวัดความเร็วของโมเด็ม LTE สำหรับผู้ให้บริการโทรศัพท์มือถือหลายราย

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ลูกค้าต้องการประเมินความเร็วของผู้ให้บริการโทรคมนาคมหลายรายในตำแหน่งทางภูมิศาสตร์ที่แตกต่างกัน เพื่อให้สามารถเข้าใจว่าผู้ให้บริการโทรศัพท์มือถือรายใดเหมาะสมที่สุดสำหรับเขาเมื่อติดตั้งอุปกรณ์โดยใช้การเชื่อมต่อ LTE เช่น สำหรับการออกอากาศวิดีโอ ในเวลาเดียวกัน ปัญหาก็ต้องได้รับการแก้ไขอย่างง่ายดายและราคาถูกที่สุดเท่าที่จะเป็นไปได้ โดยไม่ต้องใช้อุปกรณ์ราคาแพง

ฉันจะบอกทันทีว่างานนี้ไม่ใช่งานที่ง่ายที่สุดและต้องใช้ความรู้มากที่สุด ฉันจะบอกคุณว่าฉันพบปัญหาใดบ้างและจะแก้ไขอย่างไร งั้นไปกัน.

หมายเหตุ

การวัดความเร็วของการเชื่อมต่อ LTE เป็นเรื่องที่ซับซ้อนมาก: คุณต้องเลือกอุปกรณ์และเทคนิคการวัดที่เหมาะสม และยังมีความเข้าใจที่ดีเกี่ยวกับโทโพโลยีและการทำงานของเครือข่ายเซลลูลาร์ นอกจากนี้ ความเร็วยังอาจได้รับอิทธิพลจากปัจจัยหลายประการ เช่น จำนวนสมาชิกในแต่ละเซลล์ สภาพอากาศ แม้แต่จากเซลล์หนึ่งไปอีกเซลล์หนึ่ง ความเร็วอาจแตกต่างกันอย่างมากเนื่องจากโทโพโลยีเครือข่าย โดยทั่วไปนี่เป็นปัญหากับสิ่งที่ไม่ทราบจำนวนมากและมีเพียงผู้ให้บริการโทรคมนาคมเท่านั้นที่สามารถแก้ไขได้อย่างถูกต้อง

ในตอนแรก ลูกค้าเพียงต้องการขับรถส่งของโดยใช้โทรศัพท์ของผู้ให้บริการ ทำการวัดโดยตรงบนโทรศัพท์ จากนั้นจึงจดผลการวัดความเร็วลงในสมุดบันทึก โซลูชันของฉันในการวัดความเร็วของเครือข่าย lte แม้ว่าจะไม่เหมาะสม แต่ก็ช่วยแก้ปัญหาได้

เนื่องจากไม่มีเวลา ฉันจึงตัดสินใจไม่คำนึงถึงความสะดวกหรือการใช้งานจริง แต่คำนึงถึงความเร็วของการพัฒนา ตัวอย่างเช่น Reverse ssh ใช้สำหรับการเข้าถึงระยะไกล แทนที่จะเป็น VPN ที่ใช้งานได้จริงมากกว่า เพื่อประหยัดเวลาในการตั้งค่าเซิร์ฟเวอร์และไคลเอนต์แต่ละราย

งานด้านเทคนิค

ตามที่ระบุไว้ในบทความ ไม่มีข้อกำหนดทางเทคนิค: เหตุใดลูกค้าจึงไม่ต้องการ: อย่าทำงานโดยไม่มีข้อกำหนดทางเทคนิค! ไม่เคยทุกที่!

งานด้านเทคนิคนั้นค่อนข้างง่าย ฉันจะขยายความเล็กน้อยเพื่อความเข้าใจของผู้ใช้ปลายทาง ลูกค้าเป็นผู้กำหนดทางเลือกของโซลูชันและอุปกรณ์ทางเทคนิค ดังนั้นข้อกำหนดทางเทคนิคนั้นเองหลังจากการอนุมัติทั้งหมด:

ขึ้นอยู่กับคอมพิวเตอร์บอร์ดตัวเดียว กลุ่ม2 สร้างเครื่องทดสอบความเร็วสำหรับการเชื่อมต่อ lte ผ่านโมเด็ม Huawei e3372h - 153 ผู้ให้บริการโทรคมนาคมหลายราย (จากหนึ่งถึง n) นอกจากนี้ยังจำเป็นต้องรับพิกัดจากเครื่องรับ GPS ที่เชื่อมต่อผ่าน UART ทำการวัดความเร็วด้วยการใช้บริการ www.speedtest.net และนำไปวางในตารางดังนี้:

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ตารางในรูปแบบ CSV จากนั้นส่งป้ายนี้ทางอีเมลทุกๆ 6 ชั่วโมง ในกรณีที่เกิดข้อผิดพลาด ให้กระพริบไฟ LED ที่เชื่อมต่อกับ GPIO

ฉันอธิบายข้อกำหนดทางเทคนิคในรูปแบบอิสระ หลังจากได้รับการอนุมัติหลายครั้ง แต่ความหมายของงานก็ปรากฏให้เห็นแล้ว ให้เวลาหนึ่งสัปดาห์สำหรับทุกสิ่ง แต่ในความเป็นจริงมันกินเวลานานถึงสามสัปดาห์ นี่เป็นการคำนึงถึงความจริงที่ว่าฉันทำสิ่งนี้หลังจากงานหลักและวันหยุดสุดสัปดาห์เท่านั้น

ฉันต้องการดึงความสนใจอีกครั้งถึงความจริงที่ว่าลูกค้าได้ตกลงล่วงหน้าเกี่ยวกับการใช้บริการวัดความเร็วและฮาร์ดแวร์ ซึ่งจำกัดความสามารถของฉันอย่างมาก งบประมาณก็มีจำกัด ดังนั้นจึงไม่ได้ซื้ออะไรเป็นพิเศษ ดังนั้นเราจึงต้องเล่นตามกฎเหล่านี้

สถาปัตยกรรมและการพัฒนา

โครงการนี้เรียบง่ายและชัดเจน ดังนั้นผมจะทิ้งไว้โดยไม่มีความคิดเห็นพิเศษใดๆ

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ฉันตัดสินใจที่จะดำเนินโครงการทั้งหมดใน python แม้ว่าฉันจะไม่มีประสบการณ์ในการพัฒนาในภาษานี้เลยก็ตาม ฉันเลือกมันเพราะมีตัวอย่างและโซลูชันสำเร็จรูปมากมายที่สามารถเร่งการพัฒนาได้ ดังนั้น ฉันขอให้โปรแกรมเมอร์มืออาชีพทุกคนอย่าดุว่าประสบการณ์ครั้งแรกของฉันในการพัฒนาใน Python และฉันยินดีเสมอที่จะได้ยินคำวิจารณ์ที่สร้างสรรค์เพื่อพัฒนาทักษะของฉัน

นอกจากนี้ในกระบวนการนี้ ฉันพบว่า python มีสองเวอร์ชันที่ทำงานอยู่ 2 และ 3 ดังนั้นฉันจึงเลือกเวอร์ชันที่สาม

โหนดฮาร์ดแวร์

vim2 จานเดียว

ฉันได้รับคอมพิวเตอร์บอร์ดเดี่ยวเป็นเครื่องหลัก กลุ่ม2

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

โปรเซสเซอร์สื่อที่ยอดเยี่ยมและทรงพลังสำหรับบ้านอัจฉริยะและ SMART-TV แต่ไม่เหมาะอย่างยิ่งสำหรับงานนี้หรือสมมติว่าไม่เหมาะสม ตัวอย่างเช่น ระบบปฏิบัติการหลักของมันคือ Android และ Linux เป็นระบบปฏิบัติการรอง ดังนั้นจึงไม่มีใครรับประกันการทำงานคุณภาพสูงของโหนดและไดรเวอร์ทั้งหมดภายใต้ Linux และฉันคิดว่าปัญหาบางอย่างเกี่ยวข้องกับไดรเวอร์ USB ของแพลตฟอร์มนี้ ดังนั้นโมเด็มจึงไม่ทำงานตามที่คาดไว้บนบอร์ดนี้ นอกจากนี้ยังมีเอกสารที่แย่มากและกระจัดกระจาย ดังนั้นแต่ละการดำเนินการจึงใช้เวลานานในการขุดผ่านท่าเรือ แม้แต่งานธรรมดากับ GPIO ก็ต้องใช้เลือดมาก ตัวอย่างเช่น ฉันใช้เวลาหลายชั่วโมงในการตั้งค่า LED แต่เพื่อให้เป็นไปตามวัตถุประสงค์ โดยพื้นฐานแล้วไม่สำคัญว่าเป็นบอร์ดเดี่ยวประเภทใด สิ่งสำคัญคือมันใช้งานได้และมีพอร์ต USB

ก่อนอื่นฉันต้องติดตั้ง Linux บนบอร์ดนี้ก่อน เพื่อไม่ให้เป็นการรบกวนเอกสารสำหรับทุกคน และสำหรับผู้ที่จะจัดการกับระบบบอร์ดเดี่ยวนี้ ฉันกำลังเขียนบทนี้

มีสองตัวเลือกในการติดตั้ง Linux: บนการ์ด SD ภายนอกหรือบน MMC ภายใน ฉันใช้เวลาช่วงเย็นพยายามหาวิธีใช้งานกับการ์ด ดังนั้นฉันจึงตัดสินใจติดตั้งลงใน MMC แม้ว่าการทำงานกับการ์ดภายนอกจะง่ายกว่ามากอย่างไม่ต้องสงสัยก็ตาม

เกี่ยวกับเฟิร์มแวร์ พูดแบบอ้อมๆนี่. ฉันแปลจากแปลกเป็นภาษารัสเซีย ในการแฟลชบอร์ด ฉันต้องเชื่อมต่อฮาร์ดแวร์ UART เชื่อมต่อมันแล้ว ดังนี้

  • Tool Pin GND: <—> Pin17 ของ GPIO ของ VIM
  • Tool Pin TXD: <—> Pin18 ของ GPIO ของ VIM (Linux_Rx)
  • Tool Pin RXD: <—> Pin19 ของ GPIO ของ VIM (Linux_Tx)
  • Tool Pin VCC: <—> Pin20 ของ GPIO ของ VIM

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

หลังจากนั้นฉันก็ดาวน์โหลดเฟิร์มแวร์ ด้วยเหตุนี้. เวอร์ชันเฟิร์มแวร์เฉพาะ VIM1_Ubuntu-เซิร์ฟเวอร์ไบโอนิค_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 ตามแผนภาพด้านบนด้วย
ฉันกำลังตั้งค่าเทอร์มินัลมินิคอมที่ฉันชื่นชอบด้วยความเร็ว 115200 โดยไม่มีการควบคุมข้อผิดพลาดด้านฮาร์ดแวร์และซอฟต์แวร์ และเริ่มกันเลย

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

เมื่อโหลด VIM2 ในเทอร์มินัล UART ฉันจะกดปุ่ม เช่น สเปซบาร์ เพื่อหยุดการโหลด หลังจากที่บรรทัดปรากฏขึ้น

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

โมเด็มนี้เป็นแหล่งเลือดที่สำคัญสำหรับฉัน และจริงๆ แล้ว มันกลายเป็นคอขวดของโครงการทั้งหมด โดยทั่วไปชื่อ "โมเด็ม" สำหรับอุปกรณ์เหล่านี้ไม่ได้สะท้อนถึงสาระสำคัญของงานเลย: นี่คือการรวมกันที่ทรงพลังฮาร์ดแวร์ชิ้นนี้มีอุปกรณ์คอมโพสิตที่แกล้งทำเป็นซีดีรอมเพื่อติดตั้งไดรเวอร์ จากนั้นสลับไปที่โหมดการ์ดเครือข่าย

ในเชิงสถาปัตยกรรม จากมุมมองของผู้ใช้ Linux หลังจากการตั้งค่าทั้งหมดแล้ว ดูเหมือนว่านี้: หลังจากเชื่อมต่อโมเด็ม ฉันมีอินเทอร์เฟซเครือข่าย eth* ซึ่งผ่าน dhcp จะได้รับที่อยู่ IP 192.168.8.100 และเกตเวย์เริ่มต้น คือ 192.168.8.1

และช่วงเวลาที่สำคัญที่สุด! โมเด็มรุ่นนี้ไม่สามารถทำงานได้ในโหมดโมเด็มซึ่งควบคุมโดยคำสั่ง AT. ทุกอย่างจะง่ายขึ้นมาก สร้างการเชื่อมต่อ PPP สำหรับแต่ละโมเด็ม จากนั้นจึงใช้งานโมเด็มเหล่านั้น แต่ในกรณีของฉัน "ตัวเขาเอง" (หรือที่เจาะจงกว่านั้นคือนักดำน้ำ Linux ตามกฎ udev) สร้างอินเทอร์เฟซ eth และกำหนดที่อยู่ IP ให้กับมันผ่าน dhcp

เพื่อหลีกเลี่ยงความสับสนเพิ่มเติม ฉันขอแนะนำให้ลืมคำว่า "โมเด็ม" และพูดว่าการ์ดเครือข่ายและเกตเวย์ เพราะโดยพื้นฐานแล้วมันเหมือนกับการเชื่อมต่อการ์ดเครือข่ายใหม่กับเกตเวย์
เมื่อมีโมเด็มตัวเดียว สิ่งนี้จะไม่ทำให้เกิดปัญหาพิเศษใด ๆ แต่เมื่อมีมากกว่าหนึ่งตัว ได้แก่ n-piece รูปภาพเครือข่ายต่อไปนี้จะเกิดขึ้น

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

นั่นคือ การ์ดเครือข่าย n การ์ดที่มีที่อยู่ IP เดียวกัน โดยแต่ละการ์ดมีเกตเวย์เริ่มต้นเหมือนกัน แต่ในความเป็นจริงแล้ว แต่ละรายการเชื่อมต่อกับผู้ให้บริการของตนเอง

ในตอนแรก ฉันมีวิธีแก้ปัญหาง่ายๆ: ใช้คำสั่ง ifconfig หรือ ip ปิดอินเทอร์เฟซทั้งหมด แล้วเปิดอินเทอร์เฟซหนึ่งแล้วทดสอบ วิธีแก้ปัญหานี้ดีสำหรับทุกคน ยกเว้นในช่วงเวลาเปลี่ยนเครื่องฉันไม่สามารถเชื่อมต่อกับอุปกรณ์ได้ และเนื่องจากการสับเปลี่ยนเกิดขึ้นบ่อยครั้งและรวดเร็ว ฉันจึงไม่มีโอกาสเชื่อมต่อเลย

ดังนั้นฉันจึงเลือกเส้นทางในการเปลี่ยนที่อยู่ IP ของโมเด็มด้วยตนเอง จากนั้นจึงขับเคลื่อนการรับส่งข้อมูลโดยใช้การตั้งค่าเส้นทาง

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

นี่ไม่ใช่จุดสิ้นสุดของปัญหาของฉันเกี่ยวกับโมเด็ม: ในกรณีที่เกิดปัญหาด้านพลังงาน โมเด็มจะหลุดออกไปและจำเป็นต้องมีแหล่งจ่ายไฟที่เสถียรที่ดีให้กับฮับ USB ฉันแก้ไขปัญหานี้ด้วยการบัดกรีพลังงานเข้ากับฮับโดยตรงอย่างหนัก ปัญหาอื่นที่ฉันพบและทำให้โครงการทั้งหมดเสียหาย: หลังจากรีบูตหรือเริ่มอุปกรณ์โดยเย็น โมเด็มบางอันไม่ถูกตรวจพบและไม่เสมอไป และฉันไม่สามารถระบุได้ว่าเหตุใดสิ่งนี้จึงเกิดขึ้นและโดยอัลกอริธึมใด แต่สิ่งแรกก่อน

เพื่อให้โมเด็มทำงานได้อย่างถูกต้อง ฉันจึงติดตั้งแพ็คเกจ usb-modeswitch

sudo apt update
sudo apt install -y usb-modeswitch

หลังจากนั้นหลังจากเชื่อมต่อแล้ว โมเด็มจะถูกตรวจพบและกำหนดค่าอย่างถูกต้องโดยระบบย่อย udev ฉันตรวจสอบโดยการเชื่อมต่อโมเด็มและตรวจสอบให้แน่ใจว่าเครือข่ายปรากฏขึ้น
ปัญหาอื่นที่ฉันไม่สามารถแก้ไขได้: ฉันจะรับชื่อผู้ให้บริการที่เราทำงานด้วยจากโมเด็มนี้ได้อย่างไร ชื่อผู้ดำเนินการมีอยู่ในเว็บอินเตอร์เฟสของโมเด็มที่ 192.168.8.1 นี่คือหน้าเว็บแบบไดนามิกที่รับข้อมูลผ่านคำขอ Ajax ดังนั้นเพียงแค่สร้างหน้าเว็บและแยกวิเคราะห์ชื่อจะไม่ทำงาน ดังนั้นฉันจึงเริ่มมองหาวิธีพัฒนาหน้าเว็บ ฯลฯ และตระหนักว่าฉันกำลังทำเรื่องไร้สาระบางอย่าง เป็นผลให้เขาถ่มน้ำลายและผู้ปฏิบัติงานเริ่มรับโดยใช้ Speedtest API เอง

จะง่ายกว่ามากหากโมเด็มเข้าถึงได้ผ่านคำสั่ง AT เป็นไปได้ที่จะกำหนดค่าใหม่ สร้างการเชื่อมต่อ ppp กำหนด IP รับผู้ให้บริการโทรคมนาคม ฯลฯ แต่อนิจจา ฉันกำลังทำงานกับสิ่งที่ฉันได้รับ

จีพีเอส

เครื่องรับ GPS ที่ฉันได้รับมีอินเทอร์เฟซและกำลังไฟ UART มันไม่ใช่ทางออกที่ดีที่สุด แต่ก็ยังใช้การได้และเรียบง่าย ผู้รับมีลักษณะเช่นนี้

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

พูดตามตรง นี่เป็นครั้งแรกที่ฉันทำงานกับเครื่องรับ 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 daemon

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

ฉันกำลังติดตั้ง UART ซึ่ง GPS จะหยุดทำงาน

DEVICES="/dev/ttyS4"

จากนั้นเราก็เปิดทุกอย่างและเริ่มต้น

/* GPS daemon enable/start */
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket

หลังจากนั้นฉันก็เชื่อมต่อ GPS

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

สาย GPS อยู่ในมือของฉัน สายดีบักเกอร์ UART มองเห็นได้อยู่ใต้นิ้วของฉัน

ฉันรีบูตและตรวจสอบการทำงานของ GPS โดยใช้โปรแกรม gpsmon

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

คุณไม่เห็นดาวเทียมในภาพหน้าจอนี้ แต่คุณสามารถเห็นการสื่อสารกับตัวรับสัญญาณ GPS ได้ และนั่นหมายความว่าทุกอย่างเรียบร้อยดี

ใน python ฉันลองใช้ตัวเลือกมากมายสำหรับการทำงานกับ daemon นี้ แต่ฉันเลือกตัวเลือกที่ทำงานได้อย่างถูกต้องกับ 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 สามารถรับสัญญาณได้ไม่ดีและไม่ได้รับข้อมูลเสมอไป หากคุณรอรับข้อมูลหากคุณทำงานในห้องห่างไกลโปรแกรมจะหยุดที่นี่ ดังนั้นฉันจึงใช้ตัวเลือกที่ไม่เหมาะสมนี้

โดยหลักการแล้ว หากมีเวลามากกว่านี้ ก็จะสามารถรับข้อมูลจาก GPS ได้โดยตรงผ่าน UART แยกวิเคราะห์เป็นเธรดแยกต่างหากและใช้งานได้ แต่ไม่มีเวลาเลย ดังนั้นรหัสที่น่าเกลียดอย่างไร้ความปราณี และใช่ ฉันไม่ละอายใจเลย

ไดโอดเปล่งแสง

การเชื่อมต่อ LED ทำได้ง่ายและยากในเวลาเดียวกัน ปัญหาหลักคือหมายเลขพินในระบบไม่ตรงกับหมายเลขพินบนบอร์ดและเนื่องจากเอกสารเขียนด้วยมือซ้าย ในการเปรียบเทียบหมายเลขพินของฮาร์ดแวร์และหมายเลขพินในระบบปฏิบัติการ คุณต้องรันคำสั่ง:

gpio readall

ตารางการติดต่อพินในระบบและบนบอร์ดจะปรากฏขึ้น หลังจากนั้นฉันก็สามารถใช้งานพินในระบบปฏิบัติการได้แล้ว ในกรณีของฉัน LED เชื่อมต่ออยู่ GPIOH_5.

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ฉันเปลี่ยนพิน GPIO เป็นโหมดเอาท์พุต

gpio -g mode 421 out

ฉันเขียนลงไปเป็นศูนย์

gpio -g write 421 0

ฉันเขียนลงไปอันหนึ่ง

gpio -g write 421 1

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว
ทุกอย่างสว่างขึ้นหลังจากเขียน "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 นี้ (ตัวอย่างง่ายๆ) สามารถพบได้ใน ส่วนที่เกี่ยวข้อง.

ฉันติดตั้งไลบรารีหลามด้วยคำสั่งต่อไปนี้

sudo -H pip3 install speedtest-cli

ตัวอย่างเช่น คุณสามารถติดตั้งเครื่องมือทดสอบความเร็วใน 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 เมื่อเลือกเซิร์ฟเวอร์ทดสอบแบบไดนามิกและเซิร์ฟเวอร์คงที่แบบคงที่

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว
ผลลัพธ์ของการวัดความเร็วเมื่อเลือกเซิร์ฟเวอร์แบบไดนามิก

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว
ผลการทดสอบความเร็วโดยเลือกเซิร์ฟเวอร์เดียวอย่างเคร่งครัด

ในระหว่างการทดสอบ มี "ขน" ทั้งสองจุด และจำเป็นต้องลบออกโดยใช้วิธีทางคณิตศาสตร์ แต่ด้วยเซิร์ฟเวอร์แบบคงที่ เซิร์ฟเวอร์จะน้อยกว่าเล็กน้อยและแอมพลิจูดจะมีเสถียรภาพมากกว่า
โดยทั่วไปแล้ว ที่นี่เป็นสถานที่สำหรับการวิจัยที่ยอดเยี่ยม และฉันจะวัดความเร็วของเซิร์ฟเวอร์ของฉันโดยใช้ยูทิลิตี้ iperf แต่เรายึดตามข้อกำหนดทางเทคนิค

การส่งอีเมลและข้อผิดพลาด

ในการส่งอีเมล ฉันลองใช้ตัวเลือกต่างๆ มากมาย แต่สุดท้ายฉันก็เลือกสิ่งต่อไปนี้ ฉันลงทะเบียนกล่องจดหมายบนยานเดกซ์แล้วเอาไป นี่คือตัวอย่างการส่งจดหมาย. ฉันตรวจสอบและนำไปใช้ในโปรแกรมแล้ว ตัวอย่างนี้ตรวจสอบตัวเลือกต่างๆ รวมถึงการส่งจาก Gmail เป็นต้น ฉันไม่อยากยุ่งยากกับการตั้งค่าเมลเซิร์ฟเวอร์ของฉันและไม่มีเวลาสำหรับมัน แต่เมื่อปรากฏทีหลัง มันก็ไร้ผลเช่นกัน

บันทึกถูกส่งตามกำหนดการ หากมีการเชื่อมต่อทุก 6 ชั่วโมง: เวลา 00 น., 06 น., 12 น. และ 18 น. ส่งแล้วครับตามนี้ครับ.

from send_email import *
...
message_log = "Логи тестирования платы №1"
EmailForSend = ["[email protected]", "[email protected]"]
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 โดยอัตโนมัติ

เซิร์ฟเวอร์คำติชม

เพื่อให้สามารถเข้าถึงชิ้นส่วนฮาร์ดแวร์ระยะไกลและสามารถปรับแต่งและกำหนดค่าใหม่ได้ ฉันจำเป็นต้องมีเซิร์ฟเวอร์ภายนอก โดยทั่วไป หากพูดตามตรงแล้ว การส่งข้อมูลทั้งหมดไปยังเซิร์ฟเวอร์และสร้างกราฟที่สวยงามทั้งหมดในอินเทอร์เฟซเว็บถือเป็นเรื่องที่ถูกต้อง แต่ไม่ใช่ทั้งหมดในคราวเดียว

สำหรับ VPS ฉันเลือก ruvds.com. คุณสามารถใช้เซิร์ฟเวอร์ที่ง่ายที่สุด และโดยทั่วไปแล้ว สำหรับจุดประสงค์ของฉัน แค่นี้ก็เพียงพอแล้ว แต่เนื่องจากฉันไม่ได้จ่ายค่าเซิร์ฟเวอร์ด้วยเงินของตัวเอง ฉันจึงตัดสินใจใช้เงินสำรองเล็กน้อยเพื่อที่จะเพียงพอหากเราปรับใช้เว็บอินเตอร์เฟส เซิร์ฟเวอร์ SMTP ของเราเอง VPN ฯลฯ นอกจากนี้ยังสามารถตั้งค่าบอท Telegram และไม่มีปัญหาในการบล็อคอีกด้วย ดังนั้นฉันจึงเลือกอัมสเตอร์ดัมและพารามิเตอร์ต่อไปนี้

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ในฐานะที่เป็นวิธีการสื่อสารกับฮาร์ดแวร์ vim2 เลือกการเชื่อมต่อ Reverse ssh และดังที่แสดงให้เห็นแล้วในทางปฏิบัติ มันไม่ใช่วิธีที่ดีที่สุด หากการเชื่อมต่อขาดหายไป เซิร์ฟเวอร์จะยึดพอร์ตไว้และไม่สามารถเชื่อมต่อผ่านพอร์ตนั้นได้ระยะหนึ่ง ดังนั้นจึงเป็นการดีกว่าหากใช้วิธีการสื่อสารอื่น เช่น VPN ในอนาคตฉันต้องการเปลี่ยนมาใช้ VPN แต่ไม่มีเวลา

ฉันจะไม่ลงรายละเอียดเกี่ยวกับการตั้งค่าไฟร์วอลล์ การจำกัดสิทธิ์ การปิดใช้งานการเชื่อมต่อ root ssh และความจริงอื่นๆ ในการตั้งค่า VPS ฉันอยากจะเชื่อว่าคุณรู้ทุกอย่างแล้ว สำหรับการเชื่อมต่อระยะไกล ฉันสร้างผู้ใช้ใหม่บนเซิร์ฟเวอร์

adduser vimssh

ฉันสร้างคีย์การเชื่อมต่อ ssh บนฮาร์ดแวร์ของเรา

ssh-keygen

และฉันก็คัดลอกมันไปยังเซิร์ฟเวอร์ของเรา

ssh-copy-id [email protected]

บนฮาร์ดแวร์ของเรา ฉันสร้างการเชื่อมต่อ Reverse 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 [email protected]
RestartSec=5
Restart=always
[Install] WantedBy=multi-user.target

ให้ความสนใจกับพอร์ต 8083: จะกำหนดพอร์ตที่ฉันจะใช้เชื่อมต่อผ่าน Reverse ssh เพิ่มลงในการเริ่มต้นและเริ่มต้น

sudo systemctl enable autossh.service
sudo systemctl start autossh.service

คุณสามารถดูสถานะได้:

sudo systemctl status autossh.service

ตอนนี้บนเซิร์ฟเวอร์ VPS ของเรา ถ้าเรารัน:

ssh -p 8083 khadas@localhost

จากนั้นฉันก็ไปที่ชิ้นส่วนทดสอบฮาร์ดแวร์ของฉัน และจากฮาร์ดแวร์ ฉันยังสามารถส่งบันทึกและข้อมูลใดๆ ผ่าน ssh ไปยังเซิร์ฟเวอร์ของฉันได้ ซึ่งสะดวกมาก

ใส่ทั้งหมดเข้าด้วยกัน

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว
เมื่อเปิดเครื่อง มาเริ่มการพัฒนาและแก้ไขจุดบกพร่องกันดีกว่า

วุ้ย แค่นั้นแหละ ฉันอธิบายโหนดทั้งหมดแล้ว ตอนนี้ก็ถึงเวลาที่จะรวบรวมมันทั้งหมดเข้าด้วยกัน คุณสามารถดูรหัส ตรงนี้.

จุดสำคัญเกี่ยวกับโค้ด: โปรเจ็กต์นี้อาจไม่เริ่มต้นเช่นนี้ เนื่องจากได้รับการออกแบบมาสำหรับงานเฉพาะของสถาปัตยกรรมเฉพาะ แม้ว่าฉันจะให้ซอร์สโค้ด แต่ฉันก็ยังคงอธิบายสิ่งที่มีค่าที่สุดที่นี่ในข้อความ ไม่เช่นนั้นจะไม่สามารถเข้าใจได้อย่างสมบูรณ์

ในตอนแรก ฉันเริ่มต้น 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)

ส่วนที่ยากที่สุดของโปรเจ็กต์นี้คือการรักษาการเชื่อมต่อ Reverse 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 ไปยังอินเทอร์เฟซนี้ (หากยังไม่ได้ดำเนินการ) ส่งข้อผิดพลาดไปยังเซิร์ฟเวอร์หากถึงเวลา ส่งบันทึก และสุดท้ายเรียกใช้การทดสอบความเร็วและบันทึกบันทึกลงในไฟล์ 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()
#и далее тестируем скорость и сохраняем логи. 

เป็นมูลค่าการกล่าวขวัญถึงฟังก์ชั่นการตั้งค่า Reverse 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 ซึ่งฉันดำเนินการเป็นเวลาหลายวัน

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ที่นี่ฉันใช้เซิร์ฟเวอร์การวัดแบบไดนามิก การวัดความเร็วใช้งานได้ แต่มีความผันผวนมาก แต่ค่าเฉลี่ยบางส่วนยังคงมองเห็นได้ และสามารถรับได้โดยการกรองข้อมูล เช่น ด้วยค่าเฉลี่ยเคลื่อนที่

ต่อมา ฉันได้สร้างกราฟจำนวนหนึ่งสำหรับผู้ให้บริการโทรคมนาคมรายอื่นๆ ในกรณีนี้ มีเซิร์ฟเวอร์ทดสอบอยู่แล้วหนึ่งเซิร์ฟเวอร์ และผลลัพธ์ก็น่าสนใจมากเช่นกัน

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

อย่างที่คุณเห็น หัวข้อนี้ครอบคลุมมากสำหรับการวิจัยและการประมวลผลข้อมูลนี้ และเห็นได้ชัดว่าไม่ได้ใช้เวลาทำงานสองสามสัปดาห์ แต่…

ผลลัพธ์ของการทำงาน

งานเสร็จสมบูรณ์กะทันหันเนื่องจากสถานการณ์ที่อยู่นอกเหนือการควบคุมของฉัน ในความเห็นส่วนตัวของฉัน จุดอ่อนประการหนึ่งของโครงการนี้คือโมเด็มซึ่งไม่ต้องการทำงานพร้อมกันกับโมเด็มอื่น ๆ และทำเทคนิคดังกล่าวทุกครั้งที่โหลด เพื่อวัตถุประสงค์เหล่านี้ มีโมเด็มรุ่นอื่น ๆ จำนวนมาก โดยปกติแล้วจะอยู่ในรูปแบบ Mini PCI-e อยู่แล้วและติดตั้งภายในอุปกรณ์และกำหนดค่าได้ง่ายกว่ามาก แต่นั่นเป็นเรื่องราวที่แตกต่างไปจากเดิมอย่างสิ้นเชิง โครงการนี้น่าสนใจและฉันดีใจมากที่ได้เข้าร่วมโครงการนี้

ทดสอบความเร็วพร้อมกันบนโมเด็ม LTE หลายตัว

ที่มา: will.com

เพิ่มความคิดเห็น