<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Not too bad, so long as you live in a sensible area without DST :-)</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">OVMS > config list vehicle</span></font></div></div><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">vehicle (readable writeable)</span></font></div></div><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> id: TESTCAR</span></font></div></div><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> name:</span></font></div></div><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> timezone: HKT-8</span></font></div></div><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> units.distance: K</span></font></div></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""><br class=""></span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">OVMS > time set 1519631172</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">Time set (at stratum 15)</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""><br class=""></span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">OVMS > time</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">UTC Time: Mon Feb 26 07:46:13 2018</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">Local Time: Mon Feb 26 15:46:13 2018</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">Provider: time</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""><br class=""></span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">PROVIDER STRATUM UPDATE TIME</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">*time 15 1 Mon Feb 26 07:46:13 2018</span></font></div></blockquote><div class=""><br class=""></div><div class="">It is also mapped as parameter #23 for OVMS server v2.</div><div class=""><br class=""></div><div class="">Committed to github. I’ll look at SNTP next.</div><div class=""><br class=""></div><div class="">Regards, Mark.</div><div><br class=""><blockquote type="cite" class=""><div class="">On 26 Feb 2018, at 1:40 PM, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net" class="">mark@webb-johnson.net</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div>I’ve extended ovms_time to also include suseconds_t timu, if available.<div class=""><br class=""></div><div class="">I think NTP can be done within ovms_time, as an ‘ntp’ source in a similar way to the ‘time’ source for manual configuration. The issue I am hitting is finding out when the time has actually been set. It seems that LWIP SNTP doesn’t provide any facility to expose that. There is a macro SNTP_SET_SYSTEM_TIME_US that is defined in the Espressif LWIP options file as:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class="">#define SNTP_SET_SYSTEM_TIME_US(sec, us) \</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> do { \</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> struct timeval tv = { .tv_sec = sec, .tv_usec = us }; \</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> settimeofday(&tv, NULL); \</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 18px;" class=""> } while (0);</span></font></div></div></blockquote><div class=""><div class=""><br class=""></div><div class="">but there is no easy way of overriding that from a client app. It seems I’m not the only one who found this:</div><div class=""><br class=""></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><a href="https://www.esp32.com/viewtopic.php?f=2&t=4695" class="">https://www.esp32.com/viewtopic.php?f=2&t=4695</a></div></div><div class=""><br class=""></div><div class=""><span class="responsive-hide" style="margin: 0px; padding: 0px; border: 0px; font-family: "Open Sans", sans-serif; font-size: 13px; font-stretch: inherit; line-height: inherit; vertical-align: baseline; color: rgb(68, 68, 68);">by <span style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: 600; font-stretch: inherit; line-height: inherit; vertical-align: baseline;" class=""><a href="https://www.esp32.com/memberlist.php?mode=viewprofile&u=4952&sid=4f2bdf4eea4ed434cf38cf94a2df7709" class="username" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; vertical-align: baseline; direction: ltr; unicode-bidi: embed; text-decoration: none; color: rgb(223, 121, 128);">vonnieda</a></span> » </span><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class="">Tue Feb 13, 2018 11:48 pm</span></div><div class=""><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class="">It's working well, but I need to know when it has received a time update and set the time.</span></div><div class=""><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class=""><br class=""></span></div><div class=""><span class="responsive-hide" style="margin: 0px; padding: 0px; border: 0px; font-family: "Open Sans", sans-serif; font-size: 13px; font-stretch: inherit; line-height: inherit; vertical-align: baseline; color: rgb(68, 68, 68);">by <span style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: 600; font-stretch: inherit; line-height: inherit; vertical-align: baseline;" class=""><a href="https://www.esp32.com/memberlist.php?mode=viewprofile&u=2849&sid=4f2bdf4eea4ed434cf38cf94a2df7709" class="username" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; vertical-align: baseline; direction: ltr; unicode-bidi: embed; text-decoration: none; color: rgb(223, 121, 128);">loboris</a></span> » </span><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class="">Wed Feb 14, 2018 8:34 am</span></div><div class=""><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class="">I've needed the same thing and ended up adding the global variable </span><span style="margin: 0px; padding: 0px; border: 0px; font-family: "Open Sans", sans-serif; font-size: 13px; font-style: italic; font-stretch: inherit; line-height: inherit; vertical-align: baseline; color: rgb(68, 68, 68);" class="">sntp_is_synced</span><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class=""> which is set to true before calling SNTP_SET_SYSTEM_TIME_US in "sntp.c".</span><br style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px;" class=""><span style="color: rgb(68, 68, 68); font-family: "Open Sans", sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);" class="">Not a very elegant solution because I've modified the file in the esp-idf, but it works fine.</span></div></blockquote><div class=""><div class=""><br class=""></div><div class="">Urgh. But, the Laboris solution seems fairly neat and would meet our requirements.</div><div class=""><br class=""></div><div class="">Time zones seem messy (without all those compiled zone files), but workable. I’ll add it.</div><div class=""><br class=""></div><div class="">Regards, Mark.</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class="">On 25 Feb 2018, at 5:44 AM, Stephen Casner <<a href="mailto:casner@acm.org" class="">casner@acm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Mark,<br class=""><br class="">Thanks for this. I've made a small change to make 'status' the<br class="">default argument for the command if you don't give one. (I made a<br class="">change to the command system this some months ago to enable this but<br class="">it hasn't been used much yet.)<br class=""><br class="">I have a few comments on the time system:<br class=""><br class="">- A full NTP daemon does much more than select among time sources by<br class=""> stratum. Given multiple sources, it also has mechanisms to try to<br class=""> detect "falsetickers" (a Dave Mills term) and strategies to choose<br class=""> between stepping or slewing time depending upon which is more<br class=""> appropriate for the way the time source is used.<br class=""><br class="">- One of the ESP-IDF example programs is SNMP (simple NTP) using the<br class=""> capability built into LwIP. It is easy to invoke -- as a test I<br class=""> just added this to console_ssh to take advantage of its existing<br class=""> event notification for wifi coming up:<br class=""><br class=""> @@ -32,6 +32,7 @@<br class=""> #include <lwip/def.h><br class=""> #include <lwip/sockets.h><br class=""> #undef bind<br class=""> +#include "apps/sntp/sntp.h"<br class=""> #include "freertos/queue.h"<br class=""> #include "ovms_log.h"<br class=""> #include "ovms_events.h"<br class=""> @@ -153,6 +155,11 @@ void OvmsSSH::NetManInit(std::string event, void* data)<br class=""> // Only initialise server for WIFI connections<br class=""> if (!MyNetManager.m_connected_wifi) return;<br class=""><br class=""> + ESP_LOGI(tag, "Initializing SNTP");<br class=""> + sntp_setoperatingmode(SNTP_OPMODE_POLL);<br class=""> + sntp_setservername(0, (char*)"<a href="http://pool.ntp.org/" class="">pool.ntp.org</a>");<br class=""> + sntp_init();<br class=""> +<br class=""> ESP_LOGI(tag, "Launching SSH Server");<br class=""> int ret = wolfSSH_Init();<br class=""> if (ret != WS_SUCCESS)<br class=""><br class=""> One problem with fitting this into the time scheme that you have<br class=""> implemented is that it will be updating time in the background on<br class=""> its own. The other operating mode is SNTP_OPMODE_LISTENONLY, which<br class=""> I don't think would be useful. There are parameters defined in<br class=""> components/lwip/include/lwip/apps/sntp/sntp_opts.h that might be<br class=""> useful to change. The current update interval is one hour.<br class=""><br class="">- Another aspect of the SNMP example program is the use of the<br class=""> environment variable TZ to control the local timezone. Here is the<br class=""> 'date' command I implemented as a test:<br class=""><br class=""> void date(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv)<br class=""> {<br class=""> time_t now;<br class=""> struct tm timeinfo;<br class=""> char strftime_buf[64];<br class=""> setenv("TZ", "PST8PDT,M3.2.0/2,M11.1.0", 1);<br class=""> tzset();<br class=""> time(&now);<br class=""> localtime_r(&now, &timeinfo);<br class=""> strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);<br class=""> writer->printf("The current date/time in Sunnyvale is: %s\n", strftime_buf);<br class=""> }<br class=""><br class=""> Perhaps we should have a config parameter for timezone?<br class=""><br class=""> -- Steve<br class=""><br class="">On Sat, 24 Feb 2018, Mark Webb-Johnson wrote:<br class=""><br class=""><blockquote type="cite" class="">I’ve done a very rough implementation of this:<br class=""><br class="">OVMS > time set 1519486746<br class="">Time set (at stratum 15)<br class=""><br class="">OVMS > time status<br class="">UTC Time: Sat Feb 24 15:39:09 2018<br class="">Local Time: Sat Feb 24 15:39:09 2018<br class="">Provider: time<br class=""><br class="">PROVIDER STRATUM UPDATE TIME<br class="">*time 15 4 Sat Feb 24 15:39:10 2018<br class=""><br class="">OVMS > time status<br class="">UTC Time: Sat Feb 24 15:39:14 2018<br class="">Local Time: Sat Feb 24 15:39:14 2018<br class="">Provider: time<br class=""><br class="">PROVIDER STRATUM UPDATE TIME<br class="">*time 15 9 Sat Feb 24 15:39:15 2018<br class=""><br class="">I’ll work on it some more tomorrow. As it is, components can now call MyTime.Set(…) to feed their opinion of time into the system.<br class=""><br class="">Regards, Mark.<br class=""><br class=""><blockquote type="cite" class="">On 24 Feb 2018, at 10:23 PM, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net" class="">mark@webb-johnson.net</a>> wrote:<br class=""><br class="">I forgot about vehicles. Tesla Roadster is the same.<br class=""><br class="">I’ll write an ovms_time component now. Then, we can all submit time to it appropriately.<br class=""><br class="">class OvmsTime<br class=""> {<br class=""> public:<br class=""> OvmsTime();<br class=""> ~OvmsTime();<br class=""><br class=""> public:<br class=""> void Set(char* provider, int stratum, bool trusted, time_t time);<br class=""> };<br class=""><br class="">extern OvmsTime MyTime;<br class=""><br class="">Just follow the NTP stratum approach (distance from a zero-delay device). Trusted is a separate indication that just sets stratum level to 16. The provider is simply the logging TAG.<br class=""><br class="">Internal implementation is like NTP. We track the last times from all providers, and pick the one with the lowest stratum that has reported within a reasonable time.<br class=""><br class="">We can add the boot-time save/restore later (once Michael has done that code for safe boot, etc).<br class=""><br class="">Regards, Mark.<br class=""><br class=""><blockquote type="cite" class="">On 24 Feb 2018, at 9:19 PM, Geir Øyvind Vælidalo <<a href="mailto:geir@validalo.net" class="">geir@validalo.net</a> <<a href="mailto:geir@validalo.net" class="">mailto:geir@validalo.net</a>>> wrote:<br class=""><br class="">Sounds like a plan. I can get time from the car too, but the resolution is several seconds, so I think we need to have some sort of priority here. Maybe SNTP first, then GPS, cellular and finally “car”?<br class=""><br class="">Geir<br class=""><br class="">Sendt fra min iPhone<br class=""><br class=""><blockquote type="cite" class="">24. feb. 2018 kl. 04:36 skrev Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net" class="">mark@webb-johnson.net</a> <<a href="mailto:mark@webb-johnson.net" class="">mailto:mark@webb-johnson.net</a>>>:<br class=""><br class="">I don’t think so.<br class=""><br class="">There are various sources for date/time. GPS. Cellular. SNTP. Need to ensure that they are not all fighting.<br class=""><br class="">Another module to do this? Have components tell it their opinion of the time, then it centrally decides and updates system clock if necessary<br class=""><br class="">Also store last clock in RTC ram so during a crash/reboot it can recover the last know time?<br class=""><br class="">Regards, Mark<br class=""><br class=""><blockquote type="cite" class="">On 24 Feb 2018, at 9:44 AM, Stephen Casner <<a href="mailto:casner@acm.org" class="">casner@acm.org</a> <<a href="mailto:casner@acm.org" class="">mailto:casner@acm.org</a>>> wrote:<br class=""><br class="">Does the sytem date get set anywhere (presumably from GPS)?<br class=""><br class="">This question occurred to me as I'm working on a side project using<br class="">the DEVKIT-C module which won't have access to GPS so I added the code<br class="">to set the data using SNTP.<br class=""><br class=""> -- Steve<br class="">_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a> <<a href="mailto:OvmsDev@lists.teslaclub.hk" class="">mailto:OvmsDev@lists.teslaclub.hk</a>><br class=""><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class=""></blockquote><br class="">_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a> <<a href="mailto:OvmsDev@lists.teslaclub.hk" class="">mailto:OvmsDev@lists.teslaclub.hk</a>><br class=""><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class=""></blockquote><br class="">_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a> <<a href="mailto:OvmsDev@lists.teslaclub.hk" class="">mailto:OvmsDev@lists.teslaclub.hk</a>><br class=""><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class=""></blockquote><br class="">_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a><br class=""><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class=""></blockquote><br class=""></blockquote>_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a><br class=""><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class=""></div></div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a><br class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev<br class=""></div></blockquote></div><br class=""></body></html>