@@ -38,7 +38,7 @@
|
||||
// ***************************************************************************
|
||||
#include <PubSubClient.h>
|
||||
WiFiClient espClient;
|
||||
PubSubClient* mqtt_client = NULL;
|
||||
PubSubClient mqtt_client(espClient);
|
||||
#endif
|
||||
|
||||
#if ENABLE_MQTT == 1
|
||||
@@ -47,7 +47,7 @@
|
||||
// ***************************************************************************
|
||||
#include <AsyncMqttClient.h> //https://github.com/marvinroger/async-mqtt-client
|
||||
//https://github.com/me-no-dev/ESPAsyncTCP
|
||||
AsyncMqttClient* mqtt_client = NULL;
|
||||
AsyncMqttClient mqtt_client;
|
||||
WiFiEventHandler wifiConnectHandler;
|
||||
WiFiEventHandler wifiDisconnectHandler;
|
||||
#endif
|
||||
@@ -189,7 +189,7 @@ Ticker ticker;
|
||||
|
||||
void tick() {
|
||||
//toggle state
|
||||
int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin
|
||||
uint16_t state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin
|
||||
digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state
|
||||
}
|
||||
|
||||
@@ -205,13 +205,13 @@ Ticker settings_save_state;
|
||||
// Saved state handling in WifiManager
|
||||
// ***************************************************************************
|
||||
// https://stackoverflow.com/questions/9072320/split-string-into-string-array
|
||||
String getValue(String data, char separator, int index)
|
||||
String getValue(String data, char separator, uint8_t index)
|
||||
{
|
||||
int found = 0;
|
||||
int strIndex[] = {0, -1};
|
||||
int maxIndex = data.length()-1;
|
||||
uint8_t found = 0;
|
||||
uint8_t strIndex[] = {0, -1};
|
||||
uint8_t maxIndex = data.length()-1;
|
||||
|
||||
for(int i=0; i<=maxIndex && found<=index; i++){
|
||||
for(uint8_t i=0; i<=maxIndex && found<=index; i++){
|
||||
if(data.charAt(i)==separator || i==maxIndex){
|
||||
found++;
|
||||
strIndex[0] = strIndex[1]+1;
|
||||
@@ -300,7 +300,6 @@ void initStrip(uint16_t stripSize = WS2812FXStripSettings.stripSize, char RGBOrd
|
||||
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
|
||||
// and minimize distance between Arduino and first pixel. Avoid connecting
|
||||
// on a live circuit...if you must, connect GND first.
|
||||
|
||||
strip->init();
|
||||
#if defined(USE_WS2812FX_DMA)
|
||||
initDMA(stripSize);
|
||||
@@ -335,12 +334,12 @@ void initMqtt() {
|
||||
// ***************************************************************************
|
||||
// Configure MQTT
|
||||
// ***************************************************************************
|
||||
#if ENABLE_MQTT == 0
|
||||
/*#if ENABLE_MQTT == 0
|
||||
mqtt_client = new PubSubClient(espClient);
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client = new AsyncMqttClient();
|
||||
#endif
|
||||
#endif*/
|
||||
|
||||
#if defined(ENABLE_MQTT_HOSTNAME_CHIPID)
|
||||
snprintf(mqtt_clientid, sizeof(mqtt_clientid), "%s-%08X", HOSTNAME, ESP.getChipId());
|
||||
@@ -358,25 +357,24 @@ void initMqtt() {
|
||||
if ((strlen(mqtt_host) != 0) && (mqtt_port != 0)) {
|
||||
#if ENABLE_MQTT == 0
|
||||
DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\r\n", mqtt_host, mqtt_port);
|
||||
mqtt_client->setServer(mqtt_host, mqtt_port);
|
||||
mqtt_client->setCallback(mqtt_callback);
|
||||
mqtt_client.setServer(mqtt_host, mqtt_port);
|
||||
mqtt_client.setCallback(mqtt_callback);
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
DBG_OUTPUT_PORT.printf("AMQTT active: %s:%d\r\n", mqtt_host, mqtt_port);
|
||||
mqtt_client->onConnect(onMqttConnect);
|
||||
mqtt_client->onDisconnect(onMqttDisconnect);
|
||||
mqtt_client->onMessage(onMqttMessage);
|
||||
if ((strlen(mqtt_user) != 0) || (strlen(mqtt_pass) != 0)) mqtt_client->setCredentials(mqtt_user, mqtt_pass);
|
||||
mqtt_client->setClientId(mqtt_clientid);
|
||||
mqtt_client->setWill(mqtt_will_topic, 2, true, mqtt_will_payload, 0);
|
||||
mqtt_client->setServer(mqtt_host, mqtt_port);
|
||||
mqtt_client.onConnect(onMqttConnect);
|
||||
mqtt_client.onDisconnect(onMqttDisconnect);
|
||||
mqtt_client.onMessage(onMqttMessage);
|
||||
if ((strlen(mqtt_user) != 0) || (strlen(mqtt_pass) != 0)) mqtt_client.setCredentials(mqtt_user, mqtt_pass);
|
||||
mqtt_client.setClientId(mqtt_clientid);
|
||||
mqtt_client.setWill(mqtt_will_topic, 2, true, mqtt_will_payload, 0);
|
||||
mqtt_client.setServer(mqtt_host, mqtt_port);
|
||||
connectToMqtt();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// ***************************************************************************
|
||||
// MAIN Setup
|
||||
// ***************************************************************************
|
||||
@@ -504,7 +502,6 @@ void setup() {
|
||||
wifiManager.setConfigPortalTimeout(WIFIMGR_PORTAL_TIMEOUT);
|
||||
#endif
|
||||
|
||||
// Uncomment if you want to set static IP
|
||||
// Order is: IP, Gateway and Subnet
|
||||
#if defined(WIFIMGR_SET_MANUAL_IP)
|
||||
wifiManager.setSTAStaticIPConfig(IPAddress(_ip[0], _ip[1], _ip[2], _ip[3]), IPAddress(_gw[0], _gw[1], _gw[2], _gw[3]), IPAddress(_sn[0], _sn[1], _sn[2], _sn[3]));
|
||||
@@ -532,7 +529,7 @@ void setup() {
|
||||
strcpy(mqtt_pass, custom_mqtt_pass.getValue());
|
||||
#endif
|
||||
strcpy(tmp_strip_size, custom_strip_size.getValue());
|
||||
WS2812FXStripSettings.stripSize = constrain(atoi(custom_strip_size.getValue()), 0, MAXLEDS);
|
||||
WS2812FXStripSettings.stripSize = constrain(atoi(custom_strip_size.getValue()), 1, MAXLEDS);
|
||||
#if !defined(USE_WS2812FX_DMA)
|
||||
checkPin(atoi(custom_led_pin.getValue()));
|
||||
#endif
|
||||
@@ -541,7 +538,6 @@ void setup() {
|
||||
WS2812FXStripSettings.fxoptions = atoi(custom_fxoptions.getValue());
|
||||
#if ENABLE_STATE_SAVE == 1
|
||||
(writeConfigFS(shouldSaveConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!");
|
||||
(writeStateFS(shouldSaveConfig)) ? DBG_OUTPUT_PORT.println("State config FS Save success!"): DBG_OUTPUT_PORT.println("State config FS Save failure!");
|
||||
#endif
|
||||
#if ENABLE_STATE_SAVE == 0
|
||||
if (shouldSaveConfig) {
|
||||
@@ -592,7 +588,7 @@ void setup() {
|
||||
ArduinoOTA.onEnd([]() {
|
||||
DBG_OUTPUT_PORT.println("Arduino OTA: End");
|
||||
});
|
||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
||||
ArduinoOTA.onProgress([](uint16_t progress, uint16_t total) {
|
||||
DBG_OUTPUT_PORT.printf("Arduino OTA Progress: %u%%\r", (progress / (total / 100)));
|
||||
});
|
||||
ArduinoOTA.onError([](ota_error_t error) {
|
||||
@@ -716,14 +712,14 @@ void loop() {
|
||||
WiFi.begin();
|
||||
} else {
|
||||
if ((strlen(mqtt_host) != 0) && (mqtt_port != 0) && (mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES)) {
|
||||
if (!mqtt_client->connected()) {
|
||||
if (!mqtt_client.connected()) {
|
||||
#if defined(ENABLE_HOMEASSISTANT)
|
||||
ha_send_data.detach();
|
||||
#endif
|
||||
DBG_OUTPUT_PORT.println("MQTT disconnected, reconnecting!");
|
||||
mqtt_reconnect();
|
||||
} else {
|
||||
mqtt_client->loop();
|
||||
mqtt_client.loop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -835,6 +831,7 @@ void loop() {
|
||||
strip->setColors(0, hex_colors);
|
||||
mode = prevmode;
|
||||
prevmode = SET_COLOR;
|
||||
//DBG_OUTPUT_PORT.printf("mode: %d\r\n", mode);
|
||||
if (mode == HOLD) strip->trigger();
|
||||
}
|
||||
if (mode == SET_SPEED) {
|
||||
@@ -853,6 +850,7 @@ void loop() {
|
||||
strip->setBrightness(brightness);
|
||||
mode = prevmode;
|
||||
prevmode = SET_BRIGHTNESS;
|
||||
//DBG_OUTPUT_PORT.printf("mode: %d\r\n", mode);
|
||||
if (mode == HOLD) strip->trigger();
|
||||
}
|
||||
|
||||
@@ -865,10 +863,10 @@ void loop() {
|
||||
}
|
||||
#if defined(ENABLE_MQTT)
|
||||
#if ENABLE_MQTT == 0
|
||||
mqtt_client->publish(mqtt_outtopic, mqtt_buf);
|
||||
mqtt_client.publish(mqtt_outtopic, mqtt_buf);
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client->publish(mqtt_outtopic, qospub, false, mqtt_buf);
|
||||
mqtt_client.publish(mqtt_outtopic, qospub, false, mqtt_buf);
|
||||
#endif
|
||||
#if defined(ENABLE_HOMEASSISTANT)
|
||||
if(!ha_send_data.active()) ha_send_data.once(3, tickerSendState);
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
char HOSTNAME[65] = "McLightingRGBW"; // Friedly hostname is configurable just for the start
|
||||
|
||||
#define ENABLE_OTA 1 // If defined, enable Arduino OTA code. If set to 0 enable Arduino OTA code, if set to 1 enable ESP8266HTTPUpdateServer OTA code.
|
||||
#define ENABLE_MQTT 1 // If defined use MQTT OR AMQTT, if set to 0 enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API, if set to 1, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client
|
||||
#define ENABLE_MQTT 0 // If defined use MQTT OR AMQTT, if set to 0 enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API, if set to 1, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client
|
||||
//#define ENABLE_MQTT_HOSTNAME_CHIPID // Uncomment/comment to add ESPChipID to end of MQTT hostname
|
||||
#define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT must be active
|
||||
#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth
|
||||
@@ -36,7 +36,7 @@ char HOSTNAME[65] = "McLightingRGBW"; // Friedly hostname is configurable just
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_REMOTE)
|
||||
int selected_color = 1;
|
||||
uint8_t selected_color = 1;
|
||||
uint64_t last_remote_cmd;
|
||||
enum RMT_BTN {ON_OFF, MODE_UP, MODE_DOWN, RED_UP, RED_DOWN, GREEN_UP, GREEN_DOWN, BLUE_UP, BLUE_DOWN, WHITE_UP, WHITE_DOWN, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SPEED_UP, SPEED_DOWN, COL_M, COL_B, COL_X, AUTOMODE, CUST_1, CUST_2, CUST_3, CUST_4, CUST_5, REPEATCMD, BTN_CNT};
|
||||
// Change your IR Commands here. You can see them in console, after you pressed a button on the remote
|
||||
@@ -93,7 +93,7 @@ uint32_t autoParams[][6] = { // main_color, back_color, xtra_color, speed, mod
|
||||
#if ENABLE_MQTT == 0
|
||||
#define MQTT_MAX_PACKET_SIZE 512
|
||||
#define MQTT_MAX_RECONNECT_TRIES 4
|
||||
int mqtt_reconnect_retries = 0;
|
||||
uint8_t mqtt_reconnect_retries = 0;
|
||||
uint8_t qossub = 0; // PubSubClient can sub qos 0 or 1
|
||||
#endif
|
||||
|
||||
@@ -134,10 +134,10 @@ uint32_t autoParams[][6] = { // main_color, back_color, xtra_color, speed, mod
|
||||
MODE mode = SET_ALL; // Standard mode that is active when software starts
|
||||
MODE prevmode = mode;
|
||||
|
||||
int ws2812fx_speed = 196; // Global variable for storing the delay between color changes --> smaller == faster
|
||||
int brightness = 196; // Global variable for storing the brightness (255 == 100%)
|
||||
uint8_t ws2812fx_speed = 196; // Global variable for storing the delay between color changes --> smaller == faster
|
||||
uint8_t brightness = 196; // Global variable for storing the brightness (255 == 100%)
|
||||
|
||||
int ws2812fx_mode = 0; // Global variable for storing the WS2812FX modes
|
||||
uint8_t ws2812fx_mode = 0; // Global variable for storing the WS2812FX modes
|
||||
|
||||
bool shouldSaveConfig = false; // For WiFiManger custom config
|
||||
|
||||
|
||||
+1208
-1208
File diff suppressed because it is too large
Load Diff
@@ -58,25 +58,25 @@ void Fire2012() {
|
||||
// Array of temperature readings at each simulation cell
|
||||
|
||||
// Step 1. Cool down every cell a little
|
||||
for( int i = 0; i < WS2812FXStripSettings.stripSize; i++) {
|
||||
for( uint16_t i = 0; i < WS2812FXStripSettings.stripSize; i++) {
|
||||
ledstates[i] = qsub8( ledstates[i], random8(0, ((COOLING * 10) / WS2812FXStripSettings.stripSize) + 2));
|
||||
}
|
||||
|
||||
// Step 2. Heat from each cell drifts 'up' and diffuses a little
|
||||
for( int k= WS2812FXStripSettings.stripSize - 1; k >= 2; k--) {
|
||||
for( uint16_t k= WS2812FXStripSettings.stripSize - 1; k >= 2; k--) {
|
||||
ledstates[k] = (ledstates[k - 1] + ledstates[k - 2] + ledstates[k - 2]) / 3;
|
||||
}
|
||||
|
||||
// Step 3. Randomly ignite new 'sparks' of heat near the bottom
|
||||
if( random8() < SPARKING ) {
|
||||
int y = random8(7);
|
||||
uint8_t y = random8(7);
|
||||
ledstates[y] = qadd8(ledstates[y], random8(160,255) );
|
||||
}
|
||||
|
||||
// Step 4. Map from heat cells to LED colors
|
||||
for( int j = 0; j < WS2812FXStripSettings.stripSize; j++) {
|
||||
for( uint16_t j = 0; j < WS2812FXStripSettings.stripSize; j++) {
|
||||
CRGB color = HeatColor( ledstates[j]);
|
||||
int pixelnumber;
|
||||
uint16_t pixelnumber;
|
||||
if( gReverseDirection ) {
|
||||
pixelnumber = (WS2812FXStripSettings.stripSize - 1) - j;
|
||||
} else {
|
||||
|
||||
@@ -29,7 +29,7 @@ void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint8_t myled) {
|
||||
|
||||
void updateLed (uint16_t led, uint8_t brightness) {
|
||||
ledstates[led] = brightness;
|
||||
for (int i=0; i<WS2812FXStripSettings.stripSize; i++) {
|
||||
for (uint16_t i=0; i<WS2812FXStripSettings.stripSize; i++) {
|
||||
uint16_t index = (i%3 == 0) ? 400 : random(0,767);
|
||||
hsb2rgbAN1(index, 200, ledstates[i], i);
|
||||
}
|
||||
@@ -66,12 +66,12 @@ void handleTV() {
|
||||
DBG_OUTPUT_PORT.println("Dip Time");
|
||||
currentDipTime = millis();
|
||||
if (currentDipTime - dipStartTime < darkTime) {
|
||||
for (int i=3; i<WS2812FXStripSettings.stripSize; i++) {
|
||||
for (uint16_t i=3; i<WS2812FXStripSettings.stripSize; i++) {
|
||||
updateLed(i, 0);
|
||||
}
|
||||
} else {
|
||||
timeToDip = false;
|
||||
}
|
||||
strip->show();
|
||||
//strip->show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,9 +301,9 @@ bool checkPin(uint8_t pin) {
|
||||
|
||||
|
||||
neoPixelType checkRGBOrder(char rgbOrder[5]) {
|
||||
for( int i=0 ; i < sizeof(rgbOrder) ; ++i ) rgbOrder[i] = toupper(rgbOrder[i]) ;
|
||||
for( uint8_t i=0 ; i < sizeof(rgbOrder) ; ++i ) rgbOrder[i] = toupper(rgbOrder[i]) ;
|
||||
DBG_OUTPUT_PORT.printf("Checking RGB Order: %s ...", rgbOrder);
|
||||
neoPixelType returnOrder;
|
||||
neoPixelType returnOrder = 0;
|
||||
if (strcmp(rgbOrder, "GRB") == 0) {
|
||||
returnOrder = NEO_GRB;
|
||||
} else if (strcmp(rgbOrder, "GBR") == 0) {
|
||||
@@ -366,7 +366,14 @@ neoPixelType checkRGBOrder(char rgbOrder[5]) {
|
||||
returnOrder = NEO_BGRW;
|
||||
} else {
|
||||
DBG_OUTPUT_PORT.print("invalid input!");
|
||||
returnOrder = static_cast<neoPixelType>(checkRGBOrder(WS2812FXStripSettings.RGBOrder));
|
||||
uint16_t check = checkRGBOrder(WS2812FXStripSettings.RGBOrder);
|
||||
if (check != 0) {
|
||||
returnOrder = static_cast<neoPixelType>(check);
|
||||
strcpy(rgbOrder, WS2812FXStripSettings.RGBOrder);
|
||||
} else {
|
||||
returnOrder = static_cast<neoPixelType>(checkRGBOrder(RGBORDER));
|
||||
strcpy(rgbOrder, RGBORDER);
|
||||
}
|
||||
}
|
||||
DBG_OUTPUT_PORT.println("success!");
|
||||
strcpy(WS2812FXStripSettings.RGBOrder, rgbOrder);
|
||||
@@ -383,12 +390,12 @@ bool setConfByConfString(String saved_conf_string) {
|
||||
getValue(saved_conf_string, '|', 4).toCharArray(mqtt_user, 32);
|
||||
getValue(saved_conf_string, '|', 5).toCharArray(mqtt_pass, 32);
|
||||
#endif
|
||||
WS2812FXStripSettings.stripSize = constrain(getValue(saved_conf_string, '|', 6).toInt(), 0, MAXLEDS);
|
||||
WS2812FXStripSettings.stripSize = constrain(getValue(saved_conf_string, '|', 6).toInt(), 1, MAXLEDS);
|
||||
checkPin(getValue(saved_conf_string, '|', 7).toInt());
|
||||
char tmp_rgbOrder[5];
|
||||
getValue(saved_conf_string, '|', 8).toCharArray(tmp_rgbOrder, 4);
|
||||
checkRGBOrder(tmp_rgbOrder);
|
||||
WS2812FXStripSettings.fxoptions = getValue(saved_conf_string, '|', 9).toInt();
|
||||
WS2812FXStripSettings.fxoptions = constrain(((getValue(saved_conf_string, '|', 9).toInt()>>1)<<1), 0, 255);
|
||||
return true;
|
||||
} else {
|
||||
DBG_OUTPUT_PORT.println("Saved conf not found!");
|
||||
@@ -680,7 +687,7 @@ void handleNotFound() {
|
||||
// Functions and variables for automatic cycling
|
||||
// ***************************************************************************
|
||||
Ticker autoTicker;
|
||||
int autoCount = 0;
|
||||
uint8_t autoCount = 0;
|
||||
|
||||
void autoTick() {
|
||||
uint32_t setcolors[] = {autoParams[autoCount][0],autoParams[autoCount][1],autoParams[autoCount][2]};
|
||||
@@ -808,10 +815,10 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) {
|
||||
DBG_OUTPUT_PORT.print("MQTT: ");
|
||||
#if defined(ENABLE_MQTT)
|
||||
#if ENABLE_MQTT == 0
|
||||
mqtt_client->publish(mqtt_outtopic, json.c_str());
|
||||
mqtt_client.publish(mqtt_outtopic, json.c_str());
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client->publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
mqtt_client.publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
@@ -832,7 +839,7 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) {
|
||||
char tmp_count[6];
|
||||
snprintf(tmp_count, sizeof(tmp_count), "%s", &payload[3]);
|
||||
tmp_count[5] = 0x00;
|
||||
WS2812FXStripSettings.stripSize = constrain(atoi(tmp_count), 0, MAXLEDS);
|
||||
WS2812FXStripSettings.stripSize = constrain(atoi(tmp_count), 1, MAXLEDS);
|
||||
updateStrip = true;
|
||||
}
|
||||
if (payload[2] == 'r') {
|
||||
@@ -856,7 +863,7 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) {
|
||||
char tmp_fxoptions[4];
|
||||
snprintf(tmp_fxoptions, sizeof(tmp_fxoptions), "%s", &payload[3]);
|
||||
tmp_fxoptions[3] = 0x00;
|
||||
WS2812FXStripSettings.fxoptions = constrain(atoi(tmp_fxoptions), 0, 255);
|
||||
WS2812FXStripSettings.fxoptions = ((constrain(atoi(tmp_fxoptions), 0, 255)>>1)<<1);
|
||||
updateStrip = true;
|
||||
}
|
||||
}
|
||||
@@ -910,16 +917,16 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) {
|
||||
EEPROM.commit();
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
String json = listConfigJSON();
|
||||
if (mqtt == true) {
|
||||
DBG_OUTPUT_PORT.print("MQTT: ");
|
||||
#if defined(ENABLE_MQTT)
|
||||
#if ENABLE_MQTT == 0
|
||||
mqtt_client->publish(mqtt_outtopic, json.c_str());
|
||||
mqtt_client.publish(mqtt_outtopic, json.c_str());
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client->publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
mqtt_client.publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
@@ -938,17 +945,14 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) {
|
||||
if (mqtt == true) {
|
||||
DBG_OUTPUT_PORT.print("MQTT: ");
|
||||
#if defined(ENABLE_MQTT)
|
||||
#if ENABLE_MQTT == 0
|
||||
String json = listModesJSON();
|
||||
unsigned int msg_len = measureJson(json) + 1;
|
||||
char buffer[msg_len];
|
||||
serializeJson(json, buffer, sizeof(buffer));
|
||||
mqtt_client->beginPublish(mqtt_outtopic, msg_len, true);
|
||||
mqtt_client->write((const uint8_t*)buffer, msg_len);
|
||||
mqtt_client->endPublish();
|
||||
#if ENABLE_MQTT == 2
|
||||
uint16_t msg_len = strlen(json.c_str()) + 1;
|
||||
mqtt_client.beginPublish(mqtt_outtopic, msg_len, true);
|
||||
mqtt_client.write((const uint8_t*)json.c_str(), msg_len);
|
||||
mqtt_client.endPublish();
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client->publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
mqtt_client.publish(mqtt_outtopic, qospub, false, json.c_str());
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
@@ -1016,8 +1020,8 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
new_ha_mqtt_msg = true;
|
||||
}
|
||||
|
||||
LEDState temp2rgb(unsigned int kelvin) {
|
||||
int tmp_internal = kelvin / 100.0;
|
||||
LEDState temp2rgb(uint16_t kelvin) {
|
||||
uint16_t tmp_internal = kelvin / 100.0;
|
||||
LEDState tmp_color;
|
||||
|
||||
// red
|
||||
@@ -1122,11 +1126,11 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
serializeJson(root, buffer, sizeof(buffer));
|
||||
jsonBuffer.clear();
|
||||
#if ENABLE_MQTT == 0
|
||||
mqtt_client->publish(mqtt_ha_state_out, buffer, true);
|
||||
mqtt_client.publish(mqtt_ha_state_out, buffer, true);
|
||||
DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\r\n", mqtt_ha_state_out, buffer);
|
||||
#endif
|
||||
#if ENABLE_MQTT == 1
|
||||
mqtt_client->publish(mqtt_ha_state_out, 1, true, buffer);
|
||||
mqtt_client.publish(mqtt_ha_state_out, 1, true, buffer);
|
||||
DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\r\n", mqtt_ha_state_out, buffer);
|
||||
#endif
|
||||
new_ha_mqtt_msg = false;
|
||||
@@ -1195,7 +1199,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
if (root.containsKey("color_temp")) {
|
||||
//temp comes in as mireds, need to convert to kelvin then to RGB
|
||||
color_temp = (uint16_t) root["color_temp"];
|
||||
unsigned int kelvin = 1000000 / color_temp;
|
||||
uint16_t kelvin = 1000000 / color_temp;
|
||||
main_color = temp2rgb(kelvin);
|
||||
mode = SET_COLOR;
|
||||
}
|
||||
@@ -1252,7 +1256,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
#endif
|
||||
|
||||
#if ENABLE_MQTT == 0
|
||||
void mqtt_callback(char* topic, byte* payload_in, unsigned int length) {
|
||||
void mqtt_callback(char* topic, byte* payload_in, uint16_t length) {
|
||||
uint8_t * payload = (uint8_t *)malloc(length + 1);
|
||||
memcpy(payload, payload_in, length);
|
||||
payload[length] = 0;
|
||||
@@ -1279,26 +1283,26 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
#if ENABLE_MQTT == 0
|
||||
void mqtt_reconnect() {
|
||||
// Loop until we're reconnected
|
||||
while (!mqtt_client->connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) {
|
||||
while (!mqtt_client.connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) {
|
||||
mqtt_reconnect_retries++;
|
||||
DBG_OUTPUT_PORT.printf("Attempting MQTT connection %d / %d ...\r\n", mqtt_reconnect_retries, MQTT_MAX_RECONNECT_TRIES);
|
||||
// Attempt to connect
|
||||
if (mqtt_client->connect(mqtt_clientid, mqtt_user, mqtt_pass, mqtt_will_topic, 2, true, mqtt_will_payload, true)) {
|
||||
if (mqtt_client.connect(mqtt_clientid, mqtt_user, mqtt_pass, mqtt_will_topic, 2, true, mqtt_will_payload, true)) {
|
||||
DBG_OUTPUT_PORT.println("MQTT connected!");
|
||||
// Once connected, publish an announcement...
|
||||
char message[18 + strlen(HOSTNAME) + 1];
|
||||
strcpy(message, "McLighting ready: ");
|
||||
strcat(message, HOSTNAME);
|
||||
mqtt_client->publish(mqtt_outtopic, message);
|
||||
mqtt_client.publish(mqtt_outtopic, message);
|
||||
// ... and resubscribe
|
||||
mqtt_client->subscribe(mqtt_intopic, qossub);
|
||||
mqtt_client.subscribe(mqtt_intopic, qossub);
|
||||
if(mqtt_lwt_boot_flag) {
|
||||
mqtt_client.publish(mqtt_will_topic, "ONLINE");
|
||||
//mqtt_lwt_boot_flag = false;
|
||||
}
|
||||
#if defined(ENABLE_HOMEASSISTANT)
|
||||
ha_send_data.detach();
|
||||
mqtt_client->subscribe(mqtt_ha_state_in, qossub);
|
||||
mqtt_client.subscribe(mqtt_ha_state_in, qossub);
|
||||
ha_send_data.once(5, tickerSendState);
|
||||
#if defined(MQTT_HOME_ASSISTANT_SUPPORT)
|
||||
const size_t bufferSize = JSON_ARRAY_SIZE(strip->getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500;
|
||||
@@ -1338,16 +1342,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
// Following will never work for PubSubClient as message size > 1.6kB
|
||||
// char buffer[measureJson(json) + 1];
|
||||
// serializeJson(json, buffer, sizeof(buffer));
|
||||
// mqtt_client->publish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), buffer, true);
|
||||
// mqtt_client.publish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), buffer, true);
|
||||
|
||||
// Alternate way to publish large messages using PubSubClient
|
||||
unsigned int msg_len = measureJson(json) + 1;
|
||||
uint16_t msg_len = measureJson(json) + 1;
|
||||
char buffer[msg_len];
|
||||
serializeJson(json, buffer, sizeof(buffer));
|
||||
DBG_OUTPUT_PORT.println(buffer);
|
||||
mqtt_client->beginPublish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), msg_len-1, true);
|
||||
mqtt_client->write((const uint8_t*)buffer, msg_len-1);
|
||||
mqtt_client->endPublish();
|
||||
mqtt_client.beginPublish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), msg_len-1, true);
|
||||
mqtt_client.write((const uint8_t*)buffer, msg_len-1);
|
||||
mqtt_client.endPublish();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1355,7 +1359,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
DBG_OUTPUT_PORT.printf("MQTT topic out: %s\r\n", mqtt_outtopic);
|
||||
} else {
|
||||
DBG_OUTPUT_PORT.print("failed, rc=");
|
||||
DBG_OUTPUT_PORT.print(mqtt_client->state());
|
||||
DBG_OUTPUT_PORT.print(mqtt_client.state());
|
||||
DBG_OUTPUT_PORT.println(" try again in 5 seconds");
|
||||
// Wait 5 seconds before retrying
|
||||
delay(5000);
|
||||
@@ -1376,7 +1380,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
|
||||
void connectToMqtt() {
|
||||
DBG_OUTPUT_PORT.println("Connecting to MQTT...");
|
||||
mqtt_client->connect();
|
||||
mqtt_client.connect();
|
||||
}
|
||||
|
||||
void onWifiConnect(const WiFiEventStationModeGotIP& event) {
|
||||
@@ -1400,17 +1404,17 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
char message[18 + strlen(HOSTNAME) + 1];
|
||||
strcpy(message, "McLighting ready: ");
|
||||
strcat(message, HOSTNAME);
|
||||
mqtt_client->publish(mqtt_outtopic, qospub, false, message);
|
||||
mqtt_client.publish(mqtt_outtopic, qospub, false, message);
|
||||
//Subscribe
|
||||
uint16_t packetIdSub1 = mqtt_client->subscribe(mqtt_intopic, qossub);
|
||||
uint16_t packetIdSub1 = mqtt_client.subscribe(mqtt_intopic, qossub);
|
||||
DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub1);
|
||||
if(mqtt_lwt_boot_flag) {
|
||||
mqtt_client->publish(mqtt_will_topic, qospub, false, "ONLINE");
|
||||
mqtt_client.publish(mqtt_will_topic, qospub, false, "ONLINE");
|
||||
mqtt_lwt_boot_flag = false;
|
||||
}
|
||||
#if defined(ENABLE_HOMEASSISTANT)
|
||||
ha_send_data.detach();
|
||||
uint16_t packetIdSub2 = mqtt_client->subscribe((char *)mqtt_ha_state_in, qossub);
|
||||
uint16_t packetIdSub2 = mqtt_client.subscribe((char *)mqtt_ha_state_in, qossub);
|
||||
DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub2);
|
||||
#if defined(MQTT_HOME_ASSISTANT_SUPPORT)
|
||||
const size_t bufferSize = JSON_ARRAY_SIZE(strip->getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500;
|
||||
@@ -1450,7 +1454,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
char buffer[measureJson(json) + 1];
|
||||
serializeJson(json, buffer, sizeof(buffer));
|
||||
jsonBuffer.clear();
|
||||
mqtt_client->publish(mqtt_ha_config, qospub, true, buffer);
|
||||
mqtt_client.publish(mqtt_ha_config, qospub, true, buffer);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
@@ -1656,13 +1660,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
strcpy(mqtt_user, json["mqtt_user"]);
|
||||
strcpy(mqtt_pass, json["mqtt_pass"]);
|
||||
#endif
|
||||
WS2812FXStripSettings.stripSize = constrain ((uint8_t) json["ws_cnt"],0, MAXLEDS);
|
||||
WS2812FXStripSettings.stripSize = constrain ((uint8_t) json["ws_cnt"], 1, MAXLEDS);
|
||||
char tmp_rgbOrder[5];
|
||||
strcpy(tmp_rgbOrder, json["ws_rgbo"]);
|
||||
checkRGBOrder(tmp_rgbOrder);
|
||||
uint8_t temp_pin;
|
||||
WS2812FXStripSettings.pin = (uint8_t) json["ws_pin"];
|
||||
WS2812FXStripSettings.fxoptions = (uint8_t) json["ws_fxopt"];
|
||||
WS2812FXStripSettings.pin = checkPin((uint8_t) json["ws_pin"]);
|
||||
WS2812FXStripSettings.fxoptions = ((constrain((uint8_t) json["ws_fxopt"], 0, 255)>>1)<<1);
|
||||
jsonBuffer.clear();
|
||||
return true;
|
||||
} else {
|
||||
@@ -1769,9 +1773,9 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
// ***************************************************************************
|
||||
// EEPROM helper
|
||||
// ***************************************************************************
|
||||
String readEEPROM(int offset, int len) {
|
||||
String readEEPROM(uint16_t offset, uint16_t len) {
|
||||
String res = "";
|
||||
for (int i = 0; i < len; ++i)
|
||||
for (uint16_t i = 0; i < len; ++i)
|
||||
{
|
||||
res += char(EEPROM.read(i + offset));
|
||||
//DBG_OUTPUT_PORT.println(char(EEPROM.read(i + offset)));
|
||||
@@ -1780,9 +1784,9 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
return res;
|
||||
}
|
||||
|
||||
void writeEEPROM(int offset, int len, String value) {
|
||||
void writeEEPROM(uint16_t offset, uint16_t len, String value) {
|
||||
DBG_OUTPUT_PORT.printf("writeEEPROM(): %s\r\n", value.c_str());
|
||||
for (int i = 0; i < len; ++i)
|
||||
for (uint16_t i = 0; i < len; ++i)
|
||||
{
|
||||
if (i < value.length()) {
|
||||
EEPROM.write(i + offset, value[i]);
|
||||
@@ -1802,7 +1806,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
||||
// Request handler for IR remote support
|
||||
// ***************************************************************************
|
||||
void handleRemote() {
|
||||
int chng = 1;
|
||||
uint8_t chng = 1;
|
||||
if (irrecv.decode(&results)) {
|
||||
DBG_OUTPUT_PORT.print("IR Code: 0x");
|
||||
DBG_OUTPUT_PORT.print(uint64ToString(results.value, HEX));
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
if(server.hasArg("ws_cnt")){
|
||||
uint16_t pixelCt = server.arg("ws_cnt").toInt();
|
||||
if (pixelCt > 0) {
|
||||
WS2812FXStripSettings.stripSize = pixelCt;
|
||||
WS2812FXStripSettings.stripSize = constrain(pixelCt, 1, MAXLEDS);
|
||||
updateStrip = true;
|
||||
}
|
||||
}
|
||||
@@ -301,7 +301,7 @@
|
||||
#endif
|
||||
|
||||
if(server.hasArg("ws_fxopt")){
|
||||
WS2812FXStripSettings.fxoptions = server.arg("ws_fxopt").toInt();
|
||||
WS2812FXStripSettings.fxoptions = ((constrain(server.arg("ws_fxopt").toInt(), 0, 255)>>1)<<1);
|
||||
updateStrip = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -995,11 +995,11 @@ input[type=number], label{
|
||||
<div class="layout row wrap">
|
||||
<div class="flex xs12" style="text-align: left; margin:20px 0;"><p>selectColors</p>
|
||||
<span style="white-space: nowrap;">
|
||||
colorMain<input type="color" id="color-main" value="#ffffff">
|
||||
colorFont<input type="color" id="color-font" value="#ffffff">
|
||||
colorBack<input type="color" id="color-back" value="#ffffff">
|
||||
colorBtn<input type="color" id="color-btn" value="#ffffff">
|
||||
colorBtnSel<input type="color" id="color-btnsel" value="#ffffff">
|
||||
<span>colorMain</span><input type="color" id="color-main" value="#ffffff">
|
||||
<span>colorFont</span><input type="color" id="color-font" value="#ffffff">
|
||||
<span>colorBack</span><input type="color" id="color-back" value="#ffffff">
|
||||
<span>colorBtn</span><input type="color" id="color-btn" value="#ffffff">
|
||||
<span>colorBtnSel</span><input type="color" id="color-btnsel" value="#ffffff">
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex xs12" style="text-align: left; margin:20px 0;"><p>slaveNodes</p>
|
||||
@@ -1239,6 +1239,7 @@ var selectoptrev = {
|
||||
};
|
||||
|
||||
var selectoptfade = {
|
||||
0: "NONE",
|
||||
16: "FADE_XFAST",
|
||||
32: "FADE_FAST",
|
||||
48: "FADE_MEDIUM",
|
||||
@@ -1750,7 +1751,7 @@ function initSettings() {
|
||||
hostname.value = config.hostname;
|
||||
hostname.addEventListener('change', ()=>{
|
||||
config.hostname = hostname.value;
|
||||
//ws_send("Ch" + config.hostname);
|
||||
ws_send("Ch" + config.hostname);
|
||||
ws_send("C");
|
||||
});
|
||||
var mqtt_host = document.getElementById("mqtt_host");
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user