Skip to content

Commit

Permalink
Added support for PV meter only - and calculate consumption and grid …
Browse files Browse the repository at this point in the history
…meter
  • Loading branch information
andig authored and mark-sch committed Jun 9, 2021
1 parent 62641f6 commit 9a5b0f4
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 21 deletions.
2 changes: 1 addition & 1 deletion assets/js/components/SiteDetails.vue
@@ -1,6 +1,6 @@
<template>
<div class="row">
<div class="col-6 col-md-3 mt-3" v-if="gridConfigured">
<div class="col-6 col-md-3 mt-3">
<div class="mb-2 value" v-if="gridPower > 0">
Bezug <fa-icon icon="arrow-down" class="text-primary" />
</div>
Expand Down
55 changes: 40 additions & 15 deletions core/site.go
Expand Up @@ -79,13 +79,6 @@ func NewSiteFromConfig(
Voltage = site.Voltage
site.loadpoints = loadpoints

// configure meter from references
// if site.Meters.PVMeterRef == "" && site.Meters.GridMeterRef == "" {
// nil, errors.New("missing either pv or grid meter")
// }
if site.Meters.GridMeterRef == "" {
return nil, errors.New("missing grid meter")
}
if site.MaxCurrent == 0 {
return nil, errors.New("missing maxCurrent config value")
}
Expand All @@ -110,6 +103,11 @@ func NewSiteFromConfig(

site.count = 0

// configure meter from references
if site.gridMeter == nil && site.pvMeter == nil {
return nil, errors.New("missing either grid or pv meter")
}

return site, nil
}

Expand Down Expand Up @@ -257,6 +255,15 @@ func (site *Site) updateMeter(name string, meter api.Meter, power *float64) erro
return nil
}

func (site *Site) updateMeter2(name string, value float64, power *float64) error {
*power = value // update value if no error

site.log.DEBUG.Printf("%s power: %.0fW", name, *power)
site.publish(name+"Power", *power)

return nil
}

// updateMeter updates and publishes single meter
func (site *Site) updateMeters() error {
retryMeter := func(s string, m api.Meter, f *float64) error {
Expand All @@ -276,14 +283,7 @@ func (site *Site) updateMeters() error {
return err
}

// pv meter is not critical for operation
_ = retryMeter("pv", site.pvMeter, &site.pvPower)
_ = retryMeter("consumption", site.consumptionMeter, &site.consumptionPower)

err := retryMeter("grid", site.gridMeter, &site.gridPower)
if err == nil {
err = retryMeter("battery", site.batteryMeter, &site.batteryPower)
}
var err error

// currents
if phaseMeter, ok := site.gridMeter.(api.MeterCurrent); err == nil && ok {
Expand All @@ -294,6 +294,31 @@ func (site *Site) updateMeters() error {
}
}

// allow using PV as estimate for grid power
if site.gridMeter == nil {
site.gridPower = -site.pvPower

consumption := float64(0)
for _, slp := range site.loadpoints {
if curr, err := slp.chargeMeter.CurrentPower(); err == nil {
consumption += curr
site.gridPower = site.gridPower + curr
}
}
_ = retryMeter("pv", site.pvMeter, &site.pvPower)
site.updateMeter2("consumption", consumption, &site.consumptionPower)
site.updateMeter2("grid", site.gridPower, &site.gridPower)
} else {
// pv meter is not critical for operation
_ = retryMeter("pv", site.pvMeter, &site.pvPower)
_ = retryMeter("consumption", site.consumptionMeter, &site.consumptionPower)

err = retryMeter("grid", site.gridMeter, &site.gridPower)
if err == nil {
err = retryMeter("battery", site.batteryMeter, &site.batteryPower)
}
}

return err
}

Expand Down
4 changes: 2 additions & 2 deletions dist/index.html
@@ -1,5 +1,5 @@
<!DOCTYPE html><html lang="en" class="notranslate" translate="no"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="EV Charge Controller"><meta name="google" content="notranslate"><meta name="author" content="Think5 GmbH, andig"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" sizes="180x180" href="ico/apple-touch-icon.png?[[.Version]]"><link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png?[[.Version]]"><link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png?[[.Version]]"><link rel="manifest" href="ico/site.webmanifest"><link rel="mask-icon" href="ico/safari-pinned-tab.svg?[[.Version]]" color="#5bbad5"><link rel="shortcut icon" href="ico/favicon.ico?[[.Version]]"><meta name="apple-mobile-web-app-title" content="evcc"><meta name="application-name" content="evcc"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>Sunny5 - EV Charge Controller</title><link href="css/chunk-vendors.52eaf30c.css" rel="preload" as="style"><link href="css/index.6e23c487.css" rel="preload" as="style"><link href="js/chunk-vendors.440293dc.js" rel="preload" as="script"><link href="js/index.8f4c68eb.js" rel="preload" as="script"><link href="css/chunk-vendors.52eaf30c.css" rel="stylesheet"><link href="css/index.6e23c487.css" rel="stylesheet"></head><body><script>window.evcc = {
<!DOCTYPE html><html lang="en" class="notranslate" translate="no"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="EV Charge Controller"><meta name="google" content="notranslate"><meta name="author" content="Think5 GmbH, andig"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" sizes="180x180" href="ico/apple-touch-icon.png?[[.Version]]"><link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png?[[.Version]]"><link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png?[[.Version]]"><link rel="manifest" href="ico/site.webmanifest"><link rel="mask-icon" href="ico/safari-pinned-tab.svg?[[.Version]]" color="#5bbad5"><link rel="shortcut icon" href="ico/favicon.ico?[[.Version]]"><meta name="apple-mobile-web-app-title" content="evcc"><meta name="application-name" content="evcc"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>Sunny5 - EV Charge Controller</title><link href="css/chunk-vendors.52eaf30c.css" rel="preload" as="style"><link href="css/index.6e23c487.css" rel="preload" as="style"><link href="js/chunk-vendors.440293dc.js" rel="preload" as="script"><link href="js/index.f7d30364.js" rel="preload" as="script"><link href="css/chunk-vendors.52eaf30c.css" rel="stylesheet"><link href="css/index.6e23c487.css" rel="stylesheet"></head><body><script>window.evcc = {
version: "[[.Version]]",
configured: "[[.Configured]]",
hasSunny5Menu: "[[.HasSunny5Menu]]",
};</script><div id="app"></div><div id="toasts"></div><script src="js/chunk-vendors.440293dc.js"></script><script src="js/index.8f4c68eb.js"></script></body></html>
};</script><div id="app"></div><div id="toasts"></div><script src="js/chunk-vendors.440293dc.js"></script><script src="js/index.f7d30364.js"></script></body></html>
2 changes: 0 additions & 2 deletions dist/js/index.8f4c68eb.js

This file was deleted.

1 change: 0 additions & 1 deletion dist/js/index.8f4c68eb.js.map

This file was deleted.

2 changes: 2 additions & 0 deletions dist/js/index.f7d30364.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/js/index.f7d30364.js.map

Large diffs are not rendered by default.

0 comments on commit 9a5b0f4

Please sign in to comment.