lucas
2 months ago
3 changed files with 107 additions and 0 deletions
@ -0,0 +1,84 @@ |
|||
package adaptors |
|||
|
|||
import ( |
|||
"bytes" |
|||
"encoding/binary" |
|||
"encoding/json" |
|||
"fmt" |
|||
"goInOut/models" |
|||
"goInOut/utils" |
|||
"log" |
|||
"time" |
|||
) |
|||
|
|||
// Adaptor_GDND2LA_JSNCGLQL 光电挠度2路安数据 转换 江苏农村公路桥梁监测系统
|
|||
type Adaptor_GDND2LA_JSNCGLQL struct { |
|||
IdMap map[string]string |
|||
BridgeCode string |
|||
} |
|||
|
|||
func (the Adaptor_GDND2LA_JSNCGLQL) Transform(inTopic, rawMsg string) []NeedPush { |
|||
gdnd := models.GDND2luAn{} |
|||
json.Unmarshal([]byte(rawMsg), &gdnd) |
|||
return the.RawToJSNCGLQL(gdnd) |
|||
} |
|||
|
|||
func (the Adaptor_GDND2LA_JSNCGLQL) RawToJSNCGLQL(raw models.GDND2luAn) (result []NeedPush) { |
|||
Atime, err := time.Parse("2006-01-02 15:04:05", raw.Time) |
|||
if err != nil { |
|||
log.Printf("光电扰度 设备[%s] 数据时间 %s 解析错误", raw.Id, raw.Time) |
|||
return |
|||
} |
|||
|
|||
sensorDataList := raw.Value[raw.Id] |
|||
//获取对方系统 id
|
|||
sensorCode := the.getSensorCode(raw.Id) |
|||
if sensorCode == "" { |
|||
log.Printf("光电扰度 设备[%s] 无匹配的 江苏农村公路桥梁监测系统 测点id,请检查配置文件", raw.Id) |
|||
return |
|||
} |
|||
|
|||
topic := fmt.Sprintf("data/%s/%s", the.BridgeCode, sensorCode) |
|||
|
|||
var transBytes []byte |
|||
//添加时间段
|
|||
transBytes = append(transBytes, the.getTimeBytes(Atime)...) |
|||
|
|||
for _, sensorData := range sensorDataList { |
|||
|
|||
//添加数据值段
|
|||
bs := utils.Float32ToBytes(sensorData) |
|||
transBytes = append(transBytes, bs...) |
|||
} |
|||
result = append(result, NeedPush{ |
|||
Topic: topic, |
|||
Payload: transBytes, |
|||
}) |
|||
|
|||
return result |
|||
} |
|||
func (the Adaptor_GDND2LA_JSNCGLQL) getSensorCode(rawSensorName string) string { |
|||
v, isValid := the.IdMap[rawSensorName] |
|||
if !isValid { |
|||
v = "" |
|||
} |
|||
return v |
|||
} |
|||
|
|||
func (the Adaptor_GDND2LA_JSNCGLQL) getTimeBytes(sensorTime time.Time) []byte { |
|||
|
|||
year := uint16(sensorTime.Year()) |
|||
month := int8(sensorTime.Month()) |
|||
day := int8(sensorTime.Day()) |
|||
hour := int8(sensorTime.Hour()) |
|||
minute := int8(sensorTime.Minute()) |
|||
second := int8(sensorTime.Second()) |
|||
bytesBuffer := bytes.NewBuffer([]byte{}) |
|||
binary.Write(bytesBuffer, binary.BigEndian, year) |
|||
binary.Write(bytesBuffer, binary.BigEndian, month) |
|||
binary.Write(bytesBuffer, binary.BigEndian, day) |
|||
binary.Write(bytesBuffer, binary.BigEndian, hour) |
|||
binary.Write(bytesBuffer, binary.BigEndian, minute) |
|||
binary.Write(bytesBuffer, binary.BigEndian, second) |
|||
return bytesBuffer.Bytes() |
|||
} |
@ -0,0 +1,7 @@ |
|||
package models |
|||
|
|||
type GDND2luAn struct { |
|||
Id string `json:"id"` |
|||
Time string `json:"time"` |
|||
Value map[string][]float32 `json:"value"` |
|||
} |
Loading…
Reference in new issue