Consolidate LoRaWan decoding Device, Node and RSSI into LwDecode

- Use LoRaWanName as JSON device name
- Use SetOption83 to control JSON LwDecoded field pair display
This commit is contained in:
Theo Arends 2025-07-24 10:55:42 +02:00
parent 4a632e9ef1
commit 93c46dc3f9
9 changed files with 19 additions and 34 deletions

View File

@ -31,6 +31,7 @@ class lwdecode_cls
var deviceData = data['LwReceived'] var deviceData = data['LwReceived']
var deviceName = deviceData.keys()() var deviceName = deviceData.keys()()
var Device = deviceData[deviceName]['Name']
var Node = deviceData[deviceName]['Node'] var Node = deviceData[deviceName]['Node']
var RSSI = deviceData[deviceName]['RSSI'] var RSSI = deviceData[deviceName]['RSSI']
var Payload = deviceData[deviceName]['Payload'] var Payload = deviceData[deviceName]['Payload']
@ -50,7 +51,14 @@ class lwdecode_cls
if Payload.size() && self.LwDecoders.find(decoder) if Payload.size() && self.LwDecoders.find(decoder)
var decoded = self.LwDecoders[decoder].decodeUplink(Node, RSSI, FPort, Payload) var decoded = self.LwDecoders[decoder].decodeUplink(Node, RSSI, FPort, Payload)
var mqttData = {"LwDecoded":{deviceName:decoded}} decoded.insert("Device", Device)
decoded.insert("Node", Node)
decoded.insert("RSSI", RSSI)
var mqttData = {deviceName:decoded}
# Abuse SetOption83 - (Zigbee) Use FriendlyNames (1) instead of ShortAddresses (0) when possible
if tasmota.get_option(83) == 0 # SetOption83 - Remove LwDecoded form JSON message (1)
mqttData = {"LwDecoded":{deviceName:decoded}}
end
mqtt.publish(self.topic, json.dump(mqttData)) mqtt.publish(self.topic, json.dump(mqttData))
tasmota.global.restart_flag = 0 # Signal LwDecoded successful (default state) tasmota.global.restart_flag = 0 # Signal LwDecoded successful (default state)
end end

View File

@ -10,10 +10,7 @@ global.DrgD20Nodes = {}
class LwDecoDrgD20 class LwDecoDrgD20
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino D20"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -10,10 +10,7 @@ global.dds75lbNodes = {}
class LwDecoDDS75LB class LwDecoDDS75LB
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino DDS75-LB/LS"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -10,10 +10,7 @@ global.lds02Nodes = {}
class LwDecoLDS02 class LwDecoLDS02
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino LDS02"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -10,10 +10,7 @@ global.lht52Nodes = {}
class LwDecoLHT52 class LwDecoLHT52
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino LHT52"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -10,11 +10,7 @@ global.lht65Nodes = {}
class LwDecoLHT65 class LwDecoLHT65
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino LHT65"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
data.insert("poll_message_status",(Bytes[6] & 0x40) >> 6)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800
@ -41,6 +37,8 @@ class LwDecoLHT65
var NoConnect = (Bytes[6] & 0x80) >> 7 var NoConnect = (Bytes[6] & 0x80) >> 7
## SENSOR DATA ## ## SENSOR DATA ##
data.insert("poll_message_status",(Bytes[6] & 0x40) >> 6)
if 2 == FPort && Bytes.size() == 11 if 2 == FPort && Bytes.size() == 11
var TempC var TempC

View File

@ -11,10 +11,7 @@ global.psli5Nodes = {}
class LwDecoPSLI5 class LwDecoPSLI5
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino PS-LB/LS-I5"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -12,10 +12,7 @@ global.se01LNodes = {}
class LwDecoSE01L class LwDecoSE01L
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"Dragino SE01-LB/LS"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800

View File

@ -10,10 +10,7 @@ global.dw10Nodes = {}
class LwDecoDW10 class LwDecoDW10
static def decodeUplink(Node, RSSI, FPort, Bytes) static def decodeUplink(Node, RSSI, FPort, Bytes)
var data = {"Device":"MerryIoT DW10"} var data = {}
data.insert("Node", Node)
data.insert("RSSI", RSSI)
var valid_values = false var valid_values = false
var last_seen = 1451602800 var last_seen = 1451602800
var battery_last_seen = 1451602800 var battery_last_seen = 1451602800