?在LuatOS中,獲取時間函數(shù)用得最多的就是os.time()函數(shù)。
應(yīng)很多同學(xué)要求,今天,我會講一些與這個函數(shù)以及其他時間函數(shù)相關(guān)的知識。
一、時間戳相關(guān)
os.time()這個函數(shù),只能獲取當前時間戳;如果客戶希望獲取的是當前時間,即相應(yīng)的年月日時分秒,可以使用os.date()函數(shù)。
參考下面的示例**:**
?
關(guān)于位數(shù):
比較遺憾的是,Lua只有秒級時間戳,沒有毫秒以及微秒級時間戳,暫時沒有什么好的辦法解決該問題。
二、時間同步
理論上4G模塊在駐網(wǎng)(鏈接基站成功)以后,基站會發(fā)送當前時間給4G模塊(此過程被稱為 基站授時 )。也就是說,只要模塊駐網(wǎng)成功,內(nèi)部時間是沒有問題的,
但是,通過大量的事實驗證下來,某運營商部分卡無法與基站進行授時操作,部分基站同步給4G模塊的時間也有極小概率出錯。
所以,除了基站授時,預(yù)備情況下,還準備了NTP授時服務(wù)器對模塊進行授時操作。 此處專網(wǎng)卡客戶需要注意 —— 如果時間參數(shù)對你比較重要,需要將NTP授時服務(wù)器的域名加入運營商白名單中。
2.1 基站時間同步:
除上述某運營商的部分卡以外,多數(shù)情況下,只要駐網(wǎng)成功內(nèi)部就會更新時間。
如果駐網(wǎng)不成功,那么4G模塊會從2000年00時00分00秒進行計時。所以用戶需要獲取時間的應(yīng)用場景下,盡量等到聯(lián)網(wǎng)成功,有時間同步信息發(fā)出來再進行。
LuatOS版****本示例:
?
AT版本:
可以查看開機的打印,開機打印如下。
?
注:此處時間為格林尼治時間,需要+8才是中國區(qū)時間。
2.2 NTP服務(wù)器授時:
如果用戶對基站授時的準確性有疑慮(之前也出現(xiàn)過基站授時比實際時間差了16天的情況),可以關(guān)閉基站授時,轉(zhuǎn)而使用NTP授時服務(wù)器去給模塊進行授時。
現(xiàn)在有一些免費公開的NTP授時服務(wù)器,如阿里云、騰訊云。
當然,如果對授時要求比較高,需要穩(wěn)定可靠的時間同步機制——建議自建NTP授時服務(wù)器。
LuatOS版本示例:
?
三、基礎(chǔ)應(yīng)用
定時休眠定時喚醒:
在一些對功耗要求比較嚴格,但是只需要定時數(shù)傳的場景下,時間應(yīng)用的重要性就出來了。
用戶可以使用合宙自研低功耗模式,定時喚醒模塊進行數(shù)傳,數(shù)傳后又進入休眠模式。具體實現(xiàn)可以參考下方鏈接。
四、進階應(yīng)用
獲取當前時間的后一天凌晨零點到一點隨機時間戳:
多數(shù)情況下,需要對系統(tǒng)留有OTA的余地。為了讓用戶無感升級, 需要對OTA的時間進行限制,比如凌晨0點。 但是如果所有設(shè)備都在凌晨0點對設(shè)備進行升級,升級服務(wù)器無法處理高并發(fā),可能會導(dǎo)致各種異常出現(xiàn)。
所以就需要在用戶指定的一個時間段內(nèi)進行升級,最為穩(wěn)妥。
接下來的LuatOS腳本,就獲取到了當前時間的后一天凌晨零點到凌晨一點的隨機時間戳,并與當前時間戳進行計算,好給休眠模式下的OTA應(yīng)用做出一個具體的休眠時間(秒數(shù))設(shè)置。
LuatOS版本示例:
?
今天就分享到這里了~如果你對時間應(yīng)用有其他疑問,歡迎來找合宙,咱們一起學(xué)習一起進步。
審核編輯 黃宇
?
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9129瀏覽量
85338 -
NTP
+關(guān)注
關(guān)注
1文章
169瀏覽量
13892 -
時間函數(shù)
+關(guān)注
關(guān)注
0文章
2瀏覽量
5618
發(fā)布評論請先 登錄
相關(guān)推薦
評論