74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package iot
|
||
|
||
import (
|
||
"crypto/hmac"
|
||
"crypto/sha256"
|
||
"encoding/hex"
|
||
"encoding/json"
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
// 时间戳:为设备连接平台时的UTC时间,格式为YYYYMMDDHH,如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。
|
||
func timeStamp() string {
|
||
strFormatTime := time.Now().Format("2006-01-02 15:04:05")
|
||
strFormatTime = strings.ReplaceAll(strFormatTime, "-", "")
|
||
strFormatTime = strings.ReplaceAll(strFormatTime, " ", "")
|
||
strFormatTime = strFormatTime[0:10]
|
||
return strFormatTime
|
||
}
|
||
|
||
// 设备采集数据UTC时间(格式:yyyyMMdd'T'HHmmss'Z'),如:20161219T114920Z。
|
||
//设备上报数据不带该参数或参数格式错误时,则数据上报时间以平台时间为准。
|
||
func GetEventTimeStamp() string {
|
||
now := time.Now().UTC()
|
||
return now.Format("20060102T150405Z")
|
||
}
|
||
|
||
func hmacSha256(data string, secret string) string {
|
||
h := hmac.New(sha256.New, []byte(secret))
|
||
h.Write([]byte(data))
|
||
return hex.EncodeToString(h.Sum(nil))
|
||
}
|
||
|
||
func Interface2JsonString(v interface{}) string {
|
||
if v == nil {
|
||
return ""
|
||
}
|
||
byteData, err := json.Marshal(v)
|
||
if err != nil {
|
||
return ""
|
||
}
|
||
return string(byteData)
|
||
}
|
||
|
||
func getTopicRequestId(topic string) string {
|
||
return strings.Split(topic, "=")[1]
|
||
}
|
||
|
||
func formatTopic(topic, deviceId string) string {
|
||
return strings.ReplaceAll(topic, "{device_id}", deviceId)
|
||
}
|
||
|
||
// 根据当前运行的操作系统重新修改文件路径以适配操作系统
|
||
func smartFileName(filename string) string {
|
||
// Windows操作系统适配
|
||
if strings.Contains(OsName(), "windows") {
|
||
pathParts := strings.Split(filename, "/")
|
||
pathParts[0] = pathParts[0] + ":"
|
||
return strings.Join(pathParts, "\\")
|
||
}
|
||
|
||
return filename
|
||
}
|
||
|
||
func CreateMqttClientId(deviceId string) string {
|
||
segments := make([]string, 4)
|
||
segments[0] = deviceId
|
||
segments[1] = "0"
|
||
segments[2] = "0"
|
||
segments[3] = timeStamp()
|
||
|
||
return strings.Join(segments, "_")
|
||
}
|