Share Your Device! - Advanced Virtual Devices from Device Capabilities

I have recently posted a number of questions on how to create a AVD for my EV Charger.
Now it’s my time to share the result.

EV Charger Status Device Tile

The device should:

  • show an enabled/disabled status to understand whether or not the charger is active
  • show the total accumulated energy (kWh) of the current / previous charging session - I assume that it is the total amount of power of the previous charging session when the device is inactive.
  • show the current charging power (the flow will set the charging power to 0 if <30W)
  • show the duration of the ongoing/previous charging session in HHhMMm notation

image

Apps used:

  • I have a smart sensor that watched for power consumption on the EV charger. I have a Shelly EM1 but any power sensor should work
  • I use Homey Advanced Flows to manage the device.
  • Homeyscript is needed to make the time calculation work
  • Logic is used to manage variables: intEVChargerEnergyStart/End/Delta and intEVChargerPowerRounded (to avoid fraction numbers in the tile)

Picture of the flow used:

This is just for reference so you understand what it does:

  • set the start/end power measurement variables at start and end of charging session
  • calculate the delta variables in Logic at the appropriate times (at start and end of charging session, and every 10 seconds while active)
  • set the charging state active/inactive
  • calculate the duration using milliseconds measurements (and translate to HHMM using homeyscript)

The scripts:

Milliseconds timestamp:

const milliseconds = await Date.now();
return milliseconds;

Duration at end of charging session:

const d = new Date(1*args[0]);
let hours = d.getHours();
let minutes = d.getMinutes();
if (hours < 10) {hours = “0”+hours;}
if (minutes < 10) {minutes = “0”+minutes;}
let duration = hours+‘h’+minutes+‘m’;
return duration;

Duration every 10 seconds update:

const start = new Date(1*args[0]);
const now = new Date();
d = new Date(now-start);
let hours = d.getHours();
let minutes = d.getMinutes();
if (hours < 10) {hours = “0”+hours;}
if (minutes < 10) {minutes = “0”+minutes;}
let duration = hours+‘h’+minutes+‘m’;
return duration;

Hope these are helpful - have fun!

TEF:

H4sIAAAAAAACA+1aaXPiyJb9Kx7iRXT3UGpy0eqe94F9M2YHQ7XDkVKmQEZIoIWtXv33SUmAMV6eprtipjti6gMYZepm3pPnnnuvVN8ylG0sg9UN18ncZmqiX88n/4r5AxqAsVJs5XcVU31YF+TeDqwHjUJp798d9t0VVgqrMvTBs97tNgYdR9boorh2KJE2g+UOGsqCyqZyyD1spnSVe5BzS1uRqG0MA7BStOeacsCb/kwOHajdNbNOVtEPUnHRUp2+cjCdILtwNkhWdnKxaVv9wLb3c7FpSc+Tqdhd7MJ6C9Tt0vzO2U7rpUq9vV6gVnBYyougTuciaOycrdrtrdhSzt/NOxOLNYy6EfiL9nQ0qzl+m5Sa0wmk4uhuTIzGWKwtS6x9X18f7srDcFuptSt+o7AONy00rU/LYaG69yZOH/baTaRVBhOvacHV0ECFw6TW2cp2aeRWLa3yrIuDen7YzvVq2PK6k1F7tFk1J4fFMldWSH8/bagzUClOoN7cU1KvsewwqK6s2lyTQlVe9PF0Zt+RVmMeOGtAs3S8n4wbXVbtlzv0WfeUYm88H5TcWSVQ+lkHlEcPQWk01pa+WPM6TmPp7kbZfbgdbgaTIvFR525p5afB2OrcHxpyroyes6jgNWC5xAz04NXRosdCde5VUXnVkNXnYT3bzgag2lFLYQ1MpbtV3c1v8/nMl4wR+oG7jHjiZ26/HX8+yfCaNQocDoY5vVsoaqPsKoc6axVnA3HTKzfKs0mh7PXqw6bLDsZkUTaq7UnYXuQ6XturAKfrlFZ5Y6GEqtLadOhyGrafRQ0fLG9QWdnSWOr3+g9lsmjWABxL+qFvDvqduzpor6Rs7uEOPA8qe6QqDZNVdbJoheboYTwtb8cDvcWKSo3qjj3yVlPb7wNWW4f7tb7cOP6w787mz3UzB3pYx9ksacF8Ya/mOgv5uf5c7nUsW12W23dAaegmlkBv1zAGU02clwvKXN/Km/uHxm6jbkaWPPYLs269VB8u8stKQ4X+1pLK/LRgY9hrFkV/Jaszmdh245lTdIfdDl5thiXbKXQKRbk66DclXDadgZJFe9SQhtli2OvlK1br/jmfq1ZGft00OirAcOhLSzDoVjv1ZdF9rmkDD+/6PaKLaxnd9SrrdlMincYUh4NBLnvAi96sm6+C7G7M6P3WL7bWUm1o1+2WDOhztpo/4Hz1QQajjd9r5+yAjdXFoOpLvlpqTILDVAwXg8mD78B+eROuG61VsEeHueVvqsbO2RW2uFQ7rPDmeeaWmuqwXgpKyzk5tHZA9Cx7PQylvJOvhPfT+qRmNEuFpl0U53WzawzK8+UaHVplZTOjymxTVsvrYquIej26GM7cPeS76tsNZ2iEhm2bRU8qeGh1r1Gya4fb3sjNT92277ZXbAeXXrbDyFjKl+rzWvmelLYPzexKMutVbd6zhpP7++p80mpbO0Z9z8/mRjvgjpcNe57DAzM0JFQboAms+ouSJdcH/f29xzryZNltNav98RrJ1aLrFBr5LRVZb1rq1G2Y9w+zVXO47Va2DD2AYr47tQbDvVhv26I5yXdLzzOn2JXv24hWGkDsOcVgVG9uSbtKJvfqKAC73my7BaVVpwcq7bXfqE+s3bo1whVc6zXqXZPNtG59nc1Z+2lBJw6tiwNWaY53z8V12y/WTLeHZr1cY1DLPbfhYdyZLtTmQ/6QrYG7XBf7g0W3MOOR+/1LxvWsmeUQu055sIpQlBCTTMHQmSaIQJYFDVEsqIArNtUg1hTAw91nQWA5szjWmcO82f5pQ+yQPUUCEBAnyNw6oW1/yTjhUmde2xywXVCxmE35LfDl8n38fRpALwMF17UZcU4j4GIkDALXecdWkSyZRy7uMGz+nXGDOfMyp2nwns/iV4tz4nGvZzcdd3s53Gcr4pGAFcmK6JZtBRbjRkxi++xlztzd5iPTS0b80GNPq9c2ih7jFiq2uy0SL9pL4IUvdw8dK4huHr/cwOXWWhL70k/YspxXP8kuc6uIAFytMiCz1/bRtYPl+HjOi6EUHqILDwPmXfmHPvUPnfxbjOcvt7x4eD4w9NpDFHsog6tVLvzT44O/PsDMeeDNto4+nYbnzFgwen35UziOc0qWT3T7nXtPMLmOa5pPc4uy6+1c7D/gIXDafSnka1q8qDpe/mjv8eCnW0xmnDbiM8d3vZPVY9n2kozPm6s7vjWbB/7ACmw24Nu7ZEzeCKwN+2ByJVr2cnbdIVfzE2dOd13R/7NB9N4gV6ikCD1CVx7dxGvHjKSxAGEiAqKpAhcoIoiaIQtElDWBAaxS3QQihHo0z3l1983P/TnjZeMvUfUSQedyegQRdNHc16F9vPmkFXzGcceZ79/5/lKJ5psNHNdN9Ckys4nmqEyVKSGqwE3qgoiQKhDGgKArzJSoBoAmGSdbll8eHY2dzyzam56IZyTuKoFEohgLGmAKt6kqAqGECppOIGUSwYaOz+ac4GwvdrXnhg7ltH/t8ZcMMiVZxAoVVKibgkipJBCV/2UQyhBUVdVk7xpNpKjE7IC8sWnw+0yk6wJCIsdQNpCgE8SX0DRsSqapaqZxYbNl2bblM05w6h+t9wPiBW/tmiJgItEF1QBIEE2qCZoEJEGGCDCIZFFT6ed2y85bBHSgA2yYRECYcgQQkwVdMpgAFKoqKuFCrbHPrV4qwCWdvmRI5vbrt4zFL8ocTZEfIGcAZ5PIJE1QdUYEBTKsSYqKMNIjjeVT/+PMqxuOQxD6N6U4aG4Glh3Rgp0iLQZRBgjImgQjfnGSQU5YYkanaAJkisxgKo4JyxVZ5Yq856k5UmaXLzR3l2x/uyQO4U7c2u7MMrj5aLcb4lmRTD4Zc+LMzrQJeHmRsJ0H9NeMZOgSw5AKJoeKnwdjgmYgJACq6oaqER3RSKcwMoGKVCRQifNMlAgTCNENwSSKrFAqAw3SzGMM1rfzytHfVlTFpAoiDlyiKG/DKI7qVDtNQJLQJUphsAqDRFS/Zrg0aFjhWwEgwltFHGoAZAFjhiRT1wwsSXwrpg6pYqi6oMuEHzUwMJ9GgGAgXeEb0ZBkiJG/ifGjCH/NACRpoqFhrjyKKIgGgFx5dMj1T0UKVnQsq1J826cnx9YhsZ9OqpEcW8RV60jQGOSnf1DPXQXugjn/eHrf3L9S4R5hSxUJKRqUBUmOJhKJCDpjIg9SiSEZMe2oIC8EjEufFzeSlHCbSvoTJ18p+uccTXVmj9yNVBMTN7STH9F3tCZlNtmfVqQKNg0RMoFhEAUkJgInGOAZRGPEFBVOd/VM9+TOSF0S0bjNIG5nGdqBtbKt6AL8noCcwmiyOwjF4/ZeGHwmGVQx4402R1Xh6UNUJJ7ZMDH5h4R1iRgYGvCFmyfiYxnLHAQgIJ4bOCFMJBBoqgLPG1jDGDFTVv6K1FQwxAYUDQHwJMcjkfKQMlQsUF2mqmgqMjyHPYLgiJqYXh156/SUHNzTkgTzo09RDRU7FNOBmYZKKFdlBhROa8i5rUm6xANcZoSKRGOiwudKkO9Vo4aAdJmLBsa6oGEpSu4A8tQh6yaBn4hkmtLgRSQ/Kg6iwiVq/ficb9+86OLPX7/+j4P0X6/C8/Hxl+/f49NIhcTxNOQTh9F7UpGys43PyvICTrvkxosDuz6rGFczajjPoB6r3Bfc3jSalPmGZ61iE7eZpAG+gRGM53A+4XfF4BTn9fgYo5aKGFeoSer/NWroHdTO3eu7sKEUsKUpVo+wpUrCJ8E8hj768WRL2qgUsB37rbewvcEreWiS0Owkpkl3xS+kKiKu3Mbgb+t23DhHfqfKUEe/ZXCpLa8SXaqE8fjHs+qnaWUWfJQUDXcZPzZwvei0vnyQJP+wRMcBk8qHq1x5pTMpc+UfT5P/e/kPxKRK07i87hpeA0JWq1t+dr/y2oB/xtcSSh/B8UKn6FLWY0HoOf79x+iYEpd7MeqomcbpzZsWrmamyXkJEA9SCfOjOqNjcJMJi/zgZnnRrt7884ZsiRXclEjAfnXc7c+//Pa748Wrv5r4WyKhaRY9VsTHxPO2ZwKAU4kgrtY8hLgRmfEyTQOCKTOZahrmQWu8E1EMKiIFKuEdGgKCKEJORIMXvaIOVVmDEEm68VesOFO5e9QhLCeg/bAY4vESxTATII9WHkMm5yvmSihiHRKTAqYR7eMYSvXU5jKGPnxuc1FGfv2abPH2Nk0w3d4m3h1zeCoSXIEJwY+DU9GIibmUqKrBF0VAjJIBx4eamo4iPKn+CZxpHlb9Gzijx1U/CsxU3hzBVMRLMF/Fs8pkjOXo+YmscLdUHFVYpsatMixS2YQyAj8q1X1QBaYhKnf6S6rITnVMEX6pHD/lR/m9bPCnW0ldhoYJ+IEjSGXuuGIKOjaxABSDKKJpypIkfkzIVM85/w0hz086X3WKHxxTCmQfH4U/c8bHxjIVLsejkdQ/kajHVjDPe7Njvu4HXlKovj0piBWERa6/ElR4vpB1wBsVlQOATahpBg830Xw/X1OepB22jVP0z/A/Oer+V/AY5WmbBTdzN/SiNE5/nbGgFv34+TS0tJwwYOfBVvIzHs7lIts8Cf7Kwf05tvH28vH+aOB3xzJvknk3Nzf/dQPBLzffTj//efN7Bvyeyca/f/uezD0tfpz7spdk7vF3NDvaKj2yiI/HVrI/zX86zcn+tPwp3sLr3V3gcKxXTkb4lUg7vFm4ZNG76g9EIw37j0qZ6vASOvHW6T06/YgWKnrrl6KBil8OvoTtxauI1+1T9NI+aZ5iw5fJJE343N76MdtPySRNpXGVTH5YXkaGLinIUAVDjJ4CQCjyYgwwQeEfqkJ1Jonq3ycv69TgHSeCgq5yook64a0LIpogMQ1TTCFvauVr8bp6UPGj1Us0TEOWscl7saibooQDzDtHAZk8dnhPSMBFnnmlXn5U/32oYMkc3ndczogGXokeHxdiO4kU/b/s/RnZS1krxbIHiYq4KAkyigpEkSukRnRVAJqKRGhoIpOM6wLnnZdkqfj8puH7C7ZyfESGCtAEyr8FUQNE4H0HFkwTYKybCElUPmsc+vTVquHFe4z92DBv/+ScK7zr11VpDuEUek5UoXMz+xWL/79IhEe89VQBfJXBkPh3TmEpSHeVwlJlkSu6/+0QAtHr7++P3/8bIBIhTf0tAAA=
4 Likes