Improve demo mode and config dump to log (#2266)
This commit is contained in:
parent
342f4e0728
commit
007d1ffa10
5 changed files with 50 additions and 46 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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{})
|
||||
|
|
|
|||
39
core/site.go
39
core/site.go
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue