From f2cab703251f9e5c02a2d5b05182bba9104818e4 Mon Sep 17 00:00:00 2001 From: sivar2311 Date: Thu, 9 Jun 2022 11:33:54 +0200 Subject: [PATCH] PushNotifications new capability added --- src/Capabilities/PushNotification.h | 53 +++++++++++++++++++++++++++++ src/SinricProAirQualitySensor.h | 4 ++- src/SinricProBlinds.h | 3 ++ src/SinricProCamera.h | 3 ++ src/SinricProContactsensor.h | 3 ++ src/SinricProDimSwitch.h | 3 ++ src/SinricProDoorbell.h | 3 ++ src/SinricProFan.h | 3 ++ src/SinricProFanUS.h | 3 ++ src/SinricProGarageDoor.h | 3 ++ src/SinricProLight.h | 3 ++ src/SinricProLock.h | 3 ++ src/SinricProMotionsensor.h | 3 ++ src/SinricProPowerSensor.h | 3 ++ src/SinricProSpeaker.h | 3 ++ src/SinricProStrings.h | 1 + src/SinricProSwitch.h | 3 ++ src/SinricProTV.h | 3 ++ src/SinricProTemperaturesensor.h | 3 ++ src/SinricProThermostat.h | 3 ++ src/SinricProWindowAC.h | 3 ++ 21 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/Capabilities/PushNotification.h diff --git a/src/Capabilities/PushNotification.h b/src/Capabilities/PushNotification.h new file mode 100644 index 00000000..8f684661 --- /dev/null +++ b/src/Capabilities/PushNotification.h @@ -0,0 +1,53 @@ +#pragma once + +#include "../EventLimiter.h" +#include "../SinricProStrings.h" + +#include "../SinricProNamespace.h" +namespace SINRICPRO_NAMESPACE { + +FSTR(PUSHNOTIFICATION, pushNotification); // "pushNotification" +FSTR(PUSHNOTIFICATION, alert); // "alert" + +/** + * @brief PushNotification + * @ingroup Capabilities + **/ +template +class PushNotification { + public: + PushNotification(); + bool sendPushNotification(String notification); + private: + EventLimiter event_limiter; +}; + +template +PushNotification::PushNotification() +: event_limiter (EVENT_LIMIT_SENSOR_VALUE) {} + +/** + * @brief Sending push notifications to SinricPro App + * + * @param notification `String` with the notification + * @return the success of sending the event + * @retval true event has been sent successfully + * @retval false event has not been sent, maybe you sent to much events in a short distance of time + **/ +template +bool PushNotification::sendPushNotification(String notification) { + if (event_limiter) return false; + T* device = static_cast(this); + + DynamicJsonDocument eventMessage = device->prepareEvent(FSTR_PUSHNOTIFICATION_pushNotification, FSTR_SINRICPRO_ALERT); + JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value]; + + event_value[FSTR_PUSHNOTIFICATION_alert] = notification; + + return device->sendEvent(eventMessage); +} + +} // SINRICPRO_NAMESPACE + +template +using PushNotification = SINRICPRO_NAMESPACE::PushNotification; \ No newline at end of file diff --git a/src/SinricProAirQualitySensor.h b/src/SinricProAirQualitySensor.h index c751cd4e..2af5f992 100644 --- a/src/SinricProAirQualitySensor.h +++ b/src/SinricProAirQualitySensor.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/AirQualitySensor.h" @@ -21,12 +22,13 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProAirQualitySensor : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public AirQualitySensor { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class AirQualitySensor; - public: SinricProAirQualitySensor(const String &deviceId) : SinricProDevice(deviceId, "AIR_QUALITY_SENSOR"){}; }; diff --git a/src/SinricProBlinds.h b/src/SinricProBlinds.h index aaf8dbb7..7487e7ac 100644 --- a/src/SinricProBlinds.h +++ b/src/SinricProBlinds.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/RangeController.h" #include "Capabilities/PowerStateController.h" @@ -26,9 +27,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProBlinds : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public RangeController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class RangeController; public: diff --git a/src/SinricProCamera.h b/src/SinricProCamera.h index 54107fad..af87fd12 100644 --- a/src/SinricProCamera.h +++ b/src/SinricProCamera.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "SinricProNamespace.h" @@ -21,8 +22,10 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProCamera : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; public: SinricProCamera(const String &deviceId) : SinricProDevice(deviceId, "CAMERA") {} diff --git a/src/SinricProContactsensor.h b/src/SinricProContactsensor.h index 2b2b6735..1d090042 100644 --- a/src/SinricProContactsensor.h +++ b/src/SinricProContactsensor.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/ContactSensor.h" @@ -21,9 +22,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProContactsensor : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public ContactSensor { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class ContactSensor; public: diff --git a/src/SinricProDimSwitch.h b/src/SinricProDimSwitch.h index 7afe3b01..b000dc2c 100644 --- a/src/SinricProDimSwitch.h +++ b/src/SinricProDimSwitch.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/PowerLevelController.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProDimSwitch : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public PowerLevelController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class PowerLevelController; public: diff --git a/src/SinricProDoorbell.h b/src/SinricProDoorbell.h index a4bb6c6e..c52a1081 100644 --- a/src/SinricProDoorbell.h +++ b/src/SinricProDoorbell.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/Doorbell.h" @@ -21,9 +22,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProDoorbell : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public Doorbell { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class Doorbell; public: diff --git a/src/SinricProFan.h b/src/SinricProFan.h index 0b460330..622941b3 100644 --- a/src/SinricProFan.h +++ b/src/SinricProFan.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/PowerLevelController.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProFan : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public PowerLevelController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class PowerLevelController; public: diff --git a/src/SinricProFanUS.h b/src/SinricProFanUS.h index 90384b3a..76341278 100644 --- a/src/SinricProFanUS.h +++ b/src/SinricProFanUS.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/RangeController.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProFanUS : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public RangeController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class RangeController; public: diff --git a/src/SinricProGarageDoor.h b/src/SinricProGarageDoor.h index 019d3989..bf2b895a 100644 --- a/src/SinricProGarageDoor.h +++ b/src/SinricProGarageDoor.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/DoorController.h" #include "SinricProNamespace.h" @@ -24,8 +25,10 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProGarageDoor : public SinricProDevice, public SettingController, + public PushNotification, public DoorController { friend class SettingController; + friend class PushNotification; friend class DoorController; public: SinricProGarageDoor(const String &deviceId) : SinricProDevice(deviceId, "GARAGE_DOOR") {} diff --git a/src/SinricProLight.h b/src/SinricProLight.h index e08e7198..155be28e 100644 --- a/src/SinricProLight.h +++ b/src/SinricProLight.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/BrightnessController.h" #include "Capabilities/ColorController.h" @@ -29,11 +30,13 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProLight : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public BrightnessController, public ColorController, public ColorTemperatureController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class BrightnessController; friend class ColorController; diff --git a/src/SinricProLock.h b/src/SinricProLock.h index 0d6a1cc2..b7879bd7 100644 --- a/src/SinricProLock.h +++ b/src/SinricProLock.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/LockController.h" #include "SinricProNamespace.h" @@ -25,8 +26,10 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProLock : public SinricProDevice, public SettingController, + public PushNotification, public LockController { friend class SettingController; + friend class PushNotification; friend class LockController; public: SinricProLock(const String &deviceId) : SinricProDevice(deviceId, "SMARTLOCK") {} diff --git a/src/SinricProMotionsensor.h b/src/SinricProMotionsensor.h index 91d0d0ce..eca6e4d5 100644 --- a/src/SinricProMotionsensor.h +++ b/src/SinricProMotionsensor.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/MotionSensor.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProMotionsensor : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public MotionSensor { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class MotionSensor; public: diff --git a/src/SinricProPowerSensor.h b/src/SinricProPowerSensor.h index 3ed344d4..c02b71a7 100644 --- a/src/SinricProPowerSensor.h +++ b/src/SinricProPowerSensor.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerSensor.h" #include "Capabilities/PowerStateController.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProPowerSensor : public SinricProDevice, public SettingController, + public PushNotification, public PowerSensor, public PowerStateController { friend class SettingController; + friend class PushNotification; friend class PowerSensor; friend class PowerStateController; public: diff --git a/src/SinricProSpeaker.h b/src/SinricProSpeaker.h index 3f574536..78c2e7f2 100644 --- a/src/SinricProSpeaker.h +++ b/src/SinricProSpeaker.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/MuteController.h" #include "Capabilities/VolumeController.h" @@ -42,6 +43,7 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProSpeaker : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public MuteController, public VolumeController, @@ -50,6 +52,7 @@ class SinricProSpeaker : public SinricProDevice, public EqualizerController, public ModeController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class MuteController; friend class VolumeController; diff --git a/src/SinricProStrings.h b/src/SinricProStrings.h index f3d7a06f..61836df1 100644 --- a/src/SinricProStrings.h +++ b/src/SinricProStrings.h @@ -36,6 +36,7 @@ FSTR(SINRICPRO, HMAC); // "HMAC" FSTR(SINRICPRO, timestamp); // "timestamp" FSTR(SINRICPRO, PERIODIC_POLL); // "PERIODIC_POLL" FSTR(SINRICPRO, PHYSICAL_INTERACTION); // "PHYSICAL_INTERACTION" +FSTR(SINRICPRO, ALERT); // "ALERT" FSTR(SINRICPRO, OK); // "OK" } // SINRICPRO_NAMESPACE \ No newline at end of file diff --git a/src/SinricProSwitch.h b/src/SinricProSwitch.h index 2e876d37..9ec12274 100644 --- a/src/SinricProSwitch.h +++ b/src/SinricProSwitch.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "SinricProNamespace.h" @@ -21,8 +22,10 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProSwitch : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; public: SinricProSwitch(const String &deviceId) : SinricProDevice(deviceId, "SWITCH") {}; diff --git a/src/SinricProTV.h b/src/SinricProTV.h index a18d830f..52620b65 100644 --- a/src/SinricProTV.h +++ b/src/SinricProTV.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/VolumeController.h" #include "Capabilities/MuteController.h" @@ -37,6 +38,7 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProTV : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public VolumeController, public MuteController, @@ -44,6 +46,7 @@ class SinricProTV : public SinricProDevice, public InputController, public ChannelController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class VolumeController; friend class MuteController; diff --git a/src/SinricProTemperaturesensor.h b/src/SinricProTemperaturesensor.h index 693d3c19..8ea42d21 100644 --- a/src/SinricProTemperaturesensor.h +++ b/src/SinricProTemperaturesensor.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/TemperatureSensor.h" @@ -22,9 +23,11 @@ namespace SINRICPRO_NAMESPACE { */ class SinricProTemperaturesensor : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public TemperatureSensor { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class TemperatureSensor; public: diff --git a/src/SinricProThermostat.h b/src/SinricProThermostat.h index 421fc215..b02d614d 100644 --- a/src/SinricProThermostat.h +++ b/src/SinricProThermostat.h @@ -9,6 +9,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/ThermostatController.h" #include "Capabilities/TemperatureSensor.h" @@ -29,10 +30,12 @@ namespace SINRICPRO_NAMESPACE { **/ class SinricProThermostat : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public ThermostatController, public TemperatureSensor { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class ThermostatController; friend class TemperatureSensor; diff --git a/src/SinricProWindowAC.h b/src/SinricProWindowAC.h index e6d4e353..16fe9b00 100644 --- a/src/SinricProWindowAC.h +++ b/src/SinricProWindowAC.h @@ -8,6 +8,7 @@ #include "SinricProDevice.h" #include "Capabilities/SettingController.h" +#include "Capabilities/PushNotification.h" #include "Capabilities/PowerStateController.h" #include "Capabilities/RangeController.h" #include "Capabilities/ThermostatController.h" @@ -30,10 +31,12 @@ namespace SINRICPRO_NAMESPACE { class SinricProWindowAC : public SinricProDevice, public SettingController, + public PushNotification, public PowerStateController, public RangeController, public ThermostatController { friend class SettingController; + friend class PushNotification; friend class PowerStateController; friend class RangeController; friend class ThermostatController;