import psutil
import httplib
import urllib
Estas tres librerías son las que van a permitir realizar, tanto la lectura del consumo, como las peticiones HTTP necesarias para subir los datos a la red.A continuación, se debe realizar una conexión TCP al servidor deseado, por lo que se añade tanto la dirección del servidor como la definición de la conexión:
server = 'api.thingspeak.com'
connTCP = httplib.HTTPSConnection(server)
Write_apkey = 'GTXNVDI95SFSUDRQ'
Delete_apkey = 'KEJU9WAA6A7VQS2C'
Se pueden poner visualizaciones con print a modo de depuración, es decir, a la hora de ejecutar el código, se se ejecuta la linea print, significa que el programa hasta esa linea es correcto. Se realiza la conexión:print("Estableciendo conexion TCP..."),
connTCP.connect()
print("Conexion TCP establecida")
Una vez realizada la conexión, debemos establecer las reglas del diálogo con el servidor. Empleando la información obtenida del REST API, se incluyen aquellos campos necesarios, que son el formato y la llave de escritura de la que disponemos en nuestra pagina de ThingSpeak.En este código se puede ver el recurso DELETE, la URI relativa a la que apunta el programa, las cabeceras y el contenido del mensaje. Debido a que el contenido del mensaje es una librería Python que el servidor web puede no reconocer, se decodifica a json para realizar una petición que sí entienda.
La última línea sirve para añadir la longitud del mensaje en la librería de la cabecera.
methodC1 = "DELETE"
relative_uriC1 = "/channels/680589/feeds.json"
headersC1 = {'Host': server,
'Content-Type': 'application/x-www-form-urlencoded'}
payloadC1 = {'api_key': Delete_apkey}
payload_encodedC1 = urllib.urlencode(payloadC1)
headersC1['Content-Length'] = len(payload_encodedC1)
Para realizar la conexión y el envío de la petición, se emplea el código a continuación:connTCP.request(methodC1, relative_uriC1, body=payload_encodedC1,
headers=headersC1)
respuestaC1 = connTCP.getresponse()
statusC1 = respuestaC1.status
print(str(statusC1))
El comando STATUS nos va a devolver el resultado de la conexión, siendo 200 una petición correcta.Con esta petición, se ha solicitado el borrado del canal previo a la subida de los datos.
try:
while(True):
cpuPercent = psutil.cpu_percent(interval=15)
ramPercent = psutil.virtual_memory().percent
print("%CPU: " + str(cpuPercent)),
print("\t%RAM: " + str(ramPercent))
method = "POST"
relative_uri = "/update.json"
headers = {'Host' : server,
'Content-Type' :
'application/x-www-form-urlencoded'}
payload ={'api_key' : Write_apkey,
'field1': cpuPercent,
'field2': ramPercent}
payload_encoded = urllib.urlencode(payload)
headers['Content-Length'] = len(payload_encoded)
print("Enviando peticion HTTP..."),
connTCP.request(method, relative_uri, body=payload_encoded,
headers=headers)
print("Peticion enviada")
print("Esperando respuesta HTTP...")
respuesta = connTCP.getresponse()
status = respuesta.status
print(str(status))
except KeyboardInterrupt:
connTCP.close()
print("Se ha pulsado CTRL+C. Saliendo del programa")
EJERCICIO 2: Creación de un canal, subida de datos y borrado del canal al finalizar












