Internet Speedtest

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
BlackJack
Moderator
Beiträge: 32517
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Donnerstag 5. Januar 2017, 11:34

@Nr8: `subprocess`, `sys`, und `os` werden importiert, aber überhaupt nicht verwendet. Sowie der fast alles was mit dem *-Import aus `gps` importiert wird. Sternchen-Importe sind Böse™. Im besten Fall machen sie Programme schlechter nachvollziebar, im schlechteren Fall hat man Namenskollisionen.

`lat`, `lon`, und `speed` am Ende der Schleife an 0 zu binden hat keinen Effekt, weil diese Werte nie benutzt werden.

Ungetestet:
  1. #!/usr/bin/env python
  2. # coding: utf8
  3. from __future__ import absolute_import, division, print_function
  4. import time
  5. import urllib
  6. from datetime import datetime as DateTime
  7. from gps import gps, WATCH_ENABLE, WATCH_NEWSTYLE
  8.  
  9. SPEED_TEST_URL = 'http://www.speedtestx.de/testfiles/data_500mb.test'
  10.  
  11.  
  12. def get_latest_position(gps_session, previous_position):
  13.     position = previous_position
  14.     while gps_session.waiting():
  15.         data = next(gps_session)
  16.         if 'lat' in data:
  17.             position = (data['lat'], data['lon'], data['speed'])
  18.     return position
  19.  
  20.    
  21. def measure(url=SPEED_TEST_URL, intervall=2, size=10):
  22.     response = urllib.urlopen(url)
  23.     for _ in range(1):
  24.         time_start = time_end = time.time()
  25.         amount = 0
  26.  
  27.         while time_end - time_start < intervall:
  28.             bytes_read = len(response.read(size))
  29.             if not bytes_read:
  30.                 return
  31.             time_end = time.time()
  32.             amount += bytes_read
  33.         yield amount, time_end - time_start
  34.  
  35.  
  36. def main():
  37.     session = gps()
  38.     session.stream(WATCH_ENABLE | WATCH_NEWSTYLE)
  39.     try:
  40.         for amount, time_delta in measure(size=1000, intervall=2):
  41.             #
  42.             # FIXME Sehr wahrscheinlich soll hier nicht immer (0, 0, 0)
  43.             #   übergeben werden.
  44.             #
  45.             lat_lon_speed = get_latest_position(session, (0, 0, 0))
  46.             lat, lon, speed = lat_lon_speed
  47.             print(
  48.                 ';'.join(
  49.                     [
  50.                         format(DateTime.now(), '%H:%M:%S'),
  51.                         format(amount / time_delta / 1024, '.3f'),
  52.                         str(lat),
  53.                         str(lon),
  54.                         str(speed),
  55.                     ]
  56.                 )
  57.             )
  58.             time.sleep(2)
  59.     except (IndexError, IOError):
  60.         return
  61.  
  62.  
  63. if __name__ == '__main__':
  64.     main()
  65.  
“There are only two industries that refer to their customers as users.” — Edward Tufte
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 10. Januar 2017, 07:28

Vielen Dank!!!
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 10. Januar 2017, 14:39

Wenn ich das jetzt aus einem bash starte und in einer Dauerschleife laufen lasse bekomme ich nach einiger Zeit keine GPS-Daten mehr und sie GPS-Maus ist über lsusb nicht mehr sichtbar und der gesamte USB-Port ist bis zum reboot abgeschaltet.

Das Skript wird in der Dauerschleife ständig neu gestartet. Ist das der Fehler?
Benutzeravatar
noisefloor
User
Beiträge: 1681
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Internet Speedtest

Beitragvon noisefloor » Dienstag 10. Januar 2017, 15:44

Hallo,

Das Skript wird in der Dauerschleife ständig neu gestartet. Ist das der Fehler?

Wahrscheinlich / vermutlich: ja. Programmiertechnisch ist das aber so wie so nicht weiter sinnvoll - warum legst du die Schleife nicht in den Skript?

Gruß, noisefloor
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 11. Januar 2017, 07:23

Natürlich, danke für die Hilfe.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Freitag 13. Januar 2017, 07:52

Kann ich mir die Datenraten auch irgendwie in der def measure() berechnen lassen und in der main nur den Rückgabewert der Funktion erhalten?

Ich möchte wenn ich keinen Empfang habe nur die Positionsdaten und 0kbit/s ausgeben.
Habe es so probiert klappt irgendwie nicht.

  1. def internet_on():
  2.     try:
  3.                 url = socket.gethostbyname("www.speedtestx.de")
  4.                 s = socket.create_connection((url, 80), 2)
  5.                 return True
  6.         except:
  7.                 return False
  8.                
  9.                
  10. def measure(url= 'http://www.speedtestx.de/testfiles/data_500mb.test', intervall=2, size=10):
  11.         while True:      
  12.                 response = urllib.urlopen(url)
  13.                 internet = internet_on()
  14.                 for _ in range(2):
  15.                     time_start = time_end = time.time()
  16.                     amount = 0
  17.                     if internet == True:
  18.                             while time_end - time_start < intervall:
  19.                                     bytes_read = len(response.read(size))
  20.                                     if not bytes_read:
  21.                                             return
  22.                                     time_end = time.time()
  23.                                     amount += bytes_read
  24.                             yield amount, time_end - time_start
  25.                     elif internet == False:
  26.                             amount = 0
  27.                             time_end = 2
  28.                             time_start = 1
  29.                             time.sleep(1)
  30.                             yield amount, time_end -time_start
  31.    
Zuletzt geändert von BlackJack am Freitag 13. Januar 2017, 12:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Samstag 14. Januar 2017, 09:37

@Nr8: Deine Einrückung ist kaputt. Außerdem wird immer mit 4 Leerzeichen pro Ebene eingerückt. Nackte excepts sind böse, weil so auch Tippfehler bei Variablennamen überdeckt werden und Du nur sehr schwer Fehler entdecken kannst. Überleg Dir genau, welche Fehler auftreten können und wie Du mit diesen umgehen willst. Was soll diese Funktion internet_on überhaupt bewirken? Eine Zeile davor versuchst Du mit urlopen die selbe Seite zu erreichen, sollte es da kein Internet geben, fliegst Du sowieso mit einem IOError aus der Funktion raus. Das einfachste wäre wohl, den Speed-Test in einem eigenen Thread laufen zu lassen.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 17. Januar 2017, 08:10

Hab das jetzt so geändert:

  1. def measure(url= 'http://www.speedtestx.de/testfiles/data_500mb.test', intervall=2, size=10):
  2.         while True:
  3.                 try:
  4.                         response = urllib.urlopen(url)
  5.                         for _ in range(1):
  6.                                 time_start = time_end = time.time()
  7.                                 amount = 0
  8.                                 while time_end - time_start < intervall:
  9.                                         bytes_read = len(response.read(size))
  10.                                         if not bytes_read:
  11.                                                 return
  12.                                         time_end = time.time()
  13.                                         amount += bytes_read
  14.                          
  15.                 except:
  16.                         subprocess.call("./Verbindungsaufbau1")
  17.                         amount = 0
  18.                         time_end = 2
  19.                         time_start = 1
  20.                         time.sleep(1)
  21.                 yield amount, time_end -time_start
Benutzeravatar
BlackJack
Moderator
Beiträge: 32517
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Dienstag 17. Januar 2017, 09:36

@Nr8: Ein nacktes ``except:`` ohne konkrete Ausnahme(n) ist keine gute Idee. Man behandelt nur Ausnahmen die man auch erwartet, denn sonst weiss man ja gar nicht, ob die Behandlung überhaupt zur Ausnahme passt und hat auch eine Chance Ausnahmen mitzubekommen mit denen man nicht gerechnet hat.

Was ist der Sinn der ``for``-Schleife in dieser Funktion?
“There are only two industries that refer to their customers as users.” — Edward Tufte
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 17. Januar 2017, 10:42

Also so besser???

  1.     def measure(url= 'http://www.speedtestx.de/testfiles/data_500mb.test', intervall=2, size=10):
  2.             while True:
  3.                     try:
  4.                             response = urllib.urlopen(url)
  5.                             time_start = time_end = time.time()
  6.                             amount = 0
  7.                             while time_end - time_start < intervall:
  8.                                         bytes_read = len(response.read(size))
  9.                                         if not bytes_read:
  10.                                                 return
  11.                                         time_end = time.time()
  12.                                         amount += bytes_read
  13.                              
  14.                     except IOError:
  15.                             subprocess.call("./Verbindungsaufbau1")
  16.                             amount = 0
  17.                             time_end = 2
  18.                             time_start = 1
  19.                             time.sleep(1)
  20.                     yield amount, time_end -time_start
  21.  
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Donnerstag 19. Januar 2017, 07:11

Hallo!

Wie kann ich die Ausgabe von Print zusätzlich in eine Datei schreiben???

  1.            
  2.             print(
  3.                 ';'.join(
  4.                     [
  5.                         format(DateTime.now(), '%H:%M:%S'),
  6.                         format(amount / time_delta / 1024, '.3f'),
  7.                         str(lat),
  8.                         str(lon),
  9.                         str(speed),
  10.                     ]
  11.                 )
  12.             )
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Donnerstag 19. Januar 2017, 07:57

Hab es schon.


:D
Danke!
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Montag 23. Januar 2017, 09:35

Hallo!

Ich hab mal wieder eine Frage.
Ich habe folgenden Code und die Ausgabe wechselt leider nur von LTE auf WCDMA aber nicht mehr auf LTE.

Kann es sein, dass der Port das blockiert?
wenn ich es mit bash über

sudo cat /dev/ttyUSB1 | grep HCSQ &

while true
do
sudo echo "AT^HCSQ?" > /dev/ttyUSB1
sleep 2
done

mache geht es.



  1. usb = serial.Serial()
  2. usb.port = "/dev/ttyUSB1"
  3. usb.baudrate = 9600
  4. usb.bytesize = serial.EIGHTBITS
  5. usb.parity = serial.PARITY_NONE
  6. usb.stopbits = serial.STOPBITS_ONE
  7. usb.timeout = 0            
  8. usb.xonxoff = False    
  9. usb.rtscts = False    
  10. usb.dsrdtr = False      
  11. usb.writeTimeout = 2
  12.  
  13.  
  14.  
  15. def doSignal():
  16.         i =0
  17.     usb.flushInput()
  18.     usb.flushOutput()
  19.     zeilen = 0
  20.  
  21.     while True:
  22.                 usb.write("AT^HCSQ?\x0D")
  23.             time.sleep(2)
  24.         HCSQ = usb.readline()
  25.         zeilen = zeilen + 1
  26.  
  27.         if (zeilen >= 2):
  28.             break
  29.     a =  HCSQ.translate(None, ':')
  30.     a = a.translate(None, '^')
  31.     a = a.translate(None, '"')
  32.     a = a.translate(None, 'HCSQ')
  33.     a = a.translate(None, '\r\n')
  34.     b = a.split(",")
  35.     signalst = tuple(b)
  36.  
  37.     return signalst
  38.  
  39.  
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Montag 23. Januar 2017, 09:56

@Nr8: Deine Einrückung ist kaputt. Wenn Du etwas zwei mal machen willst, dann nimm eine for-Schleife. Bis Du Dir über das Zeile-Ende-Zeichen sicher? if braucht keine Klammern. .translate ist die falsche Methode um einen String zu parsen.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Montag 23. Januar 2017, 10:09

Das mit dem Einrücken ist nur hier passiert.

Was soll ich denn Anstelle von .translate verwenden?

Meinst du die for schleife für die while True: ?
Ich möchte es halt alle paar Sekunden abrufen

Zurück zu „Netzwerkprogrammierung“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder