/** \file ZLLSensors.cpp Copyright Notice\n Copyright (C) 2020 Jan Rogall - developer\n This file is part of hueplusplus. hueplusplus is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. hueplusplus is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with hueplusplus. If not, see . */ #include "hueplusplus/ZLLSensors.h" #include "hueplusplus/HueExceptionMacro.h" namespace hueplusplus { namespace sensors { bool ZGPSwitch::isOn() const { return state.getValue().at("config").at("on").get(); } void ZGPSwitch::setOn(bool on) { sendPutRequest("/config", nlohmann::json{ {"on", on} }, CURRENT_FILE_INFO); } int ZGPSwitch::getButtonEvent() const { return state.getValue().at("state").at("buttonevent").get(); } bool ZLLSwitch::isOn() const { return state.getValue().at("config").at("on").get(); } void ZLLSwitch::setOn(bool on) { sendPutRequest("/config", nlohmann::json{ {"on", on} }, CURRENT_FILE_INFO); } bool ZLLSwitch::hasBatteryState() const { return state.getValue().at("config").count("battery") != 0; } int ZLLSwitch::getBatteryState() const { return state.getValue().at("config").at("battery").get(); } Alert ZLLSwitch::getLastAlert() const { std::string alert = state.getValue().at("config").at("alert").get(); return alertFromString(alert); } void ZLLSwitch::sendAlert(Alert type) { sendPutRequest("/state", nlohmann::json {{"alert", alertToString(type)}}, CURRENT_FILE_INFO); } bool ZLLSwitch::isReachable() const { return state.getValue().at("config").at("reachable").get(); } int ZLLSwitch::getButtonEvent() const { return state.getValue().at("state").at("buttonevent").get(); } time::AbsoluteTime ZLLSwitch::getLastUpdated() const { const nlohmann::json& stateJson = state.getValue().at("state"); auto it = stateJson.find("lastupdated"); if (it == stateJson.end() || !it->is_string() || *it == "none") { return time::AbsoluteTime(std::chrono::system_clock::time_point(std::chrono::seconds {0})); } return time::AbsoluteTime::parseUTC(it->get()); } bool ZLLPresence::isOn() const { return state.getValue().at("config").at("on").get(); } void ZLLPresence::setOn(bool on) { sendPutRequest("/config", nlohmann::json{ {"on", on} }, CURRENT_FILE_INFO); } bool ZLLPresence::hasBatteryState() const { return state.getValue().at("config").count("battery") != 0; } int ZLLPresence::getBatteryState() const { return state.getValue().at("config").at("battery").get(); } Alert ZLLPresence::getLastAlert() const { std::string alert = state.getValue().at("config").at("alert").get(); return alertFromString(alert); } void ZLLPresence::sendAlert(Alert type) { sendPutRequest("/state", nlohmann::json {{"alert", alertToString(type)}}, CURRENT_FILE_INFO); } bool ZLLPresence::isReachable() const { return state.getValue().at("config").at("reachable").get(); } int ZLLPresence::getSensitivity() const { return state.getValue().at("config").at("sensitivity").get(); } int ZLLPresence::getMaxSensitivity() const { return state.getValue().at("config").at("sensitivitymax").get(); } void ZLLPresence::setSensitivity(int sensitivity) { sendPutRequest("/state", nlohmann::json {{"sensitivity", sensitivity}}, CURRENT_FILE_INFO); } bool ZLLPresence::getPresence() const { return state.getValue().at("state").at("presence").get(); } time::AbsoluteTime ZLLPresence::getLastUpdated() const { const nlohmann::json& stateJson = state.getValue().at("state"); auto it = stateJson.find("lastupdated"); if (it == stateJson.end() || !it->is_string() || *it == "none") { return time::AbsoluteTime(std::chrono::system_clock::time_point(std::chrono::seconds {0})); } return time::AbsoluteTime::parseUTC(it->get()); } bool ZLLTemperature::isOn() const { return state.getValue().at("config").at("on").get(); } void ZLLTemperature::setOn(bool on) { sendPutRequest("/config", { "on", on }, CURRENT_FILE_INFO); } bool ZLLTemperature::hasBatteryState() const { return state.getValue().at("config").count("battery") != 0; } int ZLLTemperature::getBatteryState() const { return state.getValue().at("config").at("battery").get(); } Alert ZLLTemperature::getLastAlert() const { std::string alert = state.getValue().at("config").at("alert").get(); return alertFromString(alert); } void ZLLTemperature::sendAlert(Alert type) { sendPutRequest("/state", nlohmann::json{ {"alert", alertToString(type)} }, CURRENT_FILE_INFO); } bool ZLLTemperature::isReachable() const { return state.getValue().at("config").at("reachable").get(); } int ZLLTemperature::getTemperature() const { return state.getValue().at("state").at("temperature").get(); } bool ZLLLightLevel::isOn() const { return state.getValue().at("config").at("on").get(); } void ZLLLightLevel::setOn(bool on) { sendPutRequest("/config", { "on", on }, CURRENT_FILE_INFO); } bool ZLLLightLevel::hasBatteryState() const { return state.getValue().at("config").count("battery") != 0; } int ZLLLightLevel::getBatteryState() const { return state.getValue().at("config").at("battery").get(); } bool ZLLLightLevel::isReachable() const { return state.getValue().at("config").at("reachable").get(); } int ZLLLightLevel::getDarkThreshold() const { return state.getValue().at("config").at("tholddark").get(); } void ZLLLightLevel::setDarkThreshold(int threshold) { sendPutRequest("/config", nlohmann::json{ { "tholddark", threshold} }, CURRENT_FILE_INFO); } int ZLLLightLevel::getThresholdOffset() const { return state.getValue().at("config").at("tholdoffset").get(); } void ZLLLightLevel::setThresholdOffset(int offset) { sendPutRequest("/config", nlohmann::json{ { "tholdoffset", offset} }, CURRENT_FILE_INFO); } int ZLLLightLevel::getLightLevel() const { return state.getValue().at("state").at("lightlevel").get(); } bool ZLLLightLevel::isDark() const { return state.getValue().at("state").at("dark").get(); } bool ZLLLightLevel::isDaylight() const { return state.getValue().at("state").at("daylight").get(); } time::AbsoluteTime ZLLLightLevel::getLastUpdated() const { const nlohmann::json& stateJson = state.getValue().at("state"); auto it = stateJson.find("lastupdated"); if (it == stateJson.end() || !it->is_string() || *it == "none") { return time::AbsoluteTime(std::chrono::system_clock::time_point(std::chrono::seconds{ 0 })); } return time::AbsoluteTime::parseUTC(it->get()); } } // namespace sensors } // namespace hueplusplus