1010OpenEVSEClass::OpenEVSEClass () :
1111 _sender(NULL ),
1212 _connected(false ),
13- _protocol(OPENEVSE_ENCODE_VERSION(1 ,0 ,0 ))
13+ _protocol(OPENEVSE_ENCODE_VERSION(1 ,0 ,0 )),
14+ _boot(NULL ),
15+ _state(NULL ),
16+ _wifi(NULL )
1417{
1518}
1619
@@ -19,6 +22,9 @@ void OpenEVSEClass::begin(RapiSender &sender, std::function<void(bool connected)
1922 _connected = false ;
2023 _sender = &sender;
2124
25+ _sender->setOnEvent ([this ]() { onEvent (); });
26+ _sender->enableSequenceId (0 );
27+
2228 getVersion ([this , callback](int ret, const char *firmware, const char *protocol) {
2329 if (RAPI_RESPONSE_OK == ret) {
2430 int major, minor, patch;
@@ -68,28 +74,23 @@ void OpenEVSEClass::getStatus(std::function<void(int ret, uint8_t evse_state, ui
6874 if (_sender->getTokenCnt () >= tokens_required)
6975 {
7076 const char *val = _sender->getToken (1 );
71- DBUGVAR (val);
7277 uint8_t evse_state = strtol (val, NULL , state_base);
73- DBUGVAR (evse_state);
78+
7479 val = _sender->getToken (2 );
75- DBUGVAR (val);
7680 uint32_t elapsed = strtol (val, NULL , 10 );
77- DBUGVAR (elapsed);
7881
7982 uint8_t pilot_state = OPENEVSE_STATE_INVALID;
8083 uint32_t vflags = 0 ;
8184
8285 if (_protocol >= OPENEVSE_OCPP_SUPPORT_PROTOCOL_VERSION) {
83- val = _sender->getToken (1 );
84- DBUGVAR (val);
86+ val = _sender->getToken (3 );
8587 pilot_state = strtol (val, NULL , state_base);
86- DBUGVAR (pilot_state);
87- val = _sender->getToken (2 );
88- DBUGVAR (val);
88+
89+ val = _sender->getToken (4 );
8990 vflags = strtol (val, NULL , 16 );
90- DBUGVAR (vflags);
9191 }
9292
93+ DBUGF (" evse_state = %02x, elapsed = %d, pilot_state = %02x, vflags = %08x" , evse_state, elapsed, pilot_state, vflags);
9394 callback (RAPI_RESPONSE_OK, evse_state, elapsed, pilot_state, vflags);
9495 } else {
9596 callback (RAPI_RESPONSE_INVALID_RESPONSE, OPENEVSE_STATE_INVALID, 0 , OPENEVSE_STATE_INVALID, 0 );
@@ -100,4 +101,62 @@ void OpenEVSEClass::getStatus(std::function<void(int ret, uint8_t evse_state, ui
100101 });
101102}
102103
104+ void OpenEVSEClass::onEvent ()
105+ {
106+ DBUGF (" Got ASYNC event %s" , _sender->getToken (0 ));
107+
108+ if (!strcmp (_sender->getToken (0 ), " $ST" ))
109+ {
110+ const char *val = _sender->getToken (1 );
111+ DBUGVAR (val);
112+ uint8_t state = strtol (val, NULL , 16 );
113+ DBUGVAR (state);
114+
115+ if (_state) {
116+ _state (state, OPENEVSE_STATE_INVALID, 0 , 0 );
117+ }
118+ }
119+ else if (!strcmp (_sender->getToken (0 ), " $WF" ))
120+ {
121+ const char *val = _sender->getToken (1 );
122+ DBUGVAR (val);
123+
124+ uint8_t wifiMode = strtol (val, NULL , 10 );
125+ DBUGVAR (wifiMode);
126+
127+ if (_wifi) {
128+ _wifi (wifiMode);
129+ }
130+ }
131+ else if (!strcmp (_sender->getToken (0 ), " $AT" ))
132+ {
133+ const char *val = _sender->getToken (1 );
134+ uint8_t evse_state = strtol (val, NULL , 16 );
135+
136+ val = _sender->getToken (2 );
137+ uint8_t pilot_state = strtol (val, NULL , 16 );
138+
139+ val = _sender->getToken (3 );
140+ uint32_t current_capacity = strtol (val, NULL , 10 );
141+
142+ val = _sender->getToken (4 );
143+ uint32_t vflags = strtol (val, NULL , 16 );
144+
145+ DBUGF (" evse_state = %02x, pilot_state = %02x, current_capacity = %d, vflags = %08x" , evse_state, pilot_state, current_capacity, vflags);
146+
147+ if (_state) {
148+ _state (evse_state, pilot_state, current_capacity, vflags);
149+ }
150+ }
151+ else if (!strcmp (_sender->getToken (0 ), " $AB" ))
152+ {
153+ const char *val = _sender->getToken (1 );
154+ uint8_t post_code = strtol (val, NULL , 16 );
155+
156+ if (_boot) {
157+ _boot (post_code, _sender->getToken (2 ));
158+ }
159+ }
160+ }
161+
103162OpenEVSEClass OpenEVSE;
0 commit comments