在LuatOS中,獲取時間函式用得最多的就是os.time()函式。
應很多同學要求,今天,我會講一些與這個函式以及其他時間函式相關的知識。
一、時間戳相關
os.time()這個函式,只能獲取當前時間戳;如果客戶希望獲取的是當前時間,即相應的年月日時分秒,可以使用os.date()函式。
參考下面的示例:
關於位數:
比較遺憾的是,Lua只有秒級時間戳,沒有毫秒以及微秒級時間戳,暫時沒有什麼好的辦法解決該問題。
二、時間同步
理論上4G模組在駐網(連結基站成功)以後,基站會傳送當前時間給4G模組(此過程被稱為基站授時)。也就是說,只要模組駐網成功,內部時間是沒有問題的,
但是,透過大量的事實驗證下來,某運營商部分卡無法與基站進行授時操作,部分基站同步給4G模組的時間也有極小機率出錯。
所以,除了基站授時,預備情況下,還準備了NTP授時伺服器對模組進行授時操作。此處專網路卡客戶需要注意——如果時間引數對你比較重要,需要將NTP授時伺服器的域名加入運營商白名單中。
2.1 基站時間同步:
除上述某運營商的部分卡以外,多數情況下,只要駐網成功內部就會更新時間。
如果駐網不成功,那麼4G模組會從2000年00時00分00秒進行計時。所以使用者需要獲取時間的應用場景下,儘量等到聯網成功,有時間同步資訊發出來再進行。
LuatOS版本示例:
AT版本:
可以檢視開機的列印,開機列印如下。
注:此處時間為格林尼治時間,需要+8才是中國區時間。
2.2 NTP伺服器授時:
如果使用者對基站授時的準確性有疑慮(之前也出現過基站授時比實際時間差了16天的情況),可以關閉基站授時,轉而使用NTP授時伺服器去給模組進行授時。
現在有一些免費公開的NTP授時伺服器,如阿里雲、騰訊雲。
當然,如果對授時要求比較高,需要穩定可靠的時間同步機制——建議自建NTP授時伺服器。
LuatOS版本示例:
三、基礎應用
定時休眠定時喚醒:
在一些對功耗要求比較嚴格,但是隻需要定時數傳的場景下,時間應用的重要性就出來了。
使用者可以使用合宙自研低功耗模式,定時喚醒模組進行數傳,數傳後又進入休眠模式。具體實現可以參考下方連結。
四、進階應用
獲取當前時間的後一天凌晨零點到一點隨機時間戳:
多數情況下,需要對系統留有O他的餘地。為了讓使用者無感升級,需要對O他的時間進行限制,比如凌晨0點。但是如果所有裝置都在凌晨0點對裝置進行升級,升級伺服器無法處理高併發,可能會導致各種異常出現。
所以就需要在使用者指定的一個時間段內進行升級,最為穩妥。
接下來的LuatOS指令碼,就獲取到了當前時間的後一天凌晨零點到凌晨一點的隨機時間戳,並與當前時間戳進行計算,好給休眠模式下的OTA應用做出一個具體的休眠時間(秒數)設定。
LuatOS版本示例:
今天就分享到這裡了~如果你對時間應用有其他疑問,歡迎來找合宙,咱們一起學習一起進步。