This is example for openHAB with MQTT

Dependencies:   DHT MQTT WIZnetInterface mbed

Fork of w7500-paho-mqtt by Bohyun Bang

Committer:
kaizen
Date:
Wed Feb 24 00:00:20 2016 +0000
Revision:
17:d07286cd2088
Parent:
16:3bd1b60a8a21
changed interval

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justinkim 8:f837e0d255e8 1 #include "mbed.h"
bangbh 9:21574e058141 2 #include "DHT.h"
bangbh 9:21574e058141 3 #include "MQTTEthernet.h"
bangbh 9:21574e058141 4 #include "MQTTClient.h"
justinkim 8:f837e0d255e8 5
justinkim 8:f837e0d255e8 6 #define ECHO_SERVER_PORT 7
justinkim 8:f837e0d255e8 7
bangbh 9:21574e058141 8 #include "mbed.h"
bangbh 9:21574e058141 9
bangbh 9:21574e058141 10 int arrivedcount = 0;
kaizen 16:3bd1b60a8a21 11 DigitalOut sw1(D9);
kaizen 16:3bd1b60a8a21 12 DigitalOut sw2(D10);
kaizen 16:3bd1b60a8a21 13 DigitalOut sw3(D11);
bangbh 9:21574e058141 14
kaizen 16:3bd1b60a8a21 15
kaizen 16:3bd1b60a8a21 16 void sw1_messageArrived(MQTT::MessageData& md)
justinkim 8:f837e0d255e8 17 {
bangbh 9:21574e058141 18 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 19 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 20
kaizen 16:3bd1b60a8a21 21 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 22 sw1 = 1;
kaizen 16:3bd1b60a8a21 23 } else{
kaizen 16:3bd1b60a8a21 24 sw1 = 0;
kaizen 16:3bd1b60a8a21 25 }
kaizen 16:3bd1b60a8a21 26 }
kaizen 16:3bd1b60a8a21 27
kaizen 16:3bd1b60a8a21 28 void sw2_messageArrived(MQTT::MessageData& md)
kaizen 16:3bd1b60a8a21 29 {
kaizen 16:3bd1b60a8a21 30 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 31 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 32 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 33 sw2 = 1;
kaizen 16:3bd1b60a8a21 34 } else{
kaizen 16:3bd1b60a8a21 35 sw2 = 0;
kaizen 16:3bd1b60a8a21 36 }
kaizen 16:3bd1b60a8a21 37 }
kaizen 16:3bd1b60a8a21 38
kaizen 16:3bd1b60a8a21 39 void sw3_messageArrived(MQTT::MessageData& md)
kaizen 16:3bd1b60a8a21 40 {
kaizen 16:3bd1b60a8a21 41 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 42 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 43 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 44 sw3 = 1;
kaizen 16:3bd1b60a8a21 45 } else{
kaizen 16:3bd1b60a8a21 46 sw3 = 0;
kaizen 16:3bd1b60a8a21 47 }
bangbh 9:21574e058141 48 }
bangbh 9:21574e058141 49
bangbh 9:21574e058141 50 void baud(int baudrate) {
bangbh 9:21574e058141 51 Serial s(USBTX, USBRX);
bangbh 9:21574e058141 52 s.baud(baudrate);
bangbh 9:21574e058141 53 }
bangbh 9:21574e058141 54
bangbh 9:21574e058141 55 int main (void)
bangbh 9:21574e058141 56 {
bangbh 9:21574e058141 57 DHT sensor(D4, DHT11);
kaizen 17:d07286cd2088 58 DigitalOut myled(LED1);
kaizen 17:d07286cd2088 59
kaizen 16:3bd1b60a8a21 60 sw1 = 0; sw2 = 0; sw3 = 0;
bangbh 9:21574e058141 61 baud(115200);
justinkim 8:f837e0d255e8 62 printf("Wait a second...\r\n");
kaizen 16:3bd1b60a8a21 63
kaizen 17:d07286cd2088 64
kaizen 17:d07286cd2088 65 myled = 0;
kaizen 17:d07286cd2088 66
bangbh 9:21574e058141 67 MQTTEthernet ipstack = MQTTEthernet();
kaizen 16:3bd1b60a8a21 68 printf("IP Address : %s\r\n",ipstack.getEth().getIPAddress());
bangbh 9:21574e058141 69 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
bangbh 9:21574e058141 70
kaizen 17:d07286cd2088 71 char* hostname = "192.168.1.213";
kaizen 17:d07286cd2088 72 printf("connect to %s\r\n",hostname);
bangbh 9:21574e058141 73 int port = 1883;
bangbh 9:21574e058141 74
bangbh 9:21574e058141 75 int rc = ipstack.connect(hostname, port);
bangbh 9:21574e058141 76 if (rc != 0)
kaizen 16:3bd1b60a8a21 77 {
bangbh 9:21574e058141 78 printf("rc from TCP connect is %d\n", rc);
kaizen 16:3bd1b60a8a21 79 return 0;
kaizen 16:3bd1b60a8a21 80 }
kaizen 16:3bd1b60a8a21 81 printf("TCP connection is successful\r\n");
bangbh 9:21574e058141 82
bangbh 15:d4604c47da41 83 char MQTTClientID[30];
justinkim 8:f837e0d255e8 84
bangbh 9:21574e058141 85 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
bangbh 9:21574e058141 86 data.MQTTVersion = 3;
bangbh 15:d4604c47da41 87 sprintf(MQTTClientID,"WIZwiki-W7500-client-%d",rand()%1000);
bangbh 15:d4604c47da41 88 data.clientID.cstring = MQTTClientID;
kaizen 16:3bd1b60a8a21 89 data.username.cstring = "";
kaizen 16:3bd1b60a8a21 90 data.password.cstring = "";
kaizen 16:3bd1b60a8a21 91
kaizen 16:3bd1b60a8a21 92 if ((rc = client.connect(data)) != 0)
kaizen 16:3bd1b60a8a21 93 {
kaizen 16:3bd1b60a8a21 94 printf("rc from MQTT connect is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 95 return 0;
kaizen 16:3bd1b60a8a21 96 }
kaizen 16:3bd1b60a8a21 97 printf("MQTT connection is successful\r\n");
bangbh 9:21574e058141 98
bangbh 9:21574e058141 99
kaizen 16:3bd1b60a8a21 100 char *sw1 = "/wiznet/sw1";
kaizen 16:3bd1b60a8a21 101 if ((rc = client.subscribe(sw1, MQTT::QOS1, sw1_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 102 {
kaizen 16:3bd1b60a8a21 103 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 104 return 0;
kaizen 16:3bd1b60a8a21 105 }
kaizen 16:3bd1b60a8a21 106 printf("Added subscription for sw1\r\n");
kaizen 16:3bd1b60a8a21 107
kaizen 16:3bd1b60a8a21 108 char *sw2 = "/wiznet/sw2";
kaizen 16:3bd1b60a8a21 109 if ((rc = client.subscribe(sw2, MQTT::QOS1, sw2_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 110 {
kaizen 16:3bd1b60a8a21 111 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 112 return 0;
kaizen 16:3bd1b60a8a21 113 }
kaizen 16:3bd1b60a8a21 114 printf("Added subscription for sw2\r\n");
kaizen 16:3bd1b60a8a21 115
kaizen 16:3bd1b60a8a21 116 char *sw3 = "/wiznet/sw3";
kaizen 16:3bd1b60a8a21 117 if ((rc = client.subscribe(sw3, MQTT::QOS1, sw3_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 118 {
kaizen 16:3bd1b60a8a21 119 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 120 return 0;
kaizen 16:3bd1b60a8a21 121 }
kaizen 16:3bd1b60a8a21 122 printf("Added subscription for sw3\r\n");
kaizen 16:3bd1b60a8a21 123
bangbh 9:21574e058141 124 MQTT::Message message;
bangbh 9:21574e058141 125 char buf[100];
bangbh 9:21574e058141 126 int error = 0;
bangbh 9:21574e058141 127 float hum = 0.0f, temp = 0.0f;
bangbh 13:36456500fb7e 128 char i = 0;
bangbh 13:36456500fb7e 129 while (true)
justinkim 8:f837e0d255e8 130 {
bangbh 13:36456500fb7e 131 if(i > 100) i = 0;
bangbh 9:21574e058141 132 error = sensor.readData();
bangbh 9:21574e058141 133 if (0 == error) {
bangbh 9:21574e058141 134 hum = sensor.ReadHumidity();
bangbh 9:21574e058141 135 temp = sensor.ReadTemperature(CELCIUS);
justinkim 8:f837e0d255e8 136 }
kaizen 16:3bd1b60a8a21 137 message.qos = MQTT::QOS1;
bangbh 9:21574e058141 138 message.retained = false;
bangbh 9:21574e058141 139 message.dup = false;
bangbh 13:36456500fb7e 140
bangbh 13:36456500fb7e 141 sprintf(buf, "%3.1f", hum);
bangbh 9:21574e058141 142 message.payload = (void*)buf;
bangbh 13:36456500fb7e 143 message.payloadlen = strlen(buf);
kaizen 16:3bd1b60a8a21 144 rc = client.publish("/wiznet/humidity",message);
kaizen 16:3bd1b60a8a21 145 printf("publish humidity data %s\r\n",(char*)message.payload);
bangbh 13:36456500fb7e 146
bangbh 9:21574e058141 147 sprintf(buf, "%3.1f", temp);
bangbh 9:21574e058141 148 message.payload = (void*)buf;
bangbh 13:36456500fb7e 149 message.payloadlen = strlen(buf);
kaizen 16:3bd1b60a8a21 150 rc = client.publish("/wiznet/temperature", message);
kaizen 16:3bd1b60a8a21 151 printf("publish temperature data %s\r\n",(char*)message.payload);
bangbh 13:36456500fb7e 152
kaizen 17:d07286cd2088 153 client.yield(5000);
justinkim 8:f837e0d255e8 154 }
justinkim 8:f837e0d255e8 155 }
justinkim 8:f837e0d255e8 156