Skip to content

Commit

Permalink
Merge branch 'master' into feat/loadpoint-config
Browse files Browse the repository at this point in the history
  • Loading branch information
naltatis authored Jan 8, 2025
2 parents ef15708 + 2cebf20 commit cc19ac9
Show file tree
Hide file tree
Showing 60 changed files with 1,451 additions and 542 deletions.
3 changes: 2 additions & 1 deletion assets/js/components/Config/defaultYaml/tariffs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
# price: 0.08 # EUR/kWh

#co2: # carbon intensity forecast data
# type: grünstromindex
# type: template
# template: grünstromindex
# zip: <zip>
30 changes: 20 additions & 10 deletions assets/js/components/Energyflow/Energyflow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
data-testid="energyflow-entry-batterydischarge"
@details-clicked="openBatterySettingsModal"
>
<template v-if="batteryGridChargeActive" #subline>
<template v-if="batteryGridChargeLimitSet" #subline>
<div class="d-none d-md-block">&nbsp;</div>
</template>
</EnergyflowEntry>
Expand Down Expand Up @@ -177,13 +177,25 @@
detailsClickable
@details-clicked="openBatterySettingsModal"
>
<template v-if="batteryGridChargeActive" #subline>
<template v-if="batteryGridChargeLimitSet" #subline>
<button
type="button"
class="btn-reset d-flex justify-content-between"
class="btn-reset d-flex justify-content-between text-start pe-4"
@click.stop="openBatterySettingsModal"
>
{{ batteryGridChargeText }} (≤ {{ batteryGridChargeLimitFmt }})
<span v-if="batteryGridChargeActive">
{{ $t("main.energyflow.batteryGridChargeActive") }}
<span class="text-nowrap"
>(≤ <u>{{ batteryGridChargeLimitFmt }}</u
>)</span
>
</span>
<span v-else>
{{ $t("main.energyflow.batteryGridChargeLimit") }}
<span class="text-nowrap"
>≤ <u>{{ batteryGridChargeLimitFmt }}</u></span
>
</span>
</button>
</template>
</EnergyflowEntry>
Expand Down Expand Up @@ -341,19 +353,17 @@ export default {
pvPossible() {
return this.pvConfigured || this.gridConfigured;
},
batteryGridChargeText() {
return this.$t(
`main.energyflow.${this.co2Available ? "clean" : "cheap"}BatteryGridCharge`
);
},
batteryGridChargeNow() {
if (this.co2Available) {
return this.fmtCo2Short(this.tariffCo2);
}
return this.fmtPricePerKWh(this.tariffGrid, this.currency, true);
},
batteryGridChargeLimitSet() {
return this.batteryGridChargeLimit !== null;
},
batteryGridChargeLimitFmt() {
if (this.batteryGridChargeLimit === null) {
if (!this.batteryGridChargeLimitSet) {
return;
}
if (this.co2Available) {
Expand Down
17 changes: 11 additions & 6 deletions charger/abl.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package charger
// LICENSE

// Copyright (c) 2019-2022 andig
// Copyright (c) 2022 premultiply
// Copyright (c) 2022-2024 premultiply

// This module is NOT covered by the MIT license. All rights reserved.

Expand Down Expand Up @@ -157,15 +157,20 @@ func (wb *ABLeMH) Status() (api.ChargeStatus, error) {
return api.StatusNone, err
}

r := rune(b[1]>>4-0x0A) + 'A'
s := string(rune((b[1]>>4)-0x0A) + 'A')

switch r {
case 'A', 'B', 'C':
return api.ChargeStatus(r), nil
switch s {
case "A", "B", "C":
return api.ChargeStatusString(s)
default:
// ensure Outlet is re-enabled after wake-up
if b[1] == 0xE0 { // Outlet is disabled
return api.StatusB, wb.set(ablRegModifyState, 0xA1A1)
}

status, ok := ablStatus[b[1]]
if !ok {
status = string(r)
status = s
}

return api.StatusNone, fmt.Errorf("invalid status: %s", status)
Expand Down
18 changes: 3 additions & 15 deletions charger/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package charger

import (
"context"
"fmt"
"strings"

"github.com/evcc-io/evcc/api"
reg "github.com/evcc-io/evcc/util/registry"
"github.com/evcc-io/evcc/charger/config"
)

var registry = reg.New[api.Charger]("charger")
var registry = config.Registry

// Types returns the list of types
func Types() []string {
Expand All @@ -18,15 +16,5 @@ func Types() []string {

// NewFromConfig creates charger from configuration
func NewFromConfig(ctx context.Context, typ string, other map[string]interface{}) (api.Charger, error) {
factory, err := registry.Get(strings.ToLower(typ))
if err != nil {
return nil, err
}

v, err := factory(ctx, other)
if err != nil {
err = fmt.Errorf("cannot create charger type '%s': %w", typ, err)
}

return v, err
return config.NewFromConfig(ctx, typ, other)
}
27 changes: 27 additions & 0 deletions charger/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package config

import (
"context"
"fmt"
"strings"

"github.com/evcc-io/evcc/api"
reg "github.com/evcc-io/evcc/util/registry"
)

var Registry = reg.New[api.Charger]("charger")

// NewFromConfig creates charger from configuration
func NewFromConfig(ctx context.Context, typ string, other map[string]interface{}) (api.Charger, error) {
factory, err := Registry.Get(strings.ToLower(typ))
if err != nil {
return nil, err
}

v, err := factory(ctx, other)
if err != nil {
err = fmt.Errorf("cannot create charger type '%s': %w", typ, err)
}

return v, err
}
5 changes: 4 additions & 1 deletion charger/fritzdect.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,17 @@ func NewFritzDECTFromConfig(other map[string]interface{}) (api.Charger, error) {
// NewFritzDECT creates a new connection with standbypower for charger
func NewFritzDECT(embed embed, uri, ain, user, password string, standbypower float64) (*FritzDECT, error) {
conn, err := fritzdect.NewConnection(uri, ain, user, password)
if err != nil {
return nil, err
}

c := &FritzDECT{
conn: conn,
}

c.switchSocket = NewSwitchSocket(&embed, c.Enabled, c.conn.CurrentPower, standbypower)

return c, err
return c, nil
}

// Status implements the api.Charger interface
Expand Down
5 changes: 4 additions & 1 deletion charger/homematic.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,17 @@ func NewCCUFromConfig(other map[string]interface{}) (api.Charger, error) {
// NewCCU creates a new connection with standbypower for charger
func NewCCU(embed embed, uri, deviceid, meterid, switchid, user, password string, standbypower float64, cache time.Duration) (*CCU, error) {
conn, err := homematic.NewConnection(uri, deviceid, meterid, switchid, user, password, cache)
if err != nil {
return nil, err
}

c := &CCU{
conn: conn,
}

c.switchSocket = NewSwitchSocket(&embed, c.Enabled, c.conn.CurrentPower, standbypower)

return c, err
return c, nil
}

// Enabled implements the api.Charger interface
Expand Down
Loading

0 comments on commit cc19ac9

Please sign in to comment.