Last active 1505425999

A script for getting connection statistics from a Vivid Wireless-supplied Huawei B315s-607. Other models may have a similar feature.

output.txt Raw
1$ python3 usage.py
2Current Connect Time: 23:52:44
3Current Upload: 930.35MB
4Current Download: 30.65GB
5Current Download Rate: 610.00KB/s
6Current Upload Rate: 6.35MB/s
7Total Upload: 934.36MB
8Total Download: 30.67GB
9Total Connect Time: 01:26:02
10
11
12$ python3 usage.py -v
13<?xml version="1.0" encoding="UTF-8"?>
14<response>
15<CurrentConnectTime>85966</CurrentConnectTime>
16<CurrentUpload>930354382</CurrentUpload>
17<CurrentDownload>30646273305</CurrentDownload>
18<CurrentDownloadRate>71276</CurrentDownloadRate>
19<CurrentUploadRate>2555</CurrentUploadRate>
20<TotalUpload>934367315</TotalUpload>
21<TotalDownload>30672352534</TotalDownload>
22<TotalConnectTime>87964</TotalConnectTime>
23<showtraffic>1</showtraffic>
24</response>
25
26Current Connect Time: 23:52:46
27Current Upload: 930.35MB
28Current Download: 30.65GB
29Current Download Rate: 71.28MB/s
30Current Upload Rate: 2.56MB/s
31Total Upload: 934.37MB
32Total Download: 30.67GB
33Total Connect Time: 01:26:04
vivid-huawei.py Raw
1#!/usr/bin/env python3
2import requests
3from xml.etree import ElementTree
4from sys import argv
5
6ROUTER_IP = "192.168.0.1"
7
8def b2B(num_of_bytes, start=-1):
9 if type(num_of_bytes) not in (float, int):
10 num_of_bytes = float(num_of_bytes)
11 opts, i = "KMGTP", start
12 while num_of_bytes > 1000:
13 num_of_bytes = num_of_bytes / 1000
14 i += 1
15 return "{:.2f}{}B".format(num_of_bytes, opts[i])
16
17def hms(s):
18 m,s = divmod(s,60)
19 h,m = divmod(m,60)
20 d,h = divmod(h,24)
21 y,d = divmod(d,365)
22 return y,d,h,m,s
23
24def camel2sp(word):
25 return ''.join(map(lambda x: x if x.islower() else " "+x, word))
26
27i = requests.get("http://{}/html/home.html".format(ROUTER_IP))
28d = requests.get("http://{}/api/monitoring/traffic-statistics".format(ROUTER_IP), headers={"Cookie": i.headers["Set-Cookie"]}).text
29if len(argv) > 1 and argv[1] == "-v": print(d)
30d = ElementTree.fromstring(d)
31for e in d:
32 if e.tag in ["CurrentConnectTime", "TotalConnectTime"]:
33 out = "{}: {}".format(camel2sp(e.tag), ":".join(str(x).zfill(2) for x in hms(int(e.text)) if x))
34 elif e.tag in ["CurrentUpload", "CurrentDownload", "TotalUpload", "TotalDownload"]:
35 out = "{}: {}".format(camel2sp(e.tag), b2B(e.text))
36 elif e.tag in ["CurrentUploadRate", "CurrentDownloadRate"]:
37 out = "{}: {}/s".format(camel2sp(e.tag), b2B(float(e.text), 0))
38 else:
39 continue
40 print(out.strip())