From edc90fc5ec304bd8bd34b9e4a7de2aa8286e088c Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 1 Dec 2023 22:36:21 +0100 Subject: [PATCH] mbgw3 --- src/udi/dispatcher/dispatcher.go | 4 ++ src/udi/handlers/mbgw3/mbgw3.go | 86 ++++++++++++++++++++++++++++++++ src/udi/handlers/pv/pv.go | 2 +- 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/udi/handlers/mbgw3/mbgw3.go diff --git a/src/udi/dispatcher/dispatcher.go b/src/udi/dispatcher/dispatcher.go index da09814..8a6cf27 100644 --- a/src/udi/dispatcher/dispatcher.go +++ b/src/udi/dispatcher/dispatcher.go @@ -11,6 +11,7 @@ import "udi/handlers/handler" import "udi/handlers/ttn" import "udi/handlers/iot" import "udi/handlers/pv" +import "udi/handlers/mbgw3" var handlerMap map[string]handler.Handler = make(map[string]handler.Handler) @@ -31,6 +32,9 @@ func InitDispatcher() { case "PV": handlerMap[handlerEntry.Name] = pv.NewPvHandler() log.Printf("PV initialized") + case "MBGW3": + handlerMap[handlerEntry.Name] = mbgw3.NewMbgw3Handler() + log.Printf("MBGW3 initialized") default: log.Fatalf("Handler %s not found", handlerEntry.Name) } diff --git a/src/udi/handlers/mbgw3/mbgw3.go b/src/udi/handlers/mbgw3/mbgw3.go new file mode 100644 index 0000000..31bc10c --- /dev/null +++ b/src/udi/handlers/mbgw3/mbgw3.go @@ -0,0 +1,86 @@ +package mbgw3 + +import ( + "log" + //"reflect" + //"time" + "strconv" + "encoding/json" + "udi/handlers/handler" + "udi/database" +) + + +var idSeq int = 0 + +type Mbgw3Handler struct { + id int + dbh *database.DatabaseHandle +} + +type Observation struct { + Status string `json:"Status"` + RequestId string `json:"RequestId"` + Device string `json:"Device"` + Errors string `json:"Errors"` + Requests string `json:"Requests"` + Values map[string]string +} + + +func NewMbgw3Handler() *Mbgw3Handler { + t := &Mbgw3Handler { + id: idSeq, + } + idSeq += 1 + + t.dbh = database.NewDatabaseHandle("") + return t +} + +func (self *Mbgw3Handler) Handle(message handler.MessageT) { + log.Printf("Handler MBGW3 %d processing %s -> %s", self.id, message.Topic, message.Payload) + + var observation Observation + err := json.Unmarshal([]byte(message.Payload), &observation) + if err != nil { + log.Printf("Unable to parse payload into Observation struct, values are lost: ", err) + return + } + log.Printf("Parsed observation: %s", observation) + + attributes := make(map[string]string + if v, err := strconv.Atoi(observation.RequestId), err == nil { + attributes["RequestId"] = v + } + + attributes["Errors"] = observation.Errors + attributes["Requests"] = observation.Requests + + /* + variables := make(map[string]database.VariableType) + pvValueStructValue := reflect.ValueOf(pvValue) + for i := 0; i < pvValueStructValue.NumField(); i++ { + field := pvValueStructValue.Type().Field(i) + fieldValue := pvValueStructValue.Field(i) + v := database.VariableType { + Label: "", + Variable: field.Name, + Unit: field.Tag.Get("unit"), + Value: fieldValue.Interface(), + } + variables[field.Name] = v + } + + measurement := database.Measurement { + Time: time.Now(), + Application: "PV", + Device: "Powermeter", + Values: variables, + } + + self.dbh.StoreMeasurement(&measurement) + */ +} + + diff --git a/src/udi/handlers/pv/pv.go b/src/udi/handlers/pv/pv.go index 3a2f3e0..712dac1 100644 --- a/src/udi/handlers/pv/pv.go +++ b/src/udi/handlers/pv/pv.go @@ -54,7 +54,7 @@ func (self *PvHandler) Handle(message handler.MessageT) { var pvValue PvValue err := json.Unmarshal([]byte(message.Payload), &pvValue) if err != nil { - log.Printf("Enable to parse payload into pvValue struct, values are lost: ", err) + log.Printf("Unable to parse payload into pvValue struct, values are lost: ", err) return }