openwrt增加自定义网页

一. 简介

本文介绍在OpenWRT中使用Luci框架定制设备配置页面的方法,包括添加静态页面和参数配置页面的过程,以及如何利用lua脚本实现界面与功能的结合。

二. Luci介绍

UCI 是 Openwrt 中为实现所有系统配置的一个统一接口,英文名 Unified Configuration Interface,即统一配置接口。轻量级 LUA 语言的官方版本只包括一个精简的核心和最基本的库。这使得 LUA 体积小、启动速度快,从而适合嵌入在别的程序里。 LuCI 即是这两个项目的合体,可以实现路由的网页配置界面。

建议在学习LuCI界面开发之前,先了解下LUA 的相关语法知识。
参考教程https://www.runoob.com/lua/lua-basic-syntax.html

LuCI采用了MVC (模型/视图/控制)三层架构,在系统的/usr/lib/lua/luci/下有三个目录 model、 view、 controller, 它们分别对应 M、V、 C。也可以在openwrt源码/feeds/luci/applications/luci-app-xx/luasrc/ 或 openwrt源码/feeds/luci/modules/luci-mod-admin-full/luasrc/ 目录下阅读官方的源码例程,学习参考, 我们要做的主要工作就是基于 LuCI 框架编写LUA 脚本、在 html 页面中嵌入 LUA 脚本。

三. Openwrt界面开发

添加界面有两种方式,大同小异:
① 在开发板系统中添加界面方式。
② 在源码中添加界面方式。

第①种在系统板上修改界面配置文件后,可以马上在网页端看到修改效果,不用重新编译Openwrt源码和烧写固件。
优点:开发便捷
缺点:重刷系统后相关文件修改信息丢失。
两者开发方式就类似于在开发板上挂载NFS开发;第②种适合产品发布。

3.1 在开发板系统中添加界面

按照前面所讲的MVC模型,将涉及的三个文件夹列出来:

  1. /usr/lib/lua/luci/controller/*
  2. /usr/lib/lua/luci/view/*
  3. /usr/lib/lua/luci/model/cbi/*

后面我们也将围绕这三个文件夹进行界面开发。

3.1.1 添加控制controller

进入 /usr/lib/lua/luci/controller/ 目录下, mkdir myapp 创建myapp/目录,并在myapp目录下创建new_tab.lua 文件,在文件中输入如下内容:

module("luci.controller.myapp.new_tab", package.seeall) 
function index()entry({"admin", "new_tab"}, firstchild(),translate("cfg"), 1).dependent=falseentry({"admin", "new_tab", "sn"}, cbi("myapp-mymodule/gateway_sn"), translate("sn"), 2)entry({

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93866.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务的编程测评系统11-jmeter-redis-竞赛列表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1. 退出登录1.1 后端1.2 前端2. 获取当前用户信息3. C端用户竞赛列表功能3.1 后端3.2 Jmeter-基本操作3.3 数据版本性能测试-压力测试3.4 redis版本-缓存结构设计…

海滨浴场应急广播:守护碧海蓝天的安全防线

海滨浴场应急广播:守护碧海蓝天的安全防线!海滨浴场,是人们休闲娱乐、亲近自然的理想场所。然而,变幻莫测的海洋环境也潜藏着诸多安全隐患,如溺水、离岸流、海蜇蜇伤、极端天气等。为了有效应对突发事件,保…

华曦达港股IPO观察丨以创新研发为笔,构建AI Home智慧生活新蓝图

深圳市华曦达科技股份有限公司自创立伊始,便将敏锐的市场洞察与前沿技术追踪视为生命线。通过构建一支卓越的研发团队,公司专注于自主核心技术的深耕与积累,以精密的硬件与创新的软件筑起坚实的技术壁垒。其精心打造的“技术创新-…

构建现代化的Web UI自动化测试框架:从图片上传测试实践说起

构建现代化的Web UI自动化测试框架:从图片上传测试实践说起如何设计一个可维护、可扩展的Web UI自动化测试框架?本文通过一个图片上传测试实例,详细介绍专业测试框架的搭建与实践。当前测试框架结构 首先,让我们了解一下当前的测试…

Apache IoTDB:大数据时代时序数据库选型的技术突围与实践指南

摘要:时序数据库在大数据时代迎来爆发式增长,IoTDB作为Apache顶级开源项目展现出显著优势:1. 性能卓越:支持千万级数据点/秒写入,18:1高压缩比,查询延迟低至500ms;2. 创新架构:采用树…

2025年8月16日(星期六):雨骑古莲村游记

清晨,当第一缕微光还未完全驱散夜幕的静谧,我们这群由校长领衔的骑行爱好者已整装待发。咖啡节早市尚未开摊,空气中弥漫着一种期待与宁静交织的氛围,仿佛连时间都在为我们即将开启的旅程而放慢脚步。今天的目标是古莲村&#xff0…

Pandas数据预处理中缺失值处理

一、缺失值的概念表现形式1.数据库中常用null表示2.部分编程语言中用NA表示3.可能表现为空字符串(‘’)或特定数值4.在Pandas中统一用NaN表示(来自NumPy库,NaN、NAN、nan本质一致)NaN的特性1.与任何值都不相等&#xf…

计算机网络:(十五)TCP拥塞控制与拥塞控制算法深度剖析

> 当网络变成"堵城",TCP如何化身智能交通指挥家?揭秘百万级并发背后的流量控制艺术! ### 一、生死攸关:为什么需要拥塞控制? **真实灾难案例**:1986年劳伦斯伯克利实验室网络大崩溃,因缺乏拥塞控制导致全网瘫痪36小时。TCP拥塞控制由此诞生,核心解决**资…

python中的单下划线“_”与双下划线“__”的使用场景及“左右双下划线”(魔术方法:`__xxx__`)

在Python中,单下划线“_”和双下划线“__”的使用场景和含义有显著区别,主要体现在命名约定和语法 一、单下划线“_”的使用场景 单下划线更多是编程约定(而非强制语法),用于传递特定的“暗示”,不影响代码…

我们为什么需要时序数据库?

引言在当今数据驱动的世界中,时间序列数据正以前所未有的速度增长。从物联网设备传感器、金融交易记录到应用程序性能监控,时间序列数据无处不在。传统的关系型数据库在处理这类数据时往往力不从心,这时时序数据库(Time Series Database, TSD…

python-林粒粒的视频笔记1

python的方法和函数指什么 可变类型和不可变类型 不可变类型,比如字符串通过方法调用后,字符串本身的值不改变 要改变需要重新赋值才能进行改变 比如可变数据类型类型,调用方法后可以直接改变原列表 因此,可变数据类型需要再重新赋…

CentOS 7的下载与安装

一 、CentOS 7的下载与安装 注意: CentOS 7 已于2024年6月30日停止维护! 1、下载 由于 centos 7 已经停止维护,部分镜像网站移除了对centos 7的支持,这里找到了部分现在还可以使用的镜像网站 阿里云开源镜像站:http…

矿物分类系统开发笔记(二):模型训练[删除空缺行]

目录 一、阶段衔接与开发目标 二、数据准备 三、模型选择与训练 1. 逻辑回归(LR) 2. 随机森林(RF) 3. 高斯朴素贝叶斯(GNB) 4. 支持向量机(SVM) 5. AdaBoost 6. XGBoost 四…

通信方式:命名管道

一、命名管道 1. 命名管道的原理 有了匿名管道,理解命名管道就非常简单了。 对于普通文件而言,两个进程打开同一个文件,OS是不会将文件加载两次的,这两个进程都会指向同一个文件,那么,也就享有同一份 in…

如何将数据库快速接入大模型实现智能问数,实现chatbi、dataagent,只需短短几步,不需要配置工作流!

智能问数系统初始化操作流程 一、系统初始化与管理员账号创建登录与初始化提示:首次访问系统登录页,若系统未初始化,会弹出 “系统未完成初始化,请初始化管理员账号” 提示,点击【去创建】。填写管理员信息&#xff1a…

告别手写文档!Spring Boot API 文档终极解决方案:SpringDoc OpenAPI

在前后端分离和微服务盛行的今天,API 文档是团队协作的“通用语言”。一份清晰、准确、实时同步的文档,能极大提升开发和联调效率。然而,手动编写和维护 API 文档(如 Word、Markdown 或 Postman)是一场永无止境的噩梦—…

N4200EX是一款全智能超声波检测仪产品简析

N4200EX是一款全智能超声波检测仪,适用于石油、石化、天然气、气体生产等行业的压力管路、阀门、设备的各种防爆场合气体泄漏、真空泄漏、阀门内漏检测。●本安防爆设计,防爆、防尘、防水、抗摔。●适应恶劣环境,可在-25℃超低温环境检测&…

NestJS @Inject 装饰器入门教程

一、核心概念解析 1.1 依赖注入(DI)的本质 依赖注入是一种设计模式,通过 IoC(控制反转)容器管理对象生命周期。在 NestJS 中,Injectable() 标记的类会被容器管理,而 Inject() 用于显式指定依赖项…

网络地址详解

子网划分详解:从 IP 地址结构到实际应用 在计算机网络中,子网划分是一项关键的技术,它能帮助我们更高效地管理 IP 地址资源,优化网络性能。要深入理解子网划分,首先需要从 IP 地址的基本结构说起。 一、IPv4 地址的基…

吾日三省吾身 | 周反思 8.19

上周一览总体来说,上个周是一个被项目驱使而险些丧失自主思考能力的危险阶段。相比任何有机械化工作经验的读者都有类似的体验,在手上打螺丝的无尽循环中,自己的脑子就会逐渐丧失对自身的感知以及自主思考的能力。而这个负循环一旦开始&#…