mirror of
https://github.com/anklimov/lighthub
synced 2025-12-06 11:49:51 +03:00
ESP persist fix, closing files, RGBWW
This commit is contained in:
@@ -25,6 +25,7 @@ int colorChannel::getDefaultStorageType()
|
|||||||
{
|
{
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
|
case 5:
|
||||||
return ST_HSV255;
|
return ST_HSV255;
|
||||||
case 1:
|
case 1:
|
||||||
return ST_PERCENTS255;
|
return ST_PERCENTS255;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
String systemConfig::getMACString()
|
String systemConfig::getMACString()
|
||||||
{
|
{
|
||||||
@@ -28,6 +29,7 @@ bool systemConfig::isValidSysConf()
|
|||||||
stream->close();
|
stream->close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
stream->close();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -289,4 +291,13 @@ bool systemConfig::getLoadHTTPConfig()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String systemConfig::getETAG()
|
||||||
|
{
|
||||||
|
return "123";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool systemConfig::setETAG(String etag)
|
||||||
|
{
|
||||||
|
debugSerial<<F("ETAG:")<<etag<<endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
@@ -54,5 +54,8 @@ class systemConfig {
|
|||||||
bool setSaveSuccedConfig(bool);
|
bool setSaveSuccedConfig(bool);
|
||||||
bool getLoadHTTPConfig();
|
bool getLoadHTTPConfig();
|
||||||
bool setLoadHTTPConfig(bool);
|
bool setLoadHTTPConfig(bool);
|
||||||
|
String getETAG();
|
||||||
|
bool setETAG(String etag);
|
||||||
|
|
||||||
//bool Save();
|
//bool Save();
|
||||||
};
|
};
|
||||||
@@ -91,7 +91,8 @@ NRFFlashStorage EEPROM;
|
|||||||
int flashStream::available()
|
int flashStream::available()
|
||||||
{
|
{
|
||||||
if (!fs) return 0;
|
if (!fs) return 0;
|
||||||
if (textMode && peek()==EOFchar) return 0;
|
//if (textMode && (peek()==EOFchar)) {debugSerial<<"X";return 0;} //Not working for esp8266
|
||||||
|
if (fs.position()>=streamSize) return 0;
|
||||||
return fs.available();
|
return fs.available();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -111,8 +112,8 @@ NRFFlashStorage EEPROM;
|
|||||||
debugSerial<<(F(" Res:"))<<res<<endl;
|
debugSerial<<(F(" Res:"))<<res<<endl;
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
void flashStream::close() {fs.close(); };
|
void flashStream::close() {fs.close(); debugSerial<<filename<<" Closed\n";};
|
||||||
void flashStream::flush() {fs.flush(); };
|
void flashStream::flush() {fs.flush(); debugSerial<<filename<<" Flushed\n";};
|
||||||
size_t flashStream::write(uint8_t ch)
|
size_t flashStream::write(uint8_t ch)
|
||||||
{
|
{
|
||||||
return fs.write(ch);
|
return fs.write(ch);
|
||||||
@@ -162,38 +163,33 @@ NRFFlashStorage EEPROM;
|
|||||||
else if (_filename == "/config.bin") return open (FN_CONFIG_BIN,mode);
|
else if (_filename == "/config.bin") return open (FN_CONFIG_BIN,mode);
|
||||||
else return 0;
|
else return 0;
|
||||||
};
|
};
|
||||||
/*
|
|
||||||
virtual int open(unsigned int _startPos=0, unsigned int _size=4096 char mode='\0')
|
|
||||||
{
|
|
||||||
pos = 0;
|
|
||||||
startPos = _startPos;
|
|
||||||
streamSize = _size;
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
unsigned int flashStream::seek(unsigned int _pos)
|
unsigned int flashStream::seek(unsigned int _pos)
|
||||||
{ pos=min(_pos, streamSize);
|
{ pos=min(_pos, streamSize);
|
||||||
debugSerial<<F("Seek:")<<pos<<endl;
|
debugSerial<<F("Seek:")<<pos<<endl;
|
||||||
return pos;
|
return pos;
|
||||||
};
|
};
|
||||||
int flashStream::available() {
|
|
||||||
//debugSerial<<pos<<"%"<<streamSize<<";";
|
int flashStream::available()
|
||||||
|
{
|
||||||
if (textMode && peek()==EOFchar) return 0;
|
if (textMode && peek()==EOFchar) return 0;
|
||||||
return (pos<streamSize);
|
return (pos<streamSize);
|
||||||
};
|
};
|
||||||
|
|
||||||
int flashStream::read()
|
int flashStream::read()
|
||||||
{
|
{
|
||||||
int ch = peek();
|
int ch = peek();
|
||||||
pos++;
|
pos++;
|
||||||
//debugSerial<<"<"<<(char)ch;
|
|
||||||
return ch;
|
return ch;
|
||||||
};
|
};
|
||||||
|
|
||||||
int flashStream::peek()
|
int flashStream::peek()
|
||||||
{
|
{
|
||||||
if (pos<streamSize)
|
if (pos<streamSize)
|
||||||
return EEPROM.read(startPos+pos);
|
return EEPROM.read(startPos+pos);
|
||||||
else return -1;
|
else return -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
void flashStream::flush() {
|
void flashStream::flush() {
|
||||||
#if defined(ESP8266) || defined(ESP32)
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
if (EEPROM.commitReset())
|
if (EEPROM.commitReset())
|
||||||
@@ -204,7 +200,6 @@ NRFFlashStorage EEPROM;
|
|||||||
|
|
||||||
size_t flashStream::write(uint8_t ch)
|
size_t flashStream::write(uint8_t ch)
|
||||||
{
|
{
|
||||||
//debugSerial<<">"<<(char)ch;
|
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
EEPROM.update(startPos+pos++,(char)ch);
|
EEPROM.update(startPos+pos++,(char)ch);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -236,7 +231,7 @@ NRFFlashStorage EEPROM;
|
|||||||
|
|
||||||
void flashStream::close()
|
void flashStream::close()
|
||||||
{
|
{
|
||||||
flush();
|
putEOF();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,13 +35,14 @@ public:
|
|||||||
};
|
};
|
||||||
virtual int open(String _filename, char mode) override;
|
virtual int open(String _filename, char mode) override;
|
||||||
virtual int available() override;
|
virtual int available() override;
|
||||||
virtual int read();
|
virtual int read() override;
|
||||||
virtual int peek();
|
virtual int peek() override;
|
||||||
virtual unsigned int seek (unsigned int _pos = 0) override;
|
virtual unsigned int seek (unsigned int _pos = 0) override;
|
||||||
virtual void close() override;
|
virtual void close() override;
|
||||||
virtual void flush() override;
|
virtual void flush() override;
|
||||||
virtual size_t write(uint8_t ch);
|
virtual size_t write(uint8_t ch);
|
||||||
using Print::write;
|
using Print::write;
|
||||||
|
virtual void putEOF() override {};
|
||||||
virtual ~flashStream ();
|
virtual ~flashStream ();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -58,15 +59,6 @@ public:
|
|||||||
void setSize(unsigned int _size);
|
void setSize(unsigned int _size);
|
||||||
int open(short fileNum, char mode='\0') ;
|
int open(short fileNum, char mode='\0') ;
|
||||||
virtual int open(String _filename, char mode='\0') override;
|
virtual int open(String _filename, char mode='\0') override;
|
||||||
/*
|
|
||||||
virtual int open(unsigned int _startPos=0, unsigned int _size=4096 char mode='\0')
|
|
||||||
{
|
|
||||||
pos = 0;
|
|
||||||
startPos = _startPos;
|
|
||||||
streamSize = _size;
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
virtual unsigned int seek(unsigned int _pos = 0);
|
virtual unsigned int seek(unsigned int _pos = 0);
|
||||||
virtual int available() override;
|
virtual int available() override;
|
||||||
virtual int read() ;
|
virtual int read() ;
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ void Item::Parse() {
|
|||||||
case CH_RGBW:
|
case CH_RGBW:
|
||||||
case CH_RGB:
|
case CH_RGB:
|
||||||
case CH_DIMMER:
|
case CH_DIMMER:
|
||||||
|
case CH_RGBWW:
|
||||||
driver = new out_dmx (this);
|
driver = new out_dmx (this);
|
||||||
// debugSerial<<F("DMX driver created")<<endl;
|
// debugSerial<<F("DMX driver created")<<endl;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ e-mail anklimov@gmail.com
|
|||||||
#define CH_MBUS 14
|
#define CH_MBUS 14
|
||||||
#define CH_UARTBRIDGE 15
|
#define CH_UARTBRIDGE 15
|
||||||
#define CH_ELEVATOR 16
|
#define CH_ELEVATOR 16
|
||||||
|
#define CH_RGBWW 17
|
||||||
#define CH_MULTIVENT 18
|
#define CH_MULTIVENT 18
|
||||||
|
|
||||||
//#define CHANNEL_TYPES 13
|
//#define CHANNEL_TYPES 13
|
||||||
|
|||||||
@@ -179,6 +179,11 @@ bool itemCmd::setS(uint8_t s)
|
|||||||
//! Internally 1 - cold, 101 - warm light
|
//! Internally 1 - cold, 101 - warm light
|
||||||
bool itemCmd::setColorTemp(int t)
|
bool itemCmd::setColorTemp(int t)
|
||||||
{
|
{
|
||||||
|
if (!t)
|
||||||
|
{
|
||||||
|
param.colorTemp=0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
int par=map(t,153,500,0,100);
|
int par=map(t,153,500,0,100);
|
||||||
switch (cmd.itemArgType)
|
switch (cmd.itemArgType)
|
||||||
{
|
{
|
||||||
@@ -199,7 +204,7 @@ bool itemCmd::setColorTemp(int t)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Setup color tempetature parameter from HSV or HSV255 types. return 0..100 value in success.
|
//! Return color tempetature parameter from HSV or HSV255 types. return 153..500 value in success.
|
||||||
//! -1 - if no value stored
|
//! -1 - if no value stored
|
||||||
int itemCmd::getColorTemp()
|
int itemCmd::getColorTemp()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1305,7 +1305,6 @@ int loadConfigFromEEPROM()
|
|||||||
sysConfStream.open(FN_CONFIG_JSON,'r');
|
sysConfStream.open(FN_CONFIG_JSON,'r');
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//JSONStream.seek();
|
|
||||||
if (sysConfStream.peek() == '{') {
|
if (sysConfStream.peek() == '{') {
|
||||||
aJsonStream as = aJsonStream(&sysConfStream);
|
aJsonStream as = aJsonStream(&sysConfStream);
|
||||||
cleanConf();
|
cleanConf();
|
||||||
@@ -1364,8 +1363,8 @@ if (arg_cnt>1)
|
|||||||
aJsonStream jsonEEPROMStream = aJsonStream(&sysConfStream);
|
aJsonStream jsonEEPROMStream = aJsonStream(&sysConfStream);
|
||||||
infoSerial<<F("Saving config to EEPROM..");
|
infoSerial<<F("Saving config to EEPROM..");
|
||||||
aJson.print(root, &jsonEEPROMStream);
|
aJson.print(root, &jsonEEPROMStream);
|
||||||
sysConfStream.putEOF();
|
//sysConfStream.putEOF();
|
||||||
sysConfStream.flush();
|
//sysConfStream.flush();
|
||||||
sysConfStream.close();
|
sysConfStream.close();
|
||||||
infoSerial<<F("Saved to EEPROM")<<endl;
|
infoSerial<<F("Saved to EEPROM")<<endl;
|
||||||
#endif
|
#endif
|
||||||
@@ -1488,7 +1487,7 @@ int cmdFunctionSetMac(int arg_cnt, char **args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int cmdFunctionGet(int arg_cnt, char **args) {
|
int cmdFunctionGet(int arg_cnt, char **args) {
|
||||||
int result;
|
|
||||||
if (arg_cnt>1)
|
if (arg_cnt>1)
|
||||||
{
|
{
|
||||||
if (!strcasecmp_P(args[1],ON_P)) {sysConf.setLoadHTTPConfig(true); return 200;};
|
if (!strcasecmp_P(args[1],ON_P)) {sysConf.setLoadHTTPConfig(true); return 200;};
|
||||||
@@ -1518,6 +1517,7 @@ bool loadConfigFromHttp(int arg_cnt, char **args)
|
|||||||
int responseStatusCode = 0;
|
int responseStatusCode = 0;
|
||||||
char URI[64];
|
char URI[64];
|
||||||
char configServer[32]="";
|
char configServer[32]="";
|
||||||
|
String etag=sysConf.getETAG();
|
||||||
if (arg_cnt > 1) {
|
if (arg_cnt > 1) {
|
||||||
strncpy(configServer, args[1], sizeof(configServer) - 1);
|
strncpy(configServer, args[1], sizeof(configServer) - 1);
|
||||||
sysConf.setServer(configServer);
|
sysConf.setServer(configServer);
|
||||||
@@ -1605,6 +1605,7 @@ bool loadConfigFromHttp(int arg_cnt, char **args)
|
|||||||
//debugSerial<<"making GET request");get
|
//debugSerial<<"making GET request");get
|
||||||
debugSerial<<F("Before request: Free:")<<freeRam()<<endl;
|
debugSerial<<F("Before request: Free:")<<freeRam()<<endl;
|
||||||
htclient.beginRequest();
|
htclient.beginRequest();
|
||||||
|
htclient.sendHeader("If-None-Match:",etag);
|
||||||
responseStatusCode = htclient.get(URI);
|
responseStatusCode = htclient.get(URI);
|
||||||
htclient.endRequest();
|
htclient.endRequest();
|
||||||
|
|
||||||
@@ -1612,12 +1613,15 @@ bool loadConfigFromHttp(int arg_cnt, char **args)
|
|||||||
{
|
{
|
||||||
// read the status code and body of the response
|
// read the status code and body of the response
|
||||||
responseStatusCode = htclient.responseStatusCode();
|
responseStatusCode = htclient.responseStatusCode();
|
||||||
|
|
||||||
|
while (htclient.headerAvailable())
|
||||||
|
if (htclient.readHeaderName() == "ETAG") sysConf.setETAG(htclient.readHeaderValue());
|
||||||
|
|
||||||
response = htclient.responseBody();
|
response = htclient.responseBody();
|
||||||
htclient.stop();
|
htclient.stop();
|
||||||
wdt_res();
|
wdt_res();
|
||||||
infoSerial<<F("HTTP Status code: ")<<responseStatusCode<<endl;
|
infoSerial<<F("HTTP Status code: ")<<responseStatusCode<<endl;
|
||||||
|
|
||||||
//delay(1000);
|
|
||||||
if (responseStatusCode == 200) {
|
if (responseStatusCode == 200) {
|
||||||
debugSerial<<F("Free:")<<freeRam()<<endl;
|
debugSerial<<F("Free:")<<freeRam()<<endl;
|
||||||
debugSerial<<F("Response Len:")<<response.length()<<endl;
|
debugSerial<<F("Response Len:")<<response.length()<<endl;
|
||||||
@@ -1642,6 +1646,11 @@ bool loadConfigFromHttp(int arg_cnt, char **args)
|
|||||||
errorSerial<<F("Config retrieving failed\n");
|
errorSerial<<F("Config retrieving failed\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (responseStatusCode == 304)
|
||||||
|
{
|
||||||
|
errorSerial<<F("Config not changed\n");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ int out_dmx::getChanType()
|
|||||||
return CH_RGB;
|
return CH_RGB;
|
||||||
case 4:
|
case 4:
|
||||||
return CH_RGBW;
|
return CH_RGBW;
|
||||||
|
case 5:
|
||||||
|
return CH_RGBWW;
|
||||||
default:
|
default:
|
||||||
return item->itemType;
|
return item->itemType;
|
||||||
}
|
}
|
||||||
@@ -81,11 +83,15 @@ if (cType==CH_DIMMER) //Single channel
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int colorTemp = cmd.getColorTemp();
|
||||||
|
|
||||||
switch (cType)
|
switch (cType)
|
||||||
{
|
{
|
||||||
case CH_RGB:
|
case CH_RGB:
|
||||||
storageType=ST_RGB;
|
storageType=ST_RGB;
|
||||||
break;
|
break;
|
||||||
|
case CH_RGBWW:
|
||||||
|
cmd.setColorTemp(0); //Supress cold conversoin
|
||||||
case CH_RGBW:
|
case CH_RGBW:
|
||||||
storageType=ST_RGBW;
|
storageType=ST_RGBW;
|
||||||
break;
|
break;
|
||||||
@@ -99,6 +105,16 @@ st.assignFrom(cmd);
|
|||||||
debugSerial<<F("Assigned:");st.debugOut();
|
debugSerial<<F("Assigned:");st.debugOut();
|
||||||
switch (cType)
|
switch (cType)
|
||||||
{
|
{
|
||||||
|
case CH_RGBWW:
|
||||||
|
if (colorTemp == -1) colorTemp = 255/2;
|
||||||
|
else colorTemp=map(colorTemp,153,500,0,255);
|
||||||
|
DmxWrite(getChannelAddr(3), map(st.param.w,0,255,0,colorTemp));
|
||||||
|
DmxWrite(getChannelAddr(4), map(st.param.w,0,255,0,255-colorTemp));
|
||||||
|
DmxWrite(iaddr, st.param.r);
|
||||||
|
DmxWrite(getChannelAddr(1), st.param.g);
|
||||||
|
DmxWrite(getChannelAddr(2), st.param.b);
|
||||||
|
|
||||||
|
break;
|
||||||
case CH_RGBW:
|
case CH_RGBW:
|
||||||
DmxWrite(getChannelAddr(3), st.param.w);
|
DmxWrite(getChannelAddr(3), st.param.w);
|
||||||
case CH_RGB:
|
case CH_RGB:
|
||||||
|
|||||||
@@ -199,11 +199,15 @@
|
|||||||
//All options available
|
//All options available
|
||||||
#ifdef CONTROLLINO
|
#ifdef CONTROLLINO
|
||||||
#define modbusSerial Serial3
|
#define modbusSerial Serial3
|
||||||
|
#ifndef AC_Serial
|
||||||
#define AC_Serial Serial2
|
#define AC_Serial Serial2
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define modbusSerial Serial2
|
#define modbusSerial Serial2
|
||||||
|
#ifndef AC_Serial
|
||||||
#define AC_Serial Serial3
|
#define AC_Serial Serial3
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#define dmxin DMXSerial
|
#define dmxin DMXSerial
|
||||||
#define dmxout DmxSimple
|
#define dmxout DmxSimple
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user