1 #pragma once 2 3 #include "../DomoticzHardware.h" 4 #include "PhilipsHueSensors.h" 5 6 namespace Json 7 { 8 class Value; 9 }; 10 11 class CPhilipsHue : public CDomoticzHardwareBase 12 { 13 enum _eHueLightType 14 { 15 HLTYPE_NORMAL, 16 HLTYPE_DIM, 17 HLTYPE_RGB_W, 18 HLTYPE_SCENE, 19 HLTYPE_CW_WW, 20 HLTYPE_RGB_CW_WW 21 }; 22 enum _eHueColorMode 23 { 24 HLMODE_NONE, 25 HLMODE_HS, 26 HLMODE_CT, 27 HLMODE_XY 28 }; 29 struct _tHueLightState 30 { 31 bool on; 32 _eHueColorMode mode; 33 int level; 34 int hue; 35 int sat; 36 int ct; 37 double x; 38 double y; 39 }; 40 struct _tHueGroup 41 { 42 _tHueLightState gstate; 43 std::vector<int> lights; 44 }; 45 struct _tHueScene 46 { 47 std::string id; 48 std::string name; 49 std::string lastupdated; 50 }; 51 52 public: 53 CPhilipsHue(const int ID, const std::string &IPAddress, const unsigned short Port, const std::string &Username, const int poll, const int Options); 54 ~CPhilipsHue(void); 55 bool WriteToHardware(const char *pdata, const unsigned char length) override; 56 static std::string RegisterUser(const std::string &IPAddress, const unsigned short Port, const std::string &username); 57 private: 58 void Init(); 59 bool StartHardware() override; 60 bool StopHardware() override; 61 void Do_Work(); 62 bool GetStates(); 63 bool GetLights(const Json::Value &root); 64 bool GetGroups(const Json::Value &root); 65 bool GetScenes(const Json::Value &root); 66 bool GetSensors(const Json::Value &root); 67 void InsertUpdateLamp(const int NodeID, const _eHueLightType LType, const _tHueLightState tstate, const std::string& Name, const std::string& Options, const std::string& modelid, const bool AddMissingDevice); 68 bool InsertUpdateSelectorSwitch(const int NodeID, const uint8_t Unitcode, const uint8_t selectorLevel, const std::string& Name, const uint8_t BatteryLevel); 69 void InsertUpdateSwitch(const int NodeID, const uint8_t Unitcode, const _eSwitchType SType, const bool bIsOn, const std::string &Name, const uint8_t BatteryLevel); 70 void SetSwitchOptions(const int NodeID, const uint8_t Unitcode, const std::map<std::string, std::string> options); 71 bool SwitchLight(const int nodeID, const std::string &LCmd, const int svalue, const int svalue2 = 0, const int svalue3 = 0); 72 static void LightStateFromJSON(const Json::Value &lightstate, _tHueLightState &tlight, _eHueLightType <ype); 73 static void RgbFromXY(const double x, const double y, const double bri, const std::string &modelid, uint8_t &r8, uint8_t &g8, uint8_t &b8); 74 static bool StatesSimilar(const _tHueLightState &s1, const _tHueLightState &s2); 75 private: 76 int m_poll_interval; 77 bool m_add_groups; 78 bool m_add_scenes; 79 std::string m_IPAddress; 80 unsigned short m_Port; 81 std::string m_UserName; 82 std::shared_ptr<std::thread> m_thread; 83 std::map<int, _tHueLightState> m_lights; 84 std::map<int, _tHueGroup> m_groups; 85 std::map<std::string, _tHueScene> m_scenes; 86 std::map<int, CPHSensor> m_sensors; 87 }; 88 89