From bb4f11d212d8cbbbc58fb44615c1416f09eecefd Mon Sep 17 00:00:00 2001 From: Andrey Fedorov <2af@mail.ru> Date: Sun, 26 May 2019 12:43:01 +0300 Subject: [PATCH] Add NTP server date time sync function Add NTPServerSync() function to sync datetime with NTP server. --- src/TinyGsmClientSIM800.h | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/TinyGsmClientSIM800.h b/src/TinyGsmClientSIM800.h index 365f4ee..be88087 100644 --- a/src/TinyGsmClientSIM800.h +++ b/src/TinyGsmClientSIM800.h @@ -714,6 +714,78 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() waitResponse(); return true; } + + /* + * NTP server functions + */ + boolean isValidNumber(String str) +{ + boolean isNum = false; + if(!(str.charAt(0) == '+' || str.charAt(0) == '-' || isDigit(str.charAt(0)))) return false; + + for(byte i=1;i < str.length(); i++) + { + if(!(isDigit(str.charAt(i)) || str.charAt(i) == '.')) return false; + } + return true; +} + +String ShowNTPError(byte error) +{ + switch (error) + { + case 1: + return "Network time synchronization is successful"; + case 61: + return "Network error"; + case 62: + return "DNS resolution error"; + case 63: + return "Connection error"; + case 64: + return "Service response error"; + case 65: + return "Service response timeout"; + default: + return "Unknown error: " + String(error); + } +} + +byte NTPServerSync(String server = "pool.ntp.org", byte TimeZone = 3) +{ + //Serial.println("Sync time with NTP server."); + sendAT(GF("+CNTPCID=1")); + if (waitResponse(10000L) != 1) + { + //Serial.println("AT command \"AT+CNTPCID=1\" executing fault."); + return -1; + } + + String CNTP = "+CNTP=" + server + "," + String(TimeZone); + sendAT(GF(CNTP)); + if (waitResponse(10000L) != 1) + { + //Serial.println("AT command \"" + CNTP + "\" executing fault."); + return -1; + } + + sendAT(GF("+CNTP")); + if (waitResponse(10000L, GF(GSM_NL "+CNTP:"))) + { + String result = stream.readStringUntil('\n'); + result.trim(); + if (isValidNumber(result)) + { + return result.toInt(); + } + } + else + { + //Serial.println("AT command \"+CNTP\" executing fault."); + return -1; + } + return -1; +} float getTemperature() TINY_GSM_ATTR_NOT_AVAILABLE;