|
|
|
@ -44,19 +44,9 @@ uint32_t wifi_check_interval_counter = millis();
|
|
|
|
|
|
|
|
|
|
WiFiManager wifiManager;
|
|
|
|
|
|
|
|
|
|
typedef enum fsm_states_et {
|
|
|
|
|
FSM_STATE_WU,
|
|
|
|
|
FSM_STATE_WSE,
|
|
|
|
|
FSM_STATE_RS,
|
|
|
|
|
FSM_STATE_BP,
|
|
|
|
|
FSM_STATE_WS,
|
|
|
|
|
FSM_STATE_US,
|
|
|
|
|
FSM_STATE_SC,
|
|
|
|
|
FSM_STATE_ID,
|
|
|
|
|
FSM_STATE_SD
|
|
|
|
|
} t_fsm_states;
|
|
|
|
|
uint8_t fsm_state = FSM_STATE_WU;
|
|
|
|
|
|
|
|
|
|
t_fsm_states fsm_state = FSM_STATE_WU;
|
|
|
|
|
uint8_t sensor_cnt = 0;
|
|
|
|
|
|
|
|
|
|
//*************************************************************************//
|
|
|
|
|
|
|
|
|
@ -181,7 +171,7 @@ void initSensors()
|
|
|
|
|
void wifiConnectionCheck()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (millis() - wifi_check_interval_counter < WIFI_CHECK_INVERVAL_MS)
|
|
|
|
|
if (millis() - wifi_check_interval_counter < WIFI_CHECK_INTERVAL_MS)
|
|
|
|
|
{
|
|
|
|
|
// if check interval is not exceeded abort check
|
|
|
|
|
return;
|
|
|
|
@ -279,9 +269,11 @@ void _loop()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_WU:
|
|
|
|
|
debug("web updater call if required");
|
|
|
|
|
#ifdef WEBUPDATER_FEATURE
|
|
|
|
|
if (UPDATE_WEBSERVER_INTVERVAL_S * 1000 / DELAY_LOOP_MS <= update_webserver_cnt)
|
|
|
|
|
{
|
|
|
|
|
debug("web updater call");
|
|
|
|
|
update_webserver_cnt = 0;
|
|
|
|
|
doWebUpdater();
|
|
|
|
|
}
|
|
|
|
@ -290,10 +282,11 @@ void _loop()
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_WSE:
|
|
|
|
|
debug("wind speed exceeded check if required");
|
|
|
|
|
#ifdef HTTP_CALL_ON_WINDSPEED_EXCEED
|
|
|
|
|
if (HTTP_CALL_ON_WINDSPEED_INTERVAL_S * 1000 / DELAY_LOOP_MS <= update_windspeed_exceed_cnt)
|
|
|
|
|
{
|
|
|
|
|
debug("Reading wind sensor because of exceed call functionality");
|
|
|
|
|
debug("reading wind sensor because of exceed call functionality");
|
|
|
|
|
if (sensors[SENSOR_WINDSPEED])
|
|
|
|
|
{
|
|
|
|
|
// read from windspeed sensorSTATUS_LED_PIN
|
|
|
|
@ -315,9 +308,7 @@ void _loop()
|
|
|
|
|
|
|
|
|
|
if (httpResponseCode > 0) {
|
|
|
|
|
String response = http.getString();
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
Serial.println("http response code: " + String(httpResponseCode) + " = " + response);
|
|
|
|
|
#endif
|
|
|
|
|
debug("http response code: " + String(httpResponseCode) + " = " + response);
|
|
|
|
|
// TODO handle response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -335,63 +326,69 @@ void _loop()
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_RS:
|
|
|
|
|
debug("reset time check if required");
|
|
|
|
|
#ifdef RESET_ESP_TIME_INTERVAL
|
|
|
|
|
// if millis() reached interval restart ESP
|
|
|
|
|
if (RESET_ESP_TIME_INTERVAL_MS <= millis())
|
|
|
|
|
{
|
|
|
|
|
debug("Resetting firmware intentionally");
|
|
|
|
|
debug("resetting firmware intentionally");
|
|
|
|
|
// Push reset button after flashing once or do a manual power cycle to get the functionality working.
|
|
|
|
|
ESP.restart();
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
fsm_state = FSM_STATE_BP;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_BP:
|
|
|
|
|
#ifndef BATTERY_POWERED
|
|
|
|
|
if (UPDATE_SENSOR_INTERVAL_S * 1000 / DELAY_LOOP_MS > update_sensor_cnt)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
fsm_state = FSM_STATE_WS;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_WS:
|
|
|
|
|
debug("disable measure of wind speed if required");
|
|
|
|
|
#ifdef defined(BATTERY_POWERED) && defined(SENSOR_WIND)
|
|
|
|
|
if (energySavingMode() == 1) {
|
|
|
|
|
// Disable expensive tasks
|
|
|
|
|
sensors[SENSOR_WINDSPEED] = 0;
|
|
|
|
|
debug("read of wind sensor because of low battery disabled");
|
|
|
|
|
} else {
|
|
|
|
|
sensors[SENSOR_WINDSPEED] = &wind_speed;
|
|
|
|
|
debug("read of wind sensor because of high battery enabled");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
fsm_state = FSM_STATE_US;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_US:
|
|
|
|
|
update_sensor_cnt = 0;
|
|
|
|
|
for (uint8_t i = 0; i < VALUES; i++)
|
|
|
|
|
debug("read sensor data check");
|
|
|
|
|
if (UPDATE_SENSOR_INTERVAL_S * 1000 / DELAY_LOOP_MS <= update_sensor_cnt)
|
|
|
|
|
{
|
|
|
|
|
if (sensors[i]) {
|
|
|
|
|
currentSensorData[i] = sensors[i]();
|
|
|
|
|
debug("read sensor data" + String(sensor_cnt));
|
|
|
|
|
if (sensors[sensor_cnt]) {
|
|
|
|
|
currentSensorData[sensor_cnt] = sensors[sensor_cnt]();
|
|
|
|
|
} else {
|
|
|
|
|
currentSensorData[i] = nan("no value");
|
|
|
|
|
currentSensorData[sensor_cnt] = nan("no value");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sensor_cnt < VALUES)
|
|
|
|
|
{
|
|
|
|
|
sensor_cnt++;
|
|
|
|
|
} else {
|
|
|
|
|
update_sensor_cnt = 0;
|
|
|
|
|
sensor_cnt = 0;
|
|
|
|
|
fsm_state = FSM_STATE_SC;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
debug("skip read sensor data");
|
|
|
|
|
fsm_state = FSM_STATE_WU; // no new data, reset FSM
|
|
|
|
|
}
|
|
|
|
|
fsm_state = FSM_STATE_SC;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_SC:
|
|
|
|
|
debug("log to serial if required");
|
|
|
|
|
#ifdef SERIAL_FEATURE
|
|
|
|
|
logToSerial(currentSensorData);
|
|
|
|
|
#endif
|
|
|
|
|
fsm_state = FSM_STATE_ID;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
//delay(100); // TODO warum?
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_ID:
|
|
|
|
|
debug("Send data to influxdb");
|
|
|
|
|
#ifdef INFLUXDB_FEATURE
|
|
|
|
|
for (uint8_t i = 0; i < 5 and validData == false; i++)
|
|
|
|
|
{
|
|
|
|
@ -411,6 +408,7 @@ void _loop()
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FSM_STATE_SD:
|
|
|
|
|
debug("set sensor data in webupdater");
|
|
|
|
|
#ifdef WEBUPDATER_FEATURE
|
|
|
|
|
setSensorData(currentSensorData);
|
|
|
|
|
#endif
|
|
|
|
@ -422,7 +420,10 @@ void _loop()
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
} // close of switch
|
|
|
|
|
debug("FSM state = "+fsm_state);
|
|
|
|
|
|
|
|
|
|
//delay(100); // TODO warum hier ein delay?
|
|
|
|
|
|
|
|
|
|
debug("FSM state = " + String(fsm_state));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logToSerial(float sensorValues[])
|
|
|
|
|