Improve demo mode and config dump to log (#2266)

This commit is contained in:
andig 2022-01-11 21:27:35 +01:00 • committed by GitHub
parent 342f4e0728
commit 007d1ffa10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 46 deletions

View file

@ -1,24 +1,21 @@
log: info
interval: 3s
javascript:
- vm: shared
script: |
state = {
residualpower: 200,
pvpower: -3000,
batterypower: 200,
gridpower: -2000,
residualpower: 300,
batterypower: 0,
pvpower: 6200,
gridpower: 0,
chargepower: 0,
maxcurrent: 0,
battery: 63, // car
};
function get() {
console.log("state:", JSON.stringify(state));
}
function set() {
console.log(param+":", val);
console.log("state:", JSON.stringify(state));
}
function log() { console.log("state:", JSON.stringify(state)); }
function set() { console.log("set "+param+"=", val); }
meters:
- name: grid
@ -26,14 +23,31 @@ meters:
power:
type: js
vm: shared
script: state.gridpower = state.pvpower + state.chargepower + state.residualpower + state.batterypower;
script: |
state.pvpower += 200*(Math.random()-0.5);
state.chargepower = 0;
if (state.enabled) {
state.chargepower = state.maxcurrent * 3 * 230;
state.batterypower = 0;
}
state.gridpower = -state.pvpower + state.chargepower + state.residualpower + state.batterypower;
// if (state.gridpower < 0) {
// state.batterypower = -state.gridpower;
// if (state.batterypower > 1000) {
// state.batterypower = 1000;
// }
// state.gridpower += state.batterypower;
// } else {
// state.batterypower = 0;
// }
state.gridpower;
- name: pv
type: custom
power:
type: js
vm: shared
script: state.pvpower += 100*Math.random();
script: state.pvpower
- name: battery
type: custom
@ -62,10 +76,7 @@ chargers:
enable:
type: js
vm: shared
script: |
set();
state.enabled = val;
if (state.enabled) state.chargepower = state.maxcurrent * 230; else state.chargepower = 0;
script: set(); state.enabled = val;
enabled:
type: js
vm: shared
@ -79,10 +90,7 @@ chargers:
maxcurrent:
type: js
vm: shared
script: |
set();
state.maxcurrent = val;
if (state.enabled) state.chargepower = state.maxcurrent * 230;
script: set(); state.maxcurrent = val;
vehicles:
- name: demo

View file

@ -69,7 +69,7 @@ func runDump(cmd *cobra.Command, args []string) {
} else {
for id, name := range site.Meters.BatteryMetersRef {
if name != "" {
d.DumpWithHeader(fmt.Sprintf("Battery %d: %s", id, name), cp.Meter(name))
d.DumpWithHeader(fmt.Sprintf("battery %d: %s", id, name), cp.Meter(name))
}
}
}

View file

@ -226,8 +226,8 @@ func run(cmd *cobra.Command, args []string) {
pushChan := configureMessengers(conf.Messaging, cache)
// set channels
site.Prepare(valueChan, pushChan)
site.DumpConfig()
site.Prepare(valueChan, pushChan)
stopC := make(chan struct{})
exitC := make(chan struct{})

View file

@ -149,7 +149,7 @@ func meterCapabilities(name string, meter interface{}) string {
_, currents := meter.(api.MeterCurrent)
name += ":"
return fmt.Sprintf(" %-8s power %s energy %s currents %s",
return fmt.Sprintf(" %-10s power %s energy %s currents %s",
name,
presence[power],
presence[energy],
@ -159,28 +159,23 @@ func meterCapabilities(name string, meter interface{}) string {
// DumpConfig site configuration
func (site *Site) DumpConfig() {
site.publish("siteTitle", site.Title)
site.log.INFO.Println("site config:")
site.log.INFO.Printf(" meters: grid %s pv %s battery %s",
site.log.INFO.Printf(" meters: grid %s pv %s battery %s",
presence[site.gridMeter != nil],
presence[len(site.pvMeters) > 0],
presence[len(site.batteryMeters) > 0],
)
site.publish("gridConfigured", site.gridMeter != nil)
if site.gridMeter != nil {
site.log.INFO.Println(meterCapabilities("grid", site.gridMeter))
}
site.publish("pvConfigured", len(site.pvMeters) > 0)
if len(site.pvMeters) > 0 {
for i, pv := range site.pvMeters {
site.log.INFO.Println(meterCapabilities(fmt.Sprintf("pv %d", i), pv))
}
}
site.publish("batteryConfigured", len(site.batteryMeters) > 0)
if len(site.batteryMeters) > 0 {
for i, battery := range site.batteryMeters {
_, ok := battery.(api.Battery)
@ -188,45 +183,40 @@ func (site *Site) DumpConfig() {
meterCapabilities(fmt.Sprintf("battery %d", i), battery),
fmt.Sprintf("soc %s", presence[ok]),
)
if ok {
site.publish("prioritySoC", site.PrioritySoC)
}
}
}
for i, lp := range site.loadpoints {
lp.log.INFO.Printf("loadpoint %d:", i+1)
lp.log.INFO.Printf(" mode: %s", lp.GetMode())
lp.log.INFO.Printf(" mode: %s", lp.GetMode())
_, power := lp.charger.(api.Meter)
_, energy := lp.charger.(api.MeterEnergy)
_, currents := lp.charger.(api.MeterCurrent)
_, timer := lp.charger.(api.ChargeTimer)
_, phases := lp.charger.(api.ChargePhases)
lp.log.INFO.Printf(" charger: power %s energy %s currents %s timer %s",
lp.log.INFO.Printf(" charger: power %s energy %s currents %s phases %s",
presence[power],
presence[energy],
presence[currents],
presence[timer],
presence[phases],
)
lp.log.INFO.Printf(" meters: charge %s", presence[lp.HasChargeMeter()])
lp.log.INFO.Printf(" meters: charge %s", presence[lp.HasChargeMeter()])
lp.publish("chargeConfigured", lp.HasChargeMeter())
if lp.HasChargeMeter() {
lp.log.INFO.Printf(meterCapabilities("charge", lp.chargeMeter))
}
lp.log.INFO.Printf(" vehicles: %s", presence[len(lp.vehicles) > 0])
lp.log.INFO.Printf(" vehicles: %s", presence[len(lp.vehicles) > 0])
for i, v := range lp.vehicles {
_, rng := v.(api.VehicleRange)
_, finish := v.(api.VehicleFinishTimer)
_, status := v.(api.ChargeState)
_, climate := v.(api.VehicleClimater)
lp.log.INFO.Printf(" car %d: range %s finish %s status %s climate %s",
lp.log.INFO.Printf(" vehicle %d: range %s finish %s status %s climate %s",
i, presence[rng], presence[finish], presence[status], presence[climate],
)
}
@ -278,6 +268,8 @@ func (site *Site) updateMeters() error {
return err
}
err := retryMeter("grid", site.gridMeter, &site.gridPower)
if len(site.pvMeters) > 0 {
site.pvPower = 0
@ -300,8 +292,6 @@ func (site *Site) updateMeters() error {
site.publish("pvPower", site.pvPower)
}
err := retryMeter("grid", site.gridMeter, &site.gridPower)
if len(site.batteryMeters) > 0 {
site.batteryPower = 0
@ -431,6 +421,13 @@ func (site *Site) update(lp Updater) {
// prepare publishes initial values
func (site *Site) prepare() {
site.publish("siteTitle", site.Title)
site.publish("gridConfigured", site.gridMeter != nil)
site.publish("pvConfigured", len(site.pvMeters) > 0)
site.publish("batteryConfigured", len(site.batteryMeters) > 0)
site.publish("prioritySoC", site.PrioritySoC)
site.publish("currency", site.tariffs.Currency.String())
site.publish("savingsSince", site.savings.Since().Unix())
}

View file

@ -104,8 +104,7 @@ func (m *MQTT) Run(site site.API, in <-chan util.Param) {
// site setters
m.Handler.ListenSetter(fmt.Sprintf("%s/site/prioritySoC/set", m.root), func(payload string) {
soc, err := strconv.Atoi(payload)
if err == nil {
if soc, err := strconv.Atoi(payload); err == nil {
_ = site.SetPrioritySoC(float64(soc))
}
})