This is example for openHAB with MQTT
Dependencies: DHT MQTT WIZnetInterface mbed
Fork of w7500-paho-mqtt by
Diff: main.cpp
- Revision:
- 16:3bd1b60a8a21
- Parent:
- 15:d4604c47da41
- Child:
- 17:d07286cd2088
diff -r d4604c47da41 -r 3bd1b60a8a21 main.cpp --- 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); } }