diff --git a/assets/ico/site.webmanifest b/assets/ico/site.webmanifest index 55787ac63..404a728e8 100644 --- a/assets/ico/site.webmanifest +++ b/assets/ico/site.webmanifest @@ -1,14 +1,15 @@ { + "start_url": "../#", "name": "EV Charge Controller", "short_name": "EV Charge Controller", "icons": [ { - "src": "ico/android-chrome-192x192.png", + "src": "android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { - "src": "ico/android-chrome-512x512.png", + "src": "android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } diff --git a/assets/index.html b/assets/index.html index d466c9add..7e3a7bebf 100644 --- a/assets/index.html +++ b/assets/index.html @@ -40,7 +40,7 @@
@@ -170,10 +170,10 @@

{{fmt(state.gridPower)}} {{fmtUnit(state.gridPower)}}W

- Bezug + Bezug

- Einspeisung + Einspeisung

@@ -190,7 +190,7 @@

{{fmt(state.pvPower)}} {{fmtUnit(state.pvPower)}}W

-

Erzeugung

+

Erzeugung

diff --git a/server/assets.go b/server/assets.go index ebe77c6b2..cda6f9dff 100644 --- a/server/assets.go +++ b/server/assets.go @@ -3755,13 +3755,13 @@ Kq6S803nwUo2EKLdPwodVV3hH1vUzfKv3f5FuNzf8Of8ePMi/DsAAP//p/PiLcUMAAA= "/ico/site.webmanifest": { name: "site.webmanifest", local: "../assets/ico/site.webmanifest", - size: 472, + size: 486, modtime: 1566640112, compressed: ` -H4sIAAAAAAAC/5SQwUoDMRCG7/sUQ7y2ll3oob0WX8GLSBmTcTeYzCyTCK2l7y5JYwVBsXOa8H/5+JlT -BwBgGCOZLZiHR9hNqCPBTjirhEBqFhcmTaJ5/x/SW+FktvBUn2VO1+2iUlsc3soK2al4t7STSqRlvxkO -/Wa4n3lstu9P/oOK1TTmZ56Pc23mI460KoJrfl7c3mTdD4d1/3eTxtzSpG7P7VB5okh7K0G08Hevdb7O -+IL2bVR5Z/cr4nyaAx5LkjKywyBMpjt3nwEAAP//6sLjlNgBAAA= +H4sIAAAAAAAC/5SQwWrDMAyGz8tTGPXapiTQQ3ste4VdxgiarSVmjhRkF9qVvvtw5nYw2Fh1UvJ//vjR +uXqAmFBTd9AAOwN1vV7AsjLGGGAcKf97fDL7AbUnsxdOKiGQXpk4iKbuP6S3whF25nn+zHO+bV8qtdmB +7FS8W9lBZaRVs22PzbatJ+6L6fuB/6BshML8zNNpmlv5EXtaZ8Etvyzva7Fp2uOm+btFYe5pMW8v5UBp +oJE6K0E084u3ea7ne0X73qsc2P2KOB+ngKecxITsMAgTVJfqMwAA//+21HeD5gEAAA== `, }, @@ -3782,7 +3782,7 @@ IxaH+C1l8NJOMnDtp/P05Kv/+eoWzkyKBS0GbHbiVMmVBuWfzdacjYSYEjjgbHfKhftr8GSoYZDAMsui 0F+74U8wRi/PzxHGvR28zpnWYSql0UaRasapmGVaB42RLHB1CTB0RM+2kMKQFWjJ4SbGdv5v21naVfiQ RlplcfCTDn/6ew3qEh/NjmeHM80od0J/0kEShZ50iquSVQXqTqS9mmktcgYTTO1av1lTqa9ZJ7HPbuB9 V8Mfz6/hXdZwp6Uua8BK1mZSsyj0STlKZX6Z7O1FOV0imrsU4h0lyBJljGgdB4IsU6KQ/8GwrojIMSva -AUaL0qC08BeOG6GIbHPjVBGRt1FSGlPp0zAsqCnrdJZJHrqUGlrUBUlEW2YDa4MrRTlRl2hBFFoQzIAs +AUaL0qC08BeOG6GIbHPjVBGRt1FSGlPp0zAsqCnrdJZJHrqUGlrUBUlEW2YDa4MrRTlRl2hBNFoQzIAs EFd4bhWiDVBJM21aGyPFztxGFoXN603q8TQByokhzbM4yCRjpNLQDtuaYEPDi3hNlt8wc0bURV0FbiaE iKLExqGtGt1cW4SexBsM8jhYEGYncKOMpBbmb9301pS0cJHd2M/6syLXKOLzl3VnRUSjeOi1au6sOxvW VrHWXb2i1t8Tq+4WMBDS8Aqy7B4jFHl4YRfTPSGmBridzT+oUnwYICPjIAySH0gOIgoHjANxFvlRhBQR @@ -3805,19 +3805,19 @@ ez2rn1XtuAWU5kOv7lpip/X2VfW4a2Qv8QFaSGHwCmwrj4VUnLAg+ZYYA4pCFJbHA+l9PZyczDefW1PN twhcU4baAtYPbTEh9P595wp//LvZtP38cIPAawN5kPzXTuvuV1rOt+4r1xVc1doQkXcFfqTUeL91A2Z+ 3xD5kTCWyvWvhZAFN194lGQOIm/kCtSXNwLFMf1Z0GnGH+8OIwZUm1oU6PajsO3cMpjR710/EhKnKsXv HqCvwVw9GTqHgLQ+2IHjFnjRXcA5FNJBc4zHkfMdD0rQwU7EfAtX9W2AJUrJFc7lSnh0bkVCNZp4uIP1 -f6+o0BVQfXts+Knq6uaJPkZEVMv/xIOLB9uZ/dq5ulo+IE/3THfM0a/UFdTFrSDUFoi6Fi1e/AuAe+fl -IRyHRlRydW3LiVosoRYkk8BQcmU35fPr0CAZfo560/lLNXjR4//+l5TOIqd38n0vtDVXebKNg+YEa1DX -pBCQOectQaW16LebW8ddn/Oc6PLFaGPxoDB/Whv+H7hN9Ecy4bh/yV8JUMVlHxnXtCs93Y/lKBp+C4a0 -DVROalAf05TfNa9ptkzVDn652fymLPQn0O7E5gqoeXQjvdKGcmLgHkbqrfWgbbx/v3aPY+Tr3h5MH3ju -vLa7x4uE5DswhDKNclBdzsT7qNnpYHeG/Bd3nqwuhrP4E+NmsSfdOW2K53adx9OTtRNEYXkyLhMjKI39 -3WDyaBpGZzIHxk73pjx6i6hJDI2TvpbZ2+6Fy9aIe5s2cXR0UxW41wp3lf2eVOSKml9+No+s8EtSkYya -yy2d28HNBl24pPxw1bfS0J2h1G/FHwNJb0qi+8L3GIat7Ay6t6m/32yqJ4aR17TmOisJsxv8p1Ba0Kw0 -iPKKAQdhKOye8n+QSmdUzFzJ1UZJ/pj6cCpe1kqBMOiTOLa5EhZU+H5+l2KzQd88sW/PyPqpDEHWtxmi -o/hgQzwsYTRF7LESxru2Sj5q/DT7+uRf//zHE2PpNZirq8fXcPDW5+l1dMflj6+jb0I/kpY3vV5aSGlA -dfFhQ6MNEp7jE3vDcxsvzX0qVQ4KG1nd6zuHftN/wz5iyyLXnYJ8nsnq8gWaH8wPdr9Nukljr2ffiduH -i1pktk9F/hMx97HeF18ifwSmwNRKoL82wsPw9q/8GtL3nRbu2OcUBaPP9YL9jqb9JmdIdt6MbVNSXgyJ -/sCLnefui5YtEv8RzBaVfTCksYu3FA3BZn9LYf/hoBv624s9hDZTm5ruA+Gq2v00OAr9t7pR6P/P4t8B -AAD//805aVt4MQAA +f6+o0BVQfXts+Knq6uaJPkZEVMv/xIOLB9uZ/dq5ulo+IE/3THfM0a/UFdTFrSB0QNS1aPHiXwDcOy8P +4Tg0opKra1tO1GIJtSCZBIaSK7spn1+HBsnwc9Sbzl+qwYse//e/pHQWOb2T73uhrbnKk20cNCdYg7om +hYDMOW8JKq1Fv93cOu76nOdEly9GG4sHhfnT2vD/wG2iP5IJx/1L/kqAKi77yLimXenpfixH0fBbMKRt +oHJSg/qYpvyueU2zZap28MvN5jdloT+Bdic2V0DNoxvplTaUEwP3MFJvrQdt4/37tXscI1/39mD6wHPn +td09XiQk34EhlGmUg+pyJt5HzU4HuzPkv7jzZHUxnMWfGDeLPenOaVM8t+s8np6snSAKy5NxmRhBaezv +BpNH0zA6kzkwdro35dFbRE1iaJz0tczedi9ctkbc27SJo6ObqsC9Vrir7PekIlfU/PKzeWSFX5KKZNRc +buncDm426MIl5YervpWG7gylfiv+GEh6UxLdF77HMGxlZ9C9Tf39ZlM9MYy8pjXXWUmY3eA/hdKCZqVB +lFcMOAhDYfeU/4NUOqNi5kquNkryx9SHU/GyVgqEQZ/Esc2VsKDC9/O7FJsN+uaJfXtG1k9lCLK+zRAd +xQcb4mEJoylij5Uw3rVV8lHjp9nXJ//65z+eGEuvwVxdPb6Gg7c+T6+jOy5/fB19E/qRtLzp9dJCSgOq +iw8bGm2Q8Byf2Bue23hp7lOpclDYyOpe3zn0m/4b9hFbFrnuFOTzTFaXL9D8YH6w+23STRp7PftO3D5c +1CKzfSryn4i5j/W++BL5IzAFplYC/bURHoa3f+XXkL7vtHDHPqcoGH2uF+x3NO03OUOy82Zsm5LyYkj0 +B17sPHdftGyR+I9gtqjsgyGNXbylaAg2+1sK+w8H3dDfXuwhtJna1HQfCFfV7qfBUei/1Y1C/38W/w4A +AP//MWVC4HgxAAA= `, }, diff --git a/server/socket.go b/server/socket.go index a828c63e7..508684c75 100644 --- a/server/socket.go +++ b/server/socket.go @@ -85,12 +85,13 @@ func NewSocketHub() *SocketHub { func (h *SocketHub) encode(v core.Param) ([]byte, error) { var s string switch val := v.Val.(type) { - case string: + case time.Duration: + // must be before stringer to convert to seconds instead of string + s = fmt.Sprintf("{\"%s\": %d}", v.Key, int64(val.Seconds())) + case fmt.Stringer, string: s = fmt.Sprintf("{\"%s\": \"%s\"}", v.Key, val) case float64: s = fmt.Sprintf("{\"%s\": %.3f}", v.Key, val) - case time.Duration: - s = fmt.Sprintf("{\"%s\": %d}", v.Key, int64(val.Seconds())) default: s = fmt.Sprintf("{\"%s\": %v}", v.Key, val) }