STABILITY when re-load, Artnet, RGBWW, ETAG, Logs

This commit is contained in:
2021-12-19 18:33:54 +03:00
parent 201f492e29
commit 2e5c7d8045
12 changed files with 109 additions and 43 deletions

View File

@@ -244,6 +244,7 @@ bool systemConfig::isValidSysConf()
for (unsigned int i=0;i<sizeof(systemConfigData::signature);i++) for (unsigned int i=0;i<sizeof(systemConfigData::signature);i++)
if (stream->write(EEPROM_signature[i])); if (stream->write(EEPROM_signature[i]));
stream->close(); stream->close();
setETAG("");
return true; return true;
} }

View File

@@ -51,6 +51,8 @@ volatile unsigned long D_checkT=0;
#ifdef _artnet #ifdef _artnet
#include <Artnet.h> #include <Artnet.h>
Artnet *artnet = NULL; Artnet *artnet = NULL;
uint8_t artnetMinCh=1;
uint8_t artnetMaxCh=512;
#endif #endif
@@ -216,8 +218,8 @@ debugSerial.println();
void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data, IPAddress remoteIP) void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data, IPAddress remoteIP)
{ {
#ifdef _dmxout #if defined (_dmxout) && defined (_artnet)
for (unsigned int i = 0 ; i < length && i<MAX_CHANNELS ; i++) for (unsigned int i = artnetMinCh-1 ; i < length && i<artnetMaxCh ; i++)
{ {
DmxWrite(i+1,data[i]); DmxWrite(i+1,data[i]);
} }
@@ -256,6 +258,11 @@ dmxin.begin();
void DMXoutSetup(int channels) void DMXoutSetup(int channels)
{ {
#ifdef _dmxout #ifdef _dmxout
//#ifdef _artnet
//if (channels<artnetMaxCh) artnetMaxCh=channels;
//#endif
#if defined(ARDUINO_ARCH_AVR) #if defined(ARDUINO_ARCH_AVR)
DmxSimple.usePin(AVR_DMXOUT_PIN); DmxSimple.usePin(AVR_DMXOUT_PIN);
DmxSimple.maxChannel(channels); DmxSimple.maxChannel(channels);
@@ -323,7 +330,7 @@ void DMXOUT_propagate()
#endif #endif
} }
void ArtnetSetup() void artnetSetup()
{ {
#ifdef _artnet #ifdef _artnet
if (!artnet) artnet = new Artnet; if (!artnet) artnet = new Artnet;
@@ -332,6 +339,13 @@ void ArtnetSetup()
#endif #endif
} }
void artnetSetChans(uint8_t minCh, uint8_t maxCh)
{
#ifdef _artnet
artnetMinCh=minCh;
artnetMaxCh=maxCh;
#endif
}
void DmxWriteBuf(uint16_t chan,uint8_t val) void DmxWriteBuf(uint16_t chan,uint8_t val)
{ {

View File

@@ -105,9 +105,9 @@ extern aJsonObject *dmxArr;
void DMXput(void); void DMXput(void);
void DMXinSetup(int channels); void DMXinSetup(int channels);
void DMXoutSetup(int channels); void DMXoutSetup(int channels);
void ArtnetSetup(); void artnetSetup();
void artnetSetChans(uint8_t minCh, uint8_t maxCh);
void DMXCheck(void); void DMXCheck(void);
int itemCtrl2(char* name,int r,int g, int b, int w); int itemCtrl2(char* name,int r,int g, int b, int w);
void ArtnetSetup();
void DmxWriteBuf(uint16_t chan,uint8_t val); void DmxWriteBuf(uint16_t chan,uint8_t val);
void DMXOUT_propagate(); void DMXOUT_propagate();

View File

@@ -279,7 +279,7 @@ uint8_t Item::getCmd() {
void Item::setCmd(uint8_t cmdValue) { void Item::setCmd(uint8_t cmdValue) {
aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD); aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD);
if (itemCmd) if (itemCmd && (itemCmd->type == aJson_Int || itemCmd->type == aJson_NULL))
{ {
itemCmd->type = aJson_Int; itemCmd->type = aJson_Int;
itemCmd->valueint = cmdValue & CMD_MASK | itemCmd->valueint & FLAG_MASK; // Preserve special bits itemCmd->valueint = cmdValue & CMD_MASK | itemCmd->valueint & FLAG_MASK; // Preserve special bits
@@ -290,7 +290,7 @@ void Item::setCmd(uint8_t cmdValue) {
short Item::getFlag (short flag) short Item::getFlag (short flag)
{ {
aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD); aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD);
if (itemCmd) if (itemCmd && (itemCmd->type == aJson_Int))
{ {
return itemCmd->valueint & flag & FLAG_MASK; return itemCmd->valueint & flag & FLAG_MASK;
} }
@@ -300,7 +300,7 @@ return 0;
void Item::setFlag (short flag) void Item::setFlag (short flag)
{ {
aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD); aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD);
if (itemCmd) if (itemCmd && (itemCmd->type == aJson_Int || itemCmd->type == aJson_NULL))
{ {
itemCmd->type = aJson_Int; itemCmd->type = aJson_Int;
itemCmd->valueint |= flag & FLAG_MASK; // Preserve CMD bits itemCmd->valueint |= flag & FLAG_MASK; // Preserve CMD bits
@@ -312,7 +312,7 @@ void Item::setFlag (short flag)
void Item::clearFlag (short flag) void Item::clearFlag (short flag)
{ {
aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD); aJsonObject *itemCmd = aJson.getArrayItem(itemArr, I_CMD);
if (itemCmd) if (itemCmd && (itemCmd->type == aJson_Int || itemCmd->type == aJson_NULL))
{ {
itemCmd->valueint &= CMD_MASK | ~(flag & FLAG_MASK); // Preserve CMD bits itemCmd->valueint &= CMD_MASK | ~(flag & FLAG_MASK); // Preserve CMD bits
// debugSerial<<F("ClrFlag:")<<flag<<endl; // debugSerial<<F("ClrFlag:")<<flag<<endl;
@@ -705,7 +705,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem, bool allowRecursion)
aJsonObject *timestampObj = aJson.getArrayItem(itemArr, I_TIMESTAMP); aJsonObject *timestampObj = aJson.getArrayItem(itemArr, I_TIMESTAMP);
if (timestampObj && cmd.getCmd()<=0xf) if (timestampObj && cmd.getCmd()<=0xf)
{ {
if (cmd.getInt()>0) if ((cmd.getInt()>0) && (timestampObj->type == aJson_Int || timestampObj->type == aJson_NULL))
{ {
timestampObj->valueint = millis()+cmd.getInt(); timestampObj->valueint = millis()+cmd.getInt();
timestampObj->type = aJson_Int; timestampObj->type = aJson_Int;

View File

@@ -92,6 +92,7 @@ uint8_t itemCmd::getStoragetypeByChanType(short chanType)
{ {
case CH_RGB: case CH_RGB:
case CH_RGBW: case CH_RGBW:
case CH_RGBWW:
case CH_SPILED: case CH_SPILED:
return ST_HSV255; return ST_HSV255;
break; break;

View File

@@ -189,7 +189,7 @@ aJsonObject * item = items->child;
} }
pollingItem = NULL; pollingItem = NULL;
debugSerial<<F("Stopped")<<endl; debugSerial<<F("Stopped")<<endl;
delay(100);
#ifdef SYSLOG_ENABLE #ifdef SYSLOG_ENABLE
syslogInitialized=false; //Garbage in memory syslogInitialized=false; //Garbage in memory
#endif #endif
@@ -201,6 +201,8 @@ debugSerial<<F("Deleting conf. RAM was:")<<freeRam();
items = NULL; items = NULL;
topics = NULL; topics = NULL;
mqttArr = NULL; mqttArr = NULL;
deviceName = NULL;
topics = NULL;
#ifdef _dmxout #ifdef _dmxout
dmxArr = NULL; dmxArr = NULL;
#endif #endif
@@ -647,6 +649,7 @@ lan_status lanLoop() {
break; break;
case READ_RE_CONFIG: // Restore config from FLASH, re-init LAN case READ_RE_CONFIG: // Restore config from FLASH, re-init LAN
debugSerial<<F("Restoring config from EEPROM")<<endl;
if (loadConfigFromEEPROM()) lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;//2; if (loadConfigFromEEPROM()) lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;//2;
else { else {
//timerLanCheckTime = millis();// + 5000; //timerLanCheckTime = millis();// + 5000;
@@ -833,6 +836,7 @@ void ip_ready_config_loaded_connecting_to_broker() {
if (!mqttArr || ((n = aJson.getArraySize(mqttArr)) < 2)) //At least device name and broker IP must be configured if (!mqttArr || ((n = aJson.getArraySize(mqttArr)) < 2)) //At least device name and broker IP must be configured
{ {
errorSerial<<F("At least device name and broker IP must be configured")<<endl;
lanStatus = READ_RE_CONFIG; lanStatus = READ_RE_CONFIG;
return; return;
} }
@@ -1158,9 +1162,9 @@ return 500;
} }
void applyConfig() { void applyConfig() {
if (!root) return; if (!root || configLocked) return;
configLocked++; configLocked++;
infoSerial<<F("Applying config")<<endl;
items = aJson.getObjectItem(root, "items"); items = aJson.getObjectItem(root, "items");
topics = aJson.getObjectItem(root, "topics"); topics = aJson.getObjectItem(root, "topics");
inputs = aJson.getObjectItem(root, "in"); inputs = aJson.getObjectItem(root, "in");
@@ -1183,9 +1187,33 @@ setupSyslog();
short numParams; short numParams;
aJsonObject *dmxoutArr = aJson.getObjectItem(root, "dmx"); aJsonObject *dmxoutArr = aJson.getObjectItem(root, "dmx");
if (dmxoutArr && (numParams=aJson.getArraySize(dmxoutArr)) >=1 ) { if (dmxoutArr && (numParams=aJson.getArraySize(dmxoutArr)) >=1 ) {
DMXoutSetup(maxChannels = aJson.getArrayItem(dmxoutArr, numParams-1)->valueint); maxChannels = aJson.getArrayItem(dmxoutArr, numParams-1)->valueint;
#ifdef _artnet
aJsonObject *artnetArr = aJson.getObjectItem(root, "artnet");
if (artnetArr)
{
uint8_t artnetMinCh = 1;
uint8_t artnetMaxCh = maxChannels;
short artnetNumParams;
if (artnetNumParams=aJson.getArraySize(artnetArr)>=2)
{
artnetMinCh = aJson.getArrayItem(artnetArr, 0)->valueint;
if (artnetMinCh<1) artnetMinCh = 1;
artnetMaxCh = aJson.getArrayItem(artnetArr, 1)->valueint;
if (artnetMaxCh>maxChannels) artnetMaxCh=maxChannels;
}
infoSerial<<F("Artnet start. Channels:")<<artnetMinCh<<F("-")<<artnetMaxCh<<endl;
artnetSetChans(artnetMinCh,artnetMaxCh);
//artnetInitialized=true;
}
#endif
DMXoutSetup(maxChannels);
infoSerial<<F("DMX out started. Channels: ")<<maxChannels<<endl; infoSerial<<F("DMX out started. Channels: ")<<maxChannels<<endl;
debugSerial<<F("Free:")<<freeRam()<<endl; debugSerial<<F("Free:")<<freeRam()<<endl;
} }
#endif #endif
#ifdef _modbus #ifdef _modbus
@@ -1259,8 +1287,8 @@ setupSyslog();
printConfigSummary(); printConfigSummary();
configLoaded=true; configLoaded=true;
if (sysConf.getSaveSuccedConfig()) cmdFunctionSave(0,NULL); if (sysConf.getSaveSuccedConfig()) cmdFunctionSave(0,NULL);
configLocked--;
ethClient.stop(); //Refresh MQTT connection ethClient.stop(); //Refresh MQTT connection
configLocked--;
} }
void printConfigSummary() { void printConfigSummary() {
@@ -1300,7 +1328,7 @@ int cmdFunctionLoad(int arg_cnt, char **args) {
int loadConfigFromEEPROM() int loadConfigFromEEPROM()
{ {
char ch; if (configLocked) return 0;
infoSerial<<F("Loading Config from EEPROM")<<endl; infoSerial<<F("Loading Config from EEPROM")<<endl;
#if defined(FS_STORAGE) #if defined(FS_STORAGE)
sysConfStream.open("/config.json",'r'); sysConfStream.open("/config.json",'r');
@@ -1319,7 +1347,7 @@ int loadConfigFromEEPROM()
// sysConfStream.close(); // sysConfStream.close();
return 0; return 0;
} }
infoSerial<<F("Loaded")<<endl; infoSerial<<F("Loaded from EEPROM")<<endl;
applyConfig(); applyConfig();
sysConf.loadETAG(); sysConf.loadETAG();
//ethClient.stop(); //Refresh MQTT connect to get retained info //ethClient.stop(); //Refresh MQTT connect to get retained info
@@ -1365,7 +1393,7 @@ if (arg_cnt>1)
size_t res = sysConfStream.write((byte*) outBuf,len); size_t res = sysConfStream.write((byte*) outBuf,len);
free (outBuf); free (outBuf);
infoSerial<<res<< F("bytes from ")<<len<<F(" are saved to EEPROM")<<endl; infoSerial<<res<< F(" bytes from ")<<len<<F(" are saved to EEPROM")<<endl;
#else #else
aJsonStream jsonEEPROMStream = aJsonStream(&sysConfStream); aJsonStream jsonEEPROMStream = aJsonStream(&sysConfStream);
infoSerial<<F("Saving config to EEPROM.."); infoSerial<<F("Saving config to EEPROM..");
@@ -1571,9 +1599,18 @@ if (!sysConf.getServer(configServer,sizeof(configServer)))
//if (freeRam()<512) cleanConf(); //if (freeRam()<512) cleanConf();
HTTPClient hclient(configServer, 80); HTTPClient hclient(configServer, 80);
String ETAG = sysConf.getETAG();
http_client_parameter get_header[] = {
{"If-None-Match",NULL},{NULL,NULL}
};
get_header[0].value = ETAG.c_str();
debugSerial<<F("free ")<<freeRam()<<endl;delay(100); debugSerial<<F("free ")<<freeRam()<<endl;delay(100);
// FILE is the return STREAM type of the HTTPClient // FILE is the return STREAM type of the HTTPClient
configStream = hclient.getURI(URI); configStream = hclient.getURI(URI,get_header);
debugSerial<<F("hclient")<<endl;delay(100); debugSerial<<F("hclient")<<endl;delay(100);
responseStatusCode = hclient.getLastReturnCode(); responseStatusCode = hclient.getLastReturnCode();
debugSerial<<F("retcode ")<<responseStatusCode<<endl;delay(100); debugSerial<<F("retcode ")<<responseStatusCode<<endl;delay(100);
@@ -1598,7 +1635,6 @@ if (!sysConf.getServer(configServer,sizeof(configServer)))
return false; return false;
} }
else { else {
infoSerial<<F("Applying.\n");
applyConfig(); applyConfig();
infoSerial<<F("Done.\n"); infoSerial<<F("Done.\n");
return true; return true;
@@ -1622,7 +1658,7 @@ if (!sysConf.getServer(configServer,sizeof(configServer)))
return false; return false;
} }
#endif #endif
#if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32) || defined (NRF5) //|| defined(ARDUINO_ARCH_ESP32) //|| defined(ARDUINO_ARCH_ESP8266) #if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32) || defined (NRF5) //|| defined(ARDUINO_ARCH_AVR)//|| defined(ARDUINO_ARCH_ESP32) //|| defined(ARDUINO_ARCH_ESP8266)
#if defined(WIFI_ENABLE) #if defined(WIFI_ENABLE)
WiFiClient configEthClient; WiFiClient configEthClient;
#else #else
@@ -1656,8 +1692,6 @@ if (!sysConf.getServer(configServer,sizeof(configServer)))
if (responseStatusCode == 200) { if (responseStatusCode == 200) {
aJsonStream socketStream = aJsonStream(&htclient); aJsonStream socketStream = aJsonStream(&htclient);
debugSerial<<F("Free:")<<freeRam()<<endl; debugSerial<<F("Free:")<<freeRam()<<endl;
//debugSerial<<F("Response Len:")<<response.length()<<endl;
//debugSerial<<F("GET Response: ")<<response<<endl;
cleanConf(); cleanConf();
debugSerial<<F("Configuration cleaned")<<endl; debugSerial<<F("Configuration cleaned")<<endl;
debugSerial<<F("Free:")<<freeRam()<<endl; debugSerial<<F("Free:")<<freeRam()<<endl;
@@ -1745,7 +1779,6 @@ if (!sysConf.getServer(configServer,sizeof(configServer)))
errorSerial<<F("Config parsing failed\n"); errorSerial<<F("Config parsing failed\n");
return false; return false;
} else { } else {
infoSerial<<F("Config OK, Applying\n");
applyConfig(); applyConfig();
infoSerial<<F("Done.\n"); infoSerial<<F("Done.\n");
@@ -1915,7 +1948,7 @@ void setup_main() {
mqttClient.setCallback(mqttCallback); mqttClient.setCallback(mqttCallback);
#ifdef _artnet #ifdef _artnet
ArtnetSetup(); artnetSetup();
#endif #endif
#if defined(WIFI_ENABLE) and not defined(WIFI_MANAGER_DISABLE) #if defined(WIFI_ENABLE) and not defined(WIFI_MANAGER_DISABLE)
@@ -2425,21 +2458,30 @@ configLocked--;
} }
////// Legacy Thermostat code below - to be moved in module ///// ////// Legacy Thermostat code below - to be moved in module /////
void thermoRelay(int pin, bool on)
enum heaterMode {HEAT,OFF,ERROR};
void thermoRelay(int pin, heaterMode on)
{ {
int thermoPin = abs(pin); int thermoPin = abs(pin);
pinMode(thermoPin, OUTPUT); pinMode(thermoPin, OUTPUT);
if (on) if (on == ERROR)
{
digitalWrite(thermoPin, LOW);
debugSerial<<F(" BYPASS")<<endl;
}
else if (on == HEAT)
{ {
digitalWrite(thermoPin, (pin<0)?LOW:HIGH); digitalWrite(thermoPin, (pin<0)?LOW:HIGH);
debugSerial<<F(" ON")<<endl; debugSerial<<F(" ON")<<endl;
} }
else else
{ {
digitalWrite(thermoPin, (pin<0)?HIGH:LOW); digitalWrite(thermoPin, (pin<0)?HIGH:LOW);
debugSerial<<F(" OFF")<<endl; debugSerial<<F(" OFF")<<endl;
} }
} }
@@ -2477,15 +2519,15 @@ void thermoLoop(void) {
mqttClient.publish("/alarm/snsr", thermoItem->name); mqttClient.publish("/alarm/snsr", thermoItem->name);
tStore.timestamp16=0; //Stop termostat tStore.timestamp16=0; //Stop termostat
thermostat.setExt(tStore.asint); thermostat.setExt(tStore.asint);
thermoRelay(thermoPin,false); thermoRelay(thermoPin,ERROR);
} }
else else
{ // Not expired yet { // Not expired yet
if (curTemp > THERMO_OVERHEAT_CELSIUS) mqttClient.publish("/alarm/ovrht", thermoItem->name); if (curTemp > THERMO_OVERHEAT_CELSIUS) mqttClient.publish("/alarm/ovrht", thermoItem->name);
if (!active) thermoRelay(thermoPin,false);//OFF if (!active) thermoRelay(thermoPin,OFF);//OFF
else if (curTemp < thermoSetting - THERMO_GIST_CELSIUS) thermoRelay(thermoPin,true);//ON else if (curTemp < thermoSetting - THERMO_GIST_CELSIUS) thermoRelay(thermoPin,HEAT);//ON
else if (curTemp >= thermoSetting) thermoRelay(thermoPin,false);//OFF else if (curTemp >= thermoSetting) thermoRelay(thermoPin,OFF);//OFF
else debugSerial<<F(" -target zone-")<<endl; // Nothing to do else debugSerial<<F(" -target zone-")<<endl; // Nothing to do
} }

View File

@@ -15,6 +15,7 @@
#if defined(ARDUINO_ARCH_AVR) #if defined(ARDUINO_ARCH_AVR)
#include "HTTPClientAVR.h" #include "HTTPClientAVR.h"
#include <ArduinoHttpClient.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include <avr/wdt.h> #include <avr/wdt.h>
//#include <EEPROM.h> //#include <EEPROM.h>

View File

@@ -188,7 +188,7 @@ byte getCRC(byte req[], size_t size){
void SendData(byte req[], size_t size){ void SendData(byte req[], size_t size){
AC_Serial.write(req, size - 1); AC_Serial.write(req, size - 1);
AC_Serial.write(getCRC(req, size-1)); AC_Serial.write(getCRC(req, size-1));
AC_Serial.flush(); //AC_Serial.flush();
/* /*
Serial.print("<<"); Serial.print("<<");
for (int i=0; i < size-1; i++) for (int i=0; i < size-1; i++)

View File

@@ -14,14 +14,14 @@ static int driverStatus = CST_UNKNOWN;
int out_dmx::Setup() int out_dmx::Setup()
{ {
abstractOut::Setup(); abstractOut::Setup();
debugSerial<<F("DMX-Out Init")<<endl; debugSerial<<F("DMX-Out Init: ")<< item->itemArr->name <<endl;
driverStatus = CST_INITIALIZED; driverStatus = CST_INITIALIZED;
return 1; return 1;
} }
int out_dmx::Stop() int out_dmx::Stop()
{ {
debugSerial<<F("DMX-Out stop")<<endl; debugSerial<<F("DMX-Out stop: ")<< item->itemArr->name << endl;
driverStatus = CST_UNKNOWN; driverStatus = CST_UNKNOWN;
return 1; return 1;
} }

View File

@@ -20,7 +20,7 @@ void analogWrite(int pin, int val)
int out_pwm::Setup() int out_pwm::Setup()
{ {
abstractOut::Setup(); abstractOut::Setup();
debugSerial<<F("PWM-Out Init")<<endl; debugSerial<<F("PWM-Out #")<<iaddr<<F(" init")<<endl;
if (!item || iaddr) return 0; if (!item || iaddr) return 0;
switch (getChanType()) switch (getChanType())
@@ -61,7 +61,7 @@ return 1;
int out_pwm::Stop() int out_pwm::Stop()
{ {
debugSerial<<F("PWM-Out stop")<<endl; debugSerial<<F("PWM-Out #")<<iaddr<<F(" stop")<<endl;
switch (getChanType()) switch (getChanType())
{ {
@@ -95,17 +95,23 @@ int out_pwm::getChanType()
{ {
if (item) if (item)
{ {
debugSerial<<F("PWM Chan type ");
switch (numArgs) switch (numArgs)
{ {
case 3: case 3:
debugSerial<<F("RGB PWM")<<endl; debugSerial<<F("RGB")<<endl;
return CH_RGB; return CH_RGB;
case 4: case 4:
debugSerial<<F("RGBW PWM")<<endl; debugSerial<<F("RGBW")<<endl;
return CH_RGBW; return CH_RGBW;
case 5:
debugSerial<<F("RGBWW")<<endl;
return CH_RGBWW;
default: default:
debugSerial<<item->itemType<<F(" PWM")<<endl; debugSerial<<F("#")<<item->itemType<<endl;
return item->itemType; return item->itemType;
} }
} }

View File

@@ -49,8 +49,8 @@ class Streamlog : public Print
private: private:
uint8_t severity; uint8_t severity;
SerialPortType *serialPort; SerialPortType *serialPort;
uint8_t ledPattern;
#ifdef SYSLOG_ENABLE #ifdef SYSLOG_ENABLE
Syslog * syslog; Syslog * syslog;
uint8_t ledPattern;
#endif #endif
}; };

View File

@@ -402,6 +402,7 @@ lib_deps =
https://github.com/anklimov/DS2482_OneWire https://github.com/anklimov/DS2482_OneWire
https://github.com/anklimov/DmxSimple https://github.com/anklimov/DmxSimple
https://github.com/anklimov/httpClient https://github.com/anklimov/httpClient
;ArduinoHttpClient
https://github.com/anklimov/aJson https://github.com/anklimov/aJson
https://github.com/anklimov/CmdArduino https://github.com/anklimov/CmdArduino
https://github.com/anklimov/ModbusMaster https://github.com/anklimov/ModbusMaster
@@ -609,7 +610,7 @@ framework = arduino
board = due board = due
monitor_baud = 115200 monitor_baud = 115200
build_flags = !python get_build_flags.py lighthub21 build_flags = !python get_build_flags.py lighthub21
upload_command = arduinoOTA -address 192.168.11.172 -port 65280 -username arduino -password password -b -upload /sketch -sketch $SOURCE ;sleep 6 upload_command = /opt/local/sbin/arduinoOTA -address 192.168.11.172 -port 65280 -username arduino -password password -b -upload /sketch -sketch $SOURCE ;sleep 6
;upload_command = arduinoOTA -address 192.168.88.45 -port 65280 -username arduino -password password -b -upload /sketch -sketch $SOURCE;sleep 6 ;upload_command = arduinoOTA -address 192.168.88.45 -port 65280 -username arduino -password password -b -upload /sketch -sketch $SOURCE;sleep 6
upload_protocol = custom upload_protocol = custom
lib_ignore = lib_ignore =