diff --git a/pool.js b/pool.js index d60fd63..1467807 100644 --- a/pool.js +++ b/pool.js @@ -7,9 +7,14 @@ let status = { temp_yesterday: null, update_time: null, + update_time_last: 0, + update_temp_max_last: null, disable_temp: null, + tick_temp: 0, + tick_pool: 0, + tick_pump: 0, tick_timer: 0, tick_day: 0, }; @@ -72,9 +77,12 @@ function time_to_timespec(t) { } // update temperature from Sensor +// - trigger pump update if needed function update_temp(temp) { - print("[POOL] update_temp", temp); + status.tick_temp++; + + print("[POOL] update_temp", status.tick_temp, temp); if (status.disable_temp !== null) { print("[POOL] updated disabled"); return; @@ -85,6 +93,13 @@ function update_temp(temp) { status.temp_max = Math.max(status.temp_today, status.temp_yesterday); print("[POOL] update_temp - max:", status.temp_max, "today:", status.temp_today, "yesterday:", status.temp_yesterday); + + if (status.temp_max !== status.update_temp_max_last) { + update_pool(); + } + else { + print("[POOL] no temp change, skip update_pool"); + } } // new day, update status @@ -126,7 +141,8 @@ function do_call(calls) { // TODO freeze mode if cur < 1 function update_pump(temp, max, time) { - print("[POOL] update_pump", temp, max, time); + status.tick_pump++; + print("[POOL] update_pump", status.tick_pump, temp, max, time); let duration = compute_duration_filt(max); let schedule = compute_schedule_filt(duration); @@ -168,15 +184,21 @@ function update_pump(temp, max, time) { do_call(calls); } -// +// update pool: +// - retrieve current time +// - switch to next day +// - do a pump update if the last one didn't not happen too close function update_pool() { + status.tick_pool++; + print("update_pool", status.tick_pool); + Shelly.call ( "Sys.GetStatus", {}, function (result) { let time = result.time; // "HH:MM" - print("[POOL] timer", time); + print("[POOL] time", time); // compute current time in float format (12h45 -> 12.75) let t = JSON.parse(time.slice(0,2)) + JSON.parse(time.slice(3,5)) / 60; @@ -186,13 +208,22 @@ function update_pool() { status.update_time = t; - if (status.temp_max !== null) - update_pump(status.temp, status.temp_max, t); + if (status.temp_max !== null) { + if ((t - status.update_time_last) > 0.15) { // 9 minutes + update_pump(status.temp, status.temp_max, t); + status.update_time_last = t; + status.update_temp_max_last = status.temp_max; + } + else { + print("[POOL] to much update_pool, skipped"); + } + } } ); } -// receives updated from Pool Sensor +// receives update from Pool Sensor +// - trigger all temperature and pump updates MQTT.subscribe( "zigbee2mqtt/Piscine", @@ -229,18 +260,3 @@ Shelly.addEventHandler( ); -// Run once per hour -// - update transition today -> yesterday -// - update pump schedule - -Timer.set ( - 3600 * 1000, - true, - function () { - status.tick_timer++; - print("[POOL] timer", status.tick_timer); - - update_pool(); - } -); -