mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 01:31: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>
|
||||
/// Retrieve all SmartPrinterMessage
|
||||
/// </summary>
|
||||
[HttpGet]
|
||||
public ActionResult<List<SmartPrinterMessage>> Get(int id)
|
||||
[HttpGet("smartprinter/{idDevice}")]
|
||||
public ActionResult<List<SmartPrinterMessage>> GetSmartPrinterMessages(int id)
|
||||
{
|
||||
return _ioTDeviceService.Get();
|
||||
return _ioTDeviceService.GetSmartPrinterMessages();
|
||||
}
|
||||
|
||||
// POST: IOT/Create
|
||||
/// <summary>
|
||||
/// It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||
/// </summary>
|
||||
[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
|
||||
/// <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);
|
||||
|
||||
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)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[BsonElement("Type")]
|
||||
public string Type { get; set; }
|
||||
|
||||
[BsonElement("Time")]
|
||||
public string Time { get; set; }
|
||||
|
||||
|
||||
@ -13,30 +13,48 @@ namespace MyCore.Services
|
||||
public class IoTDeviceService
|
||||
{
|
||||
private readonly IMongoCollection<SmartPrinterMessage> _SmartPrinterMessages;
|
||||
private readonly IMongoCollection<SmartGardenMessage> _SmartGardenMessages;
|
||||
|
||||
public IoTDeviceService(IConfiguration config)
|
||||
{
|
||||
var client = new MongoClient(config.GetConnectionString("MyCoreDb"));
|
||||
var database = client.GetDatabase("MyCoreDb");
|
||||
_SmartPrinterMessages = database.GetCollection<SmartPrinterMessage> ("IoTDevices");
|
||||
_SmartGardenMessages = database.GetCollection<SmartGardenMessage>("IoTDevices");
|
||||
}
|
||||
|
||||
public List<SmartPrinterMessage> Get()
|
||||
public List<SmartPrinterMessage> GetSmartPrinterMessages()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
public SmartPrinterMessage Create(SmartPrinterMessage message)
|
||||
public SmartPrinterMessage CreateSmartPrinterMessage(SmartPrinterMessage message)
|
||||
{
|
||||
_SmartPrinterMessages.InsertOne(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)
|
||||
{
|
||||
_books.ReplaceOne(book => book.Id == id, bookIn);
|
||||
|
||||
@ -4,12 +4,17 @@
|
||||
<name>MyCore</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:MyCore.Controllers.IOTController.Get(System.Int32)">
|
||||
<member name="M:MyCore.Controllers.IOTController.GetSmartPrinterMessages(System.Int32)">
|
||||
<summary>
|
||||
Retrieve all SmartPrinterMessage
|
||||
</summary>
|
||||
</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>
|
||||
It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||
</summary>
|
||||
|
||||
@ -4,12 +4,17 @@
|
||||
<name>MyCore</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:MyCore.Controllers.IOTController.Get(System.Int32)">
|
||||
<member name="M:MyCore.Controllers.IOTController.GetSmartPrinterMessages(System.Int32)">
|
||||
<summary>
|
||||
Retrieve all SmartPrinterMessage
|
||||
</summary>
|
||||
</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>
|
||||
It's the method to post data from mqtt broker to Database (Thanks Rpi!)
|
||||
</summary>
|
||||
|
||||
@ -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)
|
||||
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")
|
||||
|
||||
# extracting response text
|
||||
pastebin_url = r.text
|
||||
print("The pastebin URL is:%s"%pastebin_url)
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user