Skip to content

Commit 3e4f91d

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 2471f52 + bbf93ae commit 3e4f91d

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

api/api.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ type SocLimiter interface {
185185
GetLimitSoc() (int64, error)
186186
}
187187

188+
// Dimmer provides §14a dimming
189+
type Dimmer interface {
190+
Dimmed() (bool, error)
191+
Dim(bool) error
192+
}
193+
188194
// ChargeController allows to start/stop the charging session on the vehicle side
189195
type ChargeController interface {
190196
ChargeEnable(bool) error

charger/sgready-boost.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func NewSgReadyBoostFromConfig(ctx context.Context, other map[string]interface{}
5353
func NewSgReadyBoost(ctx context.Context, embed *embed, charger api.Charger) (*SgReady, error) {
5454
modeS := func(mode int64) error {
5555
switch mode {
56-
case Dimm:
56+
case Dim:
5757
return api.ErrNotAvailable
5858
case Normal:
5959
return charger.Enable(false)

charger/sgready.go

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func init() {
4747

4848
const (
4949
_ int64 = iota
50-
Dimm // 1
50+
Dim // 1
5151
Normal // 2
5252
Boost // 3
5353
)
@@ -134,8 +134,8 @@ func (wb *SgReady) Status() (api.ChargeStatus, error) {
134134
return api.StatusNone, err
135135
}
136136

137-
if mode == Dimm {
138-
return api.StatusNone, errors.New("dimm mode")
137+
if mode == Dim {
138+
return api.StatusNone, errors.New("dim mode")
139139
}
140140

141141
status := map[int64]api.ChargeStatus{Boost: api.StatusC, Normal: api.StatusB}
@@ -161,6 +161,30 @@ func (wb *SgReady) Enable(enable bool) error {
161161
return wb.setMaxPower(wb.power)
162162
}
163163

164+
var _ api.Dimmer = (*SgReady)(nil)
165+
166+
// Dimmed implements the api.Dimmer interface
167+
func (wb *SgReady) Dimmed() (bool, error) {
168+
mode, err := wb.getMode()
169+
return mode == Dim, err
170+
}
171+
172+
// Dimm implements the api.Dimmer interface
173+
func (wb *SgReady) Dim(dim bool) error {
174+
mode := Normal
175+
if dim {
176+
mode = Dim
177+
}
178+
179+
if err := wb.modeS(mode); err != nil {
180+
return err
181+
}
182+
183+
wb.mode = Dim
184+
185+
return nil
186+
}
187+
164188
// MaxCurrent implements the api.Charger interface
165189
func (wb *SgReady) MaxCurrent(current int64) error {
166190
return wb.MaxCurrentMillis(float64(current))

core/keys/loadpoint.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const (
3636
Enabled = "enabled" // loadpoint enabled
3737
Connected = "connected" // connected
3838
Charging = "charging" // charging
39+
Dimmed = "dimmed" // dimmed pseudo-status
3940

4041
// loadpoint setpoint
4142
OfferedCurrent = "offeredCurrent" // offered current

core/loadpoint.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,6 +1847,31 @@ func (lp *Loadpoint) Update(sitePower, batteryBoostPower float64, consumption, f
18471847
lp.publishChargeProgress()
18481848
lp.PublishEffectiveValues()
18491849

1850+
// §14a
1851+
if dimmer, ok := lp.charger.(api.Dimmer); ok {
1852+
dimmed, err := dimmer.Dimmed()
1853+
if err != nil {
1854+
lp.log.ERROR.Printf("dimmed: %v", err)
1855+
return
1856+
}
1857+
1858+
dim := lp.circuit != nil && lp.circuit.Dimmed()
1859+
1860+
if dim != dimmed {
1861+
if err := dimmer.Dim(dim); err != nil {
1862+
lp.log.ERROR.Printf("dim: %v", err)
1863+
return
1864+
}
1865+
1866+
lp.publish(keys.Dimmed, dim)
1867+
lp.log.INFO.Printf("§14a dim: %t", dim)
1868+
}
1869+
1870+
if dim {
1871+
return
1872+
}
1873+
}
1874+
18501875
// read and publish status
18511876
welcomeCharge, err := lp.updateChargerStatus()
18521877
if err != nil {

0 commit comments

Comments
 (0)