emu
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
2023-12-11 16:50:28 +01:00
parent 668fc20be9
commit b3de6182b3
4 changed files with 87 additions and 73 deletions

View File

@ -9,67 +9,36 @@
"dev_addr": "260B0E1A" "dev_addr": "260B0E1A"
}, },
"correlation_ids": [ "correlation_ids": [
"gs:uplink:01HH4TTA29NV2GZXGYQ61R2BVZ" "gs:uplink:01HH53T0RPG7QFT6N267J3Q2PA"
], ],
"received_at": "2023-12-08T13:45:34.236364394Z", "received_at": "2023-12-08T16:22:41.900339885Z",
"uplink_message": { "uplink_message": {
"session_key_id": "AYxJcJyrJgr7XiIUdO3EBA==", "session_key_id": "AYxJcJyrJgr7XiIUdO3EBA==",
"f_port": 1, "f_port": 2,
"f_cnt": 64, "f_cnt": 374,
"frm_payload": "3B1zZQsAAAAADAAAAAANAAAAAA4AAAAAFwAYABkA8ABm", "frm_payload": "BEFzZSQAAAAAAAAAACYAAAAAAAAAACgAAAAAAAAAACoAAAAAAAAAAMk=",
"decoded_payload": { "decoded_payload": {
"Active Power L1": { "Active Energy Export T1 64bit": {
"cfgphase": 1, "unit": "Wh",
"unit": "W",
"value": 0 "value": 0
}, },
"Active Power L123": { "Active Energy Import T1 64bit": {
"unit": "W", "unit": "Wh",
"value": 0 "value": 0
}, },
"Active Power L2": { "Reactive Energy Export T1 64bit": {
"cfgphase": 2, "unit": "varh",
"unit": "W",
"value": 0 "value": 0
}, },
"Active Power L3": { "Reactive Energy Import T1 64bit": {
"cfgphase": 3, "unit": "varh",
"unit": "W",
"value": 0
},
"Powerfactor L1": {
"cfgphase": 1,
"unit": "Cos",
"value": 0,
"value_raw": 0
},
"Powerfactor L2": {
"cfgphase": 2,
"unit": "Cos",
"value": 0,
"value_raw": 0
},
"Powerfactor L3": {
"cfgphase": 3,
"unit": "Cos",
"value": 0,
"value_raw": 0
},
"errorcode": {
"CTRatioChange": false,
"ImpulseRatioChange": false,
"ImpulseWidthChange": false,
"LogbookFull": false,
"PowerFail": false,
"TimeChanged": false,
"VTRatioChange": false,
"value": 0 "value": 0
}, },
"medium": { "medium": {
"desc": "Electricity", "desc": "Electricity",
"type": 1 "type": 1
}, },
"timeStamp": 1702043100 "timeStamp": 1702052100
}, },
"rx_metadata": [ "rx_metadata": [
{ {
@ -77,18 +46,18 @@
"gateway_id": "eui-b827ebfffe8b01dd", "gateway_id": "eui-b827ebfffe8b01dd",
"eui": "B827EBFFFE8B01DD" "eui": "B827EBFFFE8B01DD"
}, },
"time": "2023-12-08T13:45:33.311665058Z", "time": "2023-12-08T16:22:40.969499111Z",
"timestamp": 3841207982, "timestamp": 383972090,
"rssi": -86, "rssi": -93,
"channel_rssi": -86, "channel_rssi": -93,
"snr": 13.25, "snr": 12.75,
"location": { "location": {
"latitude": 51.404164272478724, "latitude": 51.404164272478724,
"longitude": 7.060088589208832, "longitude": 7.060088589208832,
"source": "SOURCE_REGISTRY" "source": "SOURCE_REGISTRY"
}, },
"uplink_token": "CiIKIAoUZXVpLWI4MjdlYmZmZmU4YjAxZGQSCLgn6//+iwHdEK7d0KcOGgsI/rvMqwYQn82PDCCwr9nO5eulAg==", "uplink_token": "CiIKIAoUZXVpLWI4MjdlYmZmZmU4YjAxZGQSCLgn6//+iwHdEPrli7cBGgwI0YXNqwYQoteqxwIgkMGUtJb+pwI=",
"received_at": "2023-12-08T13:45:34.006723465Z" "received_at": "2023-12-08T16:22:41.668146811Z"
} }
], ],
"settings": { "settings": {
@ -99,13 +68,13 @@
"coding_rate": "4/5" "coding_rate": "4/5"
} }
}, },
"frequency": "868300000", "frequency": "867700000",
"timestamp": 3841207982, "timestamp": 383972090,
"time": "2023-12-08T13:45:33.311665058Z" "time": "2023-12-08T16:22:40.969499111Z"
}, },
"received_at": "2023-12-08T13:45:34.027717446Z", "received_at": "2023-12-08T16:22:41.687510109Z",
"confirmed": true, "confirmed": true,
"consumed_airtime": "0.092416s", "consumed_airtime": "0.102656s",
"version_ids": { "version_ids": {
"brand_id": "emu", "brand_id": "emu",
"model_id": "emu-prof-ii", "model_id": "emu-prof-ii",

View File

@ -1,11 +0,0 @@
package emuProfIILoRa
import (
"fmt"
"udi/database"
)
func Parse(decodedPayload interface{}) ([]database.VariableType, error) {
return nil, fmt.Errorf("Nothing works so far")
}

View File

@ -0,0 +1,53 @@
package emuProfIILoRaCfg1
// provisioning device with
// f_port=1: 01 00 0A 0B 0C 0D 0E 17 18 19 F0 4C
// f_port=2: 01 00 0A 24 26 28 2A 7A
import (
"log"
"fmt"
//"encoding/json"
"udi/database"
)
/*
const nameMapping = map[string]string {
"Active Energy Export T1 64bit": "ActiveEnergyExport",
"Reactive Energy Export T1 64bit": "ReactiveEnergyExport",
"Active Energy Import T1 64bit": "ActiveEnergyImport",
"Reactive Energy Import T1 64bit": "ReactiveEnergyImport",
}
*/
type emuVariable struct {
Value interface{} `json:"value"`
Unit string `json:"unit"`
}
func i2m(i interface{}) (map[string]interface{}, error) {
o, ok := i.(map[string]interface{})
if ! ok {
return nil, fmt.Errorf("Unable to transform payload, outer stage")
}
return o, nil
}
func Parse(fPort int, decodedPayload interface{}) (map[string]database.VariableType, error) {
dp, err := i2m(decodedPayload)
if err != nil {
return nil, err
}
variables := make(map[string]database.VariableType)
for key, item := range dp {
log.Printf("Key: %s, Item: %s", key, item)
variables[key] = database.VariableType{ Variable: key, Unit: item.(map[string]interface{})["unit"], Value: item.(map[string]interface{})["value"] }
}
return variables, nil
}

View File

@ -5,7 +5,7 @@ import "fmt"
import "encoding/json" import "encoding/json"
import "udi/config" import "udi/config"
import "udi/handlers/handler" import "udi/handlers/handler"
import "udi/handlers/ttn/models/emuProfIILoRa" import "udi/handlers/ttn/models/emuProfIILoRaCfg1"
import "udi/database" import "udi/database"
var idSeq int = 0 var idSeq int = 0
@ -115,13 +115,16 @@ func (self *TTNHandler) Handle(message handler.MessageT) {
log.Printf("DeviceLabel: %s, DeviceType: %s", device.Label, device.DeviceType.ModelIdentifier) log.Printf("DeviceLabel: %s, DeviceType: %s", device.Label, device.DeviceType.ModelIdentifier)
var parser func(interface{}) ([]database.VariableType, error) var parser func(int, interface{}) (map[string]database.VariableType, error)
switch device.DeviceType.ModelIdentifier { switch device.DeviceType.ModelIdentifier {
case "emu-prof-ii-lora": case "emu-prof-ii-lora-cfg1":
parser = emuProfIILoRa.Parse parser = emuProfIILoRaCfg1.Parse
default:
lost(fmt.Sprintf("No parser found for %s", device.DeviceType.ModelIdentifier), message)
return
} }
_, err3 := parser(uplinkMessage.UplinkMessage.DecodedPayload) _, err3 := parser(uplinkMessage.UplinkMessage.FPort, uplinkMessage.UplinkMessage.DecodedPayload)
if err3 != nil { if err3 != nil {
lost(fmt.Sprintf("Model parser failed: %s", err3), message) lost(fmt.Sprintf("Model parser failed: %s", err3), message)
return return