diff --git a/data/input.js b/data/input.js index 79f2156..c6c5a12 100644 --- a/data/input.js +++ b/data/input.js @@ -41,21 +41,53 @@ function reloadTerminal() { }, body: '' }) - .then(response => response.text()) - .then(data => { - if(data.length > 0) { - terminal.innerHTML += data; - if (autoscroll.checked) - terminal.scrollTop = terminal.scrollHeight; - } - }) - .catch(error => console.log('Error:', error)); + .then(response => response.text()) + .then(data => { + if(data.length > 0) { + terminal.innerHTML += data; + if (autoscroll.checked) + terminal.scrollTop = terminal.scrollHeight; + } + }) + .catch(error => console.log('Error:', error)); +}; + +function updateParameters() { + fetch('/parameters', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: '' + }) + .then(response => response.json()) + .then(json_str => { + const active_pwm = Math.round(json_str.active_pwm / 4095 * 100); + document.querySelector('#range_act_pwm').value = active_pwm; + document.querySelector('#out_act_pwm').value = active_pwm; + + const idle_pwm_max = Math.round(json_str.idle_pwm_max / json_str.active_pwm * 100); + document.querySelector('#range_idl_pwm').value = idle_pwm_max; + document.querySelector('#out_idl_pwm').value = idle_pwm_max; + + document.querySelector('#range_tim_sta').value = json_str.time_per_stair; + document.querySelector('#out_tim_sta').value = json_str.time_per_stair; + + document.querySelector('#range_tim_ldr').value = json_str.time_ldr; + document.querySelector('#out_tim_ldr').value = json_str.time_ldr; + + document.querySelector('#range_ldr_shw').value = json_str.ldr_schwelle; + document.querySelector('#out_ldr_shw').value = json_str.ldr_schwelle; + + }) + .catch(error => console.log('Error:', error)); }; document.addEventListener('DOMContentLoaded', () => { setInterval(reloadTerminal, 1000); setInterval(reloadRangeValues, 1000); + updateParameters(); // use data- attributes for action document.querySelectorAll('.control').forEach((button) => { diff --git a/lib/httpserver/httpserver.cpp b/lib/httpserver/httpserver.cpp index 8b6e3b3..ee0a293 100644 --- a/lib/httpserver/httpserver.cpp +++ b/lib/httpserver/httpserver.cpp @@ -94,6 +94,14 @@ void HTTPServer::start_apps() { send(202, "text/plain", ""); } }); + + this->on("/parameters", HTTP_POST, [this]() { + logt("got /parameters\n"); + char json_str[255]; + treppe->param_to_json(json_str, 255); + logt("%s\n", json_str); + send(200, "application/json", json_str); + }); } template diff --git a/lib/treppe/treppe.cpp b/lib/treppe/treppe.cpp index 1634c7e..44b6a98 100644 --- a/lib/treppe/treppe.cpp +++ b/lib/treppe/treppe.cpp @@ -58,7 +58,7 @@ void Treppe::start_animation(dimmer_t *dimmer, bool dim_type, uint16_t on_pwm, dimmer->stufe = stufen - 1; dimmer->ticks = param.time_per_stair / INT_TIME; // [ms] - } else { // DIM_LDR + } else { // DIM_LDR dimmer->ticks = param.time_ldr / INT_TIME; // [ms] } @@ -172,13 +172,14 @@ float Treppe::read_ldr() { E(LDR) = 6526.5 / (R(LDR)^2) ldr_value = E(LDR) */ - //float ldr_ohm = 37280.00 / analogRead(A0); - float voltage = analogRead(A0)*0.0036; - float ldr_ohm = 40.57*(3.3-voltage)/voltage; + // float ldr_ohm = 37280.00 / analogRead(A0); + float voltage = analogRead(A0) * 0.0036; + float ldr_ohm = 40.57 * (3.3 - voltage) / voltage; float ldr_value = 6526.6 / (ldr_ohm * ldr_ohm); - #ifdef LDRDEBUG - Serial.printf("Ohm: %f lux: %f Comp: %d\n", ldr_ohm,ldr_value, param.ldr_schwelle); - #endif +#ifdef LDRDEBUG + Serial.printf("Ohm: %f lux: %f Comp: %d\n", ldr_ohm, ldr_value, + param.ldr_schwelle); +#endif return ldr_value; } @@ -186,7 +187,7 @@ bool Treppe::check_ldr() { static uint8_t active = 0; #ifdef LDRDEBUG - //return true; + // return true; #endif // follow up: averaging over many samples? @@ -271,17 +272,16 @@ void Treppe::task() { if (!fsm_pend.anim_beendet) { fsm_pend.anim_beendet = dimmer_tick(&dimmer_ldr, DIM_LDR); } - } - if (fsm_outputs.status == ST_RUHEZUSTAND || - fsm_outputs.status == ST_INAKTIV_LDR){ - if (param_changed) { - param_changed = false; - param = param_pend; - save_param_to_eeprom(); - Serial.printf("Parameter Change applied!\n"); - } + if (fsm_outputs.status == ST_RUHEZUSTAND || + fsm_outputs.status == ST_INAKTIV_LDR) { + if (param_changed) { + param_changed = false; + param = param_pend; + save_param_to_eeprom(); + Serial.printf("Parameter Change applied!\n"); + } } #ifdef DEBUG_TIMING @@ -321,7 +321,7 @@ void Treppe::setup() { void Treppe::save_param_to_eeprom() { EEPROM.put(EEP_START_ADDR, param); // copy Parameters so "EEPROM"-section in RAM - EEPROM.commit(); // write "EEPROM"-section to flash + EEPROM.commit(); // write "EEPROM"-section to flash } void Treppe::set_idle_pwm_max(const uint16_t value, @@ -382,9 +382,20 @@ void Treppe::set_ldr_schwelle(const uint16_t value, // ?! param_pend.ldr_schwelle = 10 * value / 100; } else if (vorgabe_typ == VORGABE_12BIT) { - param_pend.ldr_schwelle = value; + param_pend.ldr_schwelle = value; } param_changed = true; Serial.printf("Treppe: ldr_schwelle=%d\n", param_pend.ldr_schwelle); +} + +void Treppe::param_to_json(char *json_str, size_t sz) { + snprintf(json_str, sz, "{\n\ + \"time_ldr\": %d,\n\ + \"time_per_stair\": %d,\n\ + \"idle_pwm_max\": %d,\n\ + \"active_pwm\": %d,\n\ + \"ldr_schwelle\": %d\n}\n", + param.time_ldr, param.time_per_stair, param.idle_pwm_max, + param.active_pwm, param.ldr_schwelle); } \ No newline at end of file diff --git a/lib/treppe/treppe.h b/lib/treppe/treppe.h index b19f8ef..8752c5a 100644 --- a/lib/treppe/treppe.h +++ b/lib/treppe/treppe.h @@ -105,6 +105,8 @@ public: // Parameter section void save_param_to_eeprom(); + void param_to_json(char* json_str, size_t sz); + void set_idle_pwm_max(const uint16_t value, const vorgabe_typ_t vorgabe_typ); void set_active_pwm(const uint16_t value, const vorgabe_typ_t vorgabe_typ);