If you can use an external python package: pip install netifaces.
With this package, you can test if the interface exists, and then test if you can get to google. This code is untested, but should get you very close.
import netifaces
import requests
ppp_exists = False
try:
netifaces.ifaddresses('ppp0') # this assumes that you only have one ppp instance running
ppp_exists = True
except:
ppp_exists = False
# you have an interface, now test if you have a connection
has_internet = False
if ppp_exists == True:
try:
r = requests.get('http://www.google.com', timeout=10) # timeout is necessary if you can't access the internet
if r.status_code == requests.codes.ok:
has_internet = True
else:
has_internet = False
except requests.exceptions.Timeout:
has_internet = False
if ppp_exists == True and has_internet == True:
# turn on LED with GPIO
pass
else:
# turn off LED with GPIO
pass
UPDATE
You can log the output of ifconfig to a text file using
os.system('ifconfig > name_of_file.txt')
You can then parse this anyway you like. Here's one way that also checks to make sure that the ppp interface exists.
import os
import netifaces
THE_FILE = './ifconfig.txt'
class pppParser(object):
"""
gets the details of the ifconfig command for ppp interface
"""
def __init__(self, the_file=THE_FILE, new_file=False):
"""
the_file is the path to the output of the ifconfig command
new_file is a boolean whether to run the os.system('ifconfig') command
"""
self.ppp_exists = False
try:
netifaces.ifaddresses('ppp0') # this assumes that you only have one ppp instance running
self.ppp_exists = True
except:
self.ppp_exists = False
if new_file:
open(the_file, 'w').close() # clears the contents of the file
os.system('sudo ifconfig > '+the_file)
self.ifconfig_text = ''
self.rx_bytes = 0
with open(the_file, 'rb') as in_file:
for x in in_file:
self.ifconfig_text += x
def get_rx_bytes(self):
"""
very basic text parser to gather the PPP interface data.
Assumption is that there is only one PPP interface
"""
if not self.ppp_exists:
return self.rx_bytes
ppp_text = self.ifconfig_text.split('ppp')[1]
self.rx_bytes = ppp_text.split('RX bytes:')[1].split(' ')[0]
return self.rx_bytes
Just call pppParser().get_rx_bytes()