@@ -283,99 +283,20 @@ unsigned long EvseMonitor::loop(MicroTasks::WakeReason reason)
283283 }
284284
285285 // Get the EVSE state
286- if (0 == _count % EVSE_MONITOR_STATE_TIME)
287- {
288- DBUGLN (" Get EVSE status" );
289- _openevse.getStatus ([this ](int ret, uint8_t evse_state, uint32_t session_time, uint8_t pilot_state, uint32_t vflags)
290- {
291- if (RAPI_RESPONSE_OK == ret)
292- {
293- DBUGF (" evse_state = %02x, session_time = %d, pilot_state = %02x, vflags = %08x" , evse_state, session_time, pilot_state, vflags);
294- if (_state.setState (evse_state, pilot_state, vflags)) {
295- evseStateChanged ();
296- }
297-
298- _elapsed = session_time;
299- _elapsed_set_time = millis ();
300-
301- _data_ready.ready (EVSE_MONITOR_STATE_DATA_READY);
302- }
303- });
286+ if (0 == _count % EVSE_MONITOR_STATE_TIME) {
287+ getStatusFromEvse ();
304288 }
305289
306- if (0 == _count % EVSE_MONITOR_AMP_AND_VOLT_TIME)
307- {
308- if (_state.isCharging ())
309- {
310- DBUGLN (" Get charge current/voltage status" );
311- _openevse.getChargeCurrentAndVoltage ([this ](int ret, double a, double volts)
312- {
313- if (RAPI_RESPONSE_OK == ret)
314- {
315- DBUGF (" amps = %.2f, volts = %.2f" , a, volts);
316- _amp = a;
317- if (volts >= 0 ) {
318- _voltage = volts;
319- }
320- _data_ready.ready (EVSE_MONITOR_AMP_AND_VOLT_DATA_READY);
321- }
322- });
323- } else {
324- _data_ready.ready (EVSE_MONITOR_AMP_AND_VOLT_DATA_READY);
325- }
290+ if (0 == _count % EVSE_MONITOR_AMP_AND_VOLT_TIME) {
291+ getChargeCurrentAndVoltageFromEvse ();
326292 }
327293
328- if (0 == _count % EVSE_MONITOR_TEMP_TIME)
329- {
330- DBUGLN (" Get tempurature status" );
331- _openevse.getTemperature ([this ](int ret, double t1, bool t1_valid, double t2, bool t2_valid, double t3, bool t3_valid)
332- {
333- if (RAPI_RESPONSE_OK == ret)
334- {
335- DBUGF (" t1 = %.1f%s, t2 = %.1f%s, t3 = %.1f%s" , t1, t1_valid ? " " : " *" , t2, t2_valid ? " " : " *" , t3, t3_valid ? " " : " *" );
336- _temps[EVSE_MONITOR_TEMP_EVSE_DS3232].set (t1, t1_valid);
337- _temps[EVSE_MONITOR_TEMP_EVSE_MCP9808].set (t2, t2_valid);
338- _temps[EVSE_MONITOR_TEMP_EVSE_TMP007].set (t3, t3_valid);
339- #ifdef ENABLE_MCP9808
340- {
341- double mcp9808_temp = _mcp9808.readTempC ();
342- DBUGVAR (mcp9808_temp);
343- _temps[EVSE_MONITOR_TEMP_ESP_MCP9808].set (mcp9808_temp, !isnan (mcp9808_temp));
344- }
345- #endif
346-
347- _temps[EVSE_MONITOR_TEMP_MONITOR].invalidate ();
348- for (int i = 1 ; i < EVSE_MONITOR_TEMP_COUNT; i++)
349- {
350- if (_temps[i].isValid ()) {
351- _temps[EVSE_MONITOR_TEMP_MONITOR].set (_temps[i].get (), _temps[i].isValid ());
352- break ;
353- }
354- }
355- _data_ready.ready (EVSE_MONITOR_TEMP_DATA_READY);
356- }
357- });
294+ if (0 == _count % EVSE_MONITOR_TEMP_TIME) {
295+ getTemperatureFromEvse ();
358296 }
359297
360- if (0 == _count % EVSE_MONITOR_ENERGY_TIME)
361- {
362- if (_state.isCharging ())
363- {
364- DBUGLN (" Get charge energy usage" );
365- _openevse.getEnergy ([this ](int ret, double session_wh, double total_kwh)
366- {
367- if (RAPI_RESPONSE_OK == ret)
368- {
369- DBUGF (" session_wh = %.2f, total_kwh = %.2f" , session_wh, total_kwh);
370- _session_wh = session_wh;
371- _total_kwh = total_kwh;
372-
373- _data_ready.ready (EVSE_MONITOR_ENERGY_DATA_READY);
374- }
375- });
376- } else {
377- _data_ready.ready (EVSE_MONITOR_ENERGY_DATA_READY);
378- }
298+ if (0 == _count % EVSE_MONITOR_ENERGY_TIME) {
299+ getEnergyFromEvse ();
379300 }
380301
381302 _count ++;
@@ -433,6 +354,39 @@ EvseMonitor::ServiceLevel EvseMonitor::getServiceLevel()
433354 ServiceLevel::L1;
434355}
435356
357+ void EvseMonitor::enable ()
358+ {
359+ OpenEVSE.enable ([this ](int ret)
360+ {
361+ DBUGF (" EVSE: enable - complete %d" , ret);
362+ if (RAPI_RESPONSE_OK == ret) {
363+ getStatusFromEvse ();
364+ }
365+ });
366+ }
367+
368+ void EvseMonitor::sleep ()
369+ {
370+ OpenEVSE.sleep ([this ](int ret)
371+ {
372+ DBUGF (" EVSE: sleep - complete %d" , ret);
373+ if (RAPI_RESPONSE_OK == ret) {
374+ getStatusFromEvse ();
375+ }
376+ });
377+ }
378+
379+ void EvseMonitor::disable ()
380+ {
381+ OpenEVSE.disable ([this ](int ret)
382+ {
383+ DBUGF (" EVSE: disable - complete %d" , ret);
384+ if (RAPI_RESPONSE_OK == ret) {
385+ getStatusFromEvse ();
386+ }
387+ });
388+ }
389+
436390void EvseMonitor::setPilot (long amps)
437391{
438392 _openevse.setCurrentCapacity (amps, false , [this ](int ret, long pilot)
@@ -443,3 +397,98 @@ void EvseMonitor::setPilot(long amps)
443397 });
444398}
445399
400+ void EvseMonitor::getStatusFromEvse ()
401+ {
402+ DBUGLN (" Get EVSE status" );
403+ _openevse.getStatus ([this ](int ret, uint8_t evse_state, uint32_t session_time, uint8_t pilot_state, uint32_t vflags)
404+ {
405+ if (RAPI_RESPONSE_OK == ret)
406+ {
407+ DBUGF (" evse_state = %02x, session_time = %d, pilot_state = %02x, vflags = %08x" , evse_state, session_time, pilot_state, vflags);
408+ if (_state.setState (evse_state, pilot_state, vflags)) {
409+ evseStateChanged ();
410+ }
411+
412+ _elapsed = session_time;
413+ _elapsed_set_time = millis ();
414+
415+ _data_ready.ready (EVSE_MONITOR_STATE_DATA_READY);
416+ }
417+ });
418+ }
419+
420+ void EvseMonitor::getChargeCurrentAndVoltageFromEvse ()
421+ {
422+ if (_state.isCharging ())
423+ {
424+ DBUGLN (" Get charge current/voltage status" );
425+ _openevse.getChargeCurrentAndVoltage ([this ](int ret, double a, double volts)
426+ {
427+ if (RAPI_RESPONSE_OK == ret)
428+ {
429+ DBUGF (" amps = %.2f, volts = %.2f" , a, volts);
430+ _amp = a;
431+ if (volts >= 0 ) {
432+ _voltage = volts;
433+ }
434+ _data_ready.ready (EVSE_MONITOR_AMP_AND_VOLT_DATA_READY);
435+ }
436+ });
437+ } else {
438+ _data_ready.ready (EVSE_MONITOR_AMP_AND_VOLT_DATA_READY);
439+ }
440+ }
441+
442+ void EvseMonitor::getTemperatureFromEvse ()
443+ {
444+ DBUGLN (" Get tempurature status" );
445+ _openevse.getTemperature ([this ](int ret, double t1, bool t1_valid, double t2, bool t2_valid, double t3, bool t3_valid)
446+ {
447+ if (RAPI_RESPONSE_OK == ret)
448+ {
449+ DBUGF (" t1 = %.1f%s, t2 = %.1f%s, t3 = %.1f%s" , t1, t1_valid ? " " : " *" , t2, t2_valid ? " " : " *" , t3, t3_valid ? " " : " *" );
450+ _temps[EVSE_MONITOR_TEMP_EVSE_DS3232].set (t1, t1_valid);
451+ _temps[EVSE_MONITOR_TEMP_EVSE_MCP9808].set (t2, t2_valid);
452+ _temps[EVSE_MONITOR_TEMP_EVSE_TMP007].set (t3, t3_valid);
453+ #ifdef ENABLE_MCP9808
454+ {
455+ double mcp9808_temp = _mcp9808.readTempC ();
456+ DBUGVAR (mcp9808_temp);
457+ _temps[EVSE_MONITOR_TEMP_ESP_MCP9808].set (mcp9808_temp, !isnan (mcp9808_temp));
458+ }
459+ #endif
460+
461+ _temps[EVSE_MONITOR_TEMP_MONITOR].invalidate ();
462+ for (int i = 1 ; i < EVSE_MONITOR_TEMP_COUNT; i++)
463+ {
464+ if (_temps[i].isValid ()) {
465+ _temps[EVSE_MONITOR_TEMP_MONITOR].set (_temps[i].get (), _temps[i].isValid ());
466+ break ;
467+ }
468+ }
469+ _data_ready.ready (EVSE_MONITOR_TEMP_DATA_READY);
470+ }
471+ });
472+ }
473+
474+ void EvseMonitor::getEnergyFromEvse ()
475+ {
476+ if (_state.isCharging ())
477+ {
478+ DBUGLN (" Get charge energy usage" );
479+ _openevse.getEnergy ([this ](int ret, double session_wh, double total_kwh)
480+ {
481+ if (RAPI_RESPONSE_OK == ret)
482+ {
483+ DBUGF (" session_wh = %.2f, total_kwh = %.2f" , session_wh, total_kwh);
484+ _session_wh = session_wh;
485+ _total_kwh = total_kwh;
486+
487+ _data_ready.ready (EVSE_MONITOR_ENERGY_DATA_READY);
488+ }
489+ });
490+ } else {
491+ _data_ready.ready (EVSE_MONITOR_ENERGY_DATA_READY);
492+ }
493+ }
494+
0 commit comments