/** \file BaseDevice.cpp Copyright Notice\n Copyright (C) 2020 Stefan Herbrechtsmeier - 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/BaseDevice.h" #include #include #include #include "hueplusplus/HueExceptionMacro.h" #include "hueplusplus/Utils.h" #include "json/json.hpp" namespace hueplusplus { int BaseDevice::getId() const { return id; } std::string BaseDevice::getType() const { return state.getValue().at("type").get(); } std::string BaseDevice::getName() { return state.getValue().at("name").get(); } std::string BaseDevice::getName() const { return state.getValue().at("name").get(); } std::string BaseDevice::getModelId() const { return state.getValue().at("modelid").get(); } std::string BaseDevice::getUId() const { return state.getValue().value("uniqueid", ""); } std::string BaseDevice::getManufacturername() const { return state.getValue().value("manufacturername", ""); } std::string BaseDevice::getProductname() const { return state.getValue().value("productname", ""); } std::string BaseDevice::getSwVersion() { return state.getValue().at("swversion").get(); } std::string BaseDevice::getSwVersion() const { return state.getValue().at("swversion").get(); } bool BaseDevice::setName(const std::string& name) { nlohmann::json request = { {"name", name} }; nlohmann::json reply = sendPutRequest(request, "/name", CURRENT_FILE_INFO); // Check whether request was successful (returned name is not necessarily the actually set name) // If it already exists, a number is added, if it is too long to be returned, "Updated" is returned return utils::safeGetMember(reply, 0, "success", "/lights/" + std::to_string(id) + "/name").is_string(); } BaseDevice::BaseDevice( int id, const HueCommandAPI& commands, const std::string& path, std::chrono::steady_clock::duration refreshDuration) : id(id), state(path + std::to_string(id), commands, refreshDuration), path(path) { state.refresh(); } nlohmann::json BaseDevice::sendPutRequest(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo) { return state.getCommandAPI().PUTRequest(path + std::to_string(id) + subPath, request, std::move(fileInfo)); } void BaseDevice::refresh() { state.refresh(); } } // namespace hueplusplus