mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-03 20:25:54 +02:00
0.8.42
* add LED to display whether it's night time or not. Can be reused as output to control battery system #1308
This commit is contained in:
parent
f2e1e536f5
commit
cd9cc976e7
8 changed files with 51 additions and 37 deletions
|
@ -1,5 +1,8 @@
|
|||
# Development Changes
|
||||
|
||||
## 0.8.42 - 2024-01-02
|
||||
* add LED to display whether it's night time or not. Can be reused as output to control battery system #1308
|
||||
|
||||
## 0.8.41 - 2024-01-02
|
||||
* fix display timeout (OLED) to 60s
|
||||
* change offs to signed value
|
||||
|
|
32
src/app.cpp
32
src/app.cpp
|
@ -456,14 +456,11 @@ void app::mqttSubRxCb(JsonObject obj) {
|
|||
//-----------------------------------------------------------------------------
|
||||
void app::setupLed(void) {
|
||||
uint8_t led_off = (mConfig->led.high_active) ? 0 : 255;
|
||||
|
||||
if (mConfig->led.led0 != DEF_PIN_OFF) {
|
||||
pinMode(mConfig->led.led0, OUTPUT);
|
||||
analogWrite(mConfig->led.led0, led_off);
|
||||
}
|
||||
if (mConfig->led.led1 != DEF_PIN_OFF) {
|
||||
pinMode(mConfig->led.led1, OUTPUT);
|
||||
analogWrite(mConfig->led.led1, led_off);
|
||||
for(uint8_t i = 0; i < 3; i ++) {
|
||||
if (mConfig->led.led[i] != DEF_PIN_OFF) {
|
||||
pinMode(mConfig->led.led[i], OUTPUT);
|
||||
analogWrite(mConfig->led.led[i], led_off);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -472,27 +469,34 @@ void app::updateLed(void) {
|
|||
uint8_t led_off = (mConfig->led.high_active) ? 0 : 255;
|
||||
uint8_t led_on = (mConfig->led.high_active) ? (mConfig->led.luminance) : (255-mConfig->led.luminance);
|
||||
|
||||
if (mConfig->led.led0 != DEF_PIN_OFF) {
|
||||
if (mConfig->led.led[0] != DEF_PIN_OFF) {
|
||||
Inverter<> *iv;
|
||||
for (uint8_t id = 0; id < mSys.getNumInverters(); id++) {
|
||||
iv = mSys.getInverterByPos(id);
|
||||
if (NULL != iv) {
|
||||
if (iv->isProducing()) {
|
||||
// turn on when at least one inverter is producing
|
||||
analogWrite(mConfig->led.led0, led_on);
|
||||
analogWrite(mConfig->led.led[0], led_on);
|
||||
break;
|
||||
}
|
||||
else if(iv->config->enabled)
|
||||
analogWrite(mConfig->led.led0, led_off);
|
||||
analogWrite(mConfig->led.led[0], led_off);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mConfig->led.led1 != DEF_PIN_OFF) {
|
||||
if (mConfig->led.led[1] != DEF_PIN_OFF) {
|
||||
if (getMqttIsConnected()) {
|
||||
analogWrite(mConfig->led.led1, led_on);
|
||||
analogWrite(mConfig->led.led[1], led_on);
|
||||
} else {
|
||||
analogWrite(mConfig->led.led1, led_off);
|
||||
analogWrite(mConfig->led.led[1], led_off);
|
||||
}
|
||||
}
|
||||
|
||||
if (mConfig->led.led[2] != DEF_PIN_OFF) {
|
||||
if((mTimestamp > (mSunset + mConfig->sun.offsetSecEvening)) || (mTimestamp < (mSunrise + mConfig->sun.offsetSecMorning)))
|
||||
analogWrite(mConfig->led.led[2], led_on);
|
||||
else
|
||||
analogWrite(mConfig->led.led[2], led_off);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,6 +142,9 @@
|
|||
#ifndef DEF_LED1
|
||||
#define DEF_LED1 DEF_PIN_OFF
|
||||
#endif
|
||||
#ifndef DEF_LED2
|
||||
#define DEF_LED2 DEF_PIN_OFF
|
||||
#endif
|
||||
#ifdef LED_ACTIVE_HIGH
|
||||
#define LED_HIGH_ACTIVE true
|
||||
#else
|
||||
|
|
|
@ -118,8 +118,7 @@ typedef struct {
|
|||
} cfgSerial_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t led0; // first LED pin
|
||||
uint8_t led1; // second LED pin
|
||||
uint8_t led[3]; // LED pins
|
||||
bool high_active; // determines if LEDs are high or low active
|
||||
uint8_t luminance; // luminance of LED
|
||||
} cfgLed_t;
|
||||
|
@ -453,8 +452,9 @@ class settings {
|
|||
mCfg.inst.iv[i].add2Total = true;
|
||||
}
|
||||
|
||||
mCfg.led.led0 = DEF_LED0;
|
||||
mCfg.led.led1 = DEF_LED1;
|
||||
mCfg.led.led[0] = DEF_LED0;
|
||||
mCfg.led.led[1] = DEF_LED1;
|
||||
mCfg.led.led[2] = DEF_LED2;
|
||||
mCfg.led.high_active = LED_HIGH_ACTIVE;
|
||||
mCfg.led.luminance = 255;
|
||||
|
||||
|
@ -677,13 +677,15 @@ class settings {
|
|||
|
||||
void jsonLed(JsonObject obj, bool set = false) {
|
||||
if(set) {
|
||||
obj[F("0")] = mCfg.led.led0;
|
||||
obj[F("1")] = mCfg.led.led1;
|
||||
obj[F("0")] = mCfg.led.led[0];
|
||||
obj[F("1")] = mCfg.led.led[1];
|
||||
obj[F("2")] = mCfg.led.led[2];
|
||||
obj[F("act_high")] = mCfg.led.high_active;
|
||||
obj[F("lum")] = mCfg.led.luminance;
|
||||
} else {
|
||||
getVal<uint8_t>(obj, F("0"), &mCfg.led.led0);
|
||||
getVal<uint8_t>(obj, F("1"), &mCfg.led.led1);
|
||||
getVal<uint8_t>(obj, F("0"), &mCfg.led.led[0]);
|
||||
getVal<uint8_t>(obj, F("1"), &mCfg.led.led[1]);
|
||||
getVal<uint8_t>(obj, F("2"), &mCfg.led.led[2]);
|
||||
getVal<bool>(obj, F("act_high"), &mCfg.led.high_active);
|
||||
getVal<uint8_t>(obj, F("lum"), &mCfg.led.luminance);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 8
|
||||
#define VERSION_PATCH 41
|
||||
#define VERSION_PATCH 42
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
|
|
@ -611,8 +611,9 @@ class RestApi {
|
|||
obj[F("sclk")] = mConfig->nrf.pinSclk;
|
||||
obj[F("mosi")] = mConfig->nrf.pinMosi;
|
||||
obj[F("miso")] = mConfig->nrf.pinMiso;
|
||||
obj[F("led0")] = mConfig->led.led0;
|
||||
obj[F("led1")] = mConfig->led.led1;
|
||||
obj[F("led0")] = mConfig->led.led[0];
|
||||
obj[F("led1")] = mConfig->led.led[1];
|
||||
obj[F("led2")] = mConfig->led.led[2];
|
||||
obj[F("led_high_active")] = mConfig->led.high_active;
|
||||
obj[F("led_lum")] = mConfig->led.luminance;
|
||||
}
|
||||
|
|
|
@ -909,7 +909,7 @@
|
|||
if ("ESP32-S3" == system.chip_model) pinList = esp32s3pins;
|
||||
else if("ESP32-C3" == system["chip_model"]) pinList = esp32c3pins;
|
||||
/*ENDIF_ESP32*/
|
||||
pins = [['led0', 'pinLed0', 'At least one inverter is producing'], ['led1', 'pinLed1', 'MqTT connected']];
|
||||
pins = [['led0', 'pinLed0', 'At least one inverter is producing'], ['led1', 'pinLed1', 'MqTT connected'], ['led2', 'pinLed2', 'Night time']];
|
||||
for(p of pins) {
|
||||
e.append(
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
#define WEB_SERIAL_BUF_SIZE 2048
|
||||
|
||||
const char* const pinArgNames[] = {"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0", "pinLed1", "pinLedHighActive", "pinLedLum", "pinCmtSclk", "pinSdio", "pinCsb", "pinFcsb", "pinGpio3"};
|
||||
const char* const pinArgNames[] = {"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0", "pinLed1", "pinLed2", "pinLedHighActive", "pinLedLum", "pinCmtSclk", "pinSdio", "pinCsb", "pinFcsb", "pinGpio3"};
|
||||
|
||||
template <class HMSYSTEM>
|
||||
class Web {
|
||||
|
@ -506,7 +506,7 @@ class Web {
|
|||
|
||||
// pinout
|
||||
uint8_t pin;
|
||||
for (uint8_t i = 0; i < 15; i++) {
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
pin = request->arg(String(pinArgNames[i])).toInt();
|
||||
switch(i) {
|
||||
case 0: mConfig->nrf.pinCs = ((pin != 0xff) ? pin : DEF_NRF_CS_PIN); break;
|
||||
|
@ -515,15 +515,16 @@ class Web {
|
|||
case 3: mConfig->nrf.pinSclk = ((pin != 0xff) ? pin : DEF_NRF_SCLK_PIN); break;
|
||||
case 4: mConfig->nrf.pinMosi = ((pin != 0xff) ? pin : DEF_NRF_MOSI_PIN); break;
|
||||
case 5: mConfig->nrf.pinMiso = ((pin != 0xff) ? pin : DEF_NRF_MISO_PIN); break;
|
||||
case 6: mConfig->led.led0 = pin; break;
|
||||
case 7: mConfig->led.led1 = pin; break;
|
||||
case 8: mConfig->led.high_active = pin; break; // this is not really a pin but a polarity, but handling it close to here makes sense
|
||||
case 9: mConfig->led.luminance = pin; break; // this is not really a pin but a polarity, but handling it close to here makes sense
|
||||
case 10: mConfig->cmt.pinSclk = pin; break;
|
||||
case 11: mConfig->cmt.pinSdio = pin; break;
|
||||
case 12: mConfig->cmt.pinCsb = pin; break;
|
||||
case 13: mConfig->cmt.pinFcsb = pin; break;
|
||||
case 14: mConfig->cmt.pinIrq = pin; break;
|
||||
case 6: mConfig->led.led[0] = pin; break;
|
||||
case 7: mConfig->led.led[1] = pin; break;
|
||||
case 8: mConfig->led.led[2] = pin; break;
|
||||
case 9: mConfig->led.high_active = pin; break; // this is not really a pin but a polarity, but handling it close to here makes sense
|
||||
case 10: mConfig->led.luminance = pin; break; // this is not really a pin but a polarity, but handling it close to here makes sense
|
||||
case 11: mConfig->cmt.pinSclk = pin; break;
|
||||
case 12: mConfig->cmt.pinSdio = pin; break;
|
||||
case 13: mConfig->cmt.pinCsb = pin; break;
|
||||
case 14: mConfig->cmt.pinFcsb = pin; break;
|
||||
case 15: mConfig->cmt.pinIrq = pin; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue