Dragino parser
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2023-12-15 11:44:35 +01:00
parent 084f9fbf31
commit 7ee7d4df89
7 changed files with 263 additions and 30 deletions

View File

@ -1,13 +1,17 @@
package ttn
import "log"
import "fmt"
import "time"
import "encoding/json"
import "udi/config"
import "udi/handlers/handler"
import "udi/handlers/ttn/models/emuProfIILoRaCfg1"
import "udi/database"
import (
"log"
"fmt"
"time"
"encoding/json"
"udi/config"
"udi/handlers/handler"
"udi/handlers/ttn/models/emuProfIILoRaCfg1"
"udi/handlers/ttn/models/draginoLdds75"
"udi/handlers/ttn/models/draginoLmds200"
"udi/database"
)
var idSeq int = 0
@ -134,24 +138,29 @@ func (self *TTNHandler) Handle(message handler.MessageT) {
}
measurement.Application = attributes.ApplicationId
measurement.Device = attributes.DeviceId
measurement.Attributes["DeviceType"] = device.DeviceType.ModelIdentifier
//log.Printf("DeviceLabel: %s, DeviceType: %s", device.Label, device.DeviceType.ModelIdentifier)
var parser func(int, []byte) (map[string]database.VariableType, error)
var parser func(int, []byte, *map[string]database.VariableType) error
switch device.DeviceType.ModelIdentifier {
case "emu-prof-ii-lora-cfg1":
parser = emuProfIILoRaCfg1.Parse
case "dragino-ldds75":
parser = draginoLdds75.Parse
case "dragino-lmds200":
parser = draginoLmds200.Parse
default:
lost(fmt.Sprintf("No parser found for %s", device.DeviceType.ModelIdentifier), message)
return
}
variables, err3 := parser(uplinkMessage.UplinkMessage.FPort, uplinkMessage.UplinkMessage.DecodedPayload.Payload)
measurement.Values = make(map[string]database.VariableType)
err3 := parser(uplinkMessage.UplinkMessage.FPort, uplinkMessage.UplinkMessage.DecodedPayload.Payload, &(measurement.Values))
if err3 != nil {
lost(fmt.Sprintf("Model parser failed: %s", err3), message)
return
}
measurement.Values = variables
log.Printf("Prepared measurement item: %s", measurement)
self.dbh.StoreMeasurement(&measurement)
}