better target time suggestion; exposed projected start (#3098)

This commit is contained in:
Michael Geers 2022-04-06 11:08:55 +02:00 • committed by GitHub
parent a419d2cc9d
commit e627c91106
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 33 additions and 18 deletions

View file

@ -60,7 +60,6 @@ export default {
minSoC: Number,
targetTime: String,
targetTimeActive: Boolean,
targetTimeHourSuggestion: Number,
vehicleProviderLoggedIn: Boolean,
vehicleProviderLoginPath: String,
vehicleProviderLogoutPath: String,

View file

@ -108,7 +108,8 @@
<script>
import formatter from "../mixins/formatter";
const DEFAULT_TARGET_HOUR = 7;
const DEFAULT_TARGET_TIME = "7:00";
const LAST_TARGET_TIME_KEY = "last_target_time";
export default {
name: "TargetCharge",
@ -117,7 +118,6 @@ export default {
id: Number,
targetTime: String,
targetTimeActive: Boolean,
targetTimeHourSuggestion: Number,
targetSoC: Number,
},
data: function () {
@ -158,14 +158,14 @@ export default {
return this.$t("main.targetCharge.inactiveLabel");
},
defaultDate: function () {
const [hours, minutes] = (
window.localStorage[LAST_TARGET_TIME_KEY] || DEFAULT_TARGET_TIME
).split(":");
const target = new Date();
target.setSeconds(0);
target.setMinutes(0);
if (Number.isInteger(this.targetTimeHourSuggestion)) {
target.setUTCHours(this.targetTimeHourSuggestion);
} else {
target.setHours(DEFAULT_TARGET_HOUR);
}
target.setMinutes(minutes);
target.setHours(hours);
// today or tomorrow?
const isInPast = target < new Date();
if (isInPast) {
@ -208,6 +208,13 @@ export default {
return new Date().toISOString().split("T")[1].slice(0, -8);
},
setTargetTime: function () {
try {
const hours = this.selectedTargetTime.getHours();
const minutes = this.selectedTargetTime.getMinutes();
window.localStorage[LAST_TARGET_TIME_KEY] = `${hours}:${minutes}`;
} catch (e) {
console.warn(e);
}
this.$emit("target-time-updated", this.selectedTargetTime);
},
removeTargetTime: function () {

View file

@ -1,4 +1,4 @@
log: info
log: trace
interval: 3s
@ -96,6 +96,7 @@ vehicles:
- name: demo
title: e-Golf
type: custom
capacity: 50
soc:
source: js
vm: shared

View file

@ -132,7 +132,6 @@ func (lp *LoadPoint) SetTargetCharge(finishAt time.Time, soc int) {
// don't remove soc
if !finishAt.IsZero() {
lp.publish("targetTimeHourSuggestion", finishAt.Hour())
lp.setTargetSoC(soc)
lp.requestUpdate()
}

View file

@ -72,7 +72,13 @@ func (lp *Timer) Set(t time.Time) {
}
lp.Time = t
lp.Publish("targetTime", lp.Time)
if lp.Time.IsZero() {
lp.Publish("targetTime", nil)
lp.Publish("targetTimeProjectedStart", nil)
} else {
lp.Publish("targetTime", lp.Time)
}
}
// Reset resets the target charging request
@ -114,8 +120,11 @@ func (lp *Timer) DemandActive() bool {
if lp.active {
lp.log.DEBUG.Printf("projected end: %v", lp.finishAt)
lp.log.DEBUG.Printf("desired finish time: %v", lp.Time)
lp.Publish("targetTimeProjectedStart", nil)
} else {
lp.log.DEBUG.Printf("projected start: %v", lp.Time.Add(-remainingDuration))
projectedStart := lp.Time.Add(-remainingDuration)
lp.log.DEBUG.Printf("projected start: %v", projectedStart)
lp.Publish("targetTimeProjectedStart", projectedStart)
}
// timer charging is already active- only deactivate once charging has stopped

4
dist/index.html vendored
View file

@ -1,5 +1,5 @@
<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="EV Charge Controller"><meta name="author" content="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="#18191a"><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="#18191a"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#18191a"><title>evcc</title><link href="css/chunk-vendors.38c609a9.css" rel="preload" as="style"><link href="css/index.0a6b5a0e.css" rel="preload" as="style"><link href="js/chunk-vendors.b6901fd4.js" rel="preload" as="script"><link href="js/index.9fddadfd.js" rel="preload" as="script"><link href="css/chunk-vendors.38c609a9.css" rel="stylesheet"><link href="css/index.0a6b5a0e.css" rel="stylesheet"></head><body><script>window.evcc = {
<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="EV Charge Controller"><meta name="author" content="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="#18191a"><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="#18191a"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#18191a"><title>evcc</title><link href="css/chunk-vendors.38c609a9.css" rel="preload" as="style"><link href="css/index.0a6b5a0e.css" rel="preload" as="style"><link href="js/chunk-vendors.b6901fd4.js" rel="preload" as="script"><link href="js/index.15932e9f.js" rel="preload" as="script"><link href="css/chunk-vendors.38c609a9.css" rel="stylesheet"><link href="css/index.0a6b5a0e.css" rel="stylesheet"></head><body><script>window.evcc = {
version: "[[.Version]]",
configured: "[[.Configured]]",
commit: "[[.Commit]]",
};</script><div id="app"></div><script src="js/chunk-vendors.b6901fd4.js"></script><script src="js/index.9fddadfd.js"></script></body></html>
};</script><div id="app"></div><script src="js/chunk-vendors.b6901fd4.js"></script><script src="js/index.15932e9f.js"></script></body></html>

File diff suppressed because one or more lines are too long

1
dist/js/index.15932e9f.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long