This commit is contained in:
2023-12-01 22:36:21 +01:00
parent ca004dce51
commit edc90fc5ec
3 changed files with 91 additions and 1 deletions

View File

@ -11,6 +11,7 @@ import "udi/handlers/handler"
import "udi/handlers/ttn" import "udi/handlers/ttn"
import "udi/handlers/iot" import "udi/handlers/iot"
import "udi/handlers/pv" import "udi/handlers/pv"
import "udi/handlers/mbgw3"
var handlerMap map[string]handler.Handler = make(map[string]handler.Handler) var handlerMap map[string]handler.Handler = make(map[string]handler.Handler)
@ -31,6 +32,9 @@ func InitDispatcher() {
case "PV": case "PV":
handlerMap[handlerEntry.Name] = pv.NewPvHandler() handlerMap[handlerEntry.Name] = pv.NewPvHandler()
log.Printf("PV initialized") log.Printf("PV initialized")
case "MBGW3":
handlerMap[handlerEntry.Name] = mbgw3.NewMbgw3Handler()
log.Printf("MBGW3 initialized")
default: default:
log.Fatalf("Handler %s not found", handlerEntry.Name) log.Fatalf("Handler %s not found", handlerEntry.Name)
} }

View File

@ -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)
*/
}

View File

@ -54,7 +54,7 @@ func (self *PvHandler) Handle(message handler.MessageT) {
var pvValue PvValue var pvValue PvValue
err := json.Unmarshal([]byte(message.Payload), &pvValue) err := json.Unmarshal([]byte(message.Payload), &pvValue)
if err != nil { 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 return
} }