IoTKitV3 / Mbed OS MQTTPublish

Dependencies:   QEI MFRC522 HTS221 IoTKit BMP180 MQTT

Fork of MQTTPublish by smd.iotkit2.ch

Revision:
21:4693a8b2a665
Parent:
20:88b9edbdf125
Child:
22:b671b01d00f9
--- a/main.cpp	Sat Sep 01 15:37:06 2018 +0000
+++ b/main.cpp	Sat Sep 01 17:13:11 2018 +0000
@@ -1,36 +1,39 @@
 /** MQTT Publish von Sensordaten */
 #include "mbed.h"
+#include "HTS221Sensor.h"
 #include "easy-connect.h"
 #include "MQTTNetwork.h"
 #include "MQTTmbed.h"
 #include "MQTTClient.h"
+#include "OLEDDisplay.h"
 
-#define logMessage printf
+static DevI2C devI2c(PTE0,PTE1);
+static HTS221Sensor hum_temp(&devI2c);
+AnalogIn hallSensor( PTC0 );
 
 // Topic's
-char* topicLight = "mbed/k64f/iotkit/light";
-char* topicPoti = "mbed/k64f/iotkit/poti";
+char* topicTEMP =  "iotkit/sensor";
+char* topicALERT = "iotkit/alert";
 // MQTT Brocker
-char* hostname = "192.168.178.43";
+char* hostname = "192.168.178.60";
 int port = 31883;
 // MQTT Message
 MQTT::Message message;
 // I/O Buffer
 char buf[100];
 // UI
+OLEDDisplay oled( PTE26, PTE0, PTE1);
 DigitalOut led1( D10 );
-// Poti
-AnalogIn   poti( A0 );
-// Lichtsensor
-AnalogIn   light( A1 );
 
 /** Hilfsfunktion zum Publizieren auf MQTT Broker */
-void publish( MQTTNetwork &mqttNetwork, MQTT::Client<MQTTNetwork, Countdown> &client )
+void publish( MQTTNetwork &mqttNetwork, MQTT::Client<MQTTNetwork, Countdown> &client, char* topic )
 {
-    logMessage("Connecting to %s:%d\r\n", hostname, port);
+    led1 = 1;
+    printf("Connecting to %s:%d\r\n", hostname, port);
+    
     int rc = mqttNetwork.connect(hostname, port);
     if (rc != 0)
-        logMessage("rc from TCP connect is %d\r\n", rc);
+        printf("rc from TCP connect is %d\r\n", rc);
 
     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
     data.MQTTVersion = 3;
@@ -38,41 +41,38 @@
     data.username.cstring = "testuser";
     data.password.cstring = "testpassword";
     if ((rc = client.connect(data)) != 0)
-        logMessage("rc from MQTT connect is %d\r\n", rc);
+        printf("rc from MQTT connect is %d\r\n", rc);
 
     MQTT::Message message;    
     
-    // Message als JSON aufbereiten und senden
-    /*sprintf( buf, "%f", light.read() );
-    printf( "Publish: %s\n", buf );
+    oled.cursor( 2, 0 );
+    oled.printf( "Topi: %s\n", topic );
+    oled.cursor( 3, 0 );    
+    oled.printf( "Push: %s\n", buf );
     message.qos = MQTT::QOS0;
     message.retained = false;
     message.dup = false;
     message.payload = (void*) buf;
     message.payloadlen = strlen(buf)+1;
-    client.publish( topicLight, message);*/
-    
-    // Message als JSON aufbereiten und senden
-    sprintf( buf, "%f", poti.read() );
-    printf( "Publish: %s\n", buf );
-    message.qos = MQTT::QOS0;
-    message.retained = false;
-    message.dup = false;
-    message.payload = (void*) buf;
-    message.payloadlen = strlen(buf)+1;
-    client.publish( topicPoti, message);    
+    client.publish( topic, message);  
     
     // Verbindung beenden, ansonsten ist nach 4x Schluss
     if ((rc = client.disconnect()) != 0)
-        logMessage("rc from disconnect was %d\r\n", rc);
+        printf("rc from disconnect was %d\r\n", rc);
 
     mqttNetwork.disconnect();
+    led1 = 0;
 }
 
 /** Hauptprogramm */
 int main()
 {
-    logMessage("MQTTPublish\n");
+    uint8_t id;
+    float temp, hum;
+    
+    oled.clear();
+    oled.printf( "MQTTPublish\r\n" );
+    oled.printf( "host: %s:%s\r\n", hostname, port );
 
     NetworkInterface* network = easy_connect(true);
     if (!network) 
@@ -81,12 +81,28 @@
     // TCP/IP und MQTT initialisieren (muss in main erfolgen)
     MQTTNetwork mqttNetwork(network);
     MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
+    
+    /* Init all sensors with default params */
+    hum_temp.init(NULL);
+    hum_temp.enable();    
 
     while   ( 1 ) 
     {
-        led1 = 1;
-        publish( mqttNetwork, client );
-        led1 = 0;
-        wait    ( 5.0 );
+        // Temperator und Luftfeuchtigkeit
+        hum_temp.read_id(&id);
+        hum_temp.get_temperature(&temp);
+        hum_temp.get_humidity(&hum);    
+        sprintf( buf, "0x%X,%2.2f,%2.1f", id, temp, hum );        
+        publish( mqttNetwork, client, topicTEMP );
+        
+        // alert Tuer offen 
+        if  ( hallSensor.read() > 0.6f )
+        {
+            sprintf( buf, "door open" );
+            message.payload = (void*) buf;
+            message.payloadlen = strlen(buf)+1;
+            publish( mqttNetwork, client, topicALERT );          
+        }
+        wait    ( 2.0f );
     }
 }