/** * Handle one climate sensor * Requests for climate sensor data in an given interval. * All data will be send by signal/slot connection in case of data change. * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2016-09-22 */ #pragma once #include #include "tcpsocket.h" namespace MeteoDataManagement { class TcpClimate final : public TcpSocket { Q_OBJECT public: explicit TcpClimate(QObject *parent = nullptr); /** * Connect to converter and starts reading sensor data * @param[in] converterIp IP address of the RS232-LAN Converter * @param[in] climatePort Port number of climate sensor on the RS232-LAN Converter */ void start(const QString &converterIp, quint16 climatePort); Q_SIGNALS: /** * Emits signal if data were changed */ void sigClimateDataChanged(float pressure, float temperature, float humidity, bool climateOk); protected Q_SLOTS: /** * Requests for new sensor data */ void onSensorDataRequest(); /** * Timeout for new sensor data request */ void onRequestTimeout(); protected: /** * pure virtual function from TcpSocket to initialize the especially sensor device */ void init() override; /** * pure virtual function from TcpSocket to to handle the especially sensor device data */ void dataAvailable(const QByteArray &line) override; /** * Extract sensor data from given data line * @param[in] line data line to be extacted * @return False if an error occurded, otherwise true; */ bool extractDataFromLine(const QByteArray &line); /** * Extract especially value from given data line * @param[in] line data line to be extracted * @param[in] startKey extraction starts after startkey * @param[in] endKey extraction stops before endkey * @param[in/out] retValue reference to return value * @return False if an error occurded, otherwise true; */ bool extractValueFromLine(const QByteArray &line, const QByteArray &startKey, const QByteArray &endKey, float &retValue); QTimer *m_requestTimer; ///< Request Interval in msec QTimer *m_requestTimeoutTimer; ///< Request Timeout in mse float m_pressure; ///< pressure in hPa float m_temperature; ///< temperature in Grad C float m_humidity; ///< humidity in % bool m_dataChanged; ///< if true, sensor data were changed }; } // namespace MeteoDataManagement