From a2736849023c8318172dc35b96899f77c7872d6f Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 25 Jul 2025 15:35:29 +0200 Subject: [PATCH] Allow LoRaWanName as GUI name --- tasmota/berry/lorawan/decoders/LwDecode.be | 4 +-- .../lorawan/decoders/vendors/dragino/D20.be | 25 ++++++++------- .../decoders/vendors/dragino/DDS75L.be | 21 +++++++------ .../lorawan/decoders/vendors/dragino/LDS02.be | 25 ++++++++------- .../lorawan/decoders/vendors/dragino/LHT52.be | 25 ++++++++------- .../lorawan/decoders/vendors/dragino/LHT65.be | 31 ++++++++++--------- .../decoders/vendors/dragino/PS-L-I5.be | 27 +++++++++------- .../decoders/vendors/dragino/SE01-L.be | 31 ++++++++++--------- .../lorawan/decoders/vendors/merryiot/DW10.be | 29 +++++++++-------- 9 files changed, 121 insertions(+), 97 deletions(-) diff --git a/tasmota/berry/lorawan/decoders/LwDecode.be b/tasmota/berry/lorawan/decoders/LwDecode.be index 7b85afda4..414688d0f 100644 --- a/tasmota/berry/lorawan/decoders/LwDecode.be +++ b/tasmota/berry/lorawan/decoders/LwDecode.be @@ -31,7 +31,7 @@ class lwdecode_cls var deviceData = data['LwReceived'] var deviceName = deviceData.keys()() - var Device = deviceData[deviceName]['Name'] + var Name = deviceData[deviceName]['Name'] var Node = deviceData[deviceName]['Node'] var RSSI = deviceData[deviceName]['RSSI'] var Payload = deviceData[deviceName]['Payload'] @@ -50,7 +50,7 @@ class lwdecode_cls end if Payload.size() && self.LwDecoders.find(decoder) - var decoded = self.LwDecoders[decoder].decodeUplink(Node, RSSI, FPort, Payload) + var decoded = self.LwDecoders[decoder].decodeUplink(Name, Node, RSSI, FPort, Payload) decoded.insert("Node", Node) decoded.insert("RSSI", RSSI) var mqttData = {deviceName:decoded} diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/D20.be b/tasmota/berry/lorawan/decoders/vendors/dragino/D20.be index 5585a2cb6..76e3a332f 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/D20.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/D20.be @@ -9,7 +9,7 @@ import string global.DrgD20Nodes = {} class LwDecoDrgD20 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino D20"} var valid_values = false @@ -78,8 +78,8 @@ class LwDecoDrgD20 if global.DrgD20Nodes.find(Node) global.DrgD20Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] [7] - global.DrgD20Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, tempC1, tempC2, tempC3]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] + global.DrgD20Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, tempC1, tempC2, tempC3]) end return data @@ -88,27 +88,30 @@ class LwDecoDrgD20 static def add_web_sensor() var msg = "" for sensor: global.DrgD20Nodes - var name = string.format("D20-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "D20") > -1 # If LoRaWanName contains D20 use D20- + name = string.format("D20-%i", sensor[1]) + end var name_tooltip = "Dragino D20" - var battery = sensor[3] - var battery_last_seen = sensor[2] - var rssi = sensor[4] - var last_seen = sensor[1] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var tempC1 = sensor[5] + var tempC1 = sensor[6] msg += "┆" # | if tempC1 < 1000 msg += string.format(" ☀️ %.1f°C", tempC1) # Sunshine - Temperature end - var tempC2 = sensor[6] + var tempC2 = sensor[7] if tempC2 < 1000 msg += string.format(" ☀️ %.1f°C", tempC2) end - var tempC3 = sensor[7] + var tempC3 = sensor[8] if tempC3 < 1000 msg += string.format(" ☀️ %.1f°C", tempC3) end diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/DDS75L.be b/tasmota/berry/lorawan/decoders/vendors/dragino/DDS75L.be index 3b27dac81..37abf381a 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/DDS75L.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/DDS75L.be @@ -9,7 +9,7 @@ import string global.dds75lbNodes = {} class LwDecoDDS75LB - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino DDS75-LB/LS"} var valid_values = false @@ -57,8 +57,8 @@ class LwDecoDDS75LB if global.dds75lbNodes.find(Node) global.dds75lbNodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] - global.dds75lbNodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, distance]) + # sensor[0] [1] [2] [3] [4] [5] [6] + global.dds75lbNodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, distance]) end return data @@ -67,16 +67,19 @@ class LwDecoDDS75LB static def add_web_sensor() var msg = "" for sensor: global.dds75lbNodes - var name = string.format("DDS75-L-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "DDS75-L") > -1 # If LoRaWanName contains DDS75-L use DDS75-L- + name = string.format("DDS75-L-%i", sensor[1]) + end var name_tooltip = "Dragino DDS75-L" - var last_seen = sensor[1] - var battery_last_seen = sensor[2] - var battery = sensor[3] - var rssi = sensor[4] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var distance = sensor[5] + var distance = sensor[6] msg += "┆" # | msg += string.format(" ⭳️ %.0fmm", distance) # ⭳ msg += "{e}" # = diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be index 57ba6a7dd..3c0fa1181 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be @@ -9,9 +9,9 @@ import string global.lds02Nodes = {} class LwDecoLDS02 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino LDS02"} - + var valid_values = false var last_seen = 1451602800 var battery_last_seen = 1451602800 @@ -49,8 +49,8 @@ class LwDecoLDS02 if global.lds02Nodes.find(Node) global.lds02Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] - global.lds02Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] + global.lds02Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen]) end return data @@ -59,17 +59,20 @@ class LwDecoLDS02 static def add_web_sensor() var msg = "" for sensor: global.lds02Nodes - var name = string.format("LDS02-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "LDS02") > -1 # If LoRaWanName contains LDS02 use LDS02- + name = string.format("LDS02-%i", sensor[1]) + end var name_tooltip = "Dragino LDS02" - var battery = sensor[3] - var battery_last_seen = sensor[2] - var rssi = sensor[4] - var last_seen = sensor[1] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var door_open = sensor[5] - var door_open_last_seen = sensor[6] + var door_open = sensor[6] + var door_open_last_seen = sensor[7] msg += "┆" # | msg += string.format(" %s %s", (door_open) ? "🔓" : "🔒", # Open or Closed lock - Door lwdecode.dhm(door_open_last_seen)) diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be index 480853c22..3dfa6b73a 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be @@ -9,7 +9,7 @@ import string global.lht52Nodes = {} class LwDecoLHT52 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino LHT52"} var valid_values = false @@ -80,8 +80,8 @@ class LwDecoLHT52 if global.lht52Nodes.find(Node) global.lht52Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] [7] - global.lht52Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, temp_int, humidity, temp_ext]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] + global.lht52Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, temp_int, humidity, temp_ext]) end return data @@ -90,18 +90,21 @@ class LwDecoLHT52 static def add_web_sensor() var msg = "" for sensor: global.lht52Nodes - var name = string.format("LHT52-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "LHT52") > -1 # If LoRaWanName contains LHT52 use LHT52- + name = string.format("LHT52-%i", sensor[1]) + end var name_tooltip = "Dragino LHT52" - var battery = sensor[3] - var battery_last_seen = sensor[2] - var rssi = sensor[4] - var last_seen = sensor[1] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var temp_int = sensor[5] - var humidity = sensor[6] - var temp_ext = sensor[7] + var temp_int = sensor[6] + var humidity = sensor[7] + var temp_ext = sensor[8] msg += "┆" # | if temp_int < 1000 msg += string.format(" ☀️ %.1f°C", temp_int) # Sunshine - Temperature internal diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be index dd0f6a2bd..3c01cf311 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be @@ -9,9 +9,9 @@ var LHT65_BatteryStatus = ["Very low <= 2.5V","Low <=2.55V","OK","Good >= 2.65V" global.lht65Nodes = {} class LwDecoLHT65 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino LHT65"} - + var valid_values = false var last_seen = 1451602800 var battery_last_seen = 1451602800 @@ -150,8 +150,8 @@ class LwDecoLHT65 if global.lht65Nodes.find(Node) global.lht65Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] - global.lht65Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, rssi, temp_int, humidity, temp_ext, door_open, door_open_last_seen]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] + global.lht65Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, rssi, temp_int, humidity, temp_ext, door_open, door_open_last_seen]) end return data @@ -160,20 +160,23 @@ class LwDecoLHT65 static def add_web_sensor() var msg = "" for sensor: global.lht65Nodes - var name = string.format("LHT65-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "LHT65") > -1 # If LoRaWanName contains LHT65 use LHT65- + name = string.format("LHT65-%i", sensor[1]) + end var name_tooltip = "Dragino LHT65" - var battery = sensor[3] - var battery_last_seen = sensor[2] - var rssi = sensor[4] - var last_seen = sensor[1] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var temp_int = sensor[5] - var humidity = sensor[6] - var temp_ext = sensor[7] - var door_open = sensor[8] - var door_open_last_seen = sensor[9] + var temp_int = sensor[6] + var humidity = sensor[7] + var temp_ext = sensor[8] + var door_open = sensor[9] + var door_open_last_seen = sensor[10] msg += "┆" # | if temp_int < 1000 msg += string.format(" ☀️ %.1f°C", temp_int) # Sunshine - Temperature diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/PS-L-I5.be b/tasmota/berry/lorawan/decoders/vendors/dragino/PS-L-I5.be index 728640a39..122cc7eb5 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/PS-L-I5.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/PS-L-I5.be @@ -10,7 +10,7 @@ import string global.psli5Nodes = {} class LwDecoPSLI5 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino PS-LB/LS-I5"} var valid_values = false @@ -20,9 +20,9 @@ class LwDecoPSLI5 var rssi = RSSI var Water_deep_cm = 0 - var Probe_mod - var IDC_input_mA - var modelRangeCm = 500 # 4mA=0cm, 20mA=500cm + var Probe_mod + var IDC_input_mA + var modelRangeCm = 500 # 4mA=0cm, 20mA=500cm if global.psli5Nodes.find(Node) last_seen = global.psli5Nodes.item(Node)[1] @@ -77,8 +77,8 @@ class LwDecoPSLI5 if global.psli5Nodes.find(Node) global.psli5Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] - global.psli5Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, Water_deep_cm]) + # sensor[0] [1] [2] [3] [4] [5] [6] + global.psli5Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, Water_deep_cm]) end return data @@ -87,16 +87,19 @@ class LwDecoPSLI5 static def add_web_sensor() var msg = "" for sensor: global.psli5Nodes - var name = string.format("PS-L-I5-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "PS-L-I5") > -1 # If LoRaWanName contains PS-L-I5 use PS-L-I5- + name = string.format("PS-L-I5-%i", sensor[1]) + end var name_tooltip = "Dragino PS-L-I5" - var last_seen = sensor[1] - var battery_last_seen = sensor[2] - var battery = sensor[3] - var rssi = sensor[4] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var Water_deep_cm = sensor[5] + var Water_deep_cm = sensor[6] msg += "┆" # | msg += string.format(" ⭳️ %.1fcm", Water_deep_cm) # тн│ msg += "{e}" # = diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/SE01-L.be b/tasmota/berry/lorawan/decoders/vendors/dragino/SE01-L.be index 8aded6a01..23fa872ba 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/SE01-L.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/SE01-L.be @@ -11,7 +11,7 @@ import string global.se01LNodes = {} class LwDecoSE01L - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"Dragino SE01-LB/LS"} var valid_values = false @@ -98,8 +98,8 @@ class LwDecoSE01L if global.se01LNodes.find(Node) global.se01LNodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] - global.se01LNodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, temp, conductivity, moisture, dielectric, mod]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] + global.se01LNodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, temp, conductivity, moisture, dielectric, mod]) end return data @@ -108,24 +108,27 @@ class LwDecoSE01L static def add_web_sensor() var msg = "" for sensor: global.se01LNodes - var name = string.format("SE01-L-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "SE01-L") > -1 # If LoRaWanName contains SE01-L use SE01-L- + name = string.format("SE01-L-%i", sensor[1]) + end var name_tooltip = "Dragino SE01-L" - var last_seen = sensor[1] - var battery_last_seen = sensor[2] - var battery = sensor[3] - var rssi = sensor[4] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var temp = sensor[5] - var conductivity = sensor[6] - var moisture = sensor[7] - var dielectric = sensor[8] - var mod = sensor[9] + var temp = sensor[6] + var conductivity = sensor[7] + var moisture = sensor[8] + var dielectric = sensor[9] + var mod = sensor[10] msg += "┆" # | if mod - msg += string.format(" κ %.1f", dielectric ) # Kappa - dielectric + msg += string.format(" κ %.1f", dielectric ) # Kappa - dielectric msg += string.format(" 💧️ %u", moisture) # Raindrop - moisture msg += string.format(" σ %u", conductivity) # Sigma - conductivity msg += " (raw)" diff --git a/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be b/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be index 3d28ed60d..a41887d1d 100644 --- a/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be +++ b/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be @@ -9,7 +9,7 @@ import string global.dw10Nodes = {} class LwDecoDW10 - static def decodeUplink(Node, RSSI, FPort, Bytes) + static def decodeUplink(Name, Node, RSSI, FPort, Bytes) var data = {"Device":"MerryIoT DW10"} var valid_values = false @@ -59,8 +59,8 @@ class LwDecoDW10 if global.dw10Nodes.find(Node) global.dw10Nodes.remove(Node) end - # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] - global.dw10Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen, button_pressed, temperature, humidity]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] + global.dw10Nodes.insert(Node, [Name, Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen, button_pressed, temperature, humidity]) end return data @@ -69,20 +69,23 @@ class LwDecoDW10 static def add_web_sensor() var msg = "" for sensor: global.dw10Nodes - var name = string.format("DW10-%i", sensor[0]) + var name = sensor[0] + if string.find(name, "DW10") > -1 # If LoRaWaName contains DW10 use DW10- + name = string.format("DW10-%i", sensor[1]) + end var name_tooltip = "MerryIoT DW10" - var battery = sensor[3] - var battery_last_seen = sensor[2] - var rssi = sensor[4] - var last_seen = sensor[1] + var last_seen = sensor[2] + var battery_last_seen = sensor[3] + var battery = sensor[4] + var rssi = sensor[5] msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - var door_open = sensor[5] - var door_open_last_seen = sensor[6] - var button_pressed = sensor[7] - var temperature = sensor[8] - var humidity = sensor[9] + var door_open = sensor[6] + var door_open_last_seen = sensor[7] + var button_pressed = sensor[8] + var temperature = sensor[9] + var humidity = sensor[10] msg += "┆" # | msg += string.format(" ☀️ %.1f°C", temperature) # Sunshine - Temperature msg += string.format(" 💧 %.1f%%", humidity) # Raindrop - Humidity