communication with influxdb is working, schema of data in influxdb is unusable so far, too many spare columns

This commit is contained in:
2026-02-04 17:19:12 +01:00
parent 97679561d8
commit a1ea1b230e
22 changed files with 22 additions and 57 deletions

View File

@@ -0,0 +1,90 @@
package draginoLmds200
import (
"fmt"
"strconv"
"encoding/json"
"udi/database"
)
/*
"decoded_payload": {
"Bat": 3.082,
"DALARM_count": 0,
"Distance_alarm": 0,
"Interrupt_alarm": 0,
"dis1": 105,
"dis2": 201
},
*/
type message struct {
Bat float32 `json:"Bat"`
DALARM_count int `json:"DALARM_count"`
Distance_alarm int `json:"Distance_alarm"`
Interrupt_alarm int `json:"Interrupt_alarm"`
Dis1 int `json:"dis1"`
Dis2 int `json:"dis2"`
}
func Parse(fPort int, decodedPayload []byte, _ string, variables *map[string]database.VariableType, attributes *map[string]interface{}, device *database.Device) error {
if fPort != 2 {
return fmt.Errorf("Unexpected fPort %d", fPort)
}
var message message
err := json.Unmarshal(decodedPayload, &message)
if err != nil {
return fmt.Errorf("Unable to parse payload, fPort %d, error %s", fPort, err)
}
(*variables)["Battery"] = database.VariableType {
Label: "Battery",
Variable: "Voltage",
Unit: "V",
Value: message.Bat,
}
distance1 := message.Dis1 * 10
(*variables)["Distance1"] = database.VariableType {
Label: "Distance1",
Variable: "Level",
Unit: "mm",
Value: distance1,
}
distance2 := message.Dis2 * 10
(*variables)["Distance2"] = database.VariableType {
Label: "Distance2",
Variable: "Level",
Unit: "mm",
Value: distance2,
}
if distance1 == 2 {
(*attributes)["Status"] = "invalid value"
} else if distance1 == 1 {
(*attributes)["Status"] = "no sensor detected"
} else {
(*attributes)["Status"] = "Ok"
}
groundLevelI, exists := device.Attributes["GroundLevel"]
groundLevelS, ok := groundLevelI.(string)
groundLevel, err3 := strconv.Atoi(groundLevelS)
if exists && err3 == nil && ok {
correctedDistance1 := groundLevel - distance1
(*variables)["CorrectedDistance1"] = database.VariableType {
Label: "CorrectedDistance1",
Variable: "Level",
Unit: "mm",
Value: correctedDistance1,
}
correctedDistance2 := groundLevel - distance2
(*variables)["CorrectedDistance2"] = database.VariableType {
Label: "CorrectedDistance2",
Variable: "Level",
Unit: "mm",
Value: correctedDistance2,
}
}
return nil
}

View File

@@ -0,0 +1,84 @@
{
"end_device_ids": {
"device_id": "eui-a840419641867eb5",
"application_ids": {
"application_id": "de-hottis-level-monitoring"
},
"dev_eui": "A840419641867EB5",
"join_eui": "A840410000000101",
"dev_addr": "260B91F9"
},
"correlation_ids": [
"gs:uplink:01HH1R112BNDQQ52N9FVV0TKPW"
],
"received_at": "2023-12-07T08:59:05.369293395Z",
"uplink_message": {
"session_key_id": "AYa9JUhNJp00t+hKqkQUog==",
"f_port": 2,
"f_cnt": 25665,
"frm_payload": "DAoAaQDJAA==",
"decoded_payload": {
"Bat": 3.082,
"DALARM_count": 0,
"Distance_alarm": 0,
"Interrupt_alarm": 0,
"dis1": 105,
"dis2": 201
},
"rx_metadata": [
{
"gateway_ids": {
"gateway_id": "eui-00005813d35e3021",
"eui": "00005813D35E3021"
},
"timestamp": 1141271036,
"rssi": -100,
"channel_rssi": -100,
"snr": 7.3,
"location": {
"latitude": 52.17065267448476,
"longitude": 7.629437184774199,
"source": "SOURCE_REGISTRY"
},
"uplink_token": "CiIKIAoUZXVpLTAwMDA1ODEzZDM1ZTMwMjESCAAAWBPTXjAhEPzTmaAEGgsI2ZLGqwYQnfLnTSDggLjIm5IF",
"channel_index": 6,
"received_at": "2023-12-07T08:59:05.163182877Z"
}
],
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 7,
"coding_rate": "4/5"
}
},
"frequency": "868300000",
"timestamp": 1141271036
},
"received_at": "2023-12-07T08:59:05.163964824Z",
"consumed_airtime": "0.056576s",
"locations": {
"user": {
"latitude": 52.1707216912195,
"longitude": 7.63066603211241,
"altitude": 39,
"source": "SOURCE_REGISTRY"
}
},
"version_ids": {
"brand_id": "dragino",
"model_id": "lmds200",
"hardware_version": "_unknown_hw_version_",
"firmware_version": "1.0",
"band_id": "EU_863_870"
},
"network_ids": {
"net_id": "000013",
"ns_id": "EC656E0000000181",
"tenant_id": "ttn",
"cluster_id": "eu1",
"cluster_address": "eu1.cloud.thethings.network"
}
}
}