From 3a5f526b498d4a1d550ef96b7faa608936c46993 Mon Sep 17 00:00:00 2001 From: ThomasFransolet Date: Sun, 14 Apr 2019 23:07:57 +0200 Subject: [PATCH] WIP Mqtt_to_Http : 3DPrinterMessages DONE ! --- RPI Code/Mqtt_To_Http/mqtt_to_http.py | 99 +++++++++++++++++++++------ 1 file changed, 77 insertions(+), 22 deletions(-) diff --git a/RPI Code/Mqtt_To_Http/mqtt_to_http.py b/RPI Code/Mqtt_To_Http/mqtt_to_http.py index ca1a4bf..c0af5d9 100644 --- a/RPI Code/Mqtt_To_Http/mqtt_to_http.py +++ b/RPI Code/Mqtt_To_Http/mqtt_to_http.py @@ -4,7 +4,9 @@ import signal import time import json import paho.mqtt.client as mqtt +import datetime +# Init variables broker="localhost" #username="oilkfgjy" #password="lEyZb90q49Rf" @@ -14,36 +16,79 @@ API_ENDPOINT = 'http://192.168.0.17:3000/api/iot/0' delay = 5000 -mqttc = mqtt.Client('Mqtt_To_Http_Interceptor') -#mqttc.username_pw_set(username, password) +bufferJsonPrinter = [] +headersVar = {} -mqttc.connect(broker, 1883) - -TOKEN_URL = 'http://192.168.0.17:3000/api/token?username=Thomas&password=MonsieurMagic' - -r = requests.post(TOKEN_URL) - -if r.status_code == 200 : - token = r.text - print('we have a token!') - -hed = {'Authorization': "Bearer " + token +"f", 'Content-Type': "application/json"} -print(hed) +def getToken(): + r = requests.post(TOKEN_URL) + global headersVar + if r.status_code == 200 : + token = r.text + print('we have a token!') + headersVar = {'Authorization': "Bearer " + token, 'Content-Type': "application/json", 'Accept': "application/json"} + print(headersVar) + else : + print("Error in getToken function") + def on_message(mosq, obj, msg): - print(msg.topic) + print("Topic = " + msg.topic) + global bufferJsonPrinter + global headers if msg.topic == '3DPrinterSensors' : - print(str(msg.payload, "utf-8")) - print(API_ENDPOINT) + msgPayload = str(msg.payload, "utf-8") + print("3DPrinterMessage = PayLoad : " + msgPayload) + # Add increment and test = if data length >= 10, push to DB via Http # Add Verification on token.. if status code == 401 forbidden then get token and call again the service + validData = False; + + try : + msgPayload = '{"Time":"'+ str(datetime.datetime.now()) + '",'+ msgPayload[1:] + bufferJsonPrinter.append(msgPayload) + #print("bufferJsonPrinter= " + bufferJsonPrinter["result"]) + #item_dict = json.loads(bufferJsonPrinter) + #print("BufferJsonPrinter= " + json.dumps(bufferJsonPrinter)) + print("3DPrinterMessage = NumberOfElement already collected : " + str(len(bufferJsonPrinter))) + validData = True; + except Exception as e: + print(e) + print("3DPrinterMessage = Got an error in parsing message") - jsonData = json.dumps([{'Time': '14/04/19', 'Temperature': 26.5, 'Pressure': 1004.3, 'Smoke': 100}]) - anotherR = requests.post(API_ENDPOINT,data=jsonData, headers=hed) - print (anotherR.text) - print(anotherR.status_code) - + if validData and len(bufferJsonPrinter) == 10: + print("I'm in !") + # Request + #jsonData1 = json.dumps([{'Time': '14/04/19', 'Temperature': 26.5, 'Pressure': 1004.3, 'Smoke': 100},{'Time': '14/04/19', 'Temperature': 26.5, 'Pressure': 1004.3, 'Smoke': 100}]) + + try: + jsonData = bufferJsonPrinter + #print('jsonData1 : ' + jsonData1) + #print('jsonData : ' + str(jsonData).replace("'","")) + printerRequest = requests.post(API_ENDPOINT,data=str(jsonData).replace("'",""), headers=headersVar) + except Exception as e: + print(e) + print("3DPrinterMessage = error in post request") + + + while printerRequest.status_code == 401: + getToken() + time.sleep(20) + print("3DPrinterMessage = Forbidden error : Trying to send again the request with new token") + #jsonData = json.dumps([{'Time': '14/04/19', 'Temperature': 26.5, 'Pressure': 1004.3, 'Smoke': 100}]) + printerRequest = requests.post(API_ENDPOINT,data=bufferJsonPrinter["result"], headers=headersVar) + + if printerRequest.status_code == 404: + print("3DPrinterMessage = The server is unreachable (404)") + if printerRequest.status_code == 400: + print("3DPrinterMessage = Bad request (400)") + elif printerRequest.status_code == 200 or printerRequest.status_code == 201: + print("3DPrinterMessage = I sent the infos ! Everything is ok :) !") + bufferJsonPrinter = [] + else: + print(str(printerRequest.status_code)) + print("3DPrinterMessage = Unexpected Error : status code") + # Extracting data in json format #data = r.json() @@ -66,6 +111,16 @@ def on_message(mosq, obj, msg): else: print("Unknown topic") +########## MAIN CODE ########## + +mqttc = mqtt.Client('Mqtt_To_Http_Interceptor') +#mqttc.username_pw_set(username, password) + +mqttc.connect(broker, 1883) + +TOKEN_URL = 'http://192.168.0.17:3000/api/token?username=Thomas&password=MonsieurMagic' + +getToken() mqttc.on_message=on_message #####