From c85047a57da0a79444beb92271c0a8206ef1fb1e Mon Sep 17 00:00:00 2001 From: Jeas0001 Date: Mon, 24 Mar 2025 12:03:33 +0100 Subject: [PATCH] Test --- backend/Api/MQTTReciever/MQTTReciever.cs | 81 ++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 backend/Api/MQTTReciever/MQTTReciever.cs diff --git a/backend/Api/MQTTReciever/MQTTReciever.cs b/backend/Api/MQTTReciever/MQTTReciever.cs new file mode 100644 index 0000000..c8010ea --- /dev/null +++ b/backend/Api/MQTTReciever/MQTTReciever.cs @@ -0,0 +1,81 @@ +using Api.DBAccess; +using Api.Models; +using MQTTnet; +using MQTTnet.Extensions.TopicTemplate; +using System.Text; +using System.Text.Json; + + +namespace Api.MQTTReciever +{ + public class MQTTReciever + { + IMqttClient mqttClient; + private readonly IConfiguration _configuration; + private readonly DbAccess _dbAccess; + + public MQTTReciever(IConfiguration configuration, DbAccess dbAccess) + { + _dbAccess = dbAccess; + _configuration = configuration; + } + + + public async Task Handle_Received_Application_Message() + { + var mqttFactory = new MqttClientFactory(); + + using (mqttClient = mqttFactory.CreateMqttClient()) + { + var mqttClientOptions = new MqttClientOptionsBuilder() + .WithTcpServer($"{_configuration["MQTT:host"]}", 1883) + .WithCredentials($"{_configuration["MQTT:username"]}", $"{_configuration["MQTT:password"]}") + .WithCleanSession() + .Build(); + + // Setup message handling before connecting so that queued messages + // are also handled properly. When there is no event handler attached all + // received messages get lost. + mqttClient.ApplicationMessageReceivedAsync += e => + { + Console.WriteLine("Received application message."); + + string sensorData = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + + var mqttMessageReceive = JsonSerializer.Deserialize(sensorData); + + if (mqttMessageReceive == null || mqttMessageReceive.temperature == 0 || mqttMessageReceive.device_id == null || mqttMessageReceive.timestamp == null) + { + return Task.CompletedTask; + } + + TemperatureLogs newLog = new TemperatureLogs(); + string refernceId = mqttMessageReceive.device_id; + var device = _dbAccess.ReadDevice(refernceId); + + newLog.Temperature = mqttMessageReceive.temperature; + newLog.Date = DateTimeOffset.FromUnixTimeSeconds(mqttMessageReceive.timestamp).DateTime; + newLog.TempHigh= device.TempHigh; + newLog.TempLow = device.TempLow; + + _dbAccess.CreateLog(newLog, refernceId); + + return Task.CompletedTask; + }; + + + await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); + Console.WriteLine("mqttClient"); + + //var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder().WithTopicTemplate(topic).Build(); + + await mqttClient.SubscribeAsync("temperature"); + + Console.WriteLine("MQTT client subscribed to topic."); + + Console.WriteLine("Press enter to exit."); + Console.ReadLine(); + } + } + } +}