1111#include < WiFiClientSecure.h>
1212#include < ArduinoJson.h>
1313#include < PubSubClient.h> // For MQTT
14+ #include < time.h>
1415
1516#include < vector>
1617#include < utility> // for std::pair
@@ -3295,6 +3296,67 @@ static jsval_t js_get_brightness(struct js *js, jsval_t *args, int nargs) {
32953296 return js_mknum ((double )webscreen_display_get_brightness ());
32963297}
32973298
3299+ /* *****************************************************************************
3300+ * H3) NTP Time API
3301+ ******************************************************************************/
3302+
3303+ static jsval_t js_get_hours (struct js *js, jsval_t *args, int nargs) {
3304+ struct tm timeinfo;
3305+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3306+ return js_mknum ((double )timeinfo.tm_hour );
3307+ }
3308+
3309+ static jsval_t js_get_minutes (struct js *js, jsval_t *args, int nargs) {
3310+ struct tm timeinfo;
3311+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3312+ return js_mknum ((double )timeinfo.tm_min );
3313+ }
3314+
3315+ static jsval_t js_get_seconds (struct js *js, jsval_t *args, int nargs) {
3316+ struct tm timeinfo;
3317+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3318+ return js_mknum ((double )timeinfo.tm_sec );
3319+ }
3320+
3321+ static jsval_t js_get_year (struct js *js, jsval_t *args, int nargs) {
3322+ struct tm timeinfo;
3323+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3324+ return js_mknum ((double )(timeinfo.tm_year + 1900 ));
3325+ }
3326+
3327+ static jsval_t js_get_month (struct js *js, jsval_t *args, int nargs) {
3328+ struct tm timeinfo;
3329+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3330+ return js_mknum ((double )(timeinfo.tm_mon + 1 )); // 1-12
3331+ }
3332+
3333+ static jsval_t js_get_day (struct js *js, jsval_t *args, int nargs) {
3334+ struct tm timeinfo;
3335+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3336+ return js_mknum ((double )timeinfo.tm_mday );
3337+ }
3338+
3339+ static jsval_t js_get_weekday (struct js *js, jsval_t *args, int nargs) {
3340+ struct tm timeinfo;
3341+ if (!getLocalTime (&timeinfo, 10 )) return js_mknum (-1 );
3342+ return js_mknum ((double )timeinfo.tm_wday ); // 0=Sunday, 6=Saturday
3343+ }
3344+
3345+ static jsval_t js_get_epoch (struct js *js, jsval_t *args, int nargs) {
3346+ time_t now;
3347+ time (&now);
3348+ if (now < 1609459200 ) return js_mknum (-1 ); // Before 2021-01-01
3349+ return js_mknum ((double )now);
3350+ }
3351+
3352+ static jsval_t js_ntp_synced (struct js *js, jsval_t *args, int nargs) {
3353+ struct tm timeinfo;
3354+ if (getLocalTime (&timeinfo, 10 ) && timeinfo.tm_year > (2020 - 1900 )) {
3355+ return js_mktrue ();
3356+ }
3357+ return js_mkfalse ();
3358+ }
3359+
32983360/* *****************************************************************************
32993361 * I) Register All JS Functions
33003362 ******************************************************************************/
@@ -3311,6 +3373,18 @@ void register_js_functions() {
33113373 js_set (js, global, " delay" , js_mkfun (js_delay));
33123374 js_set (js, global, " set_brightness" , js_mkfun (js_set_brightness));
33133375 js_set (js, global, " get_brightness" , js_mkfun (js_get_brightness));
3376+
3377+ // NTP Time functions
3378+ js_set (js, global, " get_hours" , js_mkfun (js_get_hours));
3379+ js_set (js, global, " get_minutes" , js_mkfun (js_get_minutes));
3380+ js_set (js, global, " get_seconds" , js_mkfun (js_get_seconds));
3381+ js_set (js, global, " get_year" , js_mkfun (js_get_year));
3382+ js_set (js, global, " get_month" , js_mkfun (js_get_month));
3383+ js_set (js, global, " get_day" , js_mkfun (js_get_day));
3384+ js_set (js, global, " get_weekday" , js_mkfun (js_get_weekday));
3385+ js_set (js, global, " get_epoch" , js_mkfun (js_get_epoch));
3386+ js_set (js, global, " ntp_synced" , js_mkfun (js_ntp_synced));
3387+
33143388 js_set (js, global, " create_timer" , js_mkfun (js_create_timer));
33153389 js_set (js, global, " toNumber" , js_mkfun (js_to_number));
33163390 js_set (js, global, " numberToString" , js_mkfun (js_number_to_string));
0 commit comments