Refactor GPIO listened/controlled configuration
And improve mqtt connection checking
This commit is contained in:
parent
d20d756677
commit
80252f9307
@ -3,6 +3,7 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "MQTT.h"
|
#include "MQTT.h"
|
||||||
|
|
||||||
|
#define MAX_GPIO_OBSERVED (MAXSUBSCRIPTIONS*2)
|
||||||
Adafruit_MQTT_Client *mqtt;
|
Adafruit_MQTT_Client *mqtt;
|
||||||
Adafruit_MQTT_Publish *mqtt_temp;
|
Adafruit_MQTT_Publish *mqtt_temp;
|
||||||
Adafruit_MQTT_Publish *mqtt_pressure;
|
Adafruit_MQTT_Publish *mqtt_pressure;
|
||||||
@ -12,6 +13,7 @@ Adafruit_MQTT_Publish *mqtt_dry;
|
|||||||
Adafruit_MQTT_Publish *mqtt_ip;
|
Adafruit_MQTT_Publish *mqtt_ip;
|
||||||
Adafruit_MQTT_Publish *mqttGpio[MAXSUBSCRIPTIONS] = {};
|
Adafruit_MQTT_Publish *mqttGpio[MAXSUBSCRIPTIONS] = {};
|
||||||
Adafruit_MQTT_Publish *mqttPwm[MAXSUBSCRIPTIONS] = {};
|
Adafruit_MQTT_Publish *mqttPwm[MAXSUBSCRIPTIONS] = {};
|
||||||
|
Adafruit_MQTT_Publish *mqttGpioObserved[MAX_GPIO_OBSERVED] = {};
|
||||||
|
|
||||||
#define FEED_MAX_SIZE 96
|
#define FEED_MAX_SIZE 96
|
||||||
|
|
||||||
@ -27,11 +29,6 @@ Adafruit_MQTT_Publish *mqttPwm[MAXSUBSCRIPTIONS] = {};
|
|||||||
#define PWM_SET_FEED_FORMAT "/feeds/%s/%s/gpio/%d/set"
|
#define PWM_SET_FEED_FORMAT "/feeds/%s/%s/gpio/%d/set"
|
||||||
#define IP_FEED_FORMAT "/feeds/%s/%s/configuration/ip/addr"
|
#define IP_FEED_FORMAT "/feeds/%s/%s/configuration/ip/addr"
|
||||||
|
|
||||||
// Should have less that MAXSUBSCRIPTIONS elements
|
|
||||||
// MAXSUBSCRIPTIONS is defined is Adafruit_mqtt.h
|
|
||||||
const int gpioControlled[] = CONFIG_CONTROLLED_GPIO;
|
|
||||||
const int pwmWatched[] = CONFIG_CONTROLLED_PWM;
|
|
||||||
|
|
||||||
char *mqttId;
|
char *mqttId;
|
||||||
|
|
||||||
bool isMqttConfigured = false;
|
bool isMqttConfigured = false;
|
||||||
@ -60,21 +57,31 @@ int MqttSetup(char *server, char *user, char *passwd, int port, char *hostname)
|
|||||||
mqtt_dry = MqttCreatePublisher(DRY_FEED_FORMAT, user, mqttId);
|
mqtt_dry = MqttCreatePublisher(DRY_FEED_FORMAT, user, mqttId);
|
||||||
mqtt_ip = MqttCreatePublisher(IP_FEED_FORMAT, user, mqttId);
|
mqtt_ip = MqttCreatePublisher(IP_FEED_FORMAT, user, mqttId);
|
||||||
|
|
||||||
if( NB_ELEMENTS(gpioControlled) + NB_ELEMENTS(pwmWatched) > MAXSUBSCRIPTIONS){
|
if (NB_ELEMENTS(gpioControlled) + NB_ELEMENTS(pwmControlled) > MAXSUBSCRIPTIONS){
|
||||||
SKETCH_DEBUG_PRINTF("Too much gpio/pwm to control\n Nb gpio %d Nb pwm %d Max is %d",
|
SKETCH_DEBUG_PRINTF("Too much gpio/pwm to control\n Nb gpio %d Nb pwm %d Max is %d",
|
||||||
NB_ELEMENTS(gpioControlled), NB_ELEMENTS(pwmWatched), MAXSUBSCRIPTIONS);
|
NB_ELEMENTS(gpioControlled), NB_ELEMENTS(pwmControlled), MAXSUBSCRIPTIONS);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (NB_ELEMENTS(gpioObserved) > MAX_GPIO_OBSERVED){
|
||||||
|
SKETCH_DEBUG_PRINTF("Too much gpio observed\n Nb gpio %d Nb is %d",
|
||||||
|
NB_ELEMENTS(gpioObserved), MAX_GPIO_OBSERVED);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint i = 0 ; i < NB_ELEMENTS(gpioControlled) && i < MAXSUBSCRIPTIONS; i++) {
|
for (uint i = 0 ; i < NB_ELEMENTS(gpioControlled); i++) {
|
||||||
mqtt->subscribe(MqttCreateSubscribe(GPIO_SET_FEED_FORMAT, user, mqttId, gpioControlled[i]));
|
mqtt->subscribe(MqttCreateSubscribe(GPIO_SET_FEED_FORMAT, user, mqttId, gpioControlled[i]));
|
||||||
mqttGpio[i] = MqttCreatePublisher(GPIO_FEED_FORMAT, user, mqttId, gpioControlled[i]);
|
mqttGpio[i] = MqttCreatePublisher(GPIO_FEED_FORMAT, user, mqttId, gpioControlled[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint i = 0 ; i < NB_ELEMENTS(gpioControlled) && i < MAXSUBSCRIPTIONS; i++) {
|
for (uint i = 0 ; i < NB_ELEMENTS(gpioObserved) && i < MAX_GPIO_OBSERVED ; i++) {
|
||||||
mqtt->subscribe(MqttCreateSubscribe(PWM_SET_FEED_FORMAT, user, mqttId, pwmWatched[i]));
|
mqttGpioObserved[i] = MqttCreatePublisher(GPIO_FEED_FORMAT, user, mqttId, gpioObserved[i]);
|
||||||
mqttPwm[i] = MqttCreatePublisher(PWM_FEED_FORMAT, user, mqttId, pwmWatched[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (uint i = 0 ; i < NB_ELEMENTS(pwmControlled); i++) {
|
||||||
|
mqtt->subscribe(MqttCreateSubscribe(PWM_SET_FEED_FORMAT, user, mqttId, pwmControlled[i]));
|
||||||
|
mqttPwm[i] = MqttCreatePublisher(PWM_FEED_FORMAT, user, mqttId, pwmControlled[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +104,7 @@ Adafruit_MQTT_Subscribe *MqttCreateSubscribe(const char *fmt, ...){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int MqttIsConnected() {
|
int MqttIsConnected() {
|
||||||
return (isMqttConfigured) ? mqtt->connected() : 0;
|
return (isMqttConfigured && (mode == BOOTMODE_NORMAL)) ? mqtt->connected() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to connect and reconnect as necessary to the MQTT server.
|
// Function to connect and reconnect as necessary to the MQTT server.
|
||||||
@ -105,7 +112,7 @@ int MqttIsConnected() {
|
|||||||
int MqttConnect() {
|
int MqttConnect() {
|
||||||
int8_t ret;
|
int8_t ret;
|
||||||
|
|
||||||
if(!isMqttConfigured)
|
if (!isMqttConfigured || mode != BOOTMODE_NORMAL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// Stop if already connected.
|
// Stop if already connected.
|
||||||
@ -166,9 +173,15 @@ int getGpioFromSubscription(Adafruit_MQTT_Subscribe *subscription, const char *p
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MqttNofity(int gpio, int value){
|
void MqttNofity(int gpio, int value){
|
||||||
|
if (MqttIsConnected()) {
|
||||||
int watchIdx = findIndex(gpio, gpioControlled);
|
int watchIdx = findIndex(gpio, gpioControlled);
|
||||||
if (watchIdx >= 0 && isMqttConfigured) {
|
if (watchIdx >= 0 ) {
|
||||||
mqttGpio[watchIdx]->publish(value);
|
mqttGpio[watchIdx]->publish(value);
|
||||||
|
} else {
|
||||||
|
watchIdx = findIndex(gpio, gpioObserved);
|
||||||
|
if (watchIdx >= 0 )
|
||||||
|
mqttGpioObserved[watchIdx]->publish(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +209,7 @@ void MqttCheckSubscription() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gpio = getGpioFromSubscription(subscription, "/pwm/");
|
gpio = getGpioFromSubscription(subscription, "/pwm/");
|
||||||
if (gpio > 0 && findIndex(gpio, pwmWatched) >= 0) {
|
if (gpio > 0 && findIndex(gpio, pwmControlled) >= 0) {
|
||||||
SKETCH_DEBUG_PRINTF("Got Subscription for PWM %d\n", gpio);
|
SKETCH_DEBUG_PRINTF("Got Subscription for PWM %d\n", gpio);
|
||||||
char *value = (char *) subscription->lastread;
|
char *value = (char *) subscription->lastread;
|
||||||
SKETCH_DEBUG_PRINTF("Receive data: %s\n", value);
|
SKETCH_DEBUG_PRINTF("Receive data: %s\n", value);
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
#ifndef CONFIG_DISABLE_WEB
|
#ifndef CONFIG_DISABLE_WEB
|
||||||
const int gpioWebConf[] = CONFIG_CONTROLLED_GPIO;
|
|
||||||
const int pwmWebConf[] = CONFIG_CONTROLLED_PWM;
|
|
||||||
|
|
||||||
String gpioControlHTML = "";
|
String gpioControlHTML = "";
|
||||||
String pwmControlHTML = "";
|
String pwmControlHTML = "";
|
||||||
@ -234,26 +232,26 @@ void WebHandleWifiStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WebBuildGpioControl(){
|
void WebBuildGpioControl(){
|
||||||
if (NB_ELEMENTS(gpioWebConf) > 0){
|
if (NB_ELEMENTS(gpioControlled) > 0){
|
||||||
gpioControlHTML += "<fieldset>"
|
gpioControlHTML += "<fieldset>"
|
||||||
"<legend>Relay</legend>";
|
"<legend>Relay</legend>";
|
||||||
for (uint i = 0 ; i < NB_ELEMENTS(gpioWebConf) ; i++) {
|
for (uint i = 0 ; i < NB_ELEMENTS(gpioControlled) ; i++) {
|
||||||
gpioControlHTML += "Relay " + String(gpioWebConf[i]) + " " + "<a href=\"/gpio?gpio=" + String(gpioWebConf[i]) + "&value=1\">ON</a>/";
|
gpioControlHTML += "Relay " + String(gpioControlled[i]) + " " + "<a href=\"/gpio?gpio=" + String(gpioControlled[i]) + "&value=1\">ON</a>/";
|
||||||
gpioControlHTML += "<a href=\"/gpio?gpio=" + String(gpioWebConf[i]) + "&value=0\">OFF</a><br/>";
|
gpioControlHTML += "<a href=\"/gpio?gpio=" + String(gpioControlled[i]) + "&value=0\">OFF</a><br/>";
|
||||||
}
|
}
|
||||||
gpioControlHTML += "</fieldset>";
|
gpioControlHTML += "</fieldset>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebBuildPwmControl(){
|
void WebBuildPwmControl(){
|
||||||
if (NB_ELEMENTS(pwmWebConf) > 0){
|
if (NB_ELEMENTS(pwmControlled) > 0){
|
||||||
pwmControlHTML += "<fieldset>"
|
pwmControlHTML += "<fieldset>"
|
||||||
"<legend>PWM</legend>";
|
"<legend>PWM</legend>";
|
||||||
for (uint i = 0 ; i < NB_ELEMENTS(pwmWebConf) ; i++) {
|
for (uint i = 0 ; i < NB_ELEMENTS(pwmControlled) ; i++) {
|
||||||
pwmControlHTML += "PWM " + String(pwmWebConf[i]) + "<br/>";
|
pwmControlHTML += "PWM " + String(pwmControlled[i]) + "<br/>";
|
||||||
pwmControlHTML += "<input type=\"range\" min=\"0\" max=\"1023\""
|
pwmControlHTML += "<input type=\"range\" min=\"0\" max=\"1023\""
|
||||||
"style=\"background:#eee\""
|
"style=\"background:#eee\""
|
||||||
"onChange=\"setPWM(this.value," + String(pwmWebConf[i]) + ")\" />";
|
"onChange=\"setPWM(this.value," + String(pwmControlled[i]) + ")\" />";
|
||||||
}
|
}
|
||||||
pwmControlHTML += "<script type=\"text/javascript\">"
|
pwmControlHTML += "<script type=\"text/javascript\">"
|
||||||
"function setPWM(newValue, gpio){"
|
"function setPWM(newValue, gpio){"
|
||||||
|
@ -64,6 +64,11 @@ float dhtTemp, dhtHumidity;
|
|||||||
int dryness;
|
int dryness;
|
||||||
uint8_t mode;
|
uint8_t mode;
|
||||||
productConfig conf = {BOOTMODE_SETUP, "", "", "", "", "", "", 0, 0, 0, 0, 0, 0, 0};
|
productConfig conf = {BOOTMODE_SETUP, "", "", "", "", "", "", 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
// Should have less that MAXSUBSCRIPTIONS elements
|
||||||
|
// MAXSUBSCRIPTIONS is defined is Adafruit_mqtt.h
|
||||||
|
const int gpioControlled[] = CONFIG_CONTROLLED_GPIO;
|
||||||
|
const int gpioObserved[] = CONFIG_OBSERVED_GPIO;
|
||||||
|
const int pwmControlled[] = CONFIG_CONTROLLED_PWM;
|
||||||
|
|
||||||
/* Set these to your desired credentials. */
|
/* Set these to your desired credentials. */
|
||||||
const char *ssid = CONFIG_SSID_NAME;
|
const char *ssid = CONFIG_SSID_NAME;
|
||||||
|
@ -43,8 +43,8 @@
|
|||||||
#define CONFIG_CONTROLLED_PWM {}
|
#define CONFIG_CONTROLLED_PWM {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_WEB_CONTROLLED_GPIO
|
#ifndef CONFIG_OBSERVED_GPIO
|
||||||
#define CONFIG_WEB_CONTROLLED_GPIO {}
|
#define CONFIG_OBSERVED_GPIO {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_CONTROLLED_GPIO
|
#ifndef CONFIG_CONTROLLED_GPIO
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
// Should have less value than MAXSUBSCRIPTIONS
|
// Should have less value than MAXSUBSCRIPTIONS
|
||||||
#define CONFIG_CONTROLLED_GPIO {2,13}
|
#define CONFIG_CONTROLLED_GPIO {2,13}
|
||||||
|
|
||||||
|
// GPIO that can be get by mqtt and http
|
||||||
|
//#define CONFIG_OBSERVED_GPIO {}
|
||||||
|
|
||||||
// GPIO used in PWM
|
// GPIO used in PWM
|
||||||
//#define CONFIG_CONTROLLED_PWM {}
|
//#define CONFIG_CONTROLLED_PWM {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user