Smart Traffic

Dependencies:   MQTT_G_SENSOR

Committer:
ericliang
Date:
Wed Aug 12 02:44:16 2015 +0000
Revision:
0:f0ae089c9363
SmartTraffic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ericliang 0:f0ae089c9363 1 #include "WISEAgent.h"
ericliang 0:f0ae089c9363 2
ericliang 0:f0ae089c9363 3 void messageCbf(MQTT::MessageData& md)
ericliang 0:f0ae089c9363 4 {
ericliang 0:f0ae089c9363 5 MQTT::Message &message = md.message;
ericliang 0:f0ae089c9363 6 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
ericliang 0:f0ae089c9363 7 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
ericliang 0:f0ae089c9363 8 }
ericliang 0:f0ae089c9363 9
ericliang 0:f0ae089c9363 10 MQTT::Client<MQTTEthernet, Countdown> *pMQTTClient;
ericliang 0:f0ae089c9363 11
ericliang 0:f0ae089c9363 12 void Init(MQTTEthernet ipstack)
ericliang 0:f0ae089c9363 13 {
ericliang 0:f0ae089c9363 14 if( !pMQTTClient )
ericliang 0:f0ae089c9363 15 pMQTTClient = new MQTT::Client<MQTTEthernet, Countdown>(ipstack);
ericliang 0:f0ae089c9363 16 }
ericliang 0:f0ae089c9363 17
ericliang 0:f0ae089c9363 18 int WISEAgentConnect(const char *ip, char *uid)
ericliang 0:f0ae089c9363 19 {
ericliang 0:f0ae089c9363 20 int rc = 0;
ericliang 0:f0ae089c9363 21 MQTT::Message message;
ericliang 0:f0ae089c9363 22
ericliang 0:f0ae089c9363 23 // Register
ericliang 0:f0ae089c9363 24 char topic[128]={0};
ericliang 0:f0ae089c9363 25 char buf[256]={0};
ericliang 0:f0ae089c9363 26
ericliang 0:f0ae089c9363 27 //snprintf(buf,sizeof(topic),RegistJson,uid, uid, uid, 0, uid, 1436160081000);
ericliang 0:f0ae089c9363 28
ericliang 0:f0ae089c9363 29 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
ericliang 0:f0ae089c9363 30 data.MQTTVersion = 3;
ericliang 0:f0ae089c9363 31 data.clientID.cstring= uid;//mac;
ericliang 0:f0ae089c9363 32 data.username.cstring = "ral";
ericliang 0:f0ae089c9363 33 data.password.cstring = "123";
ericliang 0:f0ae089c9363 34 // willmessage
ericliang 0:f0ae089c9363 35 data.will.topicName.cstring = DEF_WILLMSG_TOPIC;
ericliang 0:f0ae089c9363 36 data.will.message.cstring = buf;
ericliang 0:f0ae089c9363 37
ericliang 0:f0ae089c9363 38 memset(topic, 0, sizeof(topic));
ericliang 0:f0ae089c9363 39 memset(buf, 0, sizeof(buf));
ericliang 0:f0ae089c9363 40
ericliang 0:f0ae089c9363 41 if ((rc = pMQTTClient->connect(data)) != 0) {
ericliang 0:f0ae089c9363 42 printf("rc from MQTT connect is %d\n", rc);
ericliang 0:f0ae089c9363 43 return rc;
ericliang 0:f0ae089c9363 44 }
ericliang 0:f0ae089c9363 45
ericliang 0:f0ae089c9363 46 snprintf(topic,sizeof(topic),WA_PUB_CONNECT_TOPIC,uid);
ericliang 0:f0ae089c9363 47 //snprintf(buf,sizeof(topic),RegistJson,uid, uid, uid, 1, uid, 1436160081020);
ericliang 0:f0ae089c9363 48
ericliang 0:f0ae089c9363 49 message.qos = MQTT::QOS0;
ericliang 0:f0ae089c9363 50 message.retained = false;
ericliang 0:f0ae089c9363 51 message.dup = false;
ericliang 0:f0ae089c9363 52 message.payload = (void*)buf;
ericliang 0:f0ae089c9363 53 message.payloadlen = strlen(buf)+1;
ericliang 0:f0ae089c9363 54
ericliang 0:f0ae089c9363 55 if( rc = pMQTTClient->publish(topic, message) != 0 ) {
ericliang 0:f0ae089c9363 56 printf("rc from MQTT publish topic=%s rc= %d\n", topic, rc);
ericliang 0:f0ae089c9363 57 return rc;
ericliang 0:f0ae089c9363 58 }
ericliang 0:f0ae089c9363 59
ericliang 0:f0ae089c9363 60 memset(topic, 0, sizeof(topic));
ericliang 0:f0ae089c9363 61 memset(buf, 0, sizeof(buf));
ericliang 0:f0ae089c9363 62
ericliang 0:f0ae089c9363 63 snprintf(topic,sizeof(topic),WA_PUB_ACTION_TOPIC,uid);
ericliang 0:f0ae089c9363 64 //snprintf(buf,sizeof(topic),OSInfoJson,ip, uid, 1436160081030);
ericliang 0:f0ae089c9363 65
ericliang 0:f0ae089c9363 66 message.payloadlen = strlen(buf)+1;
ericliang 0:f0ae089c9363 67
ericliang 0:f0ae089c9363 68 if( rc = pMQTTClient->publish(topic, message) != 0 ) {
ericliang 0:f0ae089c9363 69 printf("rc from MQTT publish topic=%s rc= %d\n", topic, rc);
ericliang 0:f0ae089c9363 70 return rc;
ericliang 0:f0ae089c9363 71 }
ericliang 0:f0ae089c9363 72
ericliang 0:f0ae089c9363 73 memset(topic, 0, sizeof(topic));
ericliang 0:f0ae089c9363 74 memset(buf, 0, sizeof(buf));
ericliang 0:f0ae089c9363 75 snprintf(topic,sizeof(topic),WA_SUB_CBK_TOPIC,uid);
ericliang 0:f0ae089c9363 76
ericliang 0:f0ae089c9363 77 if ((rc = pMQTTClient->subscribe(topic, MQTT::QOS1, messageCbf)) != 0) {
ericliang 0:f0ae089c9363 78 printf("rc from MQTT subscribe is %d\n", rc);
ericliang 0:f0ae089c9363 79 return rc;
ericliang 0:f0ae089c9363 80 }
ericliang 0:f0ae089c9363 81
ericliang 0:f0ae089c9363 82 return rc;
ericliang 0:f0ae089c9363 83 }