diff --git a/MyCore.Framework/Business/ActionLogic.cs b/MyCore.Framework/Business/ActionLogic.cs index 3df2f57..25497b0 100644 --- a/MyCore.Framework/Business/ActionLogic.cs +++ b/MyCore.Framework/Business/ActionLogic.cs @@ -4,7 +4,7 @@ using System.Text; namespace MyCore.Framework.Business { - class ActionLogic + public class ActionLogic { } } diff --git a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs index 35aec86..584b2a5 100644 --- a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs +++ b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs @@ -46,6 +46,11 @@ namespace MyCore.Interfaces.Models public class Trigger { + public string ProviderId { get; set; } + public string DeviceId { get; set; } + public object StateName { get; set; } + public object StateValue { get; set; } + public enum Type { MQTT, @@ -56,6 +61,10 @@ namespace MyCore.Interfaces.Models public class Condition { + public string DeviceId { get; set; } + public object StateName { get; set; } + public object StateValue { get; set; } + public enum Type { STATE, @@ -65,6 +74,12 @@ namespace MyCore.Interfaces.Models public class Action { + public string DeviceId { get; set; } + public object StateName { get; set; } // example : state + public object StateValue { get; set; } // example : ON + public string ProviderId { get; set; } // TODO + public string DeviceType { get; set; } // TODO + public enum Type { DELAY, diff --git a/MyCore/Controllers/AuthenticationController.cs b/MyCore/Controllers/AuthenticationController.cs index 5372e81..54723d8 100644 --- a/MyCore/Controllers/AuthenticationController.cs +++ b/MyCore/Controllers/AuthenticationController.cs @@ -33,10 +33,11 @@ namespace MyCore.Service.Controllers private readonly LocationDatabaseService _LocationDatabaseService; private readonly UserDatabaseService _UserDatabaseService; private readonly ActionService _ActionService; + private readonly AutomationDatabaseService _AutomationDatabaseService; private readonly IMqttClientService _mqttClientService; private readonly IMqttOnlineClientService _mqttOnlineClientService; - public AuthenticationController(ILogger logger, TokensService tokensService, DeviceDatabaseService DeviceDatabaseService, ProviderDatabaseService ProviderDatabaseService, LocationDatabaseService LocationDatabaseService, UserDatabaseService UserDatabaseService, ActionService ActionService, MqttClientServiceProvider provider, MqttClientOnlineServiceProvider onlineProvider) + public AuthenticationController(ILogger logger, TokensService tokensService, DeviceDatabaseService DeviceDatabaseService, ProviderDatabaseService ProviderDatabaseService, LocationDatabaseService LocationDatabaseService, UserDatabaseService UserDatabaseService, ActionService ActionService, AutomationDatabaseService AutomationDatabaseService, MqttClientServiceProvider provider, MqttClientOnlineServiceProvider onlineProvider) { _logger = logger; _tokensService = tokensService; @@ -45,6 +46,7 @@ namespace MyCore.Service.Controllers _LocationDatabaseService = LocationDatabaseService; _UserDatabaseService = UserDatabaseService; _ActionService = ActionService; + _AutomationDatabaseService = AutomationDatabaseService; _mqttClientService = provider.MqttClientService; _mqttOnlineClientService = onlineProvider.MqttOnlineClientService; } @@ -54,7 +56,7 @@ namespace MyCore.Service.Controllers try { var token = _tokensService.Authenticate(email.ToLower(), password); - MqttClientService.SetServices(_DeviceDatabaseService, _ProviderDatabaseService, _LocationDatabaseService, _ActionService, "5fef55bae30e1016d4776bfe"); // TODO Get userId when connected !! + MqttClientService.SetServices(_DeviceDatabaseService, _ProviderDatabaseService, _LocationDatabaseService, _ActionService, _AutomationDatabaseService, "5fef55bae30e1016d4776bfe"); // TODO Get userId when connected !! return Ok(token); } /*catch (UnauthorizedAccessException ex) diff --git a/MyCore/Extensions/MqttClientService.cs b/MyCore/Extensions/MqttClientService.cs index 129ca1a..c2eb935 100644 --- a/MyCore/Extensions/MqttClientService.cs +++ b/MyCore/Extensions/MqttClientService.cs @@ -24,6 +24,7 @@ namespace Mqtt.Client.AspNetCore.Services static DeviceDatabaseService _deviceDatabaseService; static ProviderDatabaseService _providerDatabaseService; static LocationDatabaseService _locationDatabaseService; + static AutomationDatabaseService _automationDatabaseService; static ActionService _actionService; public MqttClientService(IMqttClientOptions options) @@ -64,7 +65,7 @@ namespace Mqtt.Client.AspNetCore.Services var topic = e.ApplicationMessage.Topic; if (_actionService != null) { - ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _providerDatabaseService, _locationDatabaseService, userId); + ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _providerDatabaseService, _locationDatabaseService, _automationDatabaseService, userId); } //if () { } @@ -151,11 +152,12 @@ namespace Mqtt.Client.AspNetCore.Services return devices; } - public static void SetServices(DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, LocationDatabaseService _LocationDatabaseService, ActionService _ActionService, string UserId) + public static void SetServices(DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, LocationDatabaseService _LocationDatabaseService, ActionService _ActionService, AutomationDatabaseService _AutomationDatabaseService, string UserId) { _deviceDatabaseService = _DeviceDatabaseService; _providerDatabaseService = _ProviderDatabaseService; _locationDatabaseService = _LocationDatabaseService; + _automationDatabaseService = _AutomationDatabaseService; _actionService = _ActionService; userId = UserId; } diff --git a/MyCore/Services/Devices/ActionService.cs b/MyCore/Services/Devices/ActionService.cs index a2c8073..d7b7998 100644 --- a/MyCore/Services/Devices/ActionService.cs +++ b/MyCore/Services/Devices/ActionService.cs @@ -16,7 +16,7 @@ namespace MyCore.Services.Devices public static bool isOpen = false; public static long lastActionTime; // TODO it's here that action are thrown.. Call from Mqtt Or other service like controller if from RpiServices - public async static Task HandleActionFromMQTTAsync(string topic, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, LocationDatabaseService _LocationDatabaseService, string userId) + public async static Task HandleActionFromMQTTAsync(string topic, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, LocationDatabaseService _LocationDatabaseService, AutomationDatabaseService _AutomationDatabaseService, string userId) { // TODO Check if last action is not too close for each action var actionTime = DateTimeOffset.Now.ToUnixTimeMilliseconds(); @@ -25,6 +25,11 @@ namespace MyCore.Services.Devices string[] topicSplit = topic.Split('/'); switch (topicSplit[0]) { case "zigbee2mqtt": + var test0 = _ProviderDatabaseService.GetByType(topicSplit[0]).Id; + var anotherTest = _AutomationDatabaseService.GetByProvider(test0); + + + // switch case according to device type (topic !) if (topicSplit[1].Contains("MagicCube0")) { diff --git a/MyCore/Services/MyControlPanel/Database/AutomationDatabaseService.cs b/MyCore/Services/MyControlPanel/Database/AutomationDatabaseService.cs index 0c56cf5..9e85c11 100644 --- a/MyCore/Services/MyControlPanel/Database/AutomationDatabaseService.cs +++ b/MyCore/Services/MyControlPanel/Database/AutomationDatabaseService.cs @@ -28,6 +28,11 @@ namespace MyCore.Services.MyControlPanel return _Automations.Find(a => a.Id == id).FirstOrDefault(); } + public Automation GetByProvider(string id) + { + return _Automations.Find(a => a.Triggers.Any(t => t.ProviderId == id)).FirstOrDefault(); + } + public Automation Create(Automation automation) { _Automations.InsertOne(automation); diff --git a/MyCore/Startup.cs b/MyCore/Startup.cs index 9c32241..a0cb44a 100644 --- a/MyCore/Startup.cs +++ b/MyCore/Startup.cs @@ -200,6 +200,7 @@ namespace MyCore services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); }