1 #pragma once
2 
3 #include "MySensorsBase.h"
4 #include "../main/mosquitto_helper.h"
5 #include "../main/BaroForecastCalculator.h"
6 
7 namespace Json
8 {
9 	class Value;
10 };
11 
12 class CTTNMQTT : public MySensorsBase, mosqdz::mosquittodz
13 {
14 public:
15 	CTTNMQTT(const int ID, const std::string &IPAddress, const unsigned short usIPPort, const std::string &Username, const std::string &Password, const std::string &CAFile);
16 	~CTTNMQTT(void);
isConnected()17 	bool isConnected(){ return m_IsConnected; };
18 
19 	virtual void on_connect(int rc) override;
20 	void on_disconnect(int rc) override;
21 	virtual void on_message(const struct mosquitto_message *message) override;
22 	void on_subscribe(int mid, int qos_count, const int *granted_qos) override;
23 
24 	void SendMessage(const std::string &Topic, const std::string &Message);
25 public:
26 	void UpdateUserVariable(const std::string &varName, const std::string &varValue);
27 
28 	bool m_bDoReconnect;
29 	bool m_IsConnected;
30 	boost::signals2::signal<void()>	sDisconnected;
31 protected:
32 	std::string m_szIPAddress;
33 	unsigned short m_usIPPort;
34 	std::string m_UserName;
35 	std::string m_Password;
36 	std::string m_CAFilename;
37 	std::string m_TopicIn;
38 	std::shared_ptr<std::thread> m_thread;
39 
40 	virtual bool StartHardware() override;
41 	virtual bool StopHardware() override;
42 	void StopMQTT();
43 	void Do_Work();
44 	virtual void SendHeartbeat();
45 	void WriteInt(const std::string &sendStr) override;
46 private:
47 	std::map<std::string, CBaroForecastCalculator> m_forecast_calculators;
48 
49 	bool ConnectInt();
50 	bool ConnectIntEx();
51 	Json::Value GetSensorWithChannel(const Json::Value &root, const int sChannel);
52 	void FlagSensorWithChannelUsed(Json::Value &root, const std::string &stype, const int sChannel);
53 	int GetAddDeviceAndSensor(const int m_HwdId, const std::string &DeviceName, const std::string &MacAddress);
54 };
55 
56