FREEDM DGI
CMqttAdapter.hpp
Go to the documentation of this file.
1 
23 #ifndef C_MQTT_ADAPTER_HPP
24 #define C_MQTT_ADAPTER_HPP
25 
26 #include "IAdapter.hpp"
27 #include "CMqttMessage.hpp"
28 
29 #include <map>
30 #include <list>
31 #include <string>
32 
33 #include <MQTTClient.h>
34 #include <boost/thread.hpp>
35 #include <boost/shared_ptr.hpp>
36 #include <boost/property_tree/ptree.hpp>
37 #include <boost/enable_shared_from_this.hpp>
38 
39 namespace freedm {
40 namespace broker {
41 namespace device {
42 
57  : public IAdapter
58  , public boost::enable_shared_from_this<CMqttAdapter>
59 {
60 public:
62  typedef boost::shared_ptr<CMqttAdapter> Pointer;
63 
65  static IAdapter::Pointer Create(std::string id, std::string address);
66 
68  void Start();
69 
71  void Stop();
72 
74  SignalValue GetState(const std::string device, const std::string key) const;
75 
77  void SetCommand(const std::string device, const std::string key, const SignalValue value);
78 
80  ~CMqttAdapter();
81 
82 private:
83  struct DeviceData
84  {
85  std::map<std::string, SignalValue> s_SignalToValue;
86  std::map<std::string, std::string> s_IndexReference;
87  };
88 
90  CMqttAdapter(std::string id, std::string address);
91 
93  static void ConnectionLost(void * id, char * reason);
94 
96  static int HandleMessage(void * id, char * topic, int topicLen, MQTTClient_message * msg);
97 
99  static void DeliveryComplete(void * id, MQTTClient_deliveryToken token);
100 
102  void HandleMessage(std::string topic, std::string message);
103 
105  void Publish(std::string topic, std::string content);
106 
108  void SubscribeAll(std::string deviceName);
109 
111  void UnsubscribeAll(std::string deviceName);
112 
114  void CreateDevice(std::string deviceName, std::string json);
115 
116  void AddSignals(std::string device, boost::property_tree::ptree::value_type & ptree, std::set<std::string> & sigset, std::set<std::string> & type);
117 
119  typedef std::map<std::string, DeviceData> TDeviceToData;
120 
122  TDeviceToData m_DeviceData;
123 
125  std::list<CMqttMessage::Pointer> m_MessageQueue;
126 
128  mutable boost::mutex m_DeviceDataLock;
129 
131  MQTTClient m_Client;
132  MQTTClient_message pubmsg;
133  MQTTClient_deliveryToken token;
134 
136  char m_ID[24];
137 };
138 
139 } //namespace device
140 } //namespace broker
141 } //namespace freedm
142 
143 #endif // C_MQTT_ADAPTER_HPP
144 
Physical adapter device interface.
Definition: IAdapter.hpp:67
void Stop()
Stop the MQTT client.
Definition: CMqttAdapter.cpp:145
void Start()
Start the MQTT client.
Definition: CMqttAdapter.cpp:93
std::map< std::string, DeviceData > TDeviceToData
Map from a device name to its stored signal values.
Definition: CMqttAdapter.hpp:119
char m_ID[24]
MQTT client identifier.
Definition: CMqttAdapter.hpp:136
std::map< std::string, SignalValue > s_SignalToValue
Definition: CMqttAdapter.hpp:85
void UnsubscribeAll(std::string deviceName)
does a full UnSubscribe
Definition: CMqttAdapter.cpp:379
boost::shared_ptr< CMqttAdapter > Pointer
Pointer to a CMqttAdapater object.
Definition: CMqttAdapter.hpp:62
MQTTClient_message pubmsg
Definition: CMqttAdapter.hpp:132
~CMqttAdapter()
Destructor.
Definition: CMqttAdapter.cpp:81
static void ConnectionLost(void *id, char *reason)
Callback function when the client cannot reach the broker.
Definition: CMqttAdapter.cpp:191
CMqttAdapter(std::string id, std::string address)
Constructor.
Definition: CMqttAdapter.cpp:63
MQTTClient m_Client
MQTT client object.
Definition: CMqttAdapter.hpp:131
std::list< CMqttMessage::Pointer > m_MessageQueue
Storage for MQTT messages.
Definition: CMqttAdapter.hpp:125
MQTTClient_deliveryToken token
Definition: CMqttAdapter.hpp:133
SignalValue GetState(const std::string device, const std::string key) const
Retrieves a value from a device.
Definition: CMqttAdapter.cpp:152
void Publish(std::string topic, std::string content)
Publish a message on a topic to the MQTT broker.
Definition: CMqttAdapter.cpp:351
std::map< std::string, std::string > s_IndexReference
Definition: CMqttAdapter.hpp:86
void SubscribeAll(std::string deviceName)
does a full Subscribe
Definition: CMqttAdapter.cpp:359
void SetCommand(const std::string device, const std::string key, const SignalValue value)
Sets a value on a device.
Definition: CMqttAdapter.cpp:171
static IAdapter::Pointer Create(std::string id, std::string address)
Create a CMqttAdapter object and return a point to it.
Definition: CMqttAdapter.cpp:88
TDeviceToData m_DeviceData
Map of device data expected over MQTT.
Definition: CMqttAdapter.hpp:122
float SignalValue
Type of the value for device signals.
Definition: IAdapter.hpp:42
boost::mutex m_DeviceDataLock
Protect the device data map.
Definition: CMqttAdapter.hpp:128
static int HandleMessage(void *id, char *topic, int topicLen, MQTTClient_message *msg)
Callback function when the client receives a message about a subscribed topic.
Definition: CMqttAdapter.cpp:198
static void DeliveryComplete(void *id, MQTTClient_deliveryToken token)
Callback function when a message has been delivered to the broker.
Definition: CMqttAdapter.cpp:223
General FREEDM Namespace.
Definition: CBroker.cpp:53
void CreateDevice(std::string deviceName, std::string json)
Create a CDevice object from a JSON specification.
Definition: CMqttAdapter.cpp:398
boost::shared_ptr< IAdapter > Pointer
Pointer to a physical adapter.
Definition: IAdapter.hpp:72
Provides an interface for communicating with an MQTT broker.
Definition: CMqttAdapter.hpp:56
void AddSignals(std::string device, boost::property_tree::ptree::value_type &ptree, std::set< std::string > &sigset, std::set< std::string > &type)
Definition: CMqttAdapter.cpp:429