Switch into demo mode when config file not available

This commit is contained in:
andig 2021-01-04 14:41:45 +01:00
parent 5cadb98f70
commit e767cf0fbc
7 changed files with 109 additions and 8 deletions

View file

@ -24,7 +24,10 @@ func runCharger(cmd *cobra.Command, args []string) {
log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit)
// load config
conf := loadConfigFile(cfgFile)
conf, err := loadConfigFile(cfgFile)
if err != nil {
log.FATAL.Fatal(err)
}
// setup mqtt
if conf.Mqtt.Broker != "" {

84
cmd/demo.go Normal file
View file

@ -0,0 +1,84 @@
package cmd
import (
"github.com/spf13/viper"
"gopkg.in/yaml.v3"
)
const demoYaml = `
log: info
meters:
- name: grid
type: default
power:
type: js
script: "1200"
- name: pv
type: default
power:
type: js
script: "6400"
- name: battery
type: default
power:
type: js
script: "200"
soc:
type: js
script: "30"
chargers:
- name: demo
type: default
enable:
type: js
script: "true"
enabled:
type: js
script: "true"
status:
type: js
script: "'B'"
maxcurrent:
type: js
script: "6"
vehicles:
- name: demo
title: e-Golf
type: default
charge:
type: js
script: "63"
site:
title: Demo
meters:
grid: grid
pv: pv
battery: battery
loadpoints:
- title: Carport
charger: demo
vehicle: demo
`
func demoConfig() (conf config) {
demo := map[string]interface{}{}
if err := yaml.Unmarshal([]byte(demoYaml), &demo); err != nil {
log.FATAL.Fatalf("failed decoding demo config: %+v", err)
}
for k, v := range demo {
viper.Set(k, v)
}
if err := viper.UnmarshalExact(&conf); err != nil {
log.FATAL.Fatalf("failed loading demo config: %v", err)
}
return conf
}

View file

@ -26,7 +26,10 @@ func runDump(cmd *cobra.Command, args []string) {
log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit)
// load config
conf := loadConfigFile(cfgFile)
conf, err := loadConfigFile(cfgFile)
if err != nil {
log.FATAL.Fatal(err)
}
// setup mqtt
if conf.Mqtt.Broker != "" {

View file

@ -24,7 +24,10 @@ func runMeter(cmd *cobra.Command, args []string) {
log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit)
// load config
conf := loadConfigFile(cfgFile)
conf, err := loadConfigFile(cfgFile)
if err != nil {
log.FATAL.Fatal(err)
}
// setup mqtt
if conf.Mqtt.Broker != "" {

View file

@ -142,7 +142,12 @@ func run(cmd *cobra.Command, args []string) {
log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit)
// load config and re-configure logging after reading config file
conf := loadConfigFile(cfgFile)
conf, err := loadConfigFile(cfgFile)
if err != nil {
log.ERROR.Println("missing evcc config - switching into demo mode")
conf = demoConfig()
}
util.LogLevel(viper.GetString("log"), viper.GetStringMapString("levels"))
uri := viper.GetString("uri")

View file

@ -131,15 +131,15 @@ func configureLoadPoints(conf config, cp *ConfigProvider) (loadPoints []*core.Lo
return loadPoints, nil
}
func loadConfigFile(cfgFile string) (conf config) {
func loadConfigFile(cfgFile string) (conf config, err error) {
if cfgFile != "" {
log.INFO.Println("using config file", cfgFile)
if err := viper.UnmarshalExact(&conf); err != nil {
log.FATAL.Fatalf("failed parsing config file %s: %v", cfgFile, err)
}
} else {
log.FATAL.Fatal("missing evcc config")
err = errors.New("missing evcc config")
}
return conf
return conf, err
}

View file

@ -24,7 +24,10 @@ func runVehicle(cmd *cobra.Command, args []string) {
log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit)
// load config
conf := loadConfigFile(cfgFile)
conf, err := loadConfigFile(cfgFile)
if err != nil {
log.FATAL.Fatal(err)
}
// setup mqtt
if conf.Mqtt.Broker != "" {