Add connect/disconnect events (#237)
This commit is contained in:
parent
fc3be70251
commit
d2feaca4d0
4 changed files with 39 additions and 13 deletions
|
|
@ -6,3 +6,6 @@ issues:
|
|||
- .regOverchargeProtect. is unused
|
||||
- .regReset. is unused
|
||||
- "`routeLogger` is unused"
|
||||
- field `connectedTime` is unused
|
||||
- func `..LoadPoint..evVehicleConnectHandler` is unused
|
||||
- func `..LoadPoint..evVehicleDisconnectHandler` is unused
|
||||
|
|
|
|||
|
|
@ -15,10 +15,12 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
evChargeStart = "start" // update chargeTimer
|
||||
evChargeStop = "stop" // update chargeTimer
|
||||
evChargeCurrent = "current" // update fakeChargeMeter
|
||||
evChargePower = "power" // update chargeRater
|
||||
evChargeStart = "start" // update chargeTimer
|
||||
evChargeStop = "stop" // update chargeTimer
|
||||
evChargeCurrent = "current" // update fakeChargeMeter
|
||||
evChargePower = "power" // update chargeRater
|
||||
evVehicleConnect = "connect" // vehicle connected
|
||||
evVehicleDisconnect = "disconnect" // vehicle disconnected
|
||||
|
||||
minActiveCurrent = 1 // minimum current at which a phase is treated as active
|
||||
)
|
||||
|
|
@ -58,9 +60,10 @@ type LoadPoint struct {
|
|||
vehicle api.Vehicle // Vehicle
|
||||
|
||||
// cached state
|
||||
status api.ChargeStatus // Charger status
|
||||
charging bool // Charging cycle
|
||||
chargePower float64 // Charging power
|
||||
status api.ChargeStatus // Charger status
|
||||
charging bool // Charging cycle
|
||||
chargePower float64 // Charging power
|
||||
connectedTime time.Time // time vehicle was connected
|
||||
|
||||
pvTimer time.Time
|
||||
}
|
||||
|
|
@ -170,15 +173,32 @@ func (lp *LoadPoint) publish(key string, val interface{}) {
|
|||
|
||||
// evChargeStartHandler sends external start event
|
||||
func (lp *LoadPoint) evChargeStartHandler() {
|
||||
lp.log.INFO.Println("start charging ->")
|
||||
lp.notify(evChargeStart)
|
||||
}
|
||||
|
||||
// evChargeStopHandler sends external stop event
|
||||
func (lp *LoadPoint) evChargeStopHandler() {
|
||||
lp.log.INFO.Println("stop charging <-")
|
||||
lp.publishChargeProgress()
|
||||
lp.notify(evChargeStop)
|
||||
}
|
||||
|
||||
// evVehicleConnectHandler sends external start event
|
||||
func (lp *LoadPoint) evVehicleConnectHandler() {
|
||||
lp.log.INFO.Printf("car connected")
|
||||
connectedDuration := lp.clock.Since(lp.connectedTime)
|
||||
lp.publish("connectedDuration", connectedDuration)
|
||||
lp.notify(evVehicleConnect)
|
||||
}
|
||||
|
||||
// evVehicleDisconnectHandler sends external start event
|
||||
func (lp *LoadPoint) evVehicleDisconnectHandler() {
|
||||
lp.log.INFO.Println("car disconnected")
|
||||
lp.connectedTime = lp.clock.Now()
|
||||
lp.notify(evVehicleDisconnect)
|
||||
}
|
||||
|
||||
// evChargeCurrentHandler updates the dummy charge meter's charge power. This simplifies the main flow
|
||||
// where the charge meter can always be treated as present. It assumes that the charge meter cannot consume
|
||||
// more than total household consumption. If physical charge meter is present this handler is not used.
|
||||
|
|
@ -242,12 +262,12 @@ func (lp *LoadPoint) updateChargeStatus() error {
|
|||
|
||||
// changed from A - connected
|
||||
if prevStatus == api.StatusA {
|
||||
lp.log.INFO.Printf("car connected (%s)", string(status))
|
||||
lp.bus.Publish(evVehicleConnect)
|
||||
}
|
||||
|
||||
// changed to A - disconnected
|
||||
if status == api.StatusA {
|
||||
lp.log.INFO.Println("car disconnected")
|
||||
lp.bus.Publish(evVehicleDisconnect)
|
||||
}
|
||||
|
||||
// update whenever there is a state change
|
||||
|
|
@ -255,12 +275,10 @@ func (lp *LoadPoint) updateChargeStatus() error {
|
|||
|
||||
// start/stop charging cycle
|
||||
if lp.charging = status == api.StatusC; lp.charging {
|
||||
lp.log.INFO.Println("start charging ->")
|
||||
lp.bus.Publish(evChargeStart)
|
||||
} else {
|
||||
// omit initial stop event before started
|
||||
if prevStatus != api.StatusNone {
|
||||
lp.log.INFO.Println("stop charging <-")
|
||||
lp.bus.Publish(evChargeStop)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,13 @@ messaging:
|
|||
msg: Started charging in "${mode}" mode
|
||||
stop: # charge stop event
|
||||
title: Charge finished
|
||||
msg: Finished charging ${energy:%.1fk}kWh in ${duration}.
|
||||
msg: Finished charging ${chargedEnergy:%.1fk}kWh in ${chargeDuration}.
|
||||
connect: # vehicle connect event
|
||||
title: Car connected
|
||||
msg: "Car connected at ${pvPower:%.1fk}kW PV"
|
||||
disconnect: # vehicle connected event
|
||||
title: Car disconnected
|
||||
msg: Car disconnected after ${connectedDuration}
|
||||
services:
|
||||
- type: pushover
|
||||
app: # app id
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@ func (h *Hub) Run(events <-chan Event) {
|
|||
|
||||
definition, ok := h.definitions[ev.Event]
|
||||
if !ok {
|
||||
log.ERROR.Printf("invalid event %v", ev.Event)
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue