ECE59500_ESP8266_K64_MQTT_Pub_Sub_client

Dependencies:   mbed ESP8266Interface MbedJSONValue mbed-rtos MQTT JSON

Revision:
19:9dfb938f07eb
Parent:
18:76d0899bc3ce
Child:
20:568d04eb3d63
--- a/main.cpp	Tue Jun 09 17:57:43 2015 +0000
+++ b/main.cpp	Thu Mar 07 08:55:54 2019 +0000
@@ -1,95 +1,136 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial API and implementation and/or initial documentation
- *******************************************************************************/
+#include "MQTTESP8266.h"
+#include "MQTTClient.h"
+#include "string.h"
+#include "MbedJSONValue.h"
+char buf[100];
 
-/**
- This is a sample program to illustrate the use of the MQTT Client library
- on the mbed platform.  The Client class requires two classes which mediate
- access to system interfaces for networking and timing.  As long as these two
- classes provide the required public programming interfaces, it does not matter
- what facilities they use underneath. In this program, they use the mbed
- system libraries.
+MQTTESP8266 ipstack(D1, D0, D10, "BHNTG1682GFFE2","220960b5"); // change to match your wifi access point
+float version = 0.47;
+char* topic = "k64";
+char* topic2 = "k64rec";
+char* topic3 = "bulb";
+    
+char* key2 = "key";
+char* hostname = "192.168.0.6"; // Ip 
+int port = 1883;
+int rc = ipstack.connect(hostname, port);
 
-*/
+MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack);
+MbedJSONValue demo;
+int arrivedcount = 0;
+//using namespace std;
+std::string my_str;
+std::string my_str2;
+std::string someString;
+std::string clearsky ("clear");
+std::string clouds ("few clouds");
+std::string snow ("light snow");
+int j=0;
+// callback for subscribe topic
 
 
-#include "MQTTESP8266.h"
-#include "MQTTClient.h"
-
-int arrivedcount = 0;
-
-// callback for subscribe topic
 void subscribeCallback(MQTT::MessageData& md)
 {
     MQTT::Message &message = md.message;
     printf("Message received: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
+    
+    printf("%s",(char*)message.payload);
+    printf("\r\n");
+    
     printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
-    ++arrivedcount;
+    printf("nonedited payload is %s and payload is %d\n",(char*)message.payload,message.payloadlen);
+    printf("hey\n");
+    // int f = int(message.payload);
+     
+     std::string someString((char*)message.payload);
+     someString.resize (message.payloadlen);  
+     printf("Edited payload iss %s \n",someString.c_str());
+     j= someString.find(clouds);
+     printf("j = %d \r\n", j);
+  
+    if ( !(someString.find(clouds)) )
+    {  
+       sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,cloud %s\n", key2);
+       message.payload = (void*)buf;
+       message.payloadlen = strlen(buf)+1;
+       rc = client.publish(topic3, message);
+       printf("if condition checked, its cloudy\n");
+    }
+    else  if ( !(someString.find(clearsky)) )
+    {  
+       sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,clearsky %s\n", key2);
+       message.payload = (void*)buf;
+       message.payloadlen = strlen(buf)+1;
+       rc = client.publish(topic3, message);
+       printf("if condition checked, its clear\n");
+    }
+    else  if ( !(someString.find(snow)) )
+    {  
+       sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,snow %s\n",key2);
+       message.payload = (void*)buf;
+       message.payloadlen = strlen(buf)+1;
+       rc = client.publish(topic3, message);
+       printf("if condition checked, its snowy\n");
+    }
+    else
+    {
+        printf("went into else\n");
+    }
+
 }
 
-// main function that sets up the subscription and makes a couple publishes
 int main(int argc, char* argv[])
-{
+{  
+    wait (1);
     printf("Starting\n");
-    MQTTESP8266 ipstack(D1, D0, D10, "demossid","passphrase"); // change to match your wifi access point
-    float version = 0.47;
-    char* topic = "mbed-sample";
-
+    
     printf("Version is %f\n", version);
 
-    MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack);
+    
 
-    char* hostname = "85.119.83.194"; // test.mosquitto.org
-    int port = 1883;
-    int rc = ipstack.connect(hostname, port);
     if (rc != 0)
         printf("rc from TCP connect is %d\n", rc);
 
     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
-    data.MQTTVersion = 3;
-    data.clientID.cstring = "mbed-clientID";
-    data.username.cstring = "testuser";
-    data.password.cstring = "testpassword";
+    //data.MQTTVersion = 3;
+    //data.clientID.cstring = "mbed-clientID";
+    //data.username.cstring = "testuser";
+    //data.password.cstring = "testpassword";
+    
     if ((rc = client.connect(data)) != 0)
         printf("rc from MQTT connect is %d\n", rc);
 
-    if ((rc = client.subscribe(topic, MQTT::QOS1, subscribeCallback)) != 0)
+    if ((rc = client.subscribe(topic2, MQTT::QOS1, subscribeCallback)) != 0)
         printf("Recv'd from MQTT subscribe is %d\n", rc);
 
     MQTT::Message message;
+    // QoS 0
 
-    // QoS 0
-    char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
+    sprintf(buf, "fa02d31610ce9ea0de15b22bb2fe279d, %s\n", key2);
     message.qos = MQTT::QOS0;
     message.retained = false;
     message.dup = false;
     message.payload = (void*)buf;
     message.payloadlen = strlen(buf)+1;
     rc = client.publish(topic, message);
-    while (arrivedcount < 1)
+    wait(5);
+    /*
+    sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d, %s\n", key2);
+    message.payload = (void*)buf;
+    message.payloadlen = strlen(buf)+1;
+    rc = client.publish(topic2, message);
+    */
+    while (arrivedcount < 10)
         client.yield(100);
-
+  /*
     // QoS 1
     sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
     message.qos = MQTT::QOS1;
     message.payloadlen = strlen(buf)+1;
     rc = client.publish(topic, message);
-    while (arrivedcount < 2)
+    while (arrivedcount < 10)
         client.yield(100);
-
+    
     // QoS 2
     sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
     message.qos = MQTT::QOS2;
@@ -99,6 +140,7 @@
         client.yield(100);
 
     // n * QoS 2
+    
     for (int i = 1; i <= 10; ++i) {
         sprintf(buf, "Hello World!  QoS 2 message number %d from app version %f\n", i, version);
         message.qos = MQTT::QOS2;
@@ -107,15 +149,16 @@
         while (arrivedcount < i + 3)
             client.yield(100);
     }
-
+    */
+    
     if ((rc = client.unsubscribe(topic)) != 0)
         printf("rc from unsubscribe was %d\n", rc);
 
     if ((rc = client.disconnect()) != 0)
         printf("rc from disconnect was %d\n", rc);
 
-    ipstack.disconnect();
-    printf("Finishing with %d messages received\n", arrivedcount);
+    //ipstack.disconnect();
+    //printf("Finishing with %d messages received\n", arrivedcount);
 
     return 0;
 }