This is example for openHAB with MQTT

Dependencies:   DHT MQTT WIZnetInterface mbed

Fork of w7500-paho-mqtt by Bohyun Bang

Revision:
16:3bd1b60a8a21
Parent:
15:d4604c47da41
Child:
17:d07286cd2088
--- a/main.cpp	Mon Sep 21 23:39:16 2015 +0000
+++ b/main.cpp	Tue Dec 29 07:35:33 2015 +0000
@@ -8,13 +8,43 @@
 #include "mbed.h"
  
 int arrivedcount = 0;
+DigitalOut sw1(D9);
+DigitalOut sw2(D10);
+DigitalOut sw3(D11);
  
-void messageArrived(MQTT::MessageData& md)
+
+void sw1_messageArrived(MQTT::MessageData& md)
 {
     MQTT::Message &message = md.message;
-    printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
-    printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
-    ++arrivedcount;
+    printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    
+    if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
+        sw1 = 1;
+    } else{
+        sw1 = 0;
+    }
+}
+
+void sw2_messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
+        sw2 = 1;
+    } else{
+        sw2 = 0;
+    }
+}
+
+void sw3_messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
+        sw3 = 1;
+    } else{
+        sw3 = 0;
+    }
 }
 
 void baud(int baudrate) {
@@ -25,19 +55,24 @@
 int main (void)
 {
     DHT sensor(D4, DHT11);
-    AnalogIn ain(A1);
+    sw1 = 0; sw2 = 0; sw3 = 0;
     baud(115200);
     printf("Wait a second...\r\n");
+    
     MQTTEthernet ipstack = MQTTEthernet();
-    
+    printf("IP Address : %s\r\n",ipstack.getEth().getIPAddress());
     MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
     
-    char* hostname = "222.98.173.244";
+    char* hostname = "192.168.0.100";
     int port = 1883;
     
     int rc = ipstack.connect(hostname, port);
     if (rc != 0)
+    {
         printf("rc from TCP connect is %d\n", rc);
+        return 0;
+    }
+    printf("TCP connection is successful\r\n");
         
     char MQTTClientID[30];
     
@@ -45,12 +80,41 @@
     data.MQTTVersion = 3;
     sprintf(MQTTClientID,"WIZwiki-W7500-client-%d",rand()%1000);
     data.clientID.cstring = MQTTClientID;
-    data.username.cstring = "testuser";
-    data.password.cstring = "testpassword";  
+    data.username.cstring = "";
+    data.password.cstring = "";  
+    
+    if ((rc = client.connect(data)) != 0)
+    {
+        printf("rc from MQTT connect is %d\r\n", rc);
+        return 0;
+    }
+    printf("MQTT connection is successful\r\n");
 
-    if ((rc = client.connect(data)) != 0)
-        printf("rc from MQTT connect is %d\n", rc);
         
+    char *sw1 = "/wiznet/sw1";
+    if ((rc = client.subscribe(sw1, MQTT::QOS1, sw1_messageArrived)) != 0)
+    {
+        printf("rc from MQTT subscribe is %d\r\n", rc);
+        return 0;
+    }
+    printf("Added subscription for sw1\r\n");
+    
+    char *sw2 = "/wiznet/sw2";
+    if ((rc = client.subscribe(sw2, MQTT::QOS1, sw2_messageArrived)) != 0)
+    {
+        printf("rc from MQTT subscribe is %d\r\n", rc);
+        return 0;
+    }
+    printf("Added subscription for sw2\r\n");
+        
+    char *sw3 = "/wiznet/sw3";
+    if ((rc = client.subscribe(sw3, MQTT::QOS1, sw3_messageArrived)) != 0)
+    {
+        printf("rc from MQTT subscribe is %d\r\n", rc);
+        return 0;
+    }
+    printf("Added subscription for sw3\r\n");
+
     MQTT::Message message;
     char buf[100];
     int error = 0;
@@ -64,36 +128,23 @@
             hum = sensor.ReadHumidity();
             temp = sensor.ReadTemperature(CELCIUS);
         }
-        message.qos = MQTT::QOS0;
+        message.qos = MQTT::QOS1;
         message.retained = false;
         message.dup = false;
         
         sprintf(buf, "%3.1f", hum);
         message.payload = (void*)buf;
         message.payloadlen = strlen(buf);
-        rc = client.publish("Wiznet/humidity", message);
+        rc = client.publish("/wiznet/humidity",message);
+        printf("publish humidity data %s\r\n",(char*)message.payload);
         
         sprintf(buf, "%3.1f", temp);
         message.payload = (void*)buf;
         message.payloadlen = strlen(buf);
-        rc = client.publish("Wiznet/temperature", message);
-        
-        sprintf(buf, "%3.1f", (rand()%1000)/10.0);
-        message.payload = (void*)buf;
-        message.payloadlen = strlen(buf);
-        rc = client.publish("Wiznet/fluidgauge/A", message);
+        rc = client.publish("/wiznet/temperature", message);
+        printf("publish temperature data %s\r\n",(char*)message.payload);
         
-        sprintf(buf, "%3.1f", (rand()%1000)/10.0);
-        message.payload = (void*)buf;
-        message.payloadlen = strlen(buf);
-        rc = client.publish("Wiznet/fluidgauge/B", message);
-        
-        sprintf(buf, "%3.1f", (rand()%1000)/10.0);
-        message.payload = (void*)buf;
-        message.payloadlen = strlen(buf);
-        rc = client.publish("Wiznet/fluidgauge/C", message);
-        client.yield(1000);
-        //wait(100);
+        client.yield(60000);
     }
 }