/* * Author: Jon Trulson * Copyright (c) 2016 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include "ozwinterface.hpp" namespace upm { /** * @library ozw * @comname UPM API for the Trane TZEMT400 Z-Wave Thermostat. * @con uart * * @brief UPM API for Trane TZEMT400 Z-Wave Thermostat * * This module allows for monitoring certain elements of a Trane * TZEMT400 Z-Wave Thermostat. It was tested with a Trane * TZEMT400BB32MAA variant. */ class TZEMT400 : public ozwInterface { public: /** * These values correspond to the index values of the given node * */ typedef enum : int { INDEX_Temperature = 0, INDEX_Mode = 1, INDEX_Operating_State = 2, INDEX_Heating_Point = 3, INDEX_Cooling_Point = 4, INDEX_Fan_Mode = 5, INDEX_Fan_State = 6, INDEX_FC_Units = 14 // F or C units } INDEX_VALUES_T; /** * TZEMT400 constructor * * @param nodeID The ZWave node number of the device we are * interested in. Use the ozwdump example to see what nodes you * have available. */ TZEMT400(int nodeID); /** * TZEMT400 Destructor */ ~TZEMT400(); /** * Return the current measured temperature in Celcius or * Fahrenheit. * * @param fahrenheit true to return data in Fahrenheit, false for * Celicus. Celcius is the default. * @return The temperature in degrees Celcius or Fahrenheit. */ float getTemperature(bool fahrenheit=false); /** * Return a string representing the current Mode. This is usually * something like "Cool", "Heat", "Auto", etc. * * @return a string representing the current mode. */ std::string getMode(); /** * Return a string representing the current Operating State. This * is usually something like "Idle", or "Cooling". * * @return a string representing the current operating state. */ std::string getOperatingState(); /** * Return the current Heating Point temperature in Celcius or * Fahrenheit. This is the temperature at which the thermostat * will want to engage Heat. * * @param fahrenheit true to return data in Fahrenheit, false for * Celicus. Celcius is the default. * @return The Heating Point temperature in degrees Celcius or * Fahrenheit. */ float getHeatingPointTemperature(bool fahrenheit=false); /** * Return the current Cooling Point temperature in Celcius or * Fahrenheit. This is the temperature at which the thermostat * will want to engage Cooling. * * @param fahrenheit true to return data in Fahrenheit, false for * Celicus. Celcius is the default. * @return The Cooling Point temperature in degrees Celcius or * Fahrenheit. */ float getCoolingPointTemperature(bool fahrenheit=false); /** * Return a string representing the current Fan Mode. This * is usually something like "Auto Low". * * @return a string representing the Fan Mode. */ std::string getFanMode(); /* * Return a string representing the current Fan State. This * is usually something like "Idle". * * @return a string representing the Fan State. */ std::string getFanState(); /** * Query the device and update internal state. Strictly speaking, * this is not really neccessary -- a device may send this data on * it's own at periodic intervals. This method causes OZW to * specifically query the device for it's current information. * The device may take some time to respond. */ void update(); protected: private: }; }