import requests
import json
requests.packages.urllib3.disable_warnings()
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import matplotlib.patches as mpatches

url = 'https://PUT YOUR GATEWAY IP/cgi-bin/gui.cgi?_=0.5773941713384309'
login = {"action":"set_system_user_login","args":{"name":"admin","password":"PUT YOUR PASSWORD"}}
logout = {"action":"set_system_user_logout","args":{}}
get_network = {"action":"get_network_connection_status","args":{}}
get_wwan = {"action":"get_wwan_network_internet_status","args":{}}

r=requests.post(url,verify=False,json=login)


fig, ax = plt.subplots()
xdata, yrsrp, yrsrq, ysnr, yrssi = [], [], [], [], []
lrsrp, = plt.plot([], [], 'r-', animated=True,label="RSRP")
lrsrq, = plt.plot([], [], 'g-', animated=True,label="RSRQ")
lsnr, = plt.plot([], [], 'y-', animated=True,label="SNR")
lrssi, = plt.plot([], [], 'b-', animated=True,label="RSSI")

legend = ax.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, shadow=True, ncol=4,mode="expand", borderaxespad=0.)

rsrp_text = ax.text(41,-100, '',backgroundcolor='k')
rsrq_text = ax.text(41,-10, '',backgroundcolor='k')
snr_text = ax.text(41,20, '',backgroundcolor='k')
rssi_text = ax.text(41,-70, '',backgroundcolor='k')

global xdata_filled
xdata_filled = False

def init():
    ax.set_xlim(0, 40)
    ax.set_ylim(-110, 30)
    ax.grid(b=True)
    return lrsrp,

def update(frame):
    global xdata_filled
    if frame == 40:
    	xdata_filled = True
    if not xdata_filled:
    	xdata.append(frame)
 
    


    r=requests.post(url,verify=False,json= get_wwan)
    j=json.loads(r.content)
    rsrp=j['get_wwan_network_internet_status']['lte']['rsrp']
    rsrq=j['get_wwan_network_internet_status']['lte']['rsrq']
    snr=j['get_wwan_network_internet_status']['lte']['snr']
    cqi=j['get_wwan_network_internet_status']['lte']['cqi']
    rssi=j['get_wwan_network_internet_status']['lte']['rssi']
    yrsrp.append(rsrp)
    yrsrq.append(rsrq)
    ysnr.append(snr)
    yrssi.append(rssi)
    lrsrp.set_data(xdata, yrsrp)
    lrsrq.set_data(xdata, yrsrq)
    lsnr.set_data(xdata, ysnr)
    lrssi.set_data(xdata, yrssi)
	
    rsrp_text.set_text(rsrp)
    #rsrp_text.set_y(rsrp)
    rsrq_text.set_text(rsrq)
    #rsrq_text.set_y(rsrq)
    snr_text.set_text(snr)
    #snr_text.set_y(snr)
    rssi_text.set_text(rssi)
    #rssi_text.set_y(rssi)
    
    rsrp_text.set_backgroundcolor("r")
    if rsrp > -99:
    	rsrp_text.set_backgroundcolor("y")
    if rsrp > -97:
    	rsrp_text.set_backgroundcolor("g")
    
    rsrq_text.set_backgroundcolor("r")
    if rsrq > -15:
    	rsrq_text.set_backgroundcolor("y")
    if rsrq > -12:
    	rsrq_text.set_backgroundcolor("g")

    snr_text.set_backgroundcolor("r")
    if snr > 10:
    	snr_text.set_backgroundcolor("y")
    if snr > 20:
    	snr_text.set_backgroundcolor("g")

    rssi_text.set_backgroundcolor("r")
    if rssi > -80:
    	rssi_text.set_backgroundcolor("y")
    if rssi > -66:
    	rssi_text.set_backgroundcolor("g")    

    if xdata_filled:
    	del yrsrp[0]
    	del yrsrq[0]
    	del ysnr[0]
    	del yrssi[0]

    
    
    print ("rsrp=",rsrp," rsrq=",rsrq," snr=",snr," rssi=",rssi," cqi=",cqi)

    return lrsrp, lrsrq, lsnr, lrssi, rsrp_text, rsrq_text, snr_text, rssi_text

ani = FuncAnimation(fig, update, frames=np.linspace(0,40, 512),
                    init_func=init, blit=True)
plt.show()