尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Tasmota LoRaWan_Decoders 扩展深度解析:解码器管理、GUI 配置与 Home Assistant 自动发现

Tasmota LoRaWan_Decoders 扩展深度解析:解码器管理、GUI 配置与 Home Assistant 自动发现 Tasmota LoRaWan_Decoders 扩展深度解析解码器管理、GUI 配置与 Home Assistant 自动发现【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/Tasmota导读LoRaWan_Decoders.tapp是 Tasmota 官方推出的 Berry 扩展包用于在 ESP32 等 LoRaWan 桥接设备上按厂商格式解码 LoRaWan 终端的加密上行载荷并通过 Web 界面完成 AppKey、设备名称与解码器的可视化配置。本文以该扩展的 changelog.md 为骨架结合仓库内主模块、各厂商解码器与底层桥接驱动源码讲解扩展的安装构建、解码器文件下拉框的三种回退机制、/lrw配置页面、MQTT 输出与 Home Assistant 自动发现帮助开发者完整理解并二次开发这一解码体系。一、扩展概览一个 tapp 内含什么LoRaWan_Decoders.tapp本质上是把整个 tasmota/berry/extensions/LoRaWan_Decoders 目录用 zip 以不压缩-0方式打包成的 Tasmota Berry 扩展文件。从 filelist 可见其构成文件作用autoexec.be扩展入口负责加载并注册主模块lorawan_decoders.be主模块GUI、MQTT 发布、解码调度、HA Discoverymanifest.json扩展元数据名称、版本、作者、最低 Tasmota 版本changelog.md/filelist版本记录与文件清单作为 GUI 回退数据源D20.be、DDS75L.be、DW10.be等 12 个.be各厂商终端的解码器实现walker.beGlamos WALKER 定位器解码器含轨迹历史命令manifest.json 声明了扩展身份作者 Theo Arends最低 Tasmota 版本0x0E060001描述为 Decode LoRaWan devices。加载入口 autoexec.beautoexec.be 通过do ... end块避免污染全局命名空间使用introspect.module()加载但不缓存主模块再调用tasmota.add_extension()完成注册移除扩展则使用tasmota.unload_extension(LoRaWan Decoders)。二、解码器文件下拉框path.listdir 优先、filelist 回退、硬编码兜底changelog 中 v26.1.18.0 与 v26.1.19.0 两条记录的核心变化正是配置页 Decoder File 下拉框数据来源的演进。在 lorawan_decoders.be 中实现了三级回退机制path.listdir(/.extensions/LoRaWan_Decoders.tapp#)Tasmota ≥ v15.2.0.3直接从 tapp 归档内实时枚举文件返回列表如[D20.be, DDS75L.be, ...]这是 changelog v26.1.19.0 引入的优选方案可保证与 tapp 内实际文件始终一致回读filelist若listdir返回空则打开LoRaWan_Decoders.tapp#filelist读取文件清单把\r\n/\n统一替换为|后用string.split切分为列表再pop()掉末尾空槽硬编码兜底连 filelist 都不可用时直接使用内置列表[D20, DDS75L, DW10, LDS02, LHT52, LHT65, PS-L-I5, SE01-L, SN50v3L, WS301, WS522, walker]。无论哪种来源随后都会统一过滤掉filelist、changelog.md、autoexec.be、lorawan_decoders.be、manifest.json等非解码器文件并把.be后缀剥除后作为下拉选项值。这也解释了为什么 filelist 文件必须随 tapp 一同构建它是低版本 Tasmota 下的回退数据源。官方构建命令changelog 记录了构建命令的两次演进。最终形态v26.1.18.0 起为rm LoRaWan_Decoders.tapp; ls LoRaWan_Decoders LoRaWan_Decoders/filelist; zip -j -0 LoRaWan_Decoders.tapp LoRaWan_Decoders/*即在打包前先执行ls LoRaWan_Decoders LoRaWan_Decoders/filelist动态生成文件清单再以-j去除目录层级、-0禁用压缩打包。同样的命令也写在 lorawan_decoders.be 与 autoexec.be 的注释中。三、配置界面/lrw 页面与 End Device 参数主模块内lorawan_settings类负责注册 Web 路由webserver.on(/lrw, ...)并在配置页增加 LoRaWAN 按钮web_add_config_button。页面通过_get_max_nodes()调用tasmota.cmd(LoRaWanNode, true)获取节点启用掩码字符串形如[1,!2,...]从而推断已分配节点数maxnode再尝试读取_LoRaWan中的MaxNodes字段若 Tasmota 版本过低 v15.2.0.2则回退到编译常量TAS_LORAWAN_ENDNODES 16。每个节点对应一个带编号 Tab 的表单保存时下发四条命令见 lorawan_decoders.beGUI 字段底层命令校验/默认Enabled 复选框LoRaWanNoden 1/0未勾选时为0Application KeyLoRaWanAppKeyn 32位hexHTML 层pattern[A-Fa-f0-9]{32}、minlength32、maxlength32、必填Device NameLoRaWanNamen 名称空值回退为用于 MQTT 消息中的设备名Decoder FileLoRaWanDecodern 解码器名空值回退为对应解码器文件如LHT65AppKey 的 32 字符约束与 xdrv_73_8_lorawan_bridge.ino 中 32 character AppKey using commandLoRaWanAppKey vendor provided appkey 的说明一致。v26.4.6.0 修复的 Lock/Unlock 图标 与 GUI 缓存计时器溢出也正位于本页面的 Tab 切换 JS 与web_msg_cache缓存逻辑中。四、解码链路与 MQTT 输出lorawan_decoders主类初始化时init执行了一系列关键配置tasmota.add_rule(LwReceived, /value, trigger, payload - self.lw_decode(payload)) tasmota.cmd(LoraOption3 off, true) # 使用内置解码否——由本扩展接管 tasmota.cmd(SetOption100 off, true) # LwReceived 保留在 JSON 消息中 tasmota.cmd(SetOption118 off, true) # SENSOR 作为子主题名 tasmota.cmd(SetOption119 off, true) # 设备地址保留在 JSON 消息中 tasmota.cmd(LoRaWanBridge on, true) # 启用 LoRaWan 桥接底层桥接驱动 xdrv_73_8_lorawan_bridge.ino 负责接收已入网终端的密文、用 AppKey 解密并产生LwReceived规则事件lw_decode()则按以下流程处理从data[LwReceived]取出设备名与设备信息含Decoder、Payload、Node、RSSI、FPort、DevEUIh/DevEUIl若该解码器尚未加载通过load(.extensions/LoRaWan_Decoders.tapp# decoder)动态加载对应.be文件并将global.LwDeco缓存到self.lw_decoders调用解码器的decodeUplink(Name, Node, RSSI, FPort, payload)静态方法得到解码结果依SetOption83决定是否用LwDecoded包裹依SetOption89决定是否使用topic/DevEUIhDevEUIl的独立主题最后mqtt.publish发布 JSON。为降低 Web 刷新与 MQTT 重复消息开销扩展还实现了载荷哈希去重_calculate_payload_hash与5 秒 Web 缓存web_msg_cache/cache_timeout后者即 changelog v26.4.6.0 修复的 GUI cache timer overflow。五、解码器文件的结构约定每个解码器.be文件遵循统一约定定义类并在文件末尾赋值global.LwDeco LwDecoXXX类需实现decodeUplink(Name, Node, RSSI, FPort, Bytes)与add_web_sensor()两个静态方法可选HAssSensors()、deviceInfo()以支持 HA Discovery以及unload()清理全局缓存。以 LHT65.beDragino 温湿度传感器为例FPort 2、11 字节解析内部温湿度、电池电压 0x3fff取 14 位、电池状态枚举[Very low 2.5V,Low 2.55V,OK,Good 2.65V]并按Bytes[6] 0x0F区分外部传感器类型0无、1温度、4干接点、5光照、6ADC、7/8计数、9DS18B20 时间戳、15DS18B20 IDFPort 5、7 字节上报 Sensor_Model、固件版本、频段映射到LwRegions全局数组、子频段与电池电压通过全局global.lht65Nodes字典按 Node 缓存最近状态保证解码器重载后数据不丢data survive to decoder reloadunload()时再global.undef清理。WS301.beMilesight 门磁则展示了另一种载荷格式按channel_id/channel_type分片解析0x01/0x75电池、0x03/0x00开门、0x04/0x00安装状态遇到未知 channel 立即跳出循环。walker.beGlamos 定位器是更复杂的例子它把纬度/经度从 3 字节、海拔从 2 字节定点解码并动态注册WalkerReloadCmd、WalkerResetCounter、WalkerEnableTrack、WalkerDisableTrack、WalkerClearHistory、WalkerGetHistory等自定义命令同时声明static var hashCheck false让主模块跳过哈希去重hashCheck属性检测逻辑见 lorawan_decoders.be因为其Counter状态必须逐帧累加。Web 主控页的传感器表格由全局LwSensorFormatter_cls提供统一渲染电池电压按 2.5V–3.1V 映射为 0–100% 电量图标RSSI 换算为 4 格信号条dhm()把时间差格式化为99d/99h/99m的紧凑字符串。六、Home Assistant 自动发现v26.4.6.1 新增changelog 最新条目v26.4.6.1为DDS75L 与 LHT52增加 HAss Discovery 支持前提是SetOption19 0关闭 Tasmota 内置 HA 自动发现避免与扩展自身的发现冲突该选项在 support_command.ino 中的定义是 Control Home Assistant automatic discovery。在解码器首次加载时主模块检查tasmota.get_option(19) 0然后调用解码器的HAssSensors()与deviceInfo()获取传感器清单与厂商/型号信息对每个传感器构造单组件发现载荷并发布到homeassistant/sensor/tasmota_MAC_sensor/configretaintrue其中dev设备块ids取 MAC 后 6 位、name取 Tasmota 设备名、mf/mdl来自解码器val_tpl值模板按SetOption83决定从value_json.LwDecoded[...]或顶层取值并用cleanString()把传感器名规范化为[a-zA-Z0-9_-]stat_t状态主题由_cache_topic()依据FullTopic/Status.Topic/Prefix3拼接的.../SENSOR主题加上DevEUIhDevEUIl构成avty_t可用性主题同一主题将SENSOR替换为LWT配pl_avail: Online/pl_not_avail: Offline。若解码器未实现HAssSensors()异常被捕获并以日志LwD: HA Discovery warning记录不影响正常解码流程。七、版本演进小结版本关键变更v26.1.15.0首次作为LoRaWan_Decoders.tapp公开Theo Arendsv26.1.18.0Decoder File 下拉框改为基于 tapp 内文件构建命令加入ls filelistv26.1.19.0下拉框改用path.listdir(.tapp)Tasmota v15.2.0.3filelist 退居回退方案v26.4.6.0修复 GUI 缓存计时器溢出与 Lock/Unlock 图标v26.4.6.1DDS75L、LHT52 支持 HAss Discovery需SetOption19 0#24458从这条演进线可以清晰看到扩展先以静态 filelist 驱动 GUI再升级为 tapp 虚拟文件系统的动态枚举功能上从纯解码逐步扩展到 Web 配置、MQTT 发布、Web 传感器表格乃至 HA 生态对接。开发者如需新增终端型号只需参照 LHT65.be 的结构实现decodeUplink等约定方法放入LoRaWan_Decoders目录并重新执行第二节的构建命令即可。【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/Tasmota创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表