mbgw3 completed

This commit is contained in:
2023-12-04 13:46:31 +01:00
parent ab9a439081
commit ac4d42620a
3 changed files with 41 additions and 48 deletions

View File

@ -20,25 +20,10 @@ var archiverChannel chan handler.MessageT = make(chan handler.MessageT, 100)
func InitDispatcher() { func InitDispatcher() {
log.Printf("Initializing dispatcher") log.Printf("Initializing dispatcher")
go archiver() go archiver()
for _, handlerEntry := range config.Config.Handlers { handlerMap["TTN"] = ttn.NewTTNHandler()
log.Printf("Trying %s", handlerEntry.Name) handlerMap["IoT"] = iot.NewIoTHandler()
switch handlerEntry.Name { handlerMap["PV"] = pv.NewPvHandler()
case "TTN": handlerMap["MBGW3"] = mbgw3.NewMbgw3Handler()
handlerMap[handlerEntry.Name] = ttn.NewTTNHandler()
log.Printf("TTN initialized")
case "IoT":
handlerMap[handlerEntry.Name] = iot.NewIoTHandler()
log.Printf("IoT initialized")
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)
}
}
} }
func storeMessage(filename string, item handler.MessageT) { func storeMessage(filename string, item handler.MessageT) {
@ -97,7 +82,6 @@ func InputDispatcher() {
handler, exists := handlerMap[mapping.Handler] handler, exists := handlerMap[mapping.Handler]
if exists { if exists {
handler.Handle(message) handler.Handle(message)
break
} else { } else {
log.Printf("Handler not found, message is lost") log.Printf("Handler not found, message is lost")
} }

View File

@ -3,7 +3,7 @@ package mbgw3
import ( import (
"log" "log"
//"reflect" //"reflect"
//"time" "time"
"strconv" "strconv"
"encoding/json" "encoding/json"
"udi/handlers/handler" "udi/handlers/handler"
@ -34,7 +34,6 @@ func NewMbgw3Handler() *Mbgw3Handler {
id: idSeq, id: idSeq,
} }
idSeq += 1 idSeq += 1
t.dbh = database.NewDatabaseHandle("") t.dbh = database.NewDatabaseHandle("")
return t return t
} }
@ -48,40 +47,51 @@ func (self *Mbgw3Handler) Handle(message handler.MessageT) {
log.Printf("Unable to parse payload into Observation struct, values are lost: ", err) log.Printf("Unable to parse payload into Observation struct, values are lost: ", err)
return return
} }
log.Printf("Parsed observation: %s", observation)
attributes := make(map[string]interface{}) var measurement database.Measurement
measurement.Time = time.Now()
if observation.Device == "Gas" {
measurement.Application = "Gas"
measurement.Device = "Gasmeter"
} else {
measurement.Application = "Power"
measurement.Device = observation.Device
}
measurement.Attributes = make(map[string]interface{})
if v, err := strconv.Atoi(observation.RequestId); err == nil { if v, err := strconv.Atoi(observation.RequestId); err == nil {
attributes["RequestId"] = v measurement.Attributes["RequestId"] = v
} }
if v, err := strconv.ParseFloat(observation.ErrorRatio, 32); err == nil {
measurement.Attributes["ErrorRatio"] = v
}
if v, err := strconv.Atoi(observation.Errors); err == nil {
measurement.Attributes["Errors"] = v
}
if v, err := strconv.Atoi(observation.Requests); err == nil {
measurement.Attributes["Requests"] = v
}
measurement.Attributes["Status"] = observation.Status
attributes["Errors"] = observation.Errors measurement.Values = make(map[string]database.VariableType)
attributes["Requests"] = observation.Requests unitMap := map[string]string { "Energy": "Wh", "Power": "W", "Voltage": "V", "Current": "A", "Volume": "m3" }
for k, v := range observation.Values {
/* unit, exists := unitMap[k]
variables := make(map[string]database.VariableType) if ! exists {
pvValueStructValue := reflect.ValueOf(pvValue) unit = "Unmapped Unit"
for i := 0; i < pvValueStructValue.NumField(); i++ { }
field := pvValueStructValue.Type().Field(i) measurement.Values[k] = database.VariableType {
fieldValue := pvValueStructValue.Field(i) Label: "",
v := database.VariableType { Variable: k,
Label: "", Unit: unit,
Variable: field.Name, Value: v,
Unit: field.Tag.Get("unit"),
Value: fieldValue.Interface(),
} }
variables[field.Name] = v
} }
measurement := database.Measurement { log.Printf("Prepared measurement item: %s", measurement)
Time: time.Now(),
Application: "PV",
Device: "Powermeter",
Values: variables,
}
self.dbh.StoreMeasurement(&measurement) self.dbh.StoreMeasurement(&measurement)
*/
} }

View File

@ -43,7 +43,6 @@ func NewPvHandler() *PvHandler {
id: idSeq, id: idSeq,
} }
idSeq += 1 idSeq += 1
t.dbh = database.NewDatabaseHandle("") t.dbh = database.NewDatabaseHandle("")
return t return t
} }