mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 09:41:19 +00:00
Add Event controller and service etc - create event when automation is called, alarm is triggered and when device send new state
This commit is contained in:
parent
6da8b6bb33
commit
256231169a
18
MyCore.Interfaces/DTO/ListResponse.cs
Normal file
18
MyCore.Interfaces/DTO/ListResponse.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MyCore.Interfaces.DTO
|
||||||
|
{
|
||||||
|
public class ListResponse<TDTO, TParameters>
|
||||||
|
{
|
||||||
|
public ListResponse(IEnumerable<TDTO> values, TParameters requestParameters)
|
||||||
|
{
|
||||||
|
this.Values = values;
|
||||||
|
this.RequestParameters = requestParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<TDTO> Values { get; }
|
||||||
|
public TParameters RequestParameters { get; }
|
||||||
|
public int TotalCount { get; set; }
|
||||||
|
public int ActualCount { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
47
MyCore.Interfaces/DTO/MyControlPanel/EventDTO.cs
Normal file
47
MyCore.Interfaces/DTO/MyControlPanel/EventDTO.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using MyCore.Interfaces.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MyCore.Interfaces.DTO
|
||||||
|
{
|
||||||
|
|
||||||
|
public class EventDTO
|
||||||
|
{
|
||||||
|
public string Id{ get; set; }
|
||||||
|
public string HomeId{ get; set; }
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
public EventType Type { get; set; }
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EventDetailDTO : EventDTO
|
||||||
|
{
|
||||||
|
public DeviceState DeviceState { get; set; }
|
||||||
|
public AutomationTriggered AutomationTriggered { get; set; }
|
||||||
|
public AlarmTriggered AlarmTriggered { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EventFilter
|
||||||
|
{
|
||||||
|
public int StartIndex { get; set; } = 0;
|
||||||
|
public int Count { get; set; } = 20;
|
||||||
|
public DateTime? DateStart { get; set; }
|
||||||
|
public DateTime? DateEnd { get; set; }
|
||||||
|
public EventType? EventType { get; set; }
|
||||||
|
public DeviceType? DeviceType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EventHomeFilter : EventFilter
|
||||||
|
{
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EventRoomFilter : EventFilter
|
||||||
|
{
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -123,7 +123,7 @@ namespace MyCore.Interfaces.Models
|
|||||||
public string Start { get; set; }
|
public string Start { get; set; }
|
||||||
public string End { get; set; }
|
public string End { get; set; }
|
||||||
public AlarmMode AlarmMode { get; set; }
|
public AlarmMode AlarmMode { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GeolocalizedMode
|
public class GeolocalizedMode
|
||||||
{
|
{
|
||||||
|
|||||||
@ -54,10 +54,7 @@ namespace MyCore.Interfaces.Models
|
|||||||
Active = Active,
|
Active = Active,
|
||||||
HomeId = HomeId,
|
HomeId = HomeId,
|
||||||
CreatedDate = CreatedDate,
|
CreatedDate = CreatedDate,
|
||||||
UpdatedDate = UpdatedDate,
|
UpdatedDate = UpdatedDate
|
||||||
//Triggers = Triggers
|
|
||||||
//Conditions = Conditions
|
|
||||||
//Actions = Actions
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,8 +80,8 @@ namespace MyCore.Interfaces.Models
|
|||||||
{
|
{
|
||||||
public string ProviderId { get; set; }
|
public string ProviderId { get; set; }
|
||||||
public string DeviceId { get; set; }
|
public string DeviceId { get; set; }
|
||||||
public string StateName { get; set; }
|
public string StateName { get; set; } // TODO Change to AutomationState
|
||||||
public string StateValue { get; set; }
|
public string StateValue { get; set; } // TODO Change to AutomationState
|
||||||
public TriggerType type { get; set; }
|
public TriggerType type { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
99
MyCore.Interfaces/Models/MyControlPanel/Database/Event.cs
Normal file
99
MyCore.Interfaces/Models/MyControlPanel/Database/Event.cs
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
using MyCore.Interfaces.DTO;
|
||||||
|
using MyCore.Interfaces.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using static MyCore.Interfaces.Models.AlarmMode;
|
||||||
|
|
||||||
|
namespace MyCore.Interfaces.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Group of events
|
||||||
|
/// </summary>
|
||||||
|
public class Event
|
||||||
|
{
|
||||||
|
[BsonId]
|
||||||
|
[BsonRepresentation(BsonType.ObjectId)]
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("HomeId")]
|
||||||
|
[BsonRequired]
|
||||||
|
public string HomeId { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Date")]
|
||||||
|
[BsonRequired]
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Type")]
|
||||||
|
[BsonRequired]
|
||||||
|
public EventType Type { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("RoomId")]
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("DeviceState")]
|
||||||
|
[BsonRequired]
|
||||||
|
public DeviceState DeviceState { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("AutomationTriggered")]
|
||||||
|
public AutomationTriggered AutomationTriggered { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("AlarmTriggered")]
|
||||||
|
public AlarmTriggered AlarmTriggered { get; set; }
|
||||||
|
|
||||||
|
public EventDTO ToDTO()
|
||||||
|
{
|
||||||
|
return new EventDTO()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
HomeId = HomeId,
|
||||||
|
Date = Date,
|
||||||
|
Type = Type
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public EventDetailDTO ToDetailDTO()
|
||||||
|
{
|
||||||
|
return new EventDetailDTO()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
HomeId = HomeId,
|
||||||
|
Date = Date,
|
||||||
|
Type = Type,
|
||||||
|
DeviceState = DeviceState,
|
||||||
|
AutomationTriggered = AutomationTriggered,
|
||||||
|
AlarmTriggered = AlarmTriggered
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum EventType
|
||||||
|
{
|
||||||
|
DeviceState,
|
||||||
|
AutomationTriggered,
|
||||||
|
AlarmTriggered
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DeviceState
|
||||||
|
{
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
public string DeviceName { get; set; }
|
||||||
|
public string Message { get; set; }
|
||||||
|
public DeviceType DeviceType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AutomationTriggered
|
||||||
|
{
|
||||||
|
public string AutomationId { get; set; }
|
||||||
|
public string AutomationName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AlarmTriggered
|
||||||
|
{
|
||||||
|
public string AlarmModeId { get; set; }
|
||||||
|
public string AlarmModeName { get; set; }
|
||||||
|
public AlarmType Type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
265
MyCore/Controllers/EventController.cs
Normal file
265
MyCore/Controllers/EventController.cs
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Security.Authentication;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using Mqtt.Client.AspNetCore.Services;
|
||||||
|
using MyCore.Interfaces.DTO;
|
||||||
|
using MyCore.Interfaces.Models;
|
||||||
|
using MyCore.Services;
|
||||||
|
using MyCore.Services.Devices;
|
||||||
|
using MyCore.Services.MyControlPanel;
|
||||||
|
|
||||||
|
namespace MyCore.Service.Controllers
|
||||||
|
{
|
||||||
|
[Authorize] // TODO Add ROLES (Roles = "Admin")
|
||||||
|
[Route("api/event")]
|
||||||
|
[ApiController]
|
||||||
|
public class EventController : ControllerBase
|
||||||
|
{
|
||||||
|
private HomeDatabaseService _HomeDatabaseService;
|
||||||
|
private RoomDatabaseService _RoomDatabaseService;
|
||||||
|
private EventDatabaseService _EventDatabaseService;
|
||||||
|
private DeviceDatabaseService _DeviceDatabaseService;
|
||||||
|
private readonly IMqttClientService _mqttClientService;
|
||||||
|
//private readonly IMqttOnlineClientService _mqttOnlineClientService;
|
||||||
|
|
||||||
|
public EventController(HomeDatabaseService homeDatabaseService, RoomDatabaseService roomDatabaseService, EventDatabaseService eventDatabaseService, DeviceDatabaseService deviceDatabaseService, MqttClientServiceProvider provider)//, MqttClientOnlineServiceProvider onlineProvider)
|
||||||
|
{
|
||||||
|
this._HomeDatabaseService = homeDatabaseService;
|
||||||
|
this._RoomDatabaseService = roomDatabaseService;
|
||||||
|
this._EventDatabaseService = eventDatabaseService;
|
||||||
|
this._DeviceDatabaseService = deviceDatabaseService;
|
||||||
|
this._mqttClientService = provider.MqttClientService;
|
||||||
|
//this._mqttOnlineClientService = onlineProvider.MqttOnlineClientService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get events for the specified home
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="homeId">Home Id</param>
|
||||||
|
/// <param name="eventHomeFilter">Filter params</param>
|
||||||
|
[ProducesResponseType(typeof(List<EventDetailDTO>), 200)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpGet("{homeId}")]
|
||||||
|
public ObjectResult Get(string homeId, [FromQuery] EventHomeFilter eventHomeFilter) // TODO Add filter by date etc
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<Event> events = _EventDatabaseService.GetAll(homeId); // To check if best
|
||||||
|
if (eventHomeFilter.EventType != null)
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.Type == eventHomeFilter.EventType).OrderBy(e => e.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventHomeFilter.DeviceType != null)
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.DeviceState.DeviceType == eventHomeFilter.DeviceType).OrderBy(e => e.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventHomeFilter.DeviceId != null)
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.DeviceState.DeviceId == eventHomeFilter.DeviceId).OrderBy(e => e.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventHomeFilter.RoomId != null)
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.RoomId == eventHomeFilter.RoomId).OrderBy(e => e.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventHomeFilter.DateStart != null && eventHomeFilter.DateEnd != null) {
|
||||||
|
events = events.Where(e => e.Date >= eventHomeFilter.DateStart && e.Date < eventHomeFilter.DateEnd).OrderBy(e => e.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
var totalCount = events.Count();
|
||||||
|
events = events.Skip(eventHomeFilter.StartIndex).Take(eventHomeFilter.Count).ToList();
|
||||||
|
|
||||||
|
List<EventDetailDTO> eventDTOs = events.Select(d => d.ToDetailDTO()).OrderBy(e => e.Date).ToList();
|
||||||
|
|
||||||
|
var lr = new ListResponse<EventDetailDTO, EventHomeFilter>(eventDTOs, eventHomeFilter);
|
||||||
|
lr.TotalCount = totalCount;
|
||||||
|
lr.ActualCount = eventDTOs.Count();
|
||||||
|
|
||||||
|
return new OkObjectResult(lr);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get detail info of a specified event
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="eventId">event id</param>
|
||||||
|
[ProducesResponseType(typeof(EventDetailDTO), 200)]
|
||||||
|
[ProducesResponseType(typeof(string), 400)]
|
||||||
|
[ProducesResponseType(typeof(string), 404)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpGet("detail/{eventId}")]
|
||||||
|
public ObjectResult GetDetail(string eventId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (eventId == null)
|
||||||
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
|
Event evt = _EventDatabaseService.GetById(eventId);
|
||||||
|
if (evt == null)
|
||||||
|
throw new KeyNotFoundException("Event does not exist");
|
||||||
|
|
||||||
|
return new OkObjectResult(evt.ToDetailDTO());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (ArgumentNullException ex)
|
||||||
|
{
|
||||||
|
return new BadRequestObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException ex)
|
||||||
|
{
|
||||||
|
return new NotFoundObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an event
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roomCreateOrUpdateDetail">Room to create</param>
|
||||||
|
/*[ProducesResponseType(typeof(RoomDetailDTO), 200)]
|
||||||
|
[ProducesResponseType(typeof(string), 400)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpPost]
|
||||||
|
public ObjectResult Create([FromBody] RoomCreateOrUpdateDetailDTO roomCreateOrUpdateDetail)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (roomCreateOrUpdateDetail == null)
|
||||||
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
|
RoomDetailDTO roomCreated = RoomService.CreateOrUpdate(this._RoomDatabaseService, this._DeviceDatabaseService, roomCreateOrUpdateDetail.HomeId, roomCreateOrUpdateDetail, true);
|
||||||
|
|
||||||
|
return new OkObjectResult(roomCreated);
|
||||||
|
}
|
||||||
|
catch (ArgumentNullException ex)
|
||||||
|
{
|
||||||
|
return new BadRequestObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*/// <summary>
|
||||||
|
/// Update an event
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roomCreateOrUpdateDetail">room to update</param>
|
||||||
|
/*[ProducesResponseType(typeof(RoomCreateOrUpdateDetailDTO), 200)]
|
||||||
|
[ProducesResponseType(typeof(string), 404)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpPut]
|
||||||
|
public ObjectResult Update([FromBody] RoomCreateOrUpdateDetailDTO roomCreateOrUpdateDetail)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!_RoomDatabaseService.IsExist(roomCreateOrUpdateDetail.Id))
|
||||||
|
throw new KeyNotFoundException("Room does not exist");
|
||||||
|
|
||||||
|
RoomDetailDTO roomUpdated = RoomService.CreateOrUpdate(this._RoomDatabaseService, this._DeviceDatabaseService, roomCreateOrUpdateDetail.HomeId, roomCreateOrUpdateDetail, false);
|
||||||
|
|
||||||
|
return new OkObjectResult(roomUpdated);
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException ex)
|
||||||
|
{
|
||||||
|
return new NotFoundObjectResult(ex.Message) {};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete an event
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="eventId">Id of event to delete</param>
|
||||||
|
[ProducesResponseType(typeof(string), 202)]
|
||||||
|
[ProducesResponseType(typeof(string), 400)]
|
||||||
|
[ProducesResponseType(typeof(string), 404)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpDelete("{eventId}")]
|
||||||
|
public ObjectResult Delete(string eventId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (eventId == null)
|
||||||
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
|
if (!_EventDatabaseService.IsExist(eventId))
|
||||||
|
throw new KeyNotFoundException("Event does not exist");
|
||||||
|
|
||||||
|
_EventDatabaseService.Remove(eventId);
|
||||||
|
|
||||||
|
return new OkObjectResult("Event has been successfully deleted") { StatusCode = 202 };
|
||||||
|
}
|
||||||
|
catch (ArgumentNullException ex)
|
||||||
|
{
|
||||||
|
return new BadRequestObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException ex)
|
||||||
|
{
|
||||||
|
return new NotFoundObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete all events for a specified home
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="homeId">Home Id</param>
|
||||||
|
[ProducesResponseType(typeof(string), 202)]
|
||||||
|
[ProducesResponseType(typeof(string), 400)]
|
||||||
|
[ProducesResponseType(typeof(string), 404)]
|
||||||
|
[ProducesResponseType(typeof(string), 500)]
|
||||||
|
[HttpDelete("home/{homeId}")]
|
||||||
|
public ObjectResult DeleteAllForHome(string homeId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (homeId == null)
|
||||||
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
|
if (!_HomeDatabaseService.IsExist(homeId))
|
||||||
|
throw new KeyNotFoundException("Home does not exist");
|
||||||
|
|
||||||
|
_EventDatabaseService.RemoveForHome(homeId);
|
||||||
|
|
||||||
|
return new OkObjectResult("All events associated to specified home has been removed") { StatusCode = 202 };
|
||||||
|
}
|
||||||
|
catch (ArgumentNullException ex)
|
||||||
|
{
|
||||||
|
return new BadRequestObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException ex)
|
||||||
|
{
|
||||||
|
return new NotFoundObjectResult(ex.Message) { };
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -257,7 +257,7 @@ namespace MyCore.Service.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete all room for a specified home
|
/// Delete all rooms for a specified home
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="homeId">Home Id</param>
|
/// <param name="homeId">Home Id</param>
|
||||||
[ProducesResponseType(typeof(string), 202)]
|
[ProducesResponseType(typeof(string), 202)]
|
||||||
@ -277,7 +277,7 @@ namespace MyCore.Service.Controllers
|
|||||||
|
|
||||||
_RoomDatabaseService.RemoveForHome(homeId);
|
_RoomDatabaseService.RemoveForHome(homeId);
|
||||||
|
|
||||||
return new OkObjectResult("All room associated to specified home has been removed") { StatusCode = 202 };
|
return new OkObjectResult("All rooms associated to specified home has been removed") { StatusCode = 202 };
|
||||||
}
|
}
|
||||||
catch (ArgumentNullException ex)
|
catch (ArgumentNullException ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -36,11 +36,12 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
private ActionService _actionService;
|
private ActionService _actionService;
|
||||||
private HomeDatabaseService _homeDatabaseService;
|
private HomeDatabaseService _homeDatabaseService;
|
||||||
private AlarmDatabaseService _alarmDatabaseService;
|
private AlarmDatabaseService _alarmDatabaseService;
|
||||||
|
private EventDatabaseService _eventDatabaseService;
|
||||||
|
|
||||||
public static string lastTopic;
|
public static string lastTopic;
|
||||||
public static long lastTimeTopic;
|
public static long lastTimeTopic;
|
||||||
|
|
||||||
public MqttClientService(IMqttClientOptions options, HomeDatabaseService homeDatabaseService, DeviceDatabaseService deviceDatabaseService, GroupDatabaseService groupDatabaseService, ProviderDatabaseService providerDatabaseService, RoomDatabaseService roomDatabaseService, ActionService actionService, AutomationDatabaseService automationDatabaseService, AlarmDatabaseService alarmDatabaseService)
|
public MqttClientService(IMqttClientOptions options, HomeDatabaseService homeDatabaseService, DeviceDatabaseService deviceDatabaseService, GroupDatabaseService groupDatabaseService, ProviderDatabaseService providerDatabaseService, RoomDatabaseService roomDatabaseService, ActionService actionService, AutomationDatabaseService automationDatabaseService, AlarmDatabaseService alarmDatabaseService, EventDatabaseService eventDatabaseService)
|
||||||
{
|
{
|
||||||
this._homeDatabaseService = homeDatabaseService;
|
this._homeDatabaseService = homeDatabaseService;
|
||||||
this._deviceDatabaseService = deviceDatabaseService;
|
this._deviceDatabaseService = deviceDatabaseService;
|
||||||
@ -49,6 +50,7 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
this._roomDatabaseService = roomDatabaseService;
|
this._roomDatabaseService = roomDatabaseService;
|
||||||
this._automationDatabaseService = automationDatabaseService;
|
this._automationDatabaseService = automationDatabaseService;
|
||||||
this._alarmDatabaseService = alarmDatabaseService;
|
this._alarmDatabaseService = alarmDatabaseService;
|
||||||
|
this._eventDatabaseService = eventDatabaseService;
|
||||||
this._actionService = actionService;
|
this._actionService = actionService;
|
||||||
|
|
||||||
Home home = this._homeDatabaseService.GetAll().ToList().Where(h => h.IsDefault).FirstOrDefault();
|
Home home = this._homeDatabaseService.GetAll().ToList().Where(h => h.IsDefault).FirstOrDefault();
|
||||||
@ -117,7 +119,7 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
{
|
{
|
||||||
if (_actionService != null && homeId != null)
|
if (_actionService != null && homeId != null)
|
||||||
{
|
{
|
||||||
ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService, _automationDatabaseService, _alarmDatabaseService, homeId);
|
ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService, _automationDatabaseService, _alarmDatabaseService, _eventDatabaseService, homeId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -75,6 +75,7 @@ namespace MyCore.Service.Extensions
|
|||||||
services.AddSingleton<RoomDatabaseService>();
|
services.AddSingleton<RoomDatabaseService>();
|
||||||
services.AddSingleton<AutomationDatabaseService>();
|
services.AddSingleton<AutomationDatabaseService>();
|
||||||
services.AddSingleton<AlarmDatabaseService>();
|
services.AddSingleton<AlarmDatabaseService>();
|
||||||
|
services.AddSingleton<EventDatabaseService>();
|
||||||
services.AddSingleton<ActionService>();
|
services.AddSingleton<ActionService>();
|
||||||
services.AddSingleton<MqttClientService>();
|
services.AddSingleton<MqttClientService>();
|
||||||
services.AddSingleton<IHostedService>(serviceProvider =>
|
services.AddSingleton<IHostedService>(serviceProvider =>
|
||||||
|
|||||||
@ -105,23 +105,23 @@ namespace MyCore.Service.Services
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Home mode
|
// Home mode
|
||||||
AlarmMode homeMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Home.ToString(), Type = AlarmType.Home, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now };
|
AlarmMode homeMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Home.ToString(), Type = AlarmType.Home, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, Actions = new List<Interfaces.Models.Action>(), Triggers = new List<Trigger>(), DevicesIds = new List<string>() };
|
||||||
homeMode = _AlarmDatabaseService.Create(homeMode);
|
homeMode = _AlarmDatabaseService.Create(homeMode);
|
||||||
|
|
||||||
// Absent mode
|
// Absent mode
|
||||||
AlarmMode absentMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Absent.ToString(), Type = AlarmType.Absent, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now };
|
AlarmMode absentMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Absent.ToString(), Type = AlarmType.Absent, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, Triggers = new List<Trigger>(), DevicesIds = new List<string>() };
|
||||||
absentMode = _AlarmDatabaseService.Create(absentMode);
|
absentMode = _AlarmDatabaseService.Create(absentMode);
|
||||||
|
|
||||||
// Geolocalized
|
// Geolocalized
|
||||||
AlarmMode geolocalizedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Geolocalized.ToString(), Type = AlarmType.Geolocalized, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, GeolocalizedMode = new GeolocalizedMode() };
|
AlarmMode geolocalizedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Geolocalized.ToString(), Type = AlarmType.Geolocalized, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, GeolocalizedMode = new GeolocalizedMode(), Triggers = new List<Trigger>(), DevicesIds = new List<string>() };
|
||||||
geolocalizedMode = _AlarmDatabaseService.Create(geolocalizedMode);
|
geolocalizedMode = _AlarmDatabaseService.Create(geolocalizedMode);
|
||||||
|
|
||||||
// Programmed mode
|
// Programmed mode
|
||||||
AlarmMode programmedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Programmed.ToString(), Type = AlarmType.Programmed, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, ProgrammedMode = new ProgrammedMode() };
|
AlarmMode programmedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Programmed.ToString(), Type = AlarmType.Programmed, Activated = false, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, ProgrammedMode = new ProgrammedMode(), Triggers = new List<Trigger>(), DevicesIds = new List<string>() };
|
||||||
programmedMode = _AlarmDatabaseService.Create(programmedMode);
|
programmedMode = _AlarmDatabaseService.Create(programmedMode);
|
||||||
|
|
||||||
// Desarmed mode
|
// Desarmed mode
|
||||||
AlarmMode desarmedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Desarmed.ToString(), Type = AlarmType.Desarmed, Activated = true, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now };
|
AlarmMode desarmedMode = new AlarmMode() { HomeId = home.Id, Name = AlarmType.Desarmed.ToString(), Type = AlarmType.Desarmed, Activated = true, IsDefault = true, Notification = true, CreatedDate = DateTime.Now, UpdatedDate = DateTime.Now, Triggers = new List<Trigger>(), DevicesIds = new List<string>() };
|
||||||
desarmedMode = _AlarmDatabaseService.Create(desarmedMode);
|
desarmedMode = _AlarmDatabaseService.Create(desarmedMode);
|
||||||
|
|
||||||
return HomeService.UpdateAlarmMode(_HomeDatabaseService, desarmedMode); // Activate desarmed mode by default
|
return HomeService.UpdateAlarmMode(_HomeDatabaseService, desarmedMode); // Activate desarmed mode by default
|
||||||
@ -136,7 +136,7 @@ namespace MyCore.Service.Services
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Handle message event
|
#region Handle message event
|
||||||
internal static void HandleMessage(AlarmMode alarmMode, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, string homeId)
|
internal static void HandleMessage(AlarmMode alarmMode, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, EventDatabaseService _EventDatabaseService, string homeId)
|
||||||
{
|
{
|
||||||
bool isAction = false;
|
bool isAction = false;
|
||||||
switch (alarmMode.Type)
|
switch (alarmMode.Type)
|
||||||
@ -174,6 +174,7 @@ namespace MyCore.Service.Services
|
|||||||
{
|
{
|
||||||
// Correct trigger !
|
// Correct trigger !
|
||||||
System.Console.WriteLine($"Correct trigger for alarm {alarmMode.Name}");
|
System.Console.WriteLine($"Correct trigger for alarm {alarmMode.Name}");
|
||||||
|
isAction = true;
|
||||||
|
|
||||||
#region Actions !
|
#region Actions !
|
||||||
foreach (var action in alarmMode.Actions)
|
foreach (var action in alarmMode.Actions)
|
||||||
@ -321,10 +322,17 @@ namespace MyCore.Service.Services
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Send notification - check if error
|
#region Send notification - check if error - save event
|
||||||
// Send notification if exist
|
if (isAction)
|
||||||
if (alarmMode.Notification && isAction)
|
{
|
||||||
System.Console.WriteLine($"TODO send notification");
|
// Create an event
|
||||||
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.AlarmTriggered, HomeId = homeId, RoomId = deviceTrigger.RoomId, AlarmTriggered = new AlarmTriggered() { AlarmModeId = alarmMode.Id, AlarmModeName = alarmMode.Name }, DeviceState = new DeviceState() { DeviceId = deviceTrigger.Id, DeviceName = deviceTrigger.Name, DeviceType = deviceTrigger.Type, Message = message } };
|
||||||
|
EventService.CreateOrUpdate(_EventDatabaseService, homeId, eventDetailDTO, true);
|
||||||
|
|
||||||
|
// Send notification if exist
|
||||||
|
if (alarmMode.Notification)
|
||||||
|
System.Console.WriteLine($"TODO send notification");
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -55,7 +55,7 @@ namespace MyCore.Service.Services
|
|||||||
return _AutomationDatabaseService.Update(automation.Id, automation).ToDTO();
|
return _AutomationDatabaseService.Update(automation.Id, automation).ToDTO();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void HandleAutomation(List<Automation> automations, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, string homeId)
|
public static void HandleAutomation(List<Automation> automations, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, EventDatabaseService _EventDatabaseService, string homeId)
|
||||||
{
|
{
|
||||||
foreach (var automation in automations)
|
foreach (var automation in automations)
|
||||||
{
|
{
|
||||||
@ -99,6 +99,11 @@ namespace MyCore.Service.Services
|
|||||||
if (!isConditionsRespected.Any(cr => !cr))
|
if (!isConditionsRespected.Any(cr => !cr))
|
||||||
{
|
{
|
||||||
System.Console.WriteLine("Conditions respected !");
|
System.Console.WriteLine("Conditions respected !");
|
||||||
|
|
||||||
|
// Create an event
|
||||||
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.AutomationTriggered, HomeId = homeId, RoomId = deviceTrigger.RoomId, AutomationTriggered = new AutomationTriggered() { AutomationId = automation.Id, AutomationName = automation.Name }, DeviceState = new DeviceState() { DeviceId = deviceTrigger.Id, DeviceName = deviceTrigger.Name, DeviceType = deviceTrigger.Type, Message = message } };
|
||||||
|
EventService.CreateOrUpdate(_EventDatabaseService, homeId, eventDetailDTO, true);
|
||||||
|
|
||||||
foreach (var action in automation.Actions)
|
foreach (var action in automation.Actions)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
using MyCore.Interfaces.DTO;
|
using MyCore.Interfaces.DTO;
|
||||||
using MyCore.Interfaces.Models;
|
using MyCore.Interfaces.Models;
|
||||||
using MyCore.Interfaces.Models.Providers.Zigbee.Zigbee2Mqtt;
|
using MyCore.Interfaces.Models.Providers.Zigbee.Zigbee2Mqtt;
|
||||||
|
using MyCore.Service;
|
||||||
using MyCore.Service.Controllers.Helpers;
|
using MyCore.Service.Controllers.Helpers;
|
||||||
using MyCore.Service.Services;
|
using MyCore.Service.Services;
|
||||||
using MyCore.Services.MyControlPanel;
|
using MyCore.Services.MyControlPanel;
|
||||||
@ -21,7 +22,7 @@ namespace MyCore.Services.Devices
|
|||||||
private static Device deviceTrigger;
|
private static Device deviceTrigger;
|
||||||
private static string providerFromTopic;
|
private static string providerFromTopic;
|
||||||
private static string deviceServiceName;
|
private static string deviceServiceName;
|
||||||
public static async Task HandleActionFromMQTTAsync(string topic, string message, DeviceDatabaseService _DeviceDatabaseService, GroupDatabaseService _GroupDatabaseService, ProviderDatabaseService _ProviderDatabaseService, RoomDatabaseService _RoomDatabaseService, AutomationDatabaseService _AutomationDatabaseService, AlarmDatabaseService _AlarmDatabaseService, string homeId)
|
public static async Task HandleActionFromMQTTAsync(string topic, string message, DeviceDatabaseService _DeviceDatabaseService, GroupDatabaseService _GroupDatabaseService, ProviderDatabaseService _ProviderDatabaseService, RoomDatabaseService _RoomDatabaseService, AutomationDatabaseService _AutomationDatabaseService, AlarmDatabaseService _AlarmDatabaseService, EventDatabaseService _EventDatabaseService, string homeId)
|
||||||
{
|
{
|
||||||
System.Console.WriteLine($"Received message {message}");
|
System.Console.WriteLine($"Received message {message}");
|
||||||
|
|
||||||
@ -57,19 +58,23 @@ namespace MyCore.Services.Devices
|
|||||||
{
|
{
|
||||||
#region Automations
|
#region Automations
|
||||||
var automations = _AutomationDatabaseService.GetActiveByProvider(currentProvider.Id);
|
var automations = _AutomationDatabaseService.GetActiveByProvider(currentProvider.Id);
|
||||||
AutomationService.HandleAutomation(automations, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, homeId);
|
AutomationService.HandleAutomation(automations, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, _EventDatabaseService, homeId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Alarm
|
#region Alarm
|
||||||
AlarmMode alarmMode = _AlarmDatabaseService.GetCurrentActivatedAlarm(homeId);
|
AlarmMode alarmMode = _AlarmDatabaseService.GetCurrentActivatedAlarm(homeId);
|
||||||
if (alarmMode.DevicesIds.Contains(deviceTrigger.Id))
|
if (alarmMode != null)
|
||||||
AlarmService.HandleMessage(alarmMode, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, homeId);
|
if (alarmMode.DevicesIds.Contains(deviceTrigger.Id))
|
||||||
|
AlarmService.HandleMessage(alarmMode, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, _EventDatabaseService, homeId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
// Update last state of devices
|
// Update last state of devices
|
||||||
deviceTrigger.LastStateDate = DateTime.Now;
|
deviceTrigger.LastStateDate = DateTime.Now;
|
||||||
deviceTrigger.LastState = message;
|
deviceTrigger.LastState = message;
|
||||||
_DeviceDatabaseService.Update(deviceTrigger);
|
_DeviceDatabaseService.Update(deviceTrigger);
|
||||||
|
|
||||||
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.DeviceState, HomeId = homeId, RoomId = deviceTrigger.RoomId, DeviceState = new DeviceState() { DeviceId = deviceTrigger.Id, DeviceName = deviceTrigger.Name, DeviceType = deviceTrigger.Type, Message = message } };
|
||||||
|
EventService.CreateOrUpdate(_EventDatabaseService, homeId, eventDetailDTO, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
46
MyCore/Services/EventService.cs
Normal file
46
MyCore/Services/EventService.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using MyCore.Interfaces.DTO;
|
||||||
|
using MyCore.Interfaces.Models;
|
||||||
|
using MyCore.Services;
|
||||||
|
using MyCore.Services.MyControlPanel;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MyCore.Service
|
||||||
|
{
|
||||||
|
public class EventService
|
||||||
|
{
|
||||||
|
public static EventDetailDTO CreateOrUpdate(EventDatabaseService _EventDatabaseService, string homeId, EventDetailDTO eventDetailDTO, bool create)
|
||||||
|
{
|
||||||
|
Event evt;
|
||||||
|
if (create)
|
||||||
|
{
|
||||||
|
evt = new Event();
|
||||||
|
evt.Date = DateTime.Now;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evt = _EventDatabaseService.GetById(eventDetailDTO.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
evt.HomeId = homeId;
|
||||||
|
evt.Type = eventDetailDTO.Type;
|
||||||
|
evt.RoomId = eventDetailDTO.RoomId;
|
||||||
|
evt.DeviceState = eventDetailDTO.DeviceState;
|
||||||
|
evt.AutomationTriggered = eventDetailDTO.AutomationTriggered;
|
||||||
|
evt.AlarmTriggered = eventDetailDTO.AlarmTriggered;
|
||||||
|
|
||||||
|
if (create)
|
||||||
|
{
|
||||||
|
evt = _EventDatabaseService.Create(evt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evt = _EventDatabaseService.Update(evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
return evt.ToDetailDTO();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MyCore.Interfaces.Models;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
|
||||||
|
namespace MyCore.Services
|
||||||
|
{
|
||||||
|
public class EventDatabaseService
|
||||||
|
{
|
||||||
|
private readonly IMongoCollection<Event> _Events;
|
||||||
|
|
||||||
|
public EventDatabaseService(IConfiguration config)
|
||||||
|
{
|
||||||
|
var client = new MongoClient(config.GetConnectionString("MyCoreDb"));
|
||||||
|
var database = client.GetDatabase("MyCoreDb");
|
||||||
|
_Events = database.GetCollection<Event>("Events");
|
||||||
|
}
|
||||||
|
public List<Event> GetAll(string homeId)
|
||||||
|
{
|
||||||
|
return _Events.Find(d => d.HomeId == homeId).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Event> GetEventType(EventType? eventType)
|
||||||
|
{
|
||||||
|
return _Events.Find(d => d.Type == (EventType) eventType).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Event GetById(string id)
|
||||||
|
{
|
||||||
|
return _Events.Find<Event>(d => d.Id == id).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Event> GetByDeviceId(string id)
|
||||||
|
{
|
||||||
|
return _Events.Find(d => d.Type == EventType.DeviceState && d.DeviceState.DeviceId == id).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsExist(string id)
|
||||||
|
{
|
||||||
|
return _Events.Find<Event>(d => d.Id == id).FirstOrDefault() != null ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Event Create(Event eventIn)
|
||||||
|
{
|
||||||
|
_Events.InsertOne(eventIn);
|
||||||
|
return eventIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Event Update(Event eventIn)
|
||||||
|
{
|
||||||
|
_Events.ReplaceOne(evt => evt.Id == eventIn.Id, eventIn);
|
||||||
|
return eventIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(string id)
|
||||||
|
{
|
||||||
|
_Events.DeleteOne(evt => evt.Id == id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveForHome(string homeId)
|
||||||
|
{
|
||||||
|
_Events.DeleteMany(evt => evt.HomeId == homeId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -162,6 +162,7 @@ namespace MyCore
|
|||||||
services.AddScoped<AutomationDatabaseService>();
|
services.AddScoped<AutomationDatabaseService>();
|
||||||
services.AddScoped<ActionService>();
|
services.AddScoped<ActionService>();
|
||||||
services.AddScoped<AlarmDatabaseService>();
|
services.AddScoped<AlarmDatabaseService>();
|
||||||
|
services.AddScoped<EventDatabaseService>();
|
||||||
|
|
||||||
services.AddMqttClientHostedService(); // Todo client files (a lot are useless)
|
services.AddMqttClientHostedService(); // Todo client files (a lot are useless)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"BookstoreDb": "mongodb://admin:MioTech4ever!@localhost:27017",
|
"BookstoreDb": "mongodb://admin:MioTech4ever!@localhost:27017",
|
||||||
//"MyCoreDb": "mongodb://admin:MioTech4ever!@192.168.31.140:27017", // DEV
|
"MyCoreDb": "mongodb://admin:MioTech4ever!@192.168.31.140:27017" // DEV
|
||||||
"MyCoreDb": "mongodb://admin:MioTech4ever!@localhost:27017"
|
//"MyCoreDb": "mongodb://admin:MioTech4ever!@localhost:27017"
|
||||||
},
|
},
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user