updateChargerStatus updates charger status and detects car connected/disconnected events
()
| 1140 | |
| 1141 | // updateChargerStatus updates charger status and detects car connected/disconnected events |
| 1142 | func (lp *Loadpoint) updateChargerStatus() (bool, error) { |
| 1143 | statusChanges, err := lp.getStatusChanges() |
| 1144 | if err != nil || len(statusChanges) == 0 { |
| 1145 | return false, err |
| 1146 | } |
| 1147 | |
| 1148 | var welcomeCharge bool |
| 1149 | |
| 1150 | for _, status := range statusChanges { |
| 1151 | prevStatus := lp.GetStatus() |
| 1152 | lp.setStatus(status) |
| 1153 | |
| 1154 | for _, ev := range statusEvents(prevStatus, status) { |
| 1155 | lp.bus.Publish(ev) |
| 1156 | |
| 1157 | // send connect/disconnect events except during startup |
| 1158 | if prevStatus != api.StatusNone { |
| 1159 | switch ev { |
| 1160 | case evVehicleConnect: |
| 1161 | // defer notification until vehicle detection settles |
| 1162 | lp.connectPending = true |
| 1163 | welcomeCharge = lp.needsWelcomeCharge() |
| 1164 | case evVehicleDisconnect: |
| 1165 | // a still-pending connect means the vehicle disconnected before |
| 1166 | // its notification was confirmed; omit both connect and disconnect |
| 1167 | if lp.connectPending { |
| 1168 | lp.connectPending = false |
| 1169 | } else { |
| 1170 | lp.pushEvent(evVehicleDisconnect) |
| 1171 | } |
| 1172 | welcomeCharge = false |
| 1173 | } |
| 1174 | } |
| 1175 | } |
| 1176 | } |
| 1177 | |
| 1178 | // update whenever there is a state change |
| 1179 | lp.bus.Publish(evChargeCurrent, lp.offeredCurrent) |
| 1180 | |
| 1181 | return welcomeCharge, nil |
| 1182 | } |
| 1183 | |
| 1184 | // getStatusChanges checks charger status and returns a chronological list of status changes |
| 1185 | func (lp *Loadpoint) getStatusChanges() ([]api.ChargeStatus, error) { |