LuCI2 (OpenWrt web 管理界面)

时间:2025-03-31 16:51:25

在开始之前,需要知道的是LuCI2提供了一些存取UCI系统的一些帮助。如果写一个简单的管理/etc/config/下配置文件不需要完全知道ubus的调用方法,则可以跳过该部分。

构建一些更复杂的LuCI2视图前最好先弄明白使用到的ubus调用。完整的对象和方法列表可以通过运行ubus -v list命令来得到。

下面这个简单的例子调用了log对象和write方法,它需要提供一个event参数传递进去。使用ubus命令行国内根据是,需要如下所示命令:

ubus call log write '{ "event": "Foo" }'

LuCI2为ubus通讯提供了一个叫做的工具,它可以如魔法般的帮助JavaScript访问ubus方法。注意,定义声明方法的时候方法并不被执行,参数也未传递,这是为以后调用准备的一个方法。下面这个示例的方法调用了log对象的write方法:

var writeToLog = ({
	object: 'log',
	method: 'write',
	params: [ 'event' ]
})

定义了一次这个方法后,可以在任意时间通过如下示例简单调用:

writeToLog('Foo');

在上面的例子中执行结果被忽略了,如果视图需要处理ubus返回的数据时不能忽略执行结果。下面例子将通过访问system对象的info方法来描述返回结果的处理。在命令行下通过以下命令访问:

# ubus call system info
{
	"uptime": 123,
	"localtime": 1234567890,
	"load": [
		1,
		2,
		3
	],
	"memory": {
		"total": 67108864,
		"free": 33554432,
		"shared": 0,
		"buffered": 16777216
	},
	"swap": {
		"total": 0,
		"free": 0
	}
}

在LuCI2(JavaScript)定义上面的访问如下所示:

var readSystemInfo = ({
	object: 'system',
	method: 'info',
	expect: { memory: { } }			/* 可选, 只提取结果的一部分memory */
})

通过简单的调用.then方法可访问结果数据

readSystemInfo().then(function(memory) {
	(memory);
});