From e0515a7d30a9d3030925a8b93cef14cf48585caa Mon Sep 17 00:00:00 2001 From: UBWH <72185209+UBWH@users.noreply.github.com> Date: Wed, 9 Jul 2025 18:26:16 +0800 Subject: [PATCH] Update LwDecode.be (#23655) Add LoRaWAN Config page --- tasmota/berry/lorawan/decoders/LwDecode.be | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/tasmota/berry/lorawan/decoders/LwDecode.be b/tasmota/berry/lorawan/decoders/LwDecode.be index a5c2260e5..134f32143 100644 --- a/tasmota/berry/lorawan/decoders/LwDecode.be +++ b/tasmota/berry/lorawan/decoders/LwDecode.be @@ -138,6 +138,116 @@ end lwdecode = lwdecode_cls() +import webserver +class webPageLoRaWAN : Driver + def sendNodeButton(node) + webserver.content_send("") + end + + def web_add_config_button() + webserver.content_send("

") + end + + #- this method displays the web page -# + def pageLoRaWAN() + if !webserver.check_privileged_access() return nil end + + var inode=1 + var cmdArg + if webserver.has_arg('save') + inode = webserver.arg('node') + tasmota.cmd('LoRaWanAppKey'+inode+' '+ webserver.arg('ak'),true) + cmdArg = webserver.arg('dc') + if !cmdArg cmdArg='"' end + tasmota.cmd('LoRaWanDecoder'+inode+' '+cmdArg,true) + cmdArg = webserver.arg('an') + if !cmdArg cmdArg='"' end + tasmota.cmd('LoRaWanName'+inode+' '+cmdArg,true) + end + + webserver.content_start("LoRaWAN") #- title of the web page -# + webserver.content_send_style() #- send standard Tasmota styles -# + webserver.content_send( + "" + "

LoRaWAN End Devices

" + "") + + var arg, appKey, decoder, name + var hintAK='32 character Application Key' + var hintDecoder='Decoder file, ending in .be' + var hintAN='Device name for MQTT messages' + webserver.content_send("") + for node:1..8 + self.sendNodeButton(node) + end + webserver.content_send("") + for node:9..16 + self.sendNodeButton(node) + end + webserver.content_send("
") + for node:1..16 + arg='LoRaWanAppKey' + str(node) + appKey=tasmota.cmd(arg,true).find(arg) + arg='LoRaWanName' + str(node) + name=tasmota.cmd(arg,true).find(arg) + arg='LoRaWanDecoder' + str(node) + decoder=tasmota.cmd(arg,true).find(arg) + webserver.content_send( + "") + end + + webserver.content_button(webserver.BUTTON_CONFIGURATION) #- button back to conf page -# + webserver.content_stop() #- end of web page -# + end + + #- this is called at Tasmota start-up, as soon as Wifi/Eth is up and web server running -# + def web_add_handler() + #- we need to register a closure, not just a function, that captures the current instance -# + webserver.on("/lrw", / -> self.pageLoRaWAN()) + end +end + +#- create and register driver in Tasmota -# +webPageLoRaWAN_instance = webPageLoRaWAN() +tasmota.add_driver(webPageLoRaWAN_instance) + tasmota.cmd('LoraOption3 off') # Disable embedded decoding tasmota.cmd('SetOption100 off') # Keep LwReceived in JSON message tasmota.cmd('SetOption118 off') # Keep SENSOR as subtopic name