mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 01:31:19 +00:00
Update code for send action + update for main info + categorized devices + add multiple main info fields to device
This commit is contained in:
parent
79226ec247
commit
97fc143865
@ -20,8 +20,8 @@ namespace MyCore.Framework.Business
|
|||||||
Topic = home == null ? "main" : home.Id,
|
Topic = home == null ? "main" : home.Id,
|
||||||
Notification = new Notification()
|
Notification = new Notification()
|
||||||
{
|
{
|
||||||
Title = notificationDTO.notificationTitle,
|
Title = home == null ? notificationDTO.notificationTitle : $"{home.Name} - {notificationDTO.notificationTitle}",
|
||||||
Body = home == null ? notificationDTO.notificationTitle : $"{home.Name}, {notificationDTO.notificationMessage}"
|
Body = notificationDTO.notificationMessage
|
||||||
},
|
},
|
||||||
Data = new Dictionary<string, string>()
|
Data = new Dictionary<string, string>()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -30,4 +30,14 @@ namespace MyCore.Interfaces.DTO
|
|||||||
on,
|
on,
|
||||||
off
|
off
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum RoomMainInfo
|
||||||
|
{
|
||||||
|
Temperature = 1,
|
||||||
|
Humidity,
|
||||||
|
Pressure,
|
||||||
|
Illuminance,
|
||||||
|
Motion,
|
||||||
|
Door
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,8 @@ namespace MyCore.Interfaces.DTO
|
|||||||
|
|
||||||
public DateTime LastStateDate { get; set; }
|
public DateTime LastStateDate { get; set; }
|
||||||
|
|
||||||
|
public DateTime LastMessageDate { get; set; }
|
||||||
|
|
||||||
public bool Battery { get; set; }
|
public bool Battery { get; set; }
|
||||||
|
|
||||||
public int BatteryStatus { get; set; }
|
public int BatteryStatus { get; set; }
|
||||||
@ -50,6 +52,8 @@ namespace MyCore.Interfaces.DTO
|
|||||||
|
|
||||||
public DateTime UpdatedDate { get; set; }
|
public DateTime UpdatedDate { get; set; }
|
||||||
|
|
||||||
|
public string LastMessage { get; set; } // TODO UNIFORMISATION ?
|
||||||
|
|
||||||
public string LastState { get; set; } // TODO UNIFORMISATION ?
|
public string LastState { get; set; } // TODO UNIFORMISATION ?
|
||||||
|
|
||||||
public string IpAddress { get; set; }
|
public string IpAddress { get; set; }
|
||||||
@ -63,5 +67,95 @@ namespace MyCore.Interfaces.DTO
|
|||||||
public string Properties { get; set; } // Dictionary<string, object>
|
public string Properties { get; set; } // Dictionary<string, object>
|
||||||
|
|
||||||
public List<string> SupportedOperations { get; set; }
|
public List<string> SupportedOperations { get; set; }
|
||||||
|
|
||||||
|
public bool IsContact { get; set; }
|
||||||
|
|
||||||
|
public bool Contact { get; set; }
|
||||||
|
|
||||||
|
public bool IsIlluminance { get; set; }
|
||||||
|
|
||||||
|
public int? Illuminance { get; set; }
|
||||||
|
|
||||||
|
public bool IsBrightness { get; set; }
|
||||||
|
|
||||||
|
public int Brightness { get; set; }
|
||||||
|
|
||||||
|
public bool IsState { get; set; }
|
||||||
|
|
||||||
|
public bool State { get; set; }
|
||||||
|
|
||||||
|
public bool IsColorTemp { get; set; }
|
||||||
|
|
||||||
|
public int ColorTemp { get; set; }
|
||||||
|
|
||||||
|
public bool IsColorXY { get; set; }
|
||||||
|
|
||||||
|
public int ColorX { get; set; }
|
||||||
|
|
||||||
|
public int ColorY { get; set; }
|
||||||
|
|
||||||
|
public bool IsOccupation { get; set; }
|
||||||
|
|
||||||
|
public bool Occupation { get; set; }
|
||||||
|
|
||||||
|
public bool IsAlarm { get; set; }
|
||||||
|
|
||||||
|
public bool Alarm { get; set; }
|
||||||
|
|
||||||
|
public bool IsWaterLeak { get; set; }
|
||||||
|
|
||||||
|
public bool WaterLeak { get; set; }
|
||||||
|
|
||||||
|
public bool IsSmoke { get; set; }
|
||||||
|
|
||||||
|
public bool Smoke { get; set; }
|
||||||
|
|
||||||
|
public bool IsVibration { get; set; }
|
||||||
|
|
||||||
|
public bool Vibration { get; set; }
|
||||||
|
|
||||||
|
public bool IsAction { get; set; }
|
||||||
|
|
||||||
|
public string Action { get; set; }
|
||||||
|
|
||||||
|
public bool IsTemperature { get; set; }
|
||||||
|
|
||||||
|
public decimal? Temperature { get; set; }
|
||||||
|
|
||||||
|
public bool IsHumidity { get; set; }
|
||||||
|
|
||||||
|
public decimal? Humidity { get; set; }
|
||||||
|
|
||||||
|
public bool IsPressure { get; set; } // Example : 1005.7hPa
|
||||||
|
|
||||||
|
public decimal? Pressure { get; set; } // Example : 1005.7hPa
|
||||||
|
|
||||||
|
public bool IsAirQuality { get; set; }
|
||||||
|
|
||||||
|
public string AirQuality { get; set; }
|
||||||
|
|
||||||
|
public bool IsFanSpeed { get; set; }
|
||||||
|
|
||||||
|
public int FanSpeed { get; set; }
|
||||||
|
|
||||||
|
public bool IsFanMode { get; set; }
|
||||||
|
|
||||||
|
public string FanMode { get; set; }
|
||||||
|
|
||||||
|
public bool IsConsumption { get; set; } // Example: 256.88kWh
|
||||||
|
|
||||||
|
public decimal Consumption { get; set; } // Example: 256.88kWh
|
||||||
|
|
||||||
|
public bool IsCurrentPower { get; set; } // Example: 0.0384A
|
||||||
|
|
||||||
|
public decimal CurrentPower { get; set; } // Example: 0.0384A
|
||||||
|
|
||||||
|
public bool IsVoltage { get; set; } // Example: 230V
|
||||||
|
|
||||||
|
public decimal Voltage { get; set; } // Example: 230V
|
||||||
|
|
||||||
|
public bool IsLinkQuality { get; set; } // Example: 84 LQI
|
||||||
|
|
||||||
|
public int LinkQuality { get; set; } // Example: 84 LQI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,12 +35,18 @@ namespace MyCore.Interfaces.DTO
|
|||||||
public bool IsHumidity { get; set; }
|
public bool IsHumidity { get; set; }
|
||||||
public string Humidity { get; set; }
|
public string Humidity { get; set; }
|
||||||
|
|
||||||
|
public bool IsPressure { get; set; }
|
||||||
|
public string Pressure { get; set; }
|
||||||
|
|
||||||
public bool IsMotion { get; set; }
|
public bool IsMotion { get; set; }
|
||||||
public bool? Motion { get; set; }
|
public bool? Motion { get; set; }
|
||||||
|
|
||||||
public bool IsDoor { get; set; }
|
public bool IsDoor { get; set; }
|
||||||
public bool? Door { get; set; }
|
public bool? Door { get; set; }
|
||||||
|
|
||||||
|
public bool IsIlluminance { get; set; }
|
||||||
|
public string Illuminance { get; set; }
|
||||||
|
|
||||||
public List<DeviceDetailDTO> EnvironmentalDevices { get; set; } // for temp and humidity
|
public List<DeviceDetailDTO> EnvironmentalDevices { get; set; } // for temp and humidity
|
||||||
|
|
||||||
public List<DeviceDetailDTO> SecurityDevices { get; set; } // for motion
|
public List<DeviceDetailDTO> SecurityDevices { get; set; } // for motion
|
||||||
|
|||||||
@ -65,11 +65,17 @@ namespace MyCore.Interfaces.Models
|
|||||||
public DateTime UpdatedDate { get; set; }
|
public DateTime UpdatedDate { get; set; }
|
||||||
|
|
||||||
[BsonElement("LastState")]
|
[BsonElement("LastState")]
|
||||||
public string LastState { get; set; } // TODO UNIFORMISATION ?
|
public string LastState { get; set; }
|
||||||
|
|
||||||
[BsonElement("LastStateDate")]
|
[BsonElement("LastStateDate")]
|
||||||
public DateTime LastStateDate { get; set; }
|
public DateTime LastStateDate { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("LastMessage")]
|
||||||
|
public string LastMessage { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("LastMessageDate")]
|
||||||
|
public DateTime LastMessageDate { get; set; }
|
||||||
|
|
||||||
[BsonElement("IpAddress")]
|
[BsonElement("IpAddress")]
|
||||||
public string IpAddress { get; set; }
|
public string IpAddress { get; set; }
|
||||||
|
|
||||||
@ -99,6 +105,142 @@ namespace MyCore.Interfaces.Models
|
|||||||
[BsonElement("SupportedOperations")]
|
[BsonElement("SupportedOperations")]
|
||||||
public List<string> SupportedOperations { get; set; }
|
public List<string> SupportedOperations { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsContact")]
|
||||||
|
public bool IsContact { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Contact")]
|
||||||
|
public bool Contact { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsIlluminance")]
|
||||||
|
public bool IsIlluminance { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Illuminance")]
|
||||||
|
public int Illuminance { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsBrightness")]
|
||||||
|
public bool IsBrightness { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Brightness")]
|
||||||
|
public int Brightness { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsState")]
|
||||||
|
public bool IsState { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("State")]
|
||||||
|
public bool State { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsColorTemp")]
|
||||||
|
public bool IsColorTemp { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("ColorTemp")]
|
||||||
|
public int ColorTemp { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsColorXY")]
|
||||||
|
public bool IsColorXY { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("ColorX")]
|
||||||
|
public int ColorX { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("ColorY")]
|
||||||
|
public int ColorY { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsOccupation")] // Motion
|
||||||
|
public bool IsOccupation { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Occupation")]
|
||||||
|
public bool Occupation { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsAlarm")]
|
||||||
|
public bool IsAlarm { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Alarm")]
|
||||||
|
public bool Alarm { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsWaterLeak")]
|
||||||
|
public bool IsWaterLeak { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("WaterLeak")]
|
||||||
|
public bool WaterLeak { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsSmoke")]
|
||||||
|
public bool IsSmoke { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Smoke")]
|
||||||
|
public bool Smoke { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsVibration")]
|
||||||
|
public bool IsVibration { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Vibration")]
|
||||||
|
public bool Vibration { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsAction")]
|
||||||
|
public bool IsAction { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Action")]
|
||||||
|
public string Action { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsTemperature")]
|
||||||
|
public bool IsTemperature { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Temperature")]
|
||||||
|
public decimal Temperature { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsHumidity")]
|
||||||
|
public bool IsHumidity { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("Humidity")]
|
||||||
|
public decimal Humidity { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsPressure")]
|
||||||
|
public bool IsPressure { get; set; } // Example : 1005.7hPa
|
||||||
|
|
||||||
|
[BsonElement("Pressure")]
|
||||||
|
public decimal Pressure { get; set; } // Example : 1005.7hPa
|
||||||
|
|
||||||
|
[BsonElement("IsAirQuality")]
|
||||||
|
public bool IsAirQuality { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("AirQuality")]
|
||||||
|
public string AirQuality { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsFanSpeed")]
|
||||||
|
public bool IsFanSpeed { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("FanSpeed")]
|
||||||
|
public int FanSpeed { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsFanMode")]
|
||||||
|
public bool IsFanMode { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("FanMode")]
|
||||||
|
public string FanMode { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("IsConsumption")]
|
||||||
|
public bool IsConsumption { get; set; } // Example: 256.88kWh
|
||||||
|
|
||||||
|
[BsonElement("Consumption")]
|
||||||
|
public decimal Consumption { get; set; } // Example: 256.88kWh
|
||||||
|
|
||||||
|
[BsonElement("IsCurrentPower")]
|
||||||
|
public bool IsCurrentPower { get; set; } // Example: 0.0384A
|
||||||
|
|
||||||
|
[BsonElement("CurrentPower")]
|
||||||
|
public decimal CurrentPower { get; set; } // Example: 0.0384A
|
||||||
|
|
||||||
|
[BsonElement("IsVoltage")]
|
||||||
|
public bool IsVoltage { get; set; } // Example: 230V
|
||||||
|
|
||||||
|
[BsonElement("Voltage")]
|
||||||
|
public decimal Voltage { get; set; } // Example: 230V
|
||||||
|
|
||||||
|
[BsonElement("IsLinkQuality")]
|
||||||
|
public bool IsLinkQuality { get; set; } // Example: 84 LQI
|
||||||
|
|
||||||
|
[BsonElement("LinkQuality")]
|
||||||
|
public int LinkQuality { get; set; } // Example: 84 LQI
|
||||||
|
|
||||||
|
|
||||||
public DeviceSummaryDTO ToSummaryDTO()
|
public DeviceSummaryDTO ToSummaryDTO()
|
||||||
{
|
{
|
||||||
return new DeviceSummaryDTO()
|
return new DeviceSummaryDTO()
|
||||||
@ -108,10 +250,10 @@ namespace MyCore.Interfaces.Models
|
|||||||
Name = Name,
|
Name = Name,
|
||||||
Model = Model,
|
Model = Model,
|
||||||
Type = Type,
|
Type = Type,
|
||||||
Status = Status,
|
|
||||||
ConnectionStatus = ConnectionStatus,
|
ConnectionStatus = ConnectionStatus,
|
||||||
ProviderId = ProviderId,
|
ProviderId = ProviderId,
|
||||||
RoomId = RoomId, // Include room id
|
RoomId = RoomId, // Include room id
|
||||||
|
LastMessageDate = LastMessageDate,
|
||||||
LastStateDate = LastStateDate,
|
LastStateDate = LastStateDate,
|
||||||
Battery = Battery,
|
Battery = Battery,
|
||||||
BatteryStatus = BatteryStatus
|
BatteryStatus = BatteryStatus
|
||||||
@ -127,7 +269,6 @@ namespace MyCore.Interfaces.Models
|
|||||||
Name = Name,
|
Name = Name,
|
||||||
Model = Model,
|
Model = Model,
|
||||||
Type = Type,
|
Type = Type,
|
||||||
Status = Status,
|
|
||||||
Port = Port,
|
Port = Port,
|
||||||
FirmwareVersion = FirmwareVersion,
|
FirmwareVersion = FirmwareVersion,
|
||||||
ConnectionStatus = ConnectionStatus,
|
ConnectionStatus = ConnectionStatus,
|
||||||
@ -137,6 +278,8 @@ namespace MyCore.Interfaces.Models
|
|||||||
UpdatedDate = UpdatedDate,
|
UpdatedDate = UpdatedDate,
|
||||||
LastState = LastState,
|
LastState = LastState,
|
||||||
LastStateDate = LastStateDate,
|
LastStateDate = LastStateDate,
|
||||||
|
LastMessage = LastMessage,
|
||||||
|
LastMessageDate = LastMessageDate,
|
||||||
IpAddress = IpAddress,
|
IpAddress = IpAddress,
|
||||||
ServiceIdentification = ServiceIdentification,
|
ServiceIdentification = ServiceIdentification,
|
||||||
ProviderId = ProviderId,
|
ProviderId = ProviderId,
|
||||||
@ -144,7 +287,38 @@ namespace MyCore.Interfaces.Models
|
|||||||
Properties = Properties,
|
Properties = Properties,
|
||||||
SupportedOperations = SupportedOperations,
|
SupportedOperations = SupportedOperations,
|
||||||
Battery = Battery,
|
Battery = Battery,
|
||||||
BatteryStatus = BatteryStatus
|
BatteryStatus = BatteryStatus,
|
||||||
|
IsContact = IsContact,
|
||||||
|
Contact = Contact,
|
||||||
|
IsIlluminance = IsIlluminance,
|
||||||
|
Illuminance = Illuminance,
|
||||||
|
IsBrightness = IsBrightness,
|
||||||
|
Brightness = Brightness,
|
||||||
|
IsState = IsState,
|
||||||
|
State = State,
|
||||||
|
IsColorTemp = IsColorTemp,
|
||||||
|
ColorTemp = ColorTemp,
|
||||||
|
IsColorXY = IsColorXY,
|
||||||
|
ColorX = ColorX,
|
||||||
|
ColorY = ColorY,
|
||||||
|
IsOccupation = IsOccupation,
|
||||||
|
Occupation = Occupation,
|
||||||
|
IsAlarm = IsAlarm,
|
||||||
|
Alarm = Alarm,
|
||||||
|
IsTemperature = IsTemperature,
|
||||||
|
Temperature = Temperature,
|
||||||
|
IsHumidity = IsHumidity,
|
||||||
|
Humidity = Humidity,
|
||||||
|
IsPressure = IsPressure,
|
||||||
|
Pressure = Pressure,
|
||||||
|
IsConsumption = IsConsumption,
|
||||||
|
Consumption = Consumption,
|
||||||
|
IsCurrentPower = IsCurrentPower,
|
||||||
|
CurrentPower = CurrentPower,
|
||||||
|
IsVoltage = IsVoltage,
|
||||||
|
Voltage = Voltage,
|
||||||
|
IsLinkQuality = IsLinkQuality,
|
||||||
|
LinkQuality = LinkQuality,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,5 +12,28 @@ namespace MyCore.Interfaces.Models.MyControlPanel
|
|||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public DeviceType DeviceType { get; set; }
|
public DeviceType DeviceType { get; set; }
|
||||||
public List<DeviceAction> DeviceActions { get; set; } // TODO <=
|
public List<DeviceAction> DeviceActions { get; set; } // TODO <=
|
||||||
|
|
||||||
|
public bool IsContact { get; set; }
|
||||||
|
public bool IsIlluminance { get; set; }
|
||||||
|
public bool IsBrightness { get; set; }
|
||||||
|
public bool IsState { get; set; }
|
||||||
|
public bool IsColorTemp { get; set; }
|
||||||
|
public bool IsColorXY { get; set; }
|
||||||
|
public bool IsOccupation { get; set; }
|
||||||
|
public bool IsAction { get; set; }
|
||||||
|
public bool IsAirQuality { get; set; }
|
||||||
|
public bool IsFanSpeed { get; set; }
|
||||||
|
public bool IsFanMode { get; set; }
|
||||||
|
public bool IsAlarm { get; set; }
|
||||||
|
public bool IsSmoke { get; set; }
|
||||||
|
public bool IsWaterLeak { get; set; }
|
||||||
|
public bool IsVibration { get; set; }
|
||||||
|
public bool IsTemperature { get; set; }
|
||||||
|
public bool IsHumidity { get; set; }
|
||||||
|
public bool IsPressure { get; set; } // Example : 1005.7hPa
|
||||||
|
public bool IsConsumption { get; set; } // Example: 256.88kWh
|
||||||
|
public bool IsCurrentPower { get; set; } // Example: 0.0384A
|
||||||
|
public bool IsVoltage { get; set; } // Example: 230V
|
||||||
|
public bool IsLinkQuality { get; set; } // Example: 84 LQI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace MyCore.Interfaces.Models
|
||||||
|
{
|
||||||
|
public class Zigbee2MqttOperations
|
||||||
|
{
|
||||||
|
public string access { get; set; }
|
||||||
|
public string description { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public string property { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
public string unit { get; set; }
|
||||||
|
public List<string> values { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,8 +7,33 @@ namespace MyCore.Interfaces.Models
|
|||||||
public class Zigbee2MqttRequest
|
public class Zigbee2MqttRequest
|
||||||
{
|
{
|
||||||
public string state { get; set; }
|
public string state { get; set; }
|
||||||
public int brightness { get; set; } // 0 -> 255 GU10
|
public int? brightness { get; set; } // 0 -> 255 GU10
|
||||||
|
public int? linkquality { get; set; }
|
||||||
// TODO
|
public int? battery { get; set; }
|
||||||
|
public int? illuminance { get; set; }
|
||||||
|
public int? illuminance_lux { get; set; }
|
||||||
|
public bool? occupancy { get; set; }
|
||||||
|
public decimal? temperature { get; set; }
|
||||||
|
public decimal? humidity { get; set; }
|
||||||
|
public bool? humidity_alarm { get; set; }
|
||||||
|
public bool? alarm { get; set; }
|
||||||
|
public int? voltage { get; set; }
|
||||||
|
public bool? contact { get; set; }
|
||||||
|
public decimal? consumption { get; set; }
|
||||||
|
public decimal? current { get; set; }
|
||||||
|
public int? melody { get; set; }
|
||||||
|
public string power_type { get; set; }
|
||||||
|
public string volume { get; set; }
|
||||||
|
public bool? vibration { get; set; }
|
||||||
|
public bool? water_leak { get; set; }
|
||||||
|
public int? strength { get; set; }
|
||||||
|
public int? angle { get; set; }
|
||||||
|
public int? angle_x { get; set; }
|
||||||
|
public int? angle_x_absolute { get; set; }
|
||||||
|
public int? angle_y { get; set; }
|
||||||
|
public int? angle_y_absolute { get; set; }
|
||||||
|
public int? angle_z { get; set; }
|
||||||
|
public int? side { get; set; }
|
||||||
|
public string action { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -197,7 +197,7 @@ namespace MyCore.Controllers
|
|||||||
if (action == null)
|
if (action == null)
|
||||||
throw new ArgumentNullException("Incorrect parameters");
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
if (action.DeviceId == null || action.GroupId == null)
|
if (action.DeviceId == null && action.GroupId == null)
|
||||||
throw new ArgumentNullException("Incorrect parameters");
|
throw new ArgumentNullException("Incorrect parameters");
|
||||||
|
|
||||||
Device device = null;
|
Device device = null;
|
||||||
@ -214,7 +214,7 @@ namespace MyCore.Controllers
|
|||||||
homeId= group?.HomeId;
|
homeId= group?.HomeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device == null || group == null)
|
if (device == null && group == null)
|
||||||
throw new KeyNotFoundException("Device or group does not exist");
|
throw new KeyNotFoundException("Device or group does not exist");
|
||||||
|
|
||||||
AutomationService.HandleAction(homeId, action, _ProviderDatabaseService, _DeviceDatabaseService, _GroupDatabaseService);
|
AutomationService.HandleAction(homeId, action, _ProviderDatabaseService, _DeviceDatabaseService, _GroupDatabaseService);
|
||||||
|
|||||||
@ -17,10 +17,12 @@ namespace MyCore.Service.Controllers.Helpers
|
|||||||
public static List<Expose> GetDeviceExposes(Device device)
|
public static List<Expose> GetDeviceExposes(Device device)
|
||||||
{
|
{
|
||||||
List<Expose> exposes = new List<Expose>();
|
List<Expose> exposes = new List<Expose>();
|
||||||
// Get Exposes for the zigbee device
|
if (device.SupportedOperations != null) {
|
||||||
foreach (var supportedOperation in device.SupportedOperations)
|
// Get Exposes for the zigbee device
|
||||||
{
|
foreach (var supportedOperation in device.SupportedOperations)
|
||||||
exposes.Add(JsonConvert.DeserializeObject<Expose>(supportedOperation));
|
{
|
||||||
|
exposes.Add(JsonConvert.DeserializeObject<Expose>(supportedOperation));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return exposes;
|
return exposes;
|
||||||
}
|
}
|
||||||
@ -131,6 +133,8 @@ namespace MyCore.Service.Controllers.Helpers
|
|||||||
// Update Last state
|
// Update Last state
|
||||||
actionDeviceToTest.LastState = JsonConvert.SerializeObject(states);
|
actionDeviceToTest.LastState = JsonConvert.SerializeObject(states);
|
||||||
actionDeviceToTest.LastStateDate = DateTime.Now;
|
actionDeviceToTest.LastStateDate = DateTime.Now;
|
||||||
|
actionDeviceToTest.LastMessage = JsonConvert.SerializeObject(states);
|
||||||
|
actionDeviceToTest.LastMessageDate = DateTime.Now;
|
||||||
deviceDatabaseService.Update(actionDeviceToTest);
|
deviceDatabaseService.Update(actionDeviceToTest);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -218,8 +222,8 @@ namespace MyCore.Service.Controllers.Helpers
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update Last state
|
// Update Last state
|
||||||
actionDeviceToTest.LastState = JsonConvert.SerializeObject(statuses);
|
actionDeviceToTest.LastMessage = JsonConvert.SerializeObject(statuses);
|
||||||
actionDeviceToTest.LastStateDate = DateTime.Now;
|
actionDeviceToTest.LastMessageDate = DateTime.Now;
|
||||||
_DeviceDatabaseService.Update(actionDeviceToTest);
|
_DeviceDatabaseService.Update(actionDeviceToTest);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -78,13 +78,17 @@ namespace MyCore.Service.Controllers
|
|||||||
foreach (var room in rooms)
|
foreach (var room in rooms)
|
||||||
{
|
{
|
||||||
RoomMainDetailDTO roomMainDetailDTO = room.ToMainDetailsDTO(_DeviceDatabaseService.GetByRoom(room.Id).Select(d => d.ToDTO()).ToList());
|
RoomMainDetailDTO roomMainDetailDTO = room.ToMainDetailsDTO(_DeviceDatabaseService.GetByRoom(room.Id).Select(d => d.ToDTO()).ToList());
|
||||||
roomMainDetailDTO.Temperature = (string) RoomService.GetValueFromJson(roomMainDetailDTO.EnvironmentalDevices, DeviceType.Environment, "temperature", false); // Todo take the one selected by user as default if more than one
|
roomMainDetailDTO.Temperature = (string) RoomService.GetValueFromDeviceType(roomMainDetailDTO.EnvironmentalDevices, RoomMainInfo.Temperature); // Todo take the one selected by user as default if more than one
|
||||||
roomMainDetailDTO.IsTemperature = roomMainDetailDTO.Temperature != null;
|
roomMainDetailDTO.IsTemperature = roomMainDetailDTO.Temperature != null;
|
||||||
roomMainDetailDTO.Humidity = (string) RoomService.GetValueFromJson(roomMainDetailDTO.EnvironmentalDevices, DeviceType.Environment, "humidity", false); // Todo take the one selected by user as default if more than one
|
roomMainDetailDTO.Humidity = (string) RoomService.GetValueFromDeviceType(roomMainDetailDTO.EnvironmentalDevices, RoomMainInfo.Humidity); // Todo take the one selected by user as default if more than one
|
||||||
roomMainDetailDTO.IsHumidity = roomMainDetailDTO.Humidity != null;
|
roomMainDetailDTO.IsHumidity = roomMainDetailDTO.Humidity != null;
|
||||||
roomMainDetailDTO.Motion = (bool?) RoomService.GetValueFromJson(roomMainDetailDTO.SecurityDevices, DeviceType.Motion, "motion", true);
|
roomMainDetailDTO.Pressure = (string)RoomService.GetValueFromDeviceType(roomMainDetailDTO.EnvironmentalDevices, RoomMainInfo.Pressure); // Todo take the one selected by user as default if more than one
|
||||||
|
roomMainDetailDTO.IsPressure = roomMainDetailDTO.Pressure != null;
|
||||||
|
roomMainDetailDTO.Illuminance = (string)RoomService.GetValueFromDeviceType(roomMainDetailDTO.EnvironmentalDevices, RoomMainInfo.Illuminance); // Todo take the one selected by user as default if more than one
|
||||||
|
roomMainDetailDTO.IsIlluminance = roomMainDetailDTO.Illuminance != null;
|
||||||
|
roomMainDetailDTO.Motion = (bool?) RoomService.GetValueFromDeviceType(roomMainDetailDTO.SecurityDevices, RoomMainInfo.Motion);
|
||||||
roomMainDetailDTO.IsMotion = roomMainDetailDTO.SecurityDevices.Any(sd => sd.Type == DeviceType.Motion) ? roomMainDetailDTO.Motion != null : false;
|
roomMainDetailDTO.IsMotion = roomMainDetailDTO.SecurityDevices.Any(sd => sd.Type == DeviceType.Motion) ? roomMainDetailDTO.Motion != null : false;
|
||||||
roomMainDetailDTO.Door = (bool?) RoomService.GetValueFromJson(roomMainDetailDTO.SecurityDevices, DeviceType.Door, "contact", true); // Todo handle more than just by string
|
roomMainDetailDTO.Door = (bool?) RoomService.GetValueFromDeviceType(roomMainDetailDTO.SecurityDevices, RoomMainInfo.Door);
|
||||||
roomMainDetailDTO.IsDoor = roomMainDetailDTO.SecurityDevices.Any(sd => sd.Type == DeviceType.Door) ? roomMainDetailDTO.Door != null : false;
|
roomMainDetailDTO.IsDoor = roomMainDetailDTO.SecurityDevices.Any(sd => sd.Type == DeviceType.Door) ? roomMainDetailDTO.Door != null : false;
|
||||||
roomMainDetailDTOs.Add(roomMainDetailDTO);
|
roomMainDetailDTOs.Add(roomMainDetailDTO);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ using MQTTnet.Client;
|
|||||||
using MQTTnet.Client.Connecting;
|
using MQTTnet.Client.Connecting;
|
||||||
using MQTTnet.Client.Disconnecting;
|
using MQTTnet.Client.Disconnecting;
|
||||||
using MQTTnet.Client.Options;
|
using MQTTnet.Client.Options;
|
||||||
|
using MyCore.Framework.Business;
|
||||||
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;
|
||||||
@ -27,7 +28,7 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
public static List<Zigbee2MqttDeviceConfig> devices = new List<Zigbee2MqttDeviceConfig>();
|
public static List<Zigbee2MqttDeviceConfig> devices = new List<Zigbee2MqttDeviceConfig>();
|
||||||
public static List<Zigbee2MqttDevice> devicesNew = new List<Zigbee2MqttDevice>();
|
public static List<Zigbee2MqttDevice> devicesNew = new List<Zigbee2MqttDevice>();
|
||||||
public static List<Zigbee2MqttGroup> groups = new List<Zigbee2MqttGroup>();
|
public static List<Zigbee2MqttGroup> groups = new List<Zigbee2MqttGroup>();
|
||||||
public static string homeId;
|
public static Home _home;
|
||||||
private DeviceDatabaseService _deviceDatabaseService;
|
private DeviceDatabaseService _deviceDatabaseService;
|
||||||
private GroupDatabaseService _groupDatabaseService;
|
private GroupDatabaseService _groupDatabaseService;
|
||||||
private ProviderDatabaseService _providerDatabaseService;
|
private ProviderDatabaseService _providerDatabaseService;
|
||||||
@ -37,11 +38,12 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
private HomeDatabaseService _homeDatabaseService;
|
private HomeDatabaseService _homeDatabaseService;
|
||||||
private AlarmDatabaseService _alarmDatabaseService;
|
private AlarmDatabaseService _alarmDatabaseService;
|
||||||
private EventDatabaseService _eventDatabaseService;
|
private EventDatabaseService _eventDatabaseService;
|
||||||
|
private readonly FirebaseClient _firebaseClient;
|
||||||
|
|
||||||
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, EventDatabaseService eventDatabaseService)
|
public MqttClientService(IMqttClientOptions options, HomeDatabaseService homeDatabaseService, DeviceDatabaseService deviceDatabaseService, GroupDatabaseService groupDatabaseService, ProviderDatabaseService providerDatabaseService, RoomDatabaseService roomDatabaseService, ActionService actionService, AutomationDatabaseService automationDatabaseService, AlarmDatabaseService alarmDatabaseService, EventDatabaseService eventDatabaseService, FirebaseClient firebaseClient)
|
||||||
{
|
{
|
||||||
this._homeDatabaseService = homeDatabaseService;
|
this._homeDatabaseService = homeDatabaseService;
|
||||||
this._deviceDatabaseService = deviceDatabaseService;
|
this._deviceDatabaseService = deviceDatabaseService;
|
||||||
@ -52,12 +54,14 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
this._alarmDatabaseService = alarmDatabaseService;
|
this._alarmDatabaseService = alarmDatabaseService;
|
||||||
this._eventDatabaseService = eventDatabaseService;
|
this._eventDatabaseService = eventDatabaseService;
|
||||||
this._actionService = actionService;
|
this._actionService = actionService;
|
||||||
|
this._firebaseClient = firebaseClient;
|
||||||
|
|
||||||
|
|
||||||
Home home = this._homeDatabaseService.GetAll().ToList().Where(h => h.IsDefault).FirstOrDefault();
|
Home home = this._homeDatabaseService.GetAll().ToList().Where(h => h.IsDefault).FirstOrDefault();
|
||||||
if (home != null)
|
if (home != null)
|
||||||
homeId = home.Id;
|
_home = home;
|
||||||
|
|
||||||
System.Console.WriteLine($"Home Id in MQTT client service : {homeId}");
|
System.Console.WriteLine($"Home Id in MQTT client service : {_home?.Id}");
|
||||||
|
|
||||||
var server = "localhost";
|
var server = "localhost";
|
||||||
var clientId = "ApiService";
|
var clientId = "ApiService";
|
||||||
@ -117,9 +121,9 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
// Less than one second between two messages from a same device
|
// Less than one second between two messages from a same device
|
||||||
if (!(lastTopic == topic && test <= 500) || configMessage)
|
if (!(lastTopic == topic && test <= 500) || configMessage)
|
||||||
{
|
{
|
||||||
if (_actionService != null && homeId != null)
|
if (_actionService != null && _home.Id != null)
|
||||||
{
|
{
|
||||||
ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService, _automationDatabaseService, _alarmDatabaseService, _eventDatabaseService, homeId);
|
ActionService.HandleActionFromMQTTAsync(topic, payload, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService, _automationDatabaseService, _alarmDatabaseService, _eventDatabaseService, _home);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -128,7 +132,7 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
System.Console.WriteLine($"Drop message - spam from {topic}");
|
System.Console.WriteLine($"Drop message - spam from {topic}");
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateZigbee2MqttConfigOrStateAsync(topic, payload, homeId, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService);
|
UpdateZigbee2MqttConfigOrStateAsync(topic, payload, _home?.Id, _deviceDatabaseService, _groupDatabaseService, _providerDatabaseService, _roomDatabaseService);
|
||||||
|
|
||||||
switch (topic)
|
switch (topic)
|
||||||
{
|
{
|
||||||
@ -172,7 +176,7 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
lastTopic = topic;
|
lastTopic = topic;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Task(null);
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task HandleConnectedAsync(MqttClientConnectedEventArgs eventArgs)
|
public async Task HandleConnectedAsync(MqttClientConnectedEventArgs eventArgs)
|
||||||
@ -328,12 +332,16 @@ namespace Mqtt.Client.AspNetCore.Services
|
|||||||
state.Value = "on";
|
state.Value = "on";
|
||||||
status.Add(state);
|
status.Add(state);
|
||||||
|
|
||||||
var buildRequest = new Dictionary<string, object>();
|
var buildRequest = new Dictionary<string, object>
|
||||||
buildRequest.Add(state.Name, state.Value);
|
{
|
||||||
|
{ state.Name, state.Value }
|
||||||
|
};
|
||||||
|
|
||||||
// Update device state !
|
// Update device state !
|
||||||
zigbeeDevice.LastState = JsonConvert.SerializeObject(buildRequest);
|
zigbeeDevice.LastMessage = JsonConvert.SerializeObject(buildRequest);
|
||||||
zigbeeDevice.LastStateDate = DateTime.Now;
|
zigbeeDevice.LastMessageDate = DateTime.Now;
|
||||||
|
zigbeeDevice.IsState = true;
|
||||||
|
zigbeeDevice.State = true;
|
||||||
_DeviceDatabaseService.Update(zigbeeDevice);
|
_DeviceDatabaseService.Update(zigbeeDevice);
|
||||||
|
|
||||||
// Check if all group has the same state // Not needed as we test the first device of a group
|
// Check if all group has the same state // Not needed as we test the first device of a group
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Mqtt.Client.AspNetCore.Services;
|
using Mqtt.Client.AspNetCore.Services;
|
||||||
|
using MyCore.Framework.Business;
|
||||||
using MyCore.Interfaces.DTO;
|
using MyCore.Interfaces.DTO;
|
||||||
using MyCore.Interfaces.Models;
|
using MyCore.Interfaces.Models;
|
||||||
using MyCore.Service.Controllers.Helpers;
|
using MyCore.Service.Controllers.Helpers;
|
||||||
@ -140,7 +141,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, EventDatabaseService _EventDatabaseService, string homeId)
|
internal static async Task HandleMessageAsync(AlarmMode alarmMode, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, EventDatabaseService _EventDatabaseService, Home home)
|
||||||
{
|
{
|
||||||
bool isAction = false;
|
bool isAction = false;
|
||||||
switch (alarmMode.Type)
|
switch (alarmMode.Type)
|
||||||
@ -173,7 +174,6 @@ namespace MyCore.Service.Services
|
|||||||
validTrigger = false;
|
validTrigger = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (validTrigger && alarmTrigger.StateValue.ToLower() == triggerStateValueCheck.ToString().ToLower())
|
if (validTrigger && alarmTrigger.StateValue.ToLower() == triggerStateValueCheck.ToString().ToLower())
|
||||||
{
|
{
|
||||||
// Correct trigger !
|
// Correct trigger !
|
||||||
@ -192,7 +192,7 @@ namespace MyCore.Service.Services
|
|||||||
{
|
{
|
||||||
case ActionType.DEVICE:
|
case ActionType.DEVICE:
|
||||||
var deviceAction = _DeviceDatabaseService.GetById(action.DeviceId);
|
var deviceAction = _DeviceDatabaseService.GetById(action.DeviceId);
|
||||||
var providerActionTest = _ProviderDatabaseService.GetById(homeId, action.ProviderId);
|
var providerActionTest = _ProviderDatabaseService.GetById(home.Id, action.ProviderId);
|
||||||
|
|
||||||
DeviceNameForAction = deviceAction.Name;
|
DeviceNameForAction = deviceAction.Name;
|
||||||
actionDeviceToTest = deviceAction;
|
actionDeviceToTest = deviceAction;
|
||||||
@ -225,7 +225,7 @@ namespace MyCore.Service.Services
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var providerAction = _ProviderDatabaseService.GetById(homeId, action.ProviderId);
|
var providerAction = _ProviderDatabaseService.GetById(home.Id, action.ProviderId);
|
||||||
|
|
||||||
// Check if device exist
|
// Check if device exist
|
||||||
if (actionDeviceToTest != null && providerAction != null)
|
if (actionDeviceToTest != null && providerAction != null)
|
||||||
@ -330,12 +330,18 @@ namespace MyCore.Service.Services
|
|||||||
if (isAction)
|
if (isAction)
|
||||||
{
|
{
|
||||||
// Create an event
|
// 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 } };
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.AlarmTriggered, HomeId = home.Id, 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);
|
EventService.CreateOrUpdate(_EventDatabaseService, home.Id, eventDetailDTO, true);
|
||||||
|
|
||||||
// Send notification if exist
|
// Send notification if exist
|
||||||
if (alarmMode.Notification)
|
if (alarmMode.Notification)
|
||||||
System.Console.WriteLine($"TODO send notification");
|
{
|
||||||
|
System.Console.WriteLine($"Send notification");
|
||||||
|
NotificationDTO notificationDTO = new NotificationDTO();
|
||||||
|
notificationDTO.notificationTitle = "Alarme déclenchée";
|
||||||
|
notificationDTO.notificationMessage = $"Le capteur {deviceTrigger.Name} a fait déclencher l'alarme à {DateTime.Now.ToShortTimeString()}";
|
||||||
|
await NotificationLogic.PushFCMNotification(notificationDTO, home);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,6 @@ using Newtonsoft.Json;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Mqtt.Client.AspNetCore.Services.MqttClientMerossService;
|
|
||||||
|
|
||||||
namespace MyCore.Service.Services
|
namespace MyCore.Service.Services
|
||||||
{
|
{
|
||||||
@ -55,7 +53,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, EventDatabaseService _EventDatabaseService, string homeId)
|
public static void HandleAutomation(List<Automation> automations, Device deviceTrigger, string message, DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, GroupDatabaseService _GroupDatabaseService, EventDatabaseService _EventDatabaseService, Home home)
|
||||||
{
|
{
|
||||||
foreach (var automation in automations)
|
foreach (var automation in automations)
|
||||||
{
|
{
|
||||||
@ -100,12 +98,12 @@ namespace MyCore.Service.Services
|
|||||||
System.Console.WriteLine("Conditions respected !");
|
System.Console.WriteLine("Conditions respected !");
|
||||||
|
|
||||||
// Create an event
|
// 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 } };
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.AutomationTriggered, HomeId = home.Id, 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);
|
EventService.CreateOrUpdate(_EventDatabaseService, home.Id, eventDetailDTO, true);
|
||||||
|
|
||||||
foreach (var action in automation.Actions)
|
foreach (var action in automation.Actions)
|
||||||
{
|
{
|
||||||
HandleAction(homeId, action, _ProviderDatabaseService, _DeviceDatabaseService, _GroupDatabaseService) ;
|
HandleAction(home.Id, action, _ProviderDatabaseService, _DeviceDatabaseService, _GroupDatabaseService) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1,18 +1,13 @@
|
|||||||
using Mqtt.Client.AspNetCore.Services;
|
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.Service;
|
using MyCore.Service;
|
||||||
using MyCore.Service.Controllers.Helpers;
|
|
||||||
using MyCore.Service.Services;
|
using MyCore.Service.Services;
|
||||||
using MyCore.Services.MyControlPanel;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using static Mqtt.Client.AspNetCore.Services.MqttClientMerossService;
|
|
||||||
|
|
||||||
namespace MyCore.Services.Devices
|
namespace MyCore.Services.Devices
|
||||||
{
|
{
|
||||||
@ -22,7 +17,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, EventDatabaseService _EventDatabaseService, 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, Home home)
|
||||||
{
|
{
|
||||||
System.Console.WriteLine($"Received message {message}");
|
System.Console.WriteLine($"Received message {message}");
|
||||||
|
|
||||||
@ -57,27 +52,37 @@ 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, _EventDatabaseService, homeId);
|
AutomationService.HandleAutomation(automations, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, _EventDatabaseService, home);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Alarm
|
#region Alarm
|
||||||
AlarmMode alarmMode = _AlarmDatabaseService.GetCurrentActivatedAlarm(homeId);
|
AlarmMode alarmMode = _AlarmDatabaseService.GetCurrentActivatedAlarm(home.Id);
|
||||||
if (alarmMode != null)
|
if (alarmMode != null)
|
||||||
if (alarmMode.DevicesIds.Contains(deviceTrigger.Id))
|
if (alarmMode.DevicesIds.Contains(deviceTrigger.Id))
|
||||||
AlarmService.HandleMessage(alarmMode, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, _EventDatabaseService, homeId);
|
AlarmService.HandleMessageAsync(alarmMode, deviceTrigger, message, _DeviceDatabaseService, _ProviderDatabaseService, _GroupDatabaseService, _EventDatabaseService, home);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
// We'll try to get last info and update our objects
|
||||||
|
if (topicSplit.Length == 2)
|
||||||
|
{
|
||||||
|
// try the parsing !
|
||||||
|
var zigbeeParsedMessage = JsonConvert.DeserializeObject<Zigbee2MqttRequest>(message);
|
||||||
|
deviceTrigger = DeviceService.UpdateDeviceFromZigbeeEvent(deviceTrigger, zigbeeParsedMessage);
|
||||||
|
}
|
||||||
|
|
||||||
// Update last state of devices
|
// Update last state of devices
|
||||||
|
deviceTrigger.LastMessageDate = DateTime.Now;
|
||||||
|
deviceTrigger.LastMessage = message;
|
||||||
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 } };
|
EventDetailDTO eventDetailDTO = new EventDetailDTO() { Type = EventType.DeviceState, HomeId = home.Id, RoomId = deviceTrigger.RoomId, DeviceState = new DeviceState() { DeviceId = deviceTrigger.Id, DeviceName = deviceTrigger.Name, DeviceType = deviceTrigger.Type, Message = message } };
|
||||||
EventService.CreateOrUpdate(_EventDatabaseService, homeId, eventDetailDTO, true);
|
EventService.CreateOrUpdate(_EventDatabaseService, home.Id, eventDetailDTO, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// do nothing is a set
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@ -7,6 +7,7 @@ using MyCore.Services.MyControlPanel;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Security.Authentication;
|
using System.Security.Authentication;
|
||||||
@ -17,31 +18,38 @@ namespace MyCore.Services.Devices
|
|||||||
public class DeviceService
|
public class DeviceService
|
||||||
{
|
{
|
||||||
static List<SupportedDevice> supportedDevices = new List<SupportedDevice>() {
|
static List<SupportedDevice> supportedDevices = new List<SupportedDevice>() {
|
||||||
new SupportedDevice { Manufacturer = "Aqara", Model = "RTCGQ11LM", Description = "Aqara human body movement and illuminance sensor", DeviceType = DeviceType.Motion },
|
new SupportedDevice { Manufacturer = "Aqara", Model = "RTCGQ11LM", Description = "Aqara human body movement and illuminance sensor", DeviceType = DeviceType.Motion, IsIlluminance = true, IsOccupation = true, IsLinkQuality = true},
|
||||||
new SupportedDevice { Manufacturer = "Aqara", Model = "DJT11LM", Description = "Aqara vibration sensor", DeviceType = DeviceType.Environment },
|
new SupportedDevice { Manufacturer = "Aqara", Model = "DJT11LM", Description = "Aqara vibration sensor", DeviceType = DeviceType.Environment, IsVibration = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Aqara", Model = "SJCGQ11LM", Description = "Aqara water leak sensor", DeviceType = DeviceType.Environment },
|
new SupportedDevice { Manufacturer = "Aqara", Model = "SJCGQ11LM", Description = "Aqara water leak sensor", DeviceType = DeviceType.Environment, IsWaterLeak = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Aqara", Model = "WSDCGQ11LM", Description = "Aqara temperature, humidity and pressure sensor", DeviceType = DeviceType.Environment },
|
new SupportedDevice { Manufacturer = "Aqara", Model = "WSDCGQ11LM", Description = "Aqara temperature, humidity and pressure sensor", DeviceType = DeviceType.Environment, IsTemperature = true, IsHumidity = true, IsPressure = true, IsLinkQuality = true },
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "Xiaomi", Model = "WXKG01LM", Description = "MiJia wireless switch", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Xiaomi", Model = "WXKG01LM", Description = "MiJia wireless switch", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Xiaomi", Model = "MFKZQ01LM", Description = "Mi/Aqara smart home cube", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Xiaomi", Model = "MFKZQ01LM", Description = "Mi/Aqara smart home cube", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Xiaomi", Model = "MCCGQ01LM", Description = "MiJia door & window contact sensor", DeviceType = DeviceType.Door },
|
new SupportedDevice { Manufacturer = "Xiaomi", Model = "MCCGQ01LM", Description = "MiJia door & window contact sensor", DeviceType = DeviceType.Door, IsContact = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Xiaomi", Model = "JTYJ-GD-01LM/BW", Description = "MiJia Honeywell smoke detector", DeviceType = DeviceType.Environment },
|
new SupportedDevice { Manufacturer = "Xiaomi", Model = "JTYJ-GD-01LM/BW", Description = "MiJia Honeywell smoke detector", DeviceType = DeviceType.Environment, IsSmoke = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Xiaomi", Model = "ZNCZ04LM", Description = "Mi power plug ZigBee EU", DeviceType = DeviceType.Plug },
|
new SupportedDevice { Manufacturer = "Xiaomi", Model = "ZNCZ04LM", Description = "Mi power plug ZigBee EU", DeviceType = DeviceType.Plug, IsCurrentPower = true, IsConsumption = true, IsTemperature = true, IsVoltage = true, IsLinkQuality = true },
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "E1744", Description = "SYMFONISK Sound Controller", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E1744", Description = "SYMFONISK Sound Controller", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1836G9", Description = "TRADFRI LED bulb E26/E27 806 lumen, dimmable, warm white", DeviceType = DeviceType.Light },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1836G9", Description = "TRADFRI LED bulb E26/E27 806 lumen, dimmable, warm white", DeviceType = DeviceType.Light, IsState = true, IsBrightness = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1842G3", Description = "TRADFRI LED bulb E27 WW clear 250 lumen, dimmable", DeviceType = DeviceType.Light },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1842G3", Description = "TRADFRI LED bulb E27 WW clear 250 lumen, dimmable", DeviceType = DeviceType.Light, IsState = true, IsBrightness = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1837R5", Description = "TRADFRI LED bulb GU10 400 lumen, dimmable", DeviceType = DeviceType.Light },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1837R5", Description = "TRADFRI LED bulb GU10 400 lumen, dimmable", DeviceType = DeviceType.Light, IsState = true, IsBrightness = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "E1743", Description = "TRADFRI ON/OFF switch", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E1743", Description = "TRADFRI ON/OFF switch", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
new SupportedDevice { Manufacturer = "Ikea", Model = "E1524/E1810", Description = "TRADFRI remote control", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E1524/E1810", Description = "TRADFRI remote control", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "LED1924G9", Description = "TRADFRI bulb E26/E27 CWS 800/806 lumen, dimmable, color, opal white", DeviceType = DeviceType.Light, IsState = true, IsBrightness = true, IsColorTemp = true, IsColorXY = true, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E2007", Description = "STARKVIND air purifier", DeviceType = DeviceType.Environment, IsAirQuality = true, IsFanMode = true, IsFanSpeed = true, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "ICPSHC24-10EU-IL-1", Description = "TRADFRI driver for wireless control (10 watt)", DeviceType = DeviceType.Light, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "ICPSHC24-30EU-IL-1", Description = "TRADFRI driver for wireless control (30 watt)", DeviceType = DeviceType.Light, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E1812", Description = "TRADFRI shortcut button", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "Ikea", Model = "E1603/E1702/E1708", Description = "TRADFRI control outlet", DeviceType = DeviceType.Switch, IsState = true, IsLinkQuality = true }, // TODO update to plug
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "SONOFF", Model = "BASICZBR3", Description = "Zigbee smart switch", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "SONOFF", Model = "BASICZBR3", Description = "Zigbee smart switch", DeviceType = DeviceType.Plug, IsState = true, IsLinkQuality = true },
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "Philips", Model = "8718696743133", Description = "Hue tap", DeviceType = DeviceType.Switch },
|
new SupportedDevice { Manufacturer = "Philips", Model = "8718696743133", Description = "Hue tap", DeviceType = DeviceType.Switch, IsAction = true, IsLinkQuality = true },
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "Neo", Model = "NAS-AB02B0", Description = "Temperature & humidity sensor and alarm", DeviceType = DeviceType.Sound },
|
new SupportedDevice { Manufacturer = "Neo", Model = "NAS-AB02B0", Description = "Temperature & humidity sensor and alarm", DeviceType = DeviceType.Sound, IsHumidity = true, IsTemperature = true, IsAlarm = true, IsLinkQuality = true },
|
||||||
|
|
||||||
new SupportedDevice { Manufacturer = "TuYa", Model = "TS0201", Description = "Temperature & humidity sensor with display", DeviceType = DeviceType.Environment },
|
new SupportedDevice { Manufacturer = "TuYa", Model = "TS0201", Description = "Temperature & humidity sensor with display", DeviceType = DeviceType.Environment, IsHumidity = true, IsTemperature = true, IsLinkQuality = true },
|
||||||
|
new SupportedDevice { Manufacturer = "TuYa", Model = "LCZ030", Description = "Temperature & humidity & illuminance sensor with display", DeviceType = DeviceType.Environment, IsHumidity = true, IsTemperature = true, IsIlluminance = true, IsLinkQuality = true },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static DeviceDetailDTO CreateOrUpdate(DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, RoomDatabaseService _RoomDatabaseService, string homeId, DeviceDetailDTO deviceDetailDTO, bool create, bool isZigbee = false)
|
public static DeviceDetailDTO CreateOrUpdate(DeviceDatabaseService _DeviceDatabaseService, ProviderDatabaseService _ProviderDatabaseService, RoomDatabaseService _RoomDatabaseService, string homeId, DeviceDetailDTO deviceDetailDTO, bool create, bool isZigbee = false)
|
||||||
@ -70,7 +78,9 @@ namespace MyCore.Services.Devices
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
device.HomeId = homeId;
|
device.HomeId = homeId;
|
||||||
device.Name = deviceDetailDTO.Name;
|
if (create) {
|
||||||
|
device.Name = deviceDetailDTO.Name;
|
||||||
|
}
|
||||||
device.Description = deviceDetailDTO.Description;
|
device.Description = deviceDetailDTO.Description;
|
||||||
device.ManufacturerName = deviceDetailDTO.ManufacturerName;
|
device.ManufacturerName = deviceDetailDTO.ManufacturerName;
|
||||||
|
|
||||||
@ -89,7 +99,6 @@ namespace MyCore.Services.Devices
|
|||||||
device.Type = deviceDetailDTO.Type;
|
device.Type = deviceDetailDTO.Type;
|
||||||
device.FirmwareVersion = deviceDetailDTO.FirmwareVersion;
|
device.FirmwareVersion = deviceDetailDTO.FirmwareVersion;
|
||||||
device.HardwareVersion = deviceDetailDTO.HardwareVersion;
|
device.HardwareVersion = deviceDetailDTO.HardwareVersion;
|
||||||
device.Status = deviceDetailDTO.Status;
|
|
||||||
if (create)
|
if (create)
|
||||||
device.ConnectionStatus = ConnectionStatus.Unknown;
|
device.ConnectionStatus = ConnectionStatus.Unknown;
|
||||||
else
|
else
|
||||||
@ -101,9 +110,8 @@ namespace MyCore.Services.Devices
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
device.UpdatedDate = DateTime.Now;
|
device.UpdatedDate = DateTime.Now;
|
||||||
device.LastState = deviceDetailDTO.LastState;
|
device.LastMessage = deviceDetailDTO.LastMessage;
|
||||||
device.LastStateDate = deviceDetailDTO.LastStateDate;
|
device.LastMessageDate = deviceDetailDTO.LastMessageDate;
|
||||||
device.Status = deviceDetailDTO.Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
device.MeansOfCommunications = deviceDetailDTO.MeansOfCommunications;
|
device.MeansOfCommunications = deviceDetailDTO.MeansOfCommunications;
|
||||||
@ -117,6 +125,15 @@ namespace MyCore.Services.Devices
|
|||||||
// Todo structure SupportedOperations
|
// Todo structure SupportedOperations
|
||||||
device.SupportedOperations = deviceDetailDTO.SupportedOperations;
|
device.SupportedOperations = deviceDetailDTO.SupportedOperations;
|
||||||
|
|
||||||
|
if (deviceDetailDTO.SupportedOperations != null)
|
||||||
|
{
|
||||||
|
foreach (var supportedOperation in deviceDetailDTO.SupportedOperations)
|
||||||
|
{
|
||||||
|
var supportedOperationDeserialized = JsonConvert.DeserializeObject<Zigbee2MqttOperations>(supportedOperation);
|
||||||
|
device = UpdateDeviceCapabilities(device, supportedOperationDeserialized);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (create)
|
if (create)
|
||||||
return _DeviceDatabaseService.Create(device).ToDTO();
|
return _DeviceDatabaseService.Create(device).ToDTO();
|
||||||
else
|
else
|
||||||
@ -256,8 +273,10 @@ namespace MyCore.Services.Devices
|
|||||||
|
|
||||||
deviceDetailDTO.Battery = zigbee2MqttDevice.powerSource == null ? false : zigbee2MqttDevice.powerSource.Contains("Battery");
|
deviceDetailDTO.Battery = zigbee2MqttDevice.powerSource == null ? false : zigbee2MqttDevice.powerSource.Contains("Battery");
|
||||||
deviceDetailDTO.ManufacturerName = zigbee2MqttDevice.vendor == null ? provider.Type.ToString() : zigbee2MqttDevice.vendor.ToLower();
|
deviceDetailDTO.ManufacturerName = zigbee2MqttDevice.vendor == null ? provider.Type.ToString() : zigbee2MqttDevice.vendor.ToLower();
|
||||||
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>();
|
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>
|
||||||
deviceDetailDTO.MeansOfCommunications.Add(MeansOfCommunication.Zigbee);
|
{
|
||||||
|
MeansOfCommunication.Zigbee
|
||||||
|
};
|
||||||
|
|
||||||
deviceDetailDTO.CreatedDate = DateTime.Now;
|
deviceDetailDTO.CreatedDate = DateTime.Now;
|
||||||
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
||||||
@ -328,8 +347,10 @@ namespace MyCore.Services.Devices
|
|||||||
|
|
||||||
deviceDetailDTO.Battery = zigbee2MqttDevice.power_source == null ? false : zigbee2MqttDevice.power_source.Contains("Battery");
|
deviceDetailDTO.Battery = zigbee2MqttDevice.power_source == null ? false : zigbee2MqttDevice.power_source.Contains("Battery");
|
||||||
deviceDetailDTO.ManufacturerName = zigbee2MqttDevice.definition?.vendor == null ? provider.Type.ToString() : zigbee2MqttDevice.definition?.vendor.ToLower();
|
deviceDetailDTO.ManufacturerName = zigbee2MqttDevice.definition?.vendor == null ? provider.Type.ToString() : zigbee2MqttDevice.definition?.vendor.ToLower();
|
||||||
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>();
|
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>
|
||||||
deviceDetailDTO.MeansOfCommunications.Add(MeansOfCommunication.Zigbee);
|
{
|
||||||
|
MeansOfCommunication.Zigbee
|
||||||
|
};
|
||||||
|
|
||||||
deviceDetailDTO.GroupIds = existingDevice != null ? existingDevice.GroupIds : null;
|
deviceDetailDTO.GroupIds = existingDevice != null ? existingDevice.GroupIds : null;
|
||||||
deviceDetailDTO.Properties = existingDevice != null ? existingDevice.Properties : null;
|
deviceDetailDTO.Properties = existingDevice != null ? existingDevice.Properties : null;
|
||||||
@ -430,9 +451,11 @@ namespace MyCore.Services.Devices
|
|||||||
deviceDetailDTO.Type = DeviceType.Gateway;
|
deviceDetailDTO.Type = DeviceType.Gateway;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>();
|
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>
|
||||||
deviceDetailDTO.MeansOfCommunications.Add(MeansOfCommunication.Wifi); // To check
|
{
|
||||||
|
MeansOfCommunication.Wifi // To check
|
||||||
|
};
|
||||||
|
|
||||||
deviceDetailDTO.CreatedDate = DateTime.Now;
|
deviceDetailDTO.CreatedDate = DateTime.Now;
|
||||||
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
||||||
@ -487,8 +510,10 @@ namespace MyCore.Services.Devices
|
|||||||
}
|
}
|
||||||
// deviceDetailDTO.SupportedOperations = supportedOperationsDTO; TODO
|
// deviceDetailDTO.SupportedOperations = supportedOperationsDTO; TODO
|
||||||
|
|
||||||
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>();
|
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>
|
||||||
deviceDetailDTO.MeansOfCommunications.Add(MeansOfCommunication.Wifi); // TO CHECK
|
{
|
||||||
|
MeansOfCommunication.Wifi // TO CHECK
|
||||||
|
};
|
||||||
deviceDetailDTO.CreatedDate = DateTime.Now;
|
deviceDetailDTO.CreatedDate = DateTime.Now;
|
||||||
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
||||||
createdMerossDevices.Add(CreateOrUpdate(_DeviceDatabaseService, _ProviderDatabaseService, _RoomDatabaseService, homeId, deviceDetailDTO, true));
|
createdMerossDevices.Add(CreateOrUpdate(_DeviceDatabaseService, _ProviderDatabaseService, _RoomDatabaseService, homeId, deviceDetailDTO, true));
|
||||||
@ -533,8 +558,10 @@ namespace MyCore.Services.Devices
|
|||||||
supportedOperationsDTO.Add(supportedOperation.ToString());
|
supportedOperationsDTO.Add(supportedOperation.ToString());
|
||||||
}
|
}
|
||||||
deviceDetailDTO.SupportedOperations = supportedOperationsDTO;
|
deviceDetailDTO.SupportedOperations = supportedOperationsDTO;
|
||||||
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>();
|
deviceDetailDTO.MeansOfCommunications = new List<MeansOfCommunication>
|
||||||
deviceDetailDTO.MeansOfCommunications.Add(MeansOfCommunication.Wifi);
|
{
|
||||||
|
MeansOfCommunication.Wifi
|
||||||
|
};
|
||||||
deviceDetailDTO.CreatedDate = DateTime.Now;
|
deviceDetailDTO.CreatedDate = DateTime.Now;
|
||||||
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
deviceDetailDTO.UpdatedDate = DateTime.Now;
|
||||||
createdYeelightDevices.Add(CreateOrUpdate(_DeviceDatabaseService, _ProviderDatabaseService, _RoomDatabaseService, homeId, deviceDetailDTO, true));
|
createdYeelightDevices.Add(CreateOrUpdate(_DeviceDatabaseService, _ProviderDatabaseService, _RoomDatabaseService, homeId, deviceDetailDTO, true));
|
||||||
@ -542,5 +569,182 @@ namespace MyCore.Services.Devices
|
|||||||
|
|
||||||
return new Dictionary<string, List<DeviceDetailDTO>>() { { "createdDevices", createdYeelightDevices } }; // TODO Check if exist not supported devices
|
return new Dictionary<string, List<DeviceDetailDTO>>() { { "createdDevices", createdYeelightDevices } }; // TODO Check if exist not supported devices
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Device UpdateDeviceFromZigbeeEvent(Device device, Zigbee2MqttRequest zigbee2MqttRequest)
|
||||||
|
{
|
||||||
|
if (zigbee2MqttRequest.state != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch (zigbee2MqttRequest.state.ToLower()) {
|
||||||
|
case "on":
|
||||||
|
device.State = true;
|
||||||
|
break;
|
||||||
|
case "off":
|
||||||
|
default:
|
||||||
|
device.State = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Print($"State parsing issue : {zigbee2MqttRequest.state} - {e.Message}");
|
||||||
|
device.State = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.brightness != null)
|
||||||
|
{
|
||||||
|
device.Brightness = zigbee2MqttRequest.brightness.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.linkquality != null)
|
||||||
|
{
|
||||||
|
device.LinkQuality = zigbee2MqttRequest.linkquality.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.battery != null)
|
||||||
|
{
|
||||||
|
device.BatteryStatus = zigbee2MqttRequest.battery.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.illuminance_lux != null)
|
||||||
|
{
|
||||||
|
device.Illuminance = zigbee2MqttRequest.illuminance_lux.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.occupancy != null)
|
||||||
|
{
|
||||||
|
device.Occupation = zigbee2MqttRequest.occupancy.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.temperature != null)
|
||||||
|
{
|
||||||
|
device.Temperature = zigbee2MqttRequest.temperature.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.humidity != null)
|
||||||
|
{
|
||||||
|
device.Humidity = zigbee2MqttRequest.humidity.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.alarm != null)
|
||||||
|
{
|
||||||
|
device.Alarm = zigbee2MqttRequest.alarm.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.voltage != null)
|
||||||
|
{
|
||||||
|
device.Voltage = zigbee2MqttRequest.voltage.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.contact != null)
|
||||||
|
{
|
||||||
|
device.Contact = zigbee2MqttRequest.contact.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.consumption != null)
|
||||||
|
{
|
||||||
|
device.Consumption = zigbee2MqttRequest.consumption.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.current != null)
|
||||||
|
{
|
||||||
|
device.CurrentPower = zigbee2MqttRequest.current.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.vibration != null)
|
||||||
|
{
|
||||||
|
device.Vibration = zigbee2MqttRequest.vibration.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.water_leak != null)
|
||||||
|
{
|
||||||
|
device.WaterLeak = zigbee2MqttRequest.water_leak.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (zigbee2MqttRequest.angle != null)
|
||||||
|
{
|
||||||
|
device.Angle = zigbee2MqttRequest.angle.Value;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (zigbee2MqttRequest.action != null)
|
||||||
|
{
|
||||||
|
device.Action = zigbee2MqttRequest.action;
|
||||||
|
}
|
||||||
|
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Device UpdateDeviceCapabilities(Device device, Zigbee2MqttOperations zigbee2MqttOperations)
|
||||||
|
{
|
||||||
|
if (zigbee2MqttOperations.property != null)
|
||||||
|
{
|
||||||
|
switch (zigbee2MqttOperations.property.ToLower())
|
||||||
|
{
|
||||||
|
case "power_on_behavior":
|
||||||
|
device.IsState = true;
|
||||||
|
break;
|
||||||
|
case "linkquality":
|
||||||
|
device.IsLinkQuality = true;
|
||||||
|
break;
|
||||||
|
case "air_quality":
|
||||||
|
device.IsAirQuality = true;
|
||||||
|
break;
|
||||||
|
case "temperature":
|
||||||
|
device.IsTemperature = true;
|
||||||
|
break;
|
||||||
|
case "humidity":
|
||||||
|
device.IsHumidity = true;
|
||||||
|
break;
|
||||||
|
case "battery":
|
||||||
|
device.Battery = true;
|
||||||
|
break;
|
||||||
|
case "pressure":
|
||||||
|
device.IsPressure = true;
|
||||||
|
break;
|
||||||
|
case "illuminance_lux":
|
||||||
|
device.IsIlluminance = true;
|
||||||
|
break;
|
||||||
|
case "effect":
|
||||||
|
device.IsBrightness = true;
|
||||||
|
break;
|
||||||
|
case "voltage":
|
||||||
|
device.IsVoltage = true;
|
||||||
|
break;
|
||||||
|
case "contact":
|
||||||
|
device.IsContact = true;
|
||||||
|
break;
|
||||||
|
case "smoke":
|
||||||
|
device.IsSmoke = true;
|
||||||
|
break;
|
||||||
|
case "action":
|
||||||
|
device.IsAction = true;
|
||||||
|
break;
|
||||||
|
case "vibration":
|
||||||
|
device.IsVibration = true;
|
||||||
|
break;
|
||||||
|
case "water_leak":
|
||||||
|
device.IsWaterLeak = true;
|
||||||
|
break;
|
||||||
|
case "state":
|
||||||
|
device.IsState = true;
|
||||||
|
break;
|
||||||
|
case "power":
|
||||||
|
device.IsCurrentPower = true;
|
||||||
|
break;
|
||||||
|
case "energy":
|
||||||
|
device.IsConsumption = true;
|
||||||
|
break;
|
||||||
|
case "occupancy":
|
||||||
|
device.IsOccupation = true;
|
||||||
|
break;
|
||||||
|
case "illuminance":
|
||||||
|
device.IsIlluminance = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return device;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,12 +56,50 @@ namespace MyCore.Service
|
|||||||
return room.ToDTO(devices.Select(d => d.ToDTO()).ToList());
|
return room.ToDTO(devices.Select(d => d.ToDTO()).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static dynamic GetValueFromJson(List<DeviceDetailDTO> devicesDetail, DeviceType deviceType, string field, bool ifAny)
|
public static dynamic GetValueFromDeviceType(List<DeviceDetailDTO> devicesDetail, RoomMainInfo roomMainInfo)
|
||||||
{
|
{
|
||||||
var isAny = false;
|
|
||||||
foreach (var device in devicesDetail)
|
foreach (var device in devicesDetail)
|
||||||
{
|
{
|
||||||
if (device.LastState != null)
|
switch (roomMainInfo)
|
||||||
|
{
|
||||||
|
case RoomMainInfo.Temperature:
|
||||||
|
if (device.IsTemperature && device.Temperature != null && device.Temperature != 0)
|
||||||
|
{
|
||||||
|
return device.Temperature.ToString();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RoomMainInfo.Humidity:
|
||||||
|
if (device.IsHumidity && device.Humidity != null && device.Humidity != 0)
|
||||||
|
{
|
||||||
|
return device.Humidity.ToString();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RoomMainInfo.Door:
|
||||||
|
if (device.IsContact)
|
||||||
|
{
|
||||||
|
return device.Contact;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RoomMainInfo.Motion:
|
||||||
|
if (device.IsOccupation)
|
||||||
|
{
|
||||||
|
return device.Occupation;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RoomMainInfo.Illuminance:
|
||||||
|
if (device.IsIlluminance && device.Illuminance != null && device.Illuminance != 0)
|
||||||
|
{
|
||||||
|
return device.Illuminance.ToString();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RoomMainInfo.Pressure:
|
||||||
|
if (device.IsPressure && device.Pressure != null && device.Pressure != 0)
|
||||||
|
{
|
||||||
|
return device.Pressure.ToString();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/*if (device.LastState != null)
|
||||||
{
|
{
|
||||||
var lastState = JsonConvert.DeserializeObject<JObject>(device.LastState);
|
var lastState = JsonConvert.DeserializeObject<JObject>(device.LastState);
|
||||||
if (lastState[field] != null && deviceType == device.Type)
|
if (lastState[field] != null && deviceType == device.Type)
|
||||||
@ -75,12 +113,9 @@ namespace MyCore.Service
|
|||||||
return lastState[field];
|
return lastState[field];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
if (ifAny)
|
return null;
|
||||||
return isAny;
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -170,7 +170,7 @@ namespace MyCore
|
|||||||
|
|
||||||
services.AddMqttClientHostedService(); // Todo client files (a lot are useless)
|
services.AddMqttClientHostedService(); // Todo client files (a lot are useless)
|
||||||
|
|
||||||
services.AddScoped<FirebaseClient>(c => {
|
services.AddSingleton<FirebaseClient>(c => {
|
||||||
var projectId = Configuration["GCP:project_id"];
|
var projectId = Configuration["GCP:project_id"];
|
||||||
var gcpCreds = File.ReadAllText("googleConfig.json");
|
var gcpCreds = File.ReadAllText("googleConfig.json");
|
||||||
var firebaseCreds = File.ReadAllText("googleConfig.json");
|
var firebaseCreds = File.ReadAllText("googleConfig.json");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user