From 83483498a8161831a7756b0c58c2258d159c5003 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Mon, 18 Jan 2021 18:29:55 +0100 Subject: [PATCH] MC Add test motion + Automation WIP --- MyCore.Framework/Business/ActionLogic.cs | 10 +++++ .../MyControlPanel/Database/Automation.cs | 3 ++ .../Providers/Zigbee/Aqara/AqaraMotion.cs | 13 ++++++ .../Providers/Zigbee/Zigbee2MqttRequest.cs | 13 ++++++ MyCore/Services/Devices/ActionService.cs | 44 +++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 MyCore.Framework/Business/ActionLogic.cs create mode 100644 MyCore.Interfaces/Models/Providers/Zigbee/Aqara/AqaraMotion.cs create mode 100644 MyCore.Interfaces/Models/Providers/Zigbee/Zigbee2MqttRequest.cs diff --git a/MyCore.Framework/Business/ActionLogic.cs b/MyCore.Framework/Business/ActionLogic.cs new file mode 100644 index 0000000..3df2f57 --- /dev/null +++ b/MyCore.Framework/Business/ActionLogic.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace MyCore.Framework.Business +{ + class ActionLogic + { + } +} diff --git a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs index 6774cbb..35aec86 100644 --- a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs +++ b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs @@ -25,6 +25,9 @@ namespace MyCore.Interfaces.Models [BsonElement("Conditions")] public List Conditions { get; set; } + [BsonElement("DevicesIds")] + public List DevicesIds { get; set; } + [BsonElement("Actions")] public List Actions { get; set; } diff --git a/MyCore.Interfaces/Models/Providers/Zigbee/Aqara/AqaraMotion.cs b/MyCore.Interfaces/Models/Providers/Zigbee/Aqara/AqaraMotion.cs new file mode 100644 index 0000000..d4417da --- /dev/null +++ b/MyCore.Interfaces/Models/Providers/Zigbee/Aqara/AqaraMotion.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace MyCore.Interfaces.Models.Providers.Zigbee.Aqara +{ + public class AqaraMotion : AqaraDevice + { + public int illuminance { get; set; } + public int illuminance_lux { get; set; } + public bool occupancy { get; set; } + } +} diff --git a/MyCore.Interfaces/Models/Providers/Zigbee/Zigbee2MqttRequest.cs b/MyCore.Interfaces/Models/Providers/Zigbee/Zigbee2MqttRequest.cs new file mode 100644 index 0000000..5b5fe9e --- /dev/null +++ b/MyCore.Interfaces/Models/Providers/Zigbee/Zigbee2MqttRequest.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace MyCore.Interfaces.Models +{ + public class Zigbee2MqttRequest + { + public string state { get; set; } + + // TODO + } +} diff --git a/MyCore/Services/Devices/ActionService.cs b/MyCore/Services/Devices/ActionService.cs index 798a440..a2c8073 100644 --- a/MyCore/Services/Devices/ActionService.cs +++ b/MyCore/Services/Devices/ActionService.cs @@ -1,5 +1,6 @@ using Mqtt.Client.AspNetCore.Services; using MyCore.Interfaces.Models; +using MyCore.Interfaces.Models.Providers.Zigbee.Aqara; using MyCore.Services.MyControlPanel; using Newtonsoft.Json; using System; @@ -61,11 +62,15 @@ namespace MyCore.Services.Devices i++; }*/ MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.ON, 1); + MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.ON, 2); + MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.ON, 3); //MqttClientMerossService.ExecuteCommand(prise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.ON, 0); } else { MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.OFF, 1); + MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.OFF, 2); + MqttClientMerossService.ExecuteCommand(multiprise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.OFF, 3); //MqttClientMerossService.ExecuteCommand(prise.ServiceIdentification, Method.SET, CommandMqtt.TOGGLEX, "", "", ToggleStatus.OFF, 0); } } @@ -80,6 +85,45 @@ namespace MyCore.Services.Devices } //await MqttClientOnlineService.PublishMessage("Notification", "Hey magic cube 0 !"); } + if (topicSplit[1].Contains("MotionWC")) + { + var aqaraSwitch = JsonConvert.DeserializeObject(message); + if (aqaraSwitch.occupancy) + { + Zigbee2MqttRequest zigbee2MqttRequest = new Zigbee2MqttRequest() { state = "ON"}; + var request = JsonConvert.SerializeObject(zigbee2MqttRequest); + + MqttClientService.PublishMessage("zigbee2mqtt/LampeWC/set", request); + } + else { + Zigbee2MqttRequest zigbee2MqttRequest = new Zigbee2MqttRequest() { state = "OFF" }; + var request = JsonConvert.SerializeObject(zigbee2MqttRequest); + + MqttClientService.PublishMessage("zigbee2mqtt/LampeWC/set", request); + } + } + if (topicSplit[1].Contains("Motion0")) + { + var aqaraSwitch = JsonConvert.DeserializeObject(message); + if (aqaraSwitch.occupancy) + { + Zigbee2MqttRequest zigbee2MqttRequest = new Zigbee2MqttRequest() { state = "ON" }; + var request = JsonConvert.SerializeObject(zigbee2MqttRequest); + + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau0/set", request); + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau1/set", request); + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau2/set", request); + } + else + { + Zigbee2MqttRequest zigbee2MqttRequest = new Zigbee2MqttRequest() { state = "OFF" }; + var request = JsonConvert.SerializeObject(zigbee2MqttRequest); + + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau0/set", request); + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau1/set", request); + MqttClientService.PublishMessage("zigbee2mqtt/GU10Bureau2/set", request); + } + } break; default: break;