diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..43ca15e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "paho.mqtt.c"] + path = libs/paho.mqtt.c/ + url = https://github.com/eclipse/paho.mqtt.c.git diff --git a/Makefile b/Makefile index ea37fca..8a72668 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,19 @@ SRC := src/main.c src/mqtt.c src/module.c src/modules/*.c -INC := -I src -I include/paho-mqtt -LIBS := -Llibs/paho-mqtt -lpthread -lpaho-mqtt3a -lpaho-mqtt3c -lpthread +INC := -I src +LIBS := -lpthread -lpthread + +# paho mqtt +LIBPAHO_DIR := libs/paho.mqtt.c +INC += -I $(LIBPAHO_DIR)/src +LIBS += -L$(LIBPAHO_DIR)/build/output -lpaho-mqtt3a -lpaho-mqtt3c all: build -build: $(SRC) +build-paho: $(LIBPAHO_DIR) + cd $(LIBPAHO_DIR) && make build + +build: $(SRC) | ${build-paho} gcc $(SRC) $(LIBS) -o mqttClient $(INC) debug: $(SRC) diff --git a/libs/paho-mqtt/libpaho-mqtt3a.so b/libs/paho-mqtt/libpaho-mqtt3a.so deleted file mode 120000 index 9710c1b..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3a.so +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3a.so.1 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3a.so.1 b/libs/paho-mqtt/libpaho-mqtt3a.so.1 deleted file mode 120000 index d821bc5..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3a.so.1 +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3a.so.1.3.12 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3a.so.1.3.12 b/libs/paho-mqtt/libpaho-mqtt3a.so.1.3.12 deleted file mode 100644 index b8b17b5..0000000 Binary files a/libs/paho-mqtt/libpaho-mqtt3a.so.1.3.12 and /dev/null differ diff --git a/libs/paho-mqtt/libpaho-mqtt3as.so b/libs/paho-mqtt/libpaho-mqtt3as.so deleted file mode 120000 index e4aabed..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3as.so +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3as.so.1 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3as.so.1 b/libs/paho-mqtt/libpaho-mqtt3as.so.1 deleted file mode 120000 index a745e77..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3as.so.1 +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3as.so.1.3.12 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3as.so.1.3.12 b/libs/paho-mqtt/libpaho-mqtt3as.so.1.3.12 deleted file mode 100644 index 99e31e4..0000000 Binary files a/libs/paho-mqtt/libpaho-mqtt3as.so.1.3.12 and /dev/null differ diff --git a/libs/paho-mqtt/libpaho-mqtt3c.so b/libs/paho-mqtt/libpaho-mqtt3c.so deleted file mode 120000 index 153ddaa..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3c.so +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3c.so.1 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3c.so.1 b/libs/paho-mqtt/libpaho-mqtt3c.so.1 deleted file mode 120000 index 7d1c96b..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3c.so.1 +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3c.so.1.3.12 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3c.so.1.3.12 b/libs/paho-mqtt/libpaho-mqtt3c.so.1.3.12 deleted file mode 100644 index db677e0..0000000 Binary files a/libs/paho-mqtt/libpaho-mqtt3c.so.1.3.12 and /dev/null differ diff --git a/libs/paho-mqtt/libpaho-mqtt3cs.so b/libs/paho-mqtt/libpaho-mqtt3cs.so deleted file mode 120000 index ea90fc2..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3cs.so +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3cs.so.1 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3cs.so.1 b/libs/paho-mqtt/libpaho-mqtt3cs.so.1 deleted file mode 120000 index e8f982f..0000000 --- a/libs/paho-mqtt/libpaho-mqtt3cs.so.1 +++ /dev/null @@ -1 +0,0 @@ -libpaho-mqtt3cs.so.1.3.12 \ No newline at end of file diff --git a/libs/paho-mqtt/libpaho-mqtt3cs.so.1.3.12 b/libs/paho-mqtt/libpaho-mqtt3cs.so.1.3.12 deleted file mode 100644 index 7454729..0000000 Binary files a/libs/paho-mqtt/libpaho-mqtt3cs.so.1.3.12 and /dev/null differ diff --git a/src/modules/buttons.c b/src/modules/buttons.c index 20d4998..e4e3515 100644 --- a/src/modules/buttons.c +++ b/src/modules/buttons.c @@ -9,7 +9,7 @@ void button1(char *topicName, int topicLen, MQTTAsync_message *message) { - printf("DEBUG: buttons.button1(): payload = %s", (char*)message->payload); + MQTT_publish("/cool/ledkast/set", 1, "{\"status\":\"TOGGLE\"}"); } void Buttons_Stop() diff --git a/src/modules/clock.c b/src/modules/clock.c index 67931de..1ba5c11 100644 --- a/src/modules/clock.c +++ b/src/modules/clock.c @@ -63,7 +63,7 @@ void sendTick(char* name, struct tm* t) ); printf("topic = %s\n", &topic[0]); - MQTT_publish(topic, &payload[0], 1); + MQTT_publish(topic, 1, &payload[0]); } void *Worker(void *args) diff --git a/src/mqtt.c b/src/mqtt.c index c40934a..ac75483 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -76,7 +76,7 @@ void MQTT_subscribe(char* topic, int qos, void (*onMessage)(char* topicName, int opts.onSuccess = &onSubscribe; opts.onFailure = &onSubscribeFailure; opts.context = ⊂ - rc = MQTTAsync_subscribe(Client->client, "#", qos, &opts); + rc = MQTTAsync_subscribe(Client->client, sub.topic, qos, &opts); // rc = MQTTAsync_subscribe(Client->client, topic, qos, &opts); if (rc != MQTTASYNC_SUCCESS){ @@ -84,10 +84,11 @@ void MQTT_subscribe(char* topic, int qos, void (*onMessage)(char* topicName, int } } -void MQTT_publish(char* topic, char* payload, int qos) +void MQTT_publish(char* topic, int qos, char* payload) { - printf("Publishing to %s", topic); - MQTTClient_publish(Client->client, topic, strlen(payload), payload, qos, 0, NULL); + printf("Publishing to %s\n", topic); + int rc = MQTTClient_publish(Client->client, topic, strlen(payload), payload, qos, 0, NULL); + printf("rc = %d\n", rc); } int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message *message){ @@ -95,7 +96,19 @@ int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message *me printf(" topic: %s\n", topicName); printf(" message: %.*s\n", message->payloadlen, (char*)message->payload); - //(*(Client->onMessage))(topicName, topicLen, message); + printf("Subscriptions_len = %d\n", Subscriptions_len); + for (int i = 0; i < Subscriptions_len; i++) + { + Subscription_t sub = *(Subscriptions + i*sizeof(Subscription_t)); + printf("looking for '%s'; looking at '%s'\n", topicName, sub.topic); + int r = strcmp(topicName, sub.topic); + if(r == 0){ + printf("match %d\n", r); + (*(sub.onMessage))(topicName, topicLen, message); + } + else + printf("NO match %d\n", r); + } MQTTAsync_freeMessage(&message); MQTTAsync_free(topicName); @@ -126,7 +139,7 @@ void reconnect(){ Client->last_reconn.c++; } -void onConnectFailure(void* context, MQTTAsync_failureData* response){ +void onConnectFailure(void* context, MQTTAsync_failureData5* response){ printf("ERROR: MQTT.onConnectFailure(): Connection failed, rc %d\n", response->code); reconnect(); } @@ -141,7 +154,7 @@ void connlost(void *context, char *cause){ reconnect(); } -void onConn(void* context, MQTTAsync_successData* response){ +void onConn(void* context, MQTTAsync_successData5* response){ printf("INFO: MQTT.onConn(): connected to MQTT server\n"); Client->last_reconn.c = 0; diff --git a/src/mqtt.h b/src/mqtt.h index f551adc..84fe32d 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -20,6 +20,6 @@ clientConf_t* MQTT_connect(void (*onConnect)(void* context)); void MQTT_disconnect(); void MQTT_subscribe(char* topic, int qos, void (*onMessage)(char* topicName, int topicLen, MQTTAsync_message* message)); -void MQTT_publish(char* topic, char* payload, int qos); +void MQTT_publish(char* topic, int qos, char* payload); #endif