mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 09:41:19 +00:00
Mqtt_To_Http : Done for SmartGarden & SmartPrinter + Update Service avec SmartGardenMessage
This commit is contained in:
parent
144c74d7cc
commit
b21572f372
Binary file not shown.
Binary file not shown.
@ -26,23 +26,47 @@ namespace MyCore.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieve all SmartPrinterMessage
|
/// Retrieve all SmartPrinterMessage
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpGet]
|
[HttpGet("smartprinter/{idDevice}")]
|
||||||
public ActionResult<List<SmartPrinterMessage>> Get(int id)
|
public ActionResult<List<SmartPrinterMessage>> GetSmartPrinterMessages(int id)
|
||||||
{
|
{
|
||||||
return _ioTDeviceService.Get();
|
return _ioTDeviceService.GetSmartPrinterMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
// POST: IOT/Create
|
// POST: IOT/Create
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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!)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("{idDevice}")]
|
[HttpPost("smartprinter/{idDevice}")]
|
||||||
public IActionResult PostToDB(int idDevice, [FromBody] SmartPrinterMessage[] content)
|
public IActionResult PostToDBPrinter(int idDevice, [FromBody] SmartPrinterMessage[] content)
|
||||||
|
{
|
||||||
|
if(idDevice == 0)
|
||||||
{
|
{
|
||||||
if(idDevice == 0) {
|
|
||||||
|
|
||||||
foreach (SmartPrinterMessage message in content) {
|
foreach (SmartPrinterMessage message in content) {
|
||||||
_ioTDeviceService.Create(message);
|
message.Type = "SmartPrinter";
|
||||||
|
_ioTDeviceService.CreateSmartPrinterMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StatusCode(201);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StatusCode(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: IOT/Create
|
||||||
|
/// <summary>
|
||||||
|
/// It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||||
|
/// </summary>
|
||||||
|
[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);
|
return StatusCode(201);
|
||||||
|
|||||||
37
MyCore/Models/SmartGardenMessage.cs
Normal file
37
MyCore/Models/SmartGardenMessage.cs
Normal file
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,6 +13,9 @@ namespace MyCore.Models
|
|||||||
[BsonRepresentation(BsonType.ObjectId)]
|
[BsonRepresentation(BsonType.ObjectId)]
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Type")]
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
[BsonElement("Time")]
|
[BsonElement("Time")]
|
||||||
public string Time { get; set; }
|
public string Time { get; set; }
|
||||||
|
|
||||||
|
|||||||
@ -13,30 +13,48 @@ namespace MyCore.Services
|
|||||||
public class IoTDeviceService
|
public class IoTDeviceService
|
||||||
{
|
{
|
||||||
private readonly IMongoCollection<SmartPrinterMessage> _SmartPrinterMessages;
|
private readonly IMongoCollection<SmartPrinterMessage> _SmartPrinterMessages;
|
||||||
|
private readonly IMongoCollection<SmartGardenMessage> _SmartGardenMessages;
|
||||||
|
|
||||||
public IoTDeviceService(IConfiguration config)
|
public IoTDeviceService(IConfiguration config)
|
||||||
{
|
{
|
||||||
var client = new MongoClient(config.GetConnectionString("MyCoreDb"));
|
var client = new MongoClient(config.GetConnectionString("MyCoreDb"));
|
||||||
var database = client.GetDatabase("MyCoreDb");
|
var database = client.GetDatabase("MyCoreDb");
|
||||||
_SmartPrinterMessages = database.GetCollection<SmartPrinterMessage> ("IoTDevices");
|
_SmartPrinterMessages = database.GetCollection<SmartPrinterMessage> ("IoTDevices");
|
||||||
|
_SmartGardenMessages = database.GetCollection<SmartGardenMessage>("IoTDevices");
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SmartPrinterMessage> Get()
|
public List<SmartPrinterMessage> GetSmartPrinterMessages()
|
||||||
{
|
{
|
||||||
return _SmartPrinterMessages.Find(m => true).ToList();
|
return _SmartPrinterMessages.Find(m => true).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SmartPrinterMessage Get(string id)
|
public SmartPrinterMessage GetSmartPrinterMessage(string id)
|
||||||
{
|
{
|
||||||
return _SmartPrinterMessages.Find<SmartPrinterMessage>(m => m.Id == id).FirstOrDefault();
|
return _SmartPrinterMessages.Find<SmartPrinterMessage>(m => m.Id == id).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SmartPrinterMessage Create(SmartPrinterMessage message)
|
public SmartPrinterMessage CreateSmartPrinterMessage(SmartPrinterMessage message)
|
||||||
{
|
{
|
||||||
_SmartPrinterMessages.InsertOne(message);
|
_SmartPrinterMessages.InsertOne(message);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<SmartGardenMessage> GetSmartGardenMessages()
|
||||||
|
{
|
||||||
|
return _SmartGardenMessages.Find(m => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SmartGardenMessage GetSmartGardenMessage(string id)
|
||||||
|
{
|
||||||
|
return _SmartGardenMessages.Find<SmartGardenMessage>(m => m.Id == id).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SmartGardenMessage CreateSmartGardenMessage(SmartGardenMessage message)
|
||||||
|
{
|
||||||
|
_SmartGardenMessages.InsertOne(message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
/*public void Update(string id, Book bookIn)
|
/*public void Update(string id, Book bookIn)
|
||||||
{
|
{
|
||||||
_books.ReplaceOne(book => book.Id == id, bookIn);
|
_books.ReplaceOne(book => book.Id == id, bookIn);
|
||||||
|
|||||||
@ -4,12 +4,17 @@
|
|||||||
<name>MyCore</name>
|
<name>MyCore</name>
|
||||||
</assembly>
|
</assembly>
|
||||||
<members>
|
<members>
|
||||||
<member name="M:MyCore.Controllers.IOTController.Get(System.Int32)">
|
<member name="M:MyCore.Controllers.IOTController.GetSmartPrinterMessages(System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
Retrieve all SmartPrinterMessage
|
Retrieve all SmartPrinterMessage
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MyCore.Controllers.IOTController.PostToDB(System.Int32,MyCore.Models.SmartPrinterMessage[])">
|
<member name="M:MyCore.Controllers.IOTController.PostToDBPrinter(System.Int32,MyCore.Models.SmartPrinterMessage[])">
|
||||||
|
<summary>
|
||||||
|
It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:MyCore.Controllers.IOTController.PostToDBSmartGarden(System.Int32,MyCore.Models.SmartGardenMessage[])">
|
||||||
<summary>
|
<summary>
|
||||||
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!)
|
||||||
</summary>
|
</summary>
|
||||||
|
|||||||
@ -4,12 +4,17 @@
|
|||||||
<name>MyCore</name>
|
<name>MyCore</name>
|
||||||
</assembly>
|
</assembly>
|
||||||
<members>
|
<members>
|
||||||
<member name="M:MyCore.Controllers.IOTController.Get(System.Int32)">
|
<member name="M:MyCore.Controllers.IOTController.GetSmartPrinterMessages(System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
Retrieve all SmartPrinterMessage
|
Retrieve all SmartPrinterMessage
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:MyCore.Controllers.IOTController.PostToDB(System.Int32,MyCore.Models.SmartPrinterMessage[])">
|
<member name="M:MyCore.Controllers.IOTController.PostToDBPrinter(System.Int32,MyCore.Models.SmartPrinterMessage[])">
|
||||||
|
<summary>
|
||||||
|
It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:MyCore.Controllers.IOTController.PostToDBSmartGarden(System.Int32,MyCore.Models.SmartGardenMessage[])">
|
||||||
<summary>
|
<summary>
|
||||||
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!)
|
||||||
</summary>
|
</summary>
|
||||||
|
|||||||
@ -12,11 +12,13 @@ broker="localhost"
|
|||||||
#password="lEyZb90q49Rf"
|
#password="lEyZb90q49Rf"
|
||||||
|
|
||||||
# defining the api-endpoint
|
# 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
|
delay = 5000
|
||||||
|
|
||||||
bufferJsonPrinter = []
|
bufferJsonPrinter = []
|
||||||
|
bufferJsonSmartGarden = []
|
||||||
headersVar = {}
|
headersVar = {}
|
||||||
|
|
||||||
def getToken():
|
def getToken():
|
||||||
@ -34,6 +36,7 @@ def getToken():
|
|||||||
def on_message(mosq, obj, msg):
|
def on_message(mosq, obj, msg):
|
||||||
print("Topic = " + msg.topic)
|
print("Topic = " + msg.topic)
|
||||||
global bufferJsonPrinter
|
global bufferJsonPrinter
|
||||||
|
global bufferJsonSmartGarden
|
||||||
global headers
|
global headers
|
||||||
|
|
||||||
if msg.topic == '3DPrinterSensors' :
|
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 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
|
# Add Verification on token.. if status code == 401 forbidden then get token and call again the service
|
||||||
validData = False;
|
validDataPrinter = False;
|
||||||
|
|
||||||
try :
|
try :
|
||||||
msgPayload = '{"Time":"'+ str(datetime.datetime.now()) + '",'+ msgPayload[1:]
|
msgPayload = '{"Time":"'+ str(datetime.datetime.now()) + '",'+ msgPayload[1:]
|
||||||
@ -51,21 +54,18 @@ def on_message(mosq, obj, msg):
|
|||||||
#item_dict = json.loads(bufferJsonPrinter)
|
#item_dict = json.loads(bufferJsonPrinter)
|
||||||
#print("BufferJsonPrinter= " + json.dumps(bufferJsonPrinter))
|
#print("BufferJsonPrinter= " + json.dumps(bufferJsonPrinter))
|
||||||
print("3DPrinterMessage = NumberOfElement already collected : " + str(len(bufferJsonPrinter)))
|
print("3DPrinterMessage = NumberOfElement already collected : " + str(len(bufferJsonPrinter)))
|
||||||
validData = True;
|
validDataPrinter = True;
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
print("3DPrinterMessage = Got an error in parsing message")
|
print("3DPrinterMessage = Got an error in parsing message")
|
||||||
|
|
||||||
if validData and len(bufferJsonPrinter) == 10:
|
if validDataPrinter and len(bufferJsonPrinter) == 10:
|
||||||
print("I'm in !")
|
print("I'm in !")
|
||||||
# Request
|
# 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}])
|
#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:
|
try:
|
||||||
jsonData = bufferJsonPrinter
|
printerRequest = requests.post(API_ENDPOINT_SmartPrinter + "0",data=str(bufferJsonPrinter).replace("'",""), headers=headersVar)
|
||||||
#print('jsonData1 : ' + jsonData1)
|
|
||||||
#print('jsonData : ' + str(jsonData).replace("'",""))
|
|
||||||
printerRequest = requests.post(API_ENDPOINT,data=str(jsonData).replace("'",""), headers=headersVar)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
print("3DPrinterMessage = error in post request")
|
print("3DPrinterMessage = error in post request")
|
||||||
@ -73,14 +73,13 @@ def on_message(mosq, obj, msg):
|
|||||||
|
|
||||||
while printerRequest.status_code == 401:
|
while printerRequest.status_code == 401:
|
||||||
getToken()
|
getToken()
|
||||||
time.sleep(20)
|
time.sleep(30)
|
||||||
print("3DPrinterMessage = Forbidden error : Trying to send again the request with new token")
|
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_SmartPrinter + "0",data=str(bufferJsonPrinter).replace("'",""), headers=headersVar)
|
||||||
printerRequest = requests.post(API_ENDPOINT,data=bufferJsonPrinter["result"], headers=headersVar)
|
|
||||||
|
|
||||||
if printerRequest.status_code == 404:
|
if printerRequest.status_code == 404:
|
||||||
print("3DPrinterMessage = The server is unreachable (404)")
|
print("3DPrinterMessage = The server is unreachable (404)")
|
||||||
if printerRequest.status_code == 400:
|
elif printerRequest.status_code == 400:
|
||||||
print("3DPrinterMessage = Bad request (400)")
|
print("3DPrinterMessage = Bad request (400)")
|
||||||
elif printerRequest.status_code == 200 or printerRequest.status_code == 201:
|
elif printerRequest.status_code == 200 or printerRequest.status_code == 201:
|
||||||
print("3DPrinterMessage = I sent the infos ! Everything is ok :) !")
|
print("3DPrinterMessage = I sent the infos ! Everything is ok :) !")
|
||||||
@ -93,21 +92,50 @@ def on_message(mosq, obj, msg):
|
|||||||
#data = r.json()
|
#data = r.json()
|
||||||
|
|
||||||
elif msg.topic == 'SmartGarden' :
|
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
|
# Add increment and test = if data length >= 10, push to DB via Http
|
||||||
data = {'api_dev_key':'',
|
# Add Verification on token.. if status code == 401 forbidden then get token and call again the service
|
||||||
'api_option':'paste',
|
validDataSmartGarden = False;
|
||||||
'api_paste_code':source_code,
|
|
||||||
'api_paste_format':'python'}
|
|
||||||
|
|
||||||
|
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
|
if validDataSmartGarden and len(bufferJsonSmartGarden) == 10:
|
||||||
r = requests.post(url = API_ENDPOINT, data = data)
|
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")
|
||||||
|
|
||||||
# extracting response text
|
|
||||||
pastebin_url = r.text
|
|
||||||
print("The pastebin URL is:%s"%pastebin_url)
|
|
||||||
else:
|
else:
|
||||||
print("Unknown topic")
|
print("Unknown topic")
|
||||||
|
|
||||||
@ -116,15 +144,17 @@ def on_message(mosq, obj, msg):
|
|||||||
mqttc = mqtt.Client('Mqtt_To_Http_Interceptor')
|
mqttc = mqtt.Client('Mqtt_To_Http_Interceptor')
|
||||||
#mqttc.username_pw_set(username, password)
|
#mqttc.username_pw_set(username, password)
|
||||||
|
|
||||||
|
print("connecting to broker : ",broker)
|
||||||
mqttc.connect(broker, 1883)
|
mqttc.connect(broker, 1883)
|
||||||
|
|
||||||
TOKEN_URL = 'http://192.168.0.17:3000/api/token?username=Thomas&password=MonsieurMagic'
|
TOKEN_URL = 'http://192.168.0.17:3000/api/token?username=Thomas&password=MonsieurMagic'
|
||||||
|
|
||||||
|
print("trying to retrieve a token from server")
|
||||||
getToken()
|
getToken()
|
||||||
|
|
||||||
mqttc.on_message=on_message
|
mqttc.on_message=on_message
|
||||||
#####
|
#####
|
||||||
print("connecting to broker ",broker)
|
|
||||||
mqttc.loop_start() #start loop to process received messages
|
mqttc.loop_start() #start loop to process received messages
|
||||||
print("subscribing ")
|
print("subscribing ")
|
||||||
mqttc.subscribe("SmartGarden")#subscribe
|
mqttc.subscribe("SmartGarden")#subscribe
|
||||||
|
|||||||
@ -240,8 +240,8 @@ try:
|
|||||||
#print ("Temperature : ", temperature, "C")
|
#print ("Temperature : ", temperature, "C")
|
||||||
#print ("Pressure : ", pressure, "hPa")
|
#print ("Pressure : ", pressure, "hPa")
|
||||||
#print ("Humidity : ", humidity, "%")
|
#print ("Humidity : ", humidity, "%")
|
||||||
# Pause for ten seconds.
|
# Pause for one minute.
|
||||||
time.sleep(10)
|
time.sleep(60)
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
# here you put any code you want to run before the program
|
# here you put any code you want to run before the program
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user