From 4d38c2c7a5883acd757a5244becfc0b60eaa965c Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Wed, 1 Jun 2016 00:49:42 +0200 Subject: [PATCH] MQTT: add user name in URL So we can support several user on the same server. URL are /feeds/USER/DEVICE/.... --- WifiControlSensor/MQTT.ino | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/WifiControlSensor/MQTT.ino b/WifiControlSensor/MQTT.ino index a8d5717..be1ad66 100644 --- a/WifiControlSensor/MQTT.ino +++ b/WifiControlSensor/MQTT.ino @@ -10,19 +10,20 @@ Adafruit_MQTT_Publish *mqtt_dht_temp; Adafruit_MQTT_Publish *mqtt_dht_humidity; #define NB_ELEMENTS(x) (sizeof(x)/ sizeof(x[0])) -#define FEED_MAX_SIZE 64 +#define FEED_MAX_SIZE 96 -#define TEMPERATURE_FEED_FORMAT "/feeds/%s/temperature" -#define PRESSURE_FEED_FORMAT "/feeds/%s/pressure" -#define TEMPERATURE_DHT_FEED_FORMAT "/feeds/%s/dht/temperature" -#define HUMIDITY_DHT_FEED_FORMAT "/feeds/%s/dht/humidity" +//FEED have the following formats /feeds/USER/DEVICE_NAME/.... +#define TEMPERATURE_FEED_FORMAT "/feeds/%s/%s/temperature" +#define PRESSURE_FEED_FORMAT "/feeds/%s/%s/pressure" +#define TEMPERATURE_DHT_FEED_FORMAT "/feeds/%s/%s/dht/temperature" +#define HUMIDITY_DHT_FEED_FORMAT "/feeds/%s/%s/dht/humidity" // Should have less that MAXSUBSCRIPTIONS elements // MAXSUBSCRIPTIONS is defined is Adafruit_mqtt.h const int gpioWatched[] = CONFIG_MQTT_CONTROLLED_GPIO; -#define GPIO_FEED_FORMAT "/feeds/%s/gpio/%d" -#define GPIO_SET_FEED_FORMAT "/feeds/%s/gpio/%d/set" +#define GPIO_FEED_FORMAT "/feeds/%s/%s/gpio/%d" +#define GPIO_SET_FEED_FORMAT "/feeds/%s/%s/gpio/%d/set" char *mqttId; char GPIO_FEED[MAXSUBSCRIPTIONS][FEED_MAX_SIZE] = {}; @@ -41,14 +42,14 @@ int MqttSetup(char *server, char *user, char *passwd, int port, char * hostname) return 0; mqtt = new Adafruit_MQTT_Client(&client, server, port, user, passwd); - mqtt_dht_temp = MqttCreatePublisher(TEMPERATURE_DHT_FEED_FORMAT, mqttId); - mqtt_dht_humidity = MqttCreatePublisher(HUMIDITY_DHT_FEED_FORMAT, mqttId); - mqtt_temp = MqttCreatePublisher(TEMPERATURE_FEED_FORMAT, mqttId); - mqtt_pressure = MqttCreatePublisher(PRESSURE_FEED_FORMAT, mqttId); + mqtt_dht_temp = MqttCreatePublisher(TEMPERATURE_DHT_FEED_FORMAT, user, mqttId); + mqtt_dht_humidity = MqttCreatePublisher(HUMIDITY_DHT_FEED_FORMAT, user, mqttId); + mqtt_temp = MqttCreatePublisher(TEMPERATURE_FEED_FORMAT, user, mqttId); + mqtt_pressure = MqttCreatePublisher(PRESSURE_FEED_FORMAT, user, mqttId); for (uint i = 0 ; i < NB_ELEMENTS(gpioWatched) && i < MAXSUBSCRIPTIONS; i++) { - snprintf(GPIO_FEED[i], FEED_MAX_SIZE, GPIO_FEED_FORMAT, mqttId, gpioWatched[i]); - snprintf(GPIO_SET_FEED[i], FEED_MAX_SIZE, GPIO_SET_FEED_FORMAT, mqttId, gpioWatched[i]); + snprintf(GPIO_FEED[i], FEED_MAX_SIZE, GPIO_FEED_FORMAT, user, mqttId, gpioWatched[i]); + snprintf(GPIO_SET_FEED[i], FEED_MAX_SIZE, GPIO_SET_FEED_FORMAT, user, mqttId, gpioWatched[i]); Adafruit_MQTT_Subscribe *gpioSet = new Adafruit_MQTT_Subscribe(mqtt, GPIO_SET_FEED[i]); mqtt->subscribe(gpioSet);