From 8dbef7c6471789e9d2636ba8299cc56ee0212994 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 9 Feb 2024 13:38:55 +0100 Subject: [PATCH] add decoder for lsn50 3-way --- deployment/encrypt-secrets.sh | 6 +- .../udi-saerbeck/default/config.json | 22 ++++++ deployment/secrets.enc | 70 +++++++++-------- .../ttn/models/draginoLsn50/draginoLsn50.go | 75 +++++++++++++++++++ src/udi/handlers/ttn/ttn.go | 3 + 5 files changed, 140 insertions(+), 36 deletions(-) create mode 100644 deployment/instances/udi-saerbeck/default/config.json create mode 100644 src/udi/handlers/ttn/models/draginoLsn50/draginoLsn50.go diff --git a/deployment/encrypt-secrets.sh b/deployment/encrypt-secrets.sh index 7a191bd..38a7b6d 100755 --- a/deployment/encrypt-secrets.sh +++ b/deployment/encrypt-secrets.sh @@ -1,9 +1,7 @@ #!/bin/bash -if [ "$ENCRYPTION_KEY" = "" ]; then - echo "ENCRYPTION_KEY not set" - exit 1 -fi +ENCRYPTION_KEY=`openssl rand -hex 32` +echo $ENCRYPTION_KEY SECRETS_PLAINTEXT_FILE=secrets.txt SECRETS_CIPHERTEXT_FILE=secrets.enc diff --git a/deployment/instances/udi-saerbeck/default/config.json b/deployment/instances/udi-saerbeck/default/config.json new file mode 100644 index 0000000..3f9ebc5 --- /dev/null +++ b/deployment/instances/udi-saerbeck/default/config.json @@ -0,0 +1,22 @@ +{ + "mqtt": { + "broker": "ssl://eu1.cloud.thethings.network:8883", + "username": "de-hottis-saerbeck-monitoring@ttn", + "password": "ENV", + "tlsEnable": "true" + }, + "topicMappings": [ + { + "topics": [ "v3/#" ], + "handler": "TTN", + "id": "TTN0", + "config": { + "attributes": { + } + } + } + ], + "archiver": { + "dir": "/archive" + } +} diff --git a/deployment/secrets.enc b/deployment/secrets.enc index 591e7cd..46550f5 100644 --- a/deployment/secrets.enc +++ b/deployment/secrets.enc @@ -1,32 +1,38 @@ -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 -PpipMYgTHN8SPwSBWUzIYQ== +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 +smRxtqBItpVFUdsOVb6bXg== diff --git a/src/udi/handlers/ttn/models/draginoLsn50/draginoLsn50.go b/src/udi/handlers/ttn/models/draginoLsn50/draginoLsn50.go new file mode 100644 index 0000000..dcfe530 --- /dev/null +++ b/src/udi/handlers/ttn/models/draginoLsn50/draginoLsn50.go @@ -0,0 +1,75 @@ +package draginoLsn50 + +import ( + "fmt" + "strconv" + "encoding/json" + "udi/database" +) + +/* + "decoded_payload": { + "ALARM_status": "FALSE", + "BatV": 3.659, + "Temp_Black": 3276.7, + "Temp_Red": 22.6, + "Temp_White": 3276.7, + "Work_mode": "DS18B20" + }, +*/ +type message struct { + ALARM_status string `json:"ALARM_status"` + Bat float32 `json:"BatV"` + Work_mode string `json:"Work_mode"` + Temp_Black string `json:"Temp_Black"` + Temp_Red string `json:"Temp_Red"` + Temp_White string `json:"Temp_White"` +} + +func Parse(fPort int, decodedPayload []byte, _ string, variables *map[string]database.VariableType, attributes *map[string]interface{}, device *database.Device) error { + if fPort != 2 { + return fmt.Errorf("Unexpected fPort %d", fPort) + } + var message message + err := json.Unmarshal(decodedPayload, &message) + if err != nil { + return fmt.Errorf("Unable to parse payload, fPort %d, error %s", fPort, err) + } + (*variables)["Battery"] = database.VariableType { + Label: "Battery", + Variable: "Voltage", + Unit: "V", + Value: message.Bat, + } + (*variables)["Alarm"] = database.VariableType { + Label: "Alarm", + Variable: "Alarm", + Unit: "", + Value: message.ALARM_status, + } + (*variables)["Temp_Red"] = database.VariableType { + Label: "Temp_Red", + Variable: "Temperature", + Unit: "°C", + Value: message.Temp_Red, + } + (*variables)["Temp_Black"] = database.VariableType { + Label: "Temp_Black", + Variable: "Temperature", + Unit: "°C", + Value: message.Temp_Black, + } + (*variables)["Temp_White"] = database.VariableType { + Label: "Temp_White", + Variable: "Temperature", + Unit: "°C", + Value: message.Temp_White, + } + + (*attributes)["Status"] = "Ok" + + return nil +} + + + diff --git a/src/udi/handlers/ttn/ttn.go b/src/udi/handlers/ttn/ttn.go index c86222c..eb0ea3a 100644 --- a/src/udi/handlers/ttn/ttn.go +++ b/src/udi/handlers/ttn/ttn.go @@ -11,6 +11,7 @@ import ( "udi/handlers/ttn/models/draginoLdds75" "udi/handlers/ttn/models/draginoLmds200" "udi/handlers/ttn/models/draginoLse01" + "udi/handlers/ttn/models/draginoLsn50" "udi/handlers/ttn/models/rawPayloadPrinter" "udi/handlers/ttn/models/hottisScd30" "udi/database" @@ -145,6 +146,8 @@ func (self *TTNHandler) Handle(message handler.MessageT) { parser = draginoLmds200.Parse case "dragino-lse01": parser = draginoLse01.Parse + case "dragino-lsn50": + parser = draginoLsn50.Parse case "raw-payload-printer": parser = rawPayloadPrinter.Parse case "hottis-scd30":