From b21572f37200a67118ece2a29601bb32c57b9143 Mon Sep 17 00:00:00 2001 From: ThomasFransolet Date: Wed, 17 Apr 2019 23:11:23 +0200 Subject: [PATCH] Mqtt_To_Http : Done for SmartGarden & SmartPrinter + Update Service avec SmartGardenMessage --- .vs/MyCore/v15/Server/sqlite3/storage.ide-shm | Bin 32768 -> 32768 bytes .vs/MyCore/v15/Server/sqlite3/storage.ide-wal | Bin 4140632 -> 4140632 bytes MyCore/Controllers/IOTController.cs | 38 ++++++-- MyCore/Models/SmartGardenMessage.cs | 37 ++++++++ MyCore/Models/SmartPrinterMessage.cs | 3 + MyCore/Services/IoTDeviceService.cs | 24 ++++- MyCore/bin/Debug/netcoreapp2.1/MyCore.xml | 9 +- MyCore/obj/Debug/netcoreapp2.1/MyCore.xml | 9 +- RPI Code/Mqtt_To_Http/mqtt_to_http.py | 82 ++++++++++++------ RPI Code/SmartGarden/allInOne.py | 4 +- 10 files changed, 164 insertions(+), 42 deletions(-) create mode 100644 MyCore/Models/SmartGardenMessage.cs diff --git a/.vs/MyCore/v15/Server/sqlite3/storage.ide-shm b/.vs/MyCore/v15/Server/sqlite3/storage.ide-shm index 707a5086df2c85931a14a29d541c8eb978848e9b..2c9064cb2129bb7c76b3e9475c4a517db2d11308 100644 GIT binary patch literal 32768 zcmeI*1+bMx9|rK}d6w?x(%oDx-CZIj2uOEHiijXB3Q8jgD2lyrXQ zd^2Y}-yM3melY%bX79YSyYKG*{k^-hXWqHzya8td;Z4IlnLxCX4#+H^Yp+Q?hK5Z% z{nFt$O?skz(xB+WM~o^kBu~Igw*PPEo{XX_fzVa}hLA`0PC(ARg^W-$1oZgc& zc(S)Tv?t&89C+(ed9ttmS#{oXpLhO?jOjm~w|(&Vd@%)Us|uX~JF ziR*bWJnNpkE(7m9@E^zD`bEYFK964H9RD$1#qDLsc-r;(mp|z`d~?OWoqz1!IQ-}E z)7t&N@3S|?XT{*X4&Sv}yT2{W_`LU@FP`lP89j3>$dkRtfquun@~5qhkT&-2 zb>3Kg<9O${m6^f6aUS@uLGPOIem3=$`PPT;v!Z{UZ@qZy{L6!%Xb86PDp7=>6i_8ahj|dnybZH zsrA~b-8!IS`b8J?r~cAiJyvKJ(M5N0T_TslrE@_phs)=Rc)yHn=^qeqh=AybkEFhjIPT=GaSb1YO zo)bf$-?x<6!hRzK`e}&1*Cb8X9IengZP9)m)oJ~q>$;;*E`p2Z61wCrt;_E6I`6M+ zSuz0=c(y<|L`48nAsY&#EUKdkTA>|!U?4`~M=Zb^Y{Cv4#A#f>W!y(N#$ZCGW@hGP zah7K_HegG(=jZIpq5P3^xtzTlN*lCIdvs98bw};KH~_ zE`|$miCs#U-eq<8R_?QJnbn$r37CKhn1BhGfC-p@37CKhn1BhGz-to-k7$U8 z)X0t^D2Ezoiq`lPUtkbMVJa44EjD8(4&fL4hAVi0@QlesOv5b9#}a&x)!C4(*nvIR zkHa{X^SFW=xRty3GY|6w&+r2O;5FXjeL|rXK~WV;@swC8lvaVts$9yiA}Xmes-P;W zp}K0MW@@cZ^qIQq3-!@3{h(P|s*T#K6S}CIqKoX}xl}HTD_~EOUfW!-j!eJ=Ouz(8 zzy#hLfryBK1W1D%D2no^i4XA+I^auugE5$fMOcR|*p0(DgNwL^hls#fOw6>*%KR+J z3ar6KY|YR31^aV2r*S@4+JAz)Ik(p$F#!`WfhP)tLL|gQLL@_4WJFHnM=_Mbd#Hk1 zXnbt2#ygMg|QjHBuvh9 z%*bra$pS3QcUYPgS(!CihmH9mKVn;UWEXzPuQ-6;@H>v=bk5=eF6Jt(Y{gZ4B~%h6Q%a>) zI%QBMWmY!jP;TW_0TohF71uj@S7lXR6;(+esG4f3w(6;Y8mpL?;H z(jyN_;C<9ZCwzr(F&?w96#H-tH$1P>iOjf6#th8CLVTB%Ses4xF*~yt2XO>vauL^X z6Ss2@5AY~Y@mF5tW&XuGd`Ky*A}PA!D1nkHmC`Fn*_B5HRZOK+PVcL#YN@`OsD;|- zQ*}~jbyIhJt}oS7z0_9&HAurXN~1MFKWeIe(tIt@GOgAcZPIq_&^{f~VV%@j{i;j4 zqN}>4`+6X`ur8d7;$pg3F1}0RlDgC`gUjf$x?C=|E9i>3;`SWmiR;G-O~3?9zy#hl zfzXJISV)BANQXe=LID)VyQqK=qP zXMWqJ-Ww2a7{o>#q(CNQL2eX8X;eg2)IlS(KwET2KYWkLn2C8(1=cM*os7@sMb ziMd&nW%&W?u{qnZ8+&sIM{_opay_?jC-?CXkMkFv=kL7Ao4m)z45jdjqL>O$A|+QE zWmFdBR6Z3}36<7+s;ug&qlWrWt<+W>)I~k?l?H39rfHGZYL|}aysqhy!n-&wnakwz UIPcrlEt$Z}3ykHY5P3rRA11z$J^%m! delta 249 zcmZo@U}|V!s+V}A%K!qbK+MR%AixGB^qCkK?$rf7nh-4X@YM~mv=)Xkg(%x+6CW;a zIZ3K|u;D<01!(SnBmfm>XLti*Rmle!FsSviw-~2#AZv-a`C4v|woRha@ffcb%-c%4Yc_Htu$@dDCHZSB| V!#;UUWe|wLG`BXkXUyv`% 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 delta 68599 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 /// Retrieve all SmartPrinterMessage /// - [HttpGet] - public ActionResult> Get(int id) + [HttpGet("smartprinter/{idDevice}")] + public ActionResult> GetSmartPrinterMessages(int id) { - return _ioTDeviceService.Get(); + return _ioTDeviceService.GetSmartPrinterMessages(); } // POST: IOT/Create /// /// It's the method to post data from mqtt broker to Database (Thanks Rpi!) /// - [HttpPost("{idDevice}")] - public IActionResult PostToDB(int idDevice, [FromBody] SmartPrinterMessage[] content) + [HttpPost("smartprinter/{idDevice}")] + public IActionResult PostToDBPrinter(int idDevice, [FromBody] SmartPrinterMessage[] content) { - if(idDevice == 0) { + if(idDevice == 0) + { foreach (SmartPrinterMessage message in content) { - _ioTDeviceService.Create(message); + message.Type = "SmartPrinter"; + _ioTDeviceService.CreateSmartPrinterMessage(message); + } + + return StatusCode(201); + } + + return StatusCode(500); + } + + // POST: IOT/Create + /// + /// It's the method to post data from mqtt broker to Database (Thanks Rpi!) + /// + [HttpPost("smartgarden/{idDevice}")] + public IActionResult PostToDBSmartGarden(int idDevice, [FromBody] SmartGardenMessage[] content) + { + if (idDevice == 0) + { + + foreach (SmartGardenMessage message in content) + { + message.Type = "SmartGarden"; + _ioTDeviceService.CreateSmartGardenMessage(message); } return StatusCode(201); diff --git a/MyCore/Models/SmartGardenMessage.cs b/MyCore/Models/SmartGardenMessage.cs new file mode 100644 index 0000000..b393dde --- /dev/null +++ b/MyCore/Models/SmartGardenMessage.cs @@ -0,0 +1,37 @@ +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace MyCore.Models +{ + public class SmartGardenMessage + { + [BsonId] + [BsonRepresentation(BsonType.ObjectId)] + public string Id { get; set; } + + [BsonElement("Type")] + public string Type { get; set; } + + [BsonElement("Time")] + public string Time { get; set; } + + [BsonElement("Temperature")] + public double Temperature { get; set; } + + [BsonElement("Pressure")] + public double Pressure { get; set; } + + [BsonElement("Humidity")] + public double Humidity { get; set; } + + [BsonElement("Water")] + public int Water { get; set; } + + [BsonElement("Light")] + public int Light { get; set; } + } +} diff --git a/MyCore/Models/SmartPrinterMessage.cs b/MyCore/Models/SmartPrinterMessage.cs index e4a4071..5ab02a1 100644 --- a/MyCore/Models/SmartPrinterMessage.cs +++ b/MyCore/Models/SmartPrinterMessage.cs @@ -13,6 +13,9 @@ namespace MyCore.Models [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } + [BsonElement("Type")] + public string Type { get; set; } + [BsonElement("Time")] public string Time { get; set; } diff --git a/MyCore/Services/IoTDeviceService.cs b/MyCore/Services/IoTDeviceService.cs index 28ab946..0d6dffe 100644 --- a/MyCore/Services/IoTDeviceService.cs +++ b/MyCore/Services/IoTDeviceService.cs @@ -13,30 +13,48 @@ namespace MyCore.Services public class IoTDeviceService { private readonly IMongoCollection _SmartPrinterMessages; + private readonly IMongoCollection _SmartGardenMessages; public IoTDeviceService(IConfiguration config) { var client = new MongoClient(config.GetConnectionString("MyCoreDb")); var database = client.GetDatabase("MyCoreDb"); _SmartPrinterMessages = database.GetCollection ("IoTDevices"); + _SmartGardenMessages = database.GetCollection("IoTDevices"); } - public List Get() + public List GetSmartPrinterMessages() { return _SmartPrinterMessages.Find(m => true).ToList(); } - public SmartPrinterMessage Get(string id) + public SmartPrinterMessage GetSmartPrinterMessage(string id) { return _SmartPrinterMessages.Find(m => m.Id == id).FirstOrDefault(); } - public SmartPrinterMessage Create(SmartPrinterMessage message) + public SmartPrinterMessage CreateSmartPrinterMessage(SmartPrinterMessage message) { _SmartPrinterMessages.InsertOne(message); return message; } + public List GetSmartGardenMessages() + { + return _SmartGardenMessages.Find(m => true).ToList(); + } + + public SmartGardenMessage GetSmartGardenMessage(string id) + { + return _SmartGardenMessages.Find(m => m.Id == id).FirstOrDefault(); + } + + public SmartGardenMessage CreateSmartGardenMessage(SmartGardenMessage message) + { + _SmartGardenMessages.InsertOne(message); + return message; + } + /*public void Update(string id, Book bookIn) { _books.ReplaceOne(book => book.Id == id, bookIn); diff --git a/MyCore/bin/Debug/netcoreapp2.1/MyCore.xml b/MyCore/bin/Debug/netcoreapp2.1/MyCore.xml index 5e34a12..4399122 100644 --- a/MyCore/bin/Debug/netcoreapp2.1/MyCore.xml +++ b/MyCore/bin/Debug/netcoreapp2.1/MyCore.xml @@ -4,12 +4,17 @@ MyCore - + Retrieve all SmartPrinterMessage - + + + It's the method to post data from mqtt broker to Database (Thanks Rpi!) + + + It's the method to post data from mqtt broker to Database (Thanks Rpi!) diff --git a/MyCore/obj/Debug/netcoreapp2.1/MyCore.xml b/MyCore/obj/Debug/netcoreapp2.1/MyCore.xml index 5e34a12..4399122 100644 --- a/MyCore/obj/Debug/netcoreapp2.1/MyCore.xml +++ b/MyCore/obj/Debug/netcoreapp2.1/MyCore.xml @@ -4,12 +4,17 @@ MyCore - + Retrieve all SmartPrinterMessage - + + + It's the method to post data from mqtt broker to Database (Thanks Rpi!) + + + It's the method to post data from mqtt broker to Database (Thanks Rpi!) diff --git a/RPI Code/Mqtt_To_Http/mqtt_to_http.py b/RPI Code/Mqtt_To_Http/mqtt_to_http.py index c0af5d9..d9488a0 100644 --- a/RPI Code/Mqtt_To_Http/mqtt_to_http.py +++ b/RPI Code/Mqtt_To_Http/mqtt_to_http.py @@ -12,11 +12,13 @@ broker="localhost" #password="lEyZb90q49Rf" # defining the api-endpoint -API_ENDPOINT = 'http://192.168.0.17:3000/api/iot/0' +API_ENDPOINT_SmartPrinter = 'http://192.168.0.17:3000/api/iot/smartprinter/' +API_ENDPOINT_SmartGarden = 'http://192.168.0.17:3000/api/iot/smartgarden/' delay = 5000 bufferJsonPrinter = [] +bufferJsonSmartGarden = [] headersVar = {} def getToken(): @@ -34,6 +36,7 @@ def getToken(): def on_message(mosq, obj, msg): print("Topic = " + msg.topic) global bufferJsonPrinter + global bufferJsonSmartGarden global headers if msg.topic == '3DPrinterSensors' : @@ -42,7 +45,7 @@ def on_message(mosq, obj, msg): # 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; + validDataPrinter = False; try : msgPayload = '{"Time":"'+ str(datetime.datetime.now()) + '",'+ msgPayload[1:] @@ -51,21 +54,18 @@ def on_message(mosq, obj, msg): #item_dict = json.loads(bufferJsonPrinter) #print("BufferJsonPrinter= " + json.dumps(bufferJsonPrinter)) print("3DPrinterMessage = NumberOfElement already collected : " + str(len(bufferJsonPrinter))) - validData = True; + validDataPrinter = True; except Exception as e: print(e) print("3DPrinterMessage = Got an error in parsing message") - if validData and len(bufferJsonPrinter) == 10: + if validDataPrinter 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) + printerRequest = requests.post(API_ENDPOINT_SmartPrinter + "0",data=str(bufferJsonPrinter).replace("'",""), headers=headersVar) except Exception as e: print(e) print("3DPrinterMessage = error in post request") @@ -73,14 +73,13 @@ def on_message(mosq, obj, msg): while printerRequest.status_code == 401: getToken() - time.sleep(20) + time.sleep(30) 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) + printerRequest = requests.post(API_ENDPOINT_SmartPrinter + "0",data=str(bufferJsonPrinter).replace("'",""), headers=headersVar) if printerRequest.status_code == 404: print("3DPrinterMessage = The server is unreachable (404)") - if printerRequest.status_code == 400: + elif 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 :) !") @@ -93,21 +92,50 @@ def on_message(mosq, obj, msg): #data = r.json() elif msg.topic == 'SmartGarden' : - print(str(msg.payload, "utf-8")) + msgPayload = str(msg.payload, "utf-8") + print("SmartGardenMessage = PayLoad : " + msgPayload) - # data to be sent to api - data = {'api_dev_key':'', - 'api_option':'paste', - 'api_paste_code':source_code, - 'api_paste_format':'python'} - + # 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 + validDataSmartGarden = False; + + try : + msgPayload = '{"Time":"'+ str(datetime.datetime.now()) + '",'+ msgPayload[1:] + bufferJsonSmartGarden.append(msgPayload) + print("SmartGardenMessage = NumberOfElement already collected : " + str(len(bufferJsonSmartGarden))) + validDataSmartGarden = True; + except Exception as e: + print(e) + print("SmartGardenMessage = Got an error in parsing message") - # sending post request and saving response as response object - r = requests.post(url = API_ENDPOINT, data = data) - - # extracting response text - pastebin_url = r.text - print("The pastebin URL is:%s"%pastebin_url) + if validDataSmartGarden and len(bufferJsonSmartGarden) == 10: + print("I'm in !") + + try: + print(headersVar) + print("Request = " + str(bufferJsonSmartGarden).replace("'","")) + smartGardenRequest = requests.post(API_ENDPOINT_SmartGarden + "0",data=str(bufferJsonSmartGarden).replace("'",""), headers=headersVar) + except Exception as e: + print(e) + print("SmartGardenMessage = error in post request") + + while smartGardenRequest.status_code == 401: + getToken() + time.sleep(30) + print("SmartGardenMessage = Forbidden error : Trying to send again the request with new token") + smartGardenRequest = requests.post(API_ENDPOINT_SmartGarden + "0",data=str(bufferJsonSmartGarden).replace("'",""), headers=headersVar) + + if smartGardenRequest.status_code == 404: + print("SmartGardenMessage = The server is unreachable (404)") + elif smartGardenRequest.status_code == 400: + print("SmartGardenMessage = Bad request (400)") + elif smartGardenRequest.status_code == 200 or smartGardenRequest.status_code == 201: + print("SmartGardenMessage = I sent the infos ! Everything is ok :) !") + bufferJsonSmartGarden = [] + else: + print(str(smartGardenRequest.status_code)) + print("SmartGardenMessage = Unexpected Error : status code") + else: print("Unknown topic") @@ -116,15 +144,17 @@ def on_message(mosq, obj, msg): mqttc = mqtt.Client('Mqtt_To_Http_Interceptor') #mqttc.username_pw_set(username, password) +print("connecting to broker : ",broker) mqttc.connect(broker, 1883) TOKEN_URL = 'http://192.168.0.17:3000/api/token?username=Thomas&password=MonsieurMagic' +print("trying to retrieve a token from server") getToken() mqttc.on_message=on_message ##### -print("connecting to broker ",broker) + mqttc.loop_start() #start loop to process received messages print("subscribing ") mqttc.subscribe("SmartGarden")#subscribe diff --git a/RPI Code/SmartGarden/allInOne.py b/RPI Code/SmartGarden/allInOne.py index b0f1786..744608f 100644 --- a/RPI Code/SmartGarden/allInOne.py +++ b/RPI Code/SmartGarden/allInOne.py @@ -240,8 +240,8 @@ try: #print ("Temperature : ", temperature, "C") #print ("Pressure : ", pressure, "hPa") #print ("Humidity : ", humidity, "%") - # Pause for ten seconds. - time.sleep(10) + # Pause for one minute. + time.sleep(60) except KeyboardInterrupt: # here you put any code you want to run before the program