从原理到实践本文详解 OpenLuat 生态里的 Suntime 日出日落计算模块覆盖基础配置、异常处理与离线计算要点适配低资源硬件场景。重要提醒1、当你安装配置好智能体、规则和技能后最终一定要参考验证智能体、规则和技能是否安装成功来验证安装配置是否正确2、Trae 中内置的免费大模型会经常排队并且性能不可控容易出问题所以推荐参考001 发送会话请求时提示排队如何解决的方法订阅收费的大模型目前每月 40 元这样可以大大提高 AI 性能如果不想使用收费模型在非正常工作时间段内使用内置的免费模型也能勉强凑合3、选择收费大模型时经过我们的实际测试根据工作任务的不同可以按照如下建议选择仅供参考具体情况还需要根据你自己的实际使用情况来定代码开发任务优先选择 GLM可能是使用的人数太多有时候处理较慢如果 GLM 处理太慢再考虑切换到 MiniMax其他任务可以首先选择 ark-code-latest其次选择 MiniMax最后选择 GLM可能是使用的人数太多有时候处理较慢名词解释工业引擎主机是什么工业引擎主机是给用户做多媒体编程的硬件载体虽然用 PC 模拟器也能编程也能下载安装应用市场的 APP但是工业引擎主机的体验更好玩例如工业引擎主机 8101就是以 Air8101 系列模组为主控的一种工业引擎主机应用市场是什么应用市场和平时大家在手机上使用的应用市场的概念完全一样应用市场分为两部分1、web 端的应用市场任何用户都可以在 web 端的应用市场提交自己开发的 app、查看所有 app整体效果如下图所示2、工业引擎主机或者模拟器上的应用市场任何用户都可以搜索、查看、下载安装、卸载 app整体效果如下图所示分辨率1、“日出日落”app 的 UI 界面目前基于竖屏 480*800 分辨率设计我们称这个分辨率为“你的 app 基准分辨率”2、有多款不同物理分辨率的竖屏引擎整机例如 Air8000W 引擎整机的物理分辨率为 320480Air8101 引擎整机的物理分辨率为 480854Air1602 引擎整机的物理分辨率为 720*1280后续可能还有其他型号的引擎整机3、工业引擎整机的默认出厂软件可以根据“你的 app 基准分辨率”自适应为引擎整机硬件的物理分辨率这个自适应过程是自动完成的不需要你的 app 做特殊处理4、也就说虽然你的 app 只是基于了某一种分辨率来设计但是从理论上说你的 app 可以在不同分辨率的引擎整机上自适应运行概述本篇旨在讲述在 8101 畅玩板开发日出日落的时间 appSuntime项目的详细过程。日落的时间 app是一款使用AirUI 轻量化图形开发框架基于工业引擎 Air8101B 硬件和 LuatOS 系统软件开发的一款 UI 应用程序。日落的时间 app 核心功能配置城市或自动定位一键展示当日日出、日落核心时刻同步呈现白昼时长、黄昏 / 正午参考时间信息全面倒计时距离日落还有 X 小时 X 分钟app ui 界面一、硬件环境准备Win10 及以上的 Windows 操作系统电脑一台;工业引擎 8101 一块 type-c 接口 usb 数据线一根如果没有上述 2 的这些硬件设备可以直接在电脑端 pc 模拟器上开发调试 app二、软件环境准备2.1 代码仓库当前阶段工业引擎 8101 项目的代码在 LuatOS 仓库的 master 分支2.1.1 了解代码结构在这个代码分支中以下三项内容和本项目直接相关1、 LuatOS/module/Air8101/project/AirUIFrame/engine_host工业引擎 8101 项目的默认出厂软件支持开机欢迎界面、待机界面、主菜单界面支持 WiFi 设置系统设置应用市场功能如果把 工业引擎 8101 比作一个手机这里的 engine_host 就相当于是手机出厂自带的默认软件功能2、 LuatOS/module/AirUI/app_store/vertical_app所有可以在 工业引擎 8101 项目上运行的 app例如 airplane_battle飞机大战、game_20482048 游戏、luatos_competitionLuatOS 知识竞赛等等等等这里的每个 app不是默认出厂软件支持的功能而是通过默认出厂软件中的应用市场下载安装后才可以在模拟器或者 工业引擎 8101 上运行如果把 工业引擎 8101 比作一个手机这里的每个 app 就相当于手机通过应用商店下载安装的每一个应用本文所描述的内容最重要的一个目标就是根据自己的 app 需求生成 app 代码把代码提交到这个 app_store 目录下3、 LuatOS/script/libsLuatOS 扩展库和 engine_host 中的默认出厂软件目录一起在模拟器上运行或者烧录到 工业引擎 8101 上运行具体到本项目软件代码架构如下图所示黄色背景的你将要开发的某个 app就是参照本文所描述的内容你要开发完成的某一个 app2.1.2点击这里可以通过网络浏览器打开 LuatOS 代码仓库的 master 分支2.1.3 大家可以通过 TortoiseGit 或者其他客户端工具拉取代码到自己的电脑上以便后续通过客户端提交代码到仓库参考这里使用 TortoiseGit 克隆/拉取代码点击查看 TortoiseGit 详细使用教程develop 分支代码放在你本地任何你觉得合适的位置比如本文这里新建了存放的路径是 D:\gir:注2.1.2 和 2.1.3 步骤二选一即可2.2 PC 模拟器点击此处学习 LuatOS 模拟器使用模拟器时直接使用在本文 2.1.3 章节下载的 LuatOS-master 分支代码进行学习在本小节使用 LuatOS 模拟器 LuatOS-master 分支代码可以正常运行起来一个 UI 项目就算达标2.3 AI 工具AI 工具有很多种有 TraeCopilot 等等每一种 AI 工具都可以配置不同的大模型我们并不限制你使用哪一种 AI 工具各种 AI 工具使用的基本思路都是相同的在本文我们仅仅基于 Trae 这种 AI 工具来介绍如果你使用其他 AI 工具遇到不懂的问题可以自行解决参考 Trae 的安装和智能体概念理解 和 安装 luatos-docs-code 智能体、规则和技能 安装好 Trae配置 luatos-docs-code 智能体配置项目规则和技能其中在 Trae 的安装和智能体概念理解第三章节中不用再新建项目直接打开自己电脑上的 LuatOS-develop 目录即可Trae 的配置使用有以下三点特别重要1、当你安装配置好智能体、规则和技能后最终一定要参考验证智能体、规则和技能是否安装成功来验证安装配置是否正确2、Trae 中内置的免费大模型会经常排队并且性能不可控容易出问题所以推荐参考001 发送会话请求时提示排队如何解决的方法订阅收费的大模型目前每月 40 元这样可以大大提高 AI 性能如果不想使用收费模型在非正常工作时间段内使用内置的免费模型也能勉强凑合3、选择收费大模型时经过我们的实际测试根据工作任务的不同可以按照如下建议选择仅供参考具体情况还需要根据你自己的实际使用情况来定代码开发任务优先选择 GLM可能是使用的人数太多有时候处理较慢如果 GLM 处理太慢再考虑切换到 MiniMax其他任务可以首先选择 ark-code-latest其次选择 MiniMax最后选择 GLM可能是使用的人数太多有时候处理较慢三、定义自己的 app 原始需求接下来我们以一个实际的 app 需求为例来演示完整的开发过程这个 app 的名字叫做日出日落的时间如果需求不是特别明确就简单描述一下即可如果需求特别明确则详细描述每个页面如何设计以及业务逻辑如何设计在本示例中因为日出日落的时间 app 仅仅是一个虚拟的演示项目并不是一个真正的 app 需求所以我们描述的原始需求比较简单如下所述设计一个可用于嵌入式设备的日落的时间项目页面和交互业务逻辑分辨率为480*800输出可以交互的html页面四、根据 app 需求借助 AI 工具生成 html 文件和图片等资源文件本步骤是借助 AI 工具根据定义的 app 需求生成 html 文件和图片等资源文件。AI 工具可以使用 Trae也可以使用网页版的豆包也可以使用网页版的 deepseek生成“包含业务逻辑、可交互体验”的 html 文件 你可以根据自己的实际情况来对比选择使用其他的 AI 工具经我们对比网页版的 deepseek 生成的 html ui 效果比较符合需求。在这一章节记录了使用 deepseek 网页版来生成日出日落的时间 app 的 html 的过程4.1 生成 ui 界面.html 文件浏览器搜索打开 deepseek,输入如下指令设计一个可用于日出日落的时间项目页面和交互业务逻辑分辨率为 480*800输出可以交互的 html 页面;4.2 查看 ui 效果等待 deepseek 思考完成后运行查看生成效果4.3 修改 ui 效果deepseek 首次生成的 ui 效果不一定能满足 app 需求可以进行多次对话交互修改效果比如去除多余的功能、修改整体色调、添加退出按钮、添加提示文字等直至达到满足需求的 ui 效果4.4 下载保存.html 文件达成 ui 效果后在 deepseek 里下载保存在本地。 本教程最终生成的 ui 效果直接双击 deepseek_html_20260422_0d86dc.html 在浏览器打开即可查看 ui 效果。4.5 导出.html 中的图片、图标、表情等资源修改到最终的 ui 效果后继续给 deepseek 发指令帮我导出这里面的所有图片资源大小 3030背景透明色或者帮我把这里的表情转换成图片资源3030背景透明色。deepseek 思考完成后点击运行在运行页面可以一键下载图片资源。**我们把导出的图片资源包命名为 Suntime.zip **解压缩打开查看如下图所示图片看起来正常注这时候我们需要更改图片的名称图片名称不能有中文否则后面的代码中无法识别这个阶段主要就是根据需求不断的和 AI 交互生成 html你自己的实际 app根据自己的规划以及实际运行的效果可能需要调整多次才行按照同样的交互思路进行多轮交互即可直到生成的 html 界面和交互逻辑可以满足你的需求最后再导出来用到的所有图片资源具体到本项目最终输出了Suntime.html和Suntime_images.zip两个文件我们在接下来的编码环节会用到这两个文件五、根据 html 文件 图片等资源文件 代码仓库让 AI 生成 app 项目代码本步骤全程在 trae AI 下进行。在进行本步骤之前一定确保 2.3 章节 4.验证规则和技能都没有问题如果验证异常按照 2.3 章节 2-3-4 步骤重来一遍即可。5.1 app 代码的基本格式要求app 代码有基本的格式要求我们先来看看 2.1.3 章节下载下来的 LuatOS-develop 代码仓库中的 app_store 目录在 app_store 内每个子目录都是一个单独的 app如下图所示我们以 airplane_battle 为例来说明 app 内部的代码结构和格式要求https://docs.openluat.com/ai/trae%2Bluatos-docs-code/project/image/UxKWbLmZnonEnlxmNtncWHcXntg.png5.1.1 main.luaapp 的入口文件必须存在于单独 app 的根目录下文件内容按照以下格式编写即可PROJECTAIRPLANE_BATTLEVERSION001.999.000log.info(main, PROJECT, VERSION)requireairplane_winsys.publish(OPEN_AIRPLANE_BATTLE_WIN)sys.run()注意事项如下前 4 行代码对 app 的项目和版本信息进行配置并且打印实际上没有任何用处但是为了和我们 LuatOS 开发的完整项目中的 main.lua 格式保持一致所以也加上了减少对外沟通解释的成本第 6 行的require airplane_win和第 8 行的sys.publish(OPEN_AIRPLANE_BATTLE_WIN)加载当前 app 的 user 目录下用户脚本模块并且运行具体的每个 app需要根据自己的 app 业务逻辑加载很行第 10 行的sys.run()实际上没有任何用处但是为了和我们 LuatOS 开发的完整项目中的 main.lua 格式保持一致所以也加上了 sys.run()的调用减少对外沟通解释的成本5.1.2 icon.pngapp 的图标文件必须存在于单独 app 的根目录下要求png 格式32*32 像素背景色透明5.1.3 meta.jsonapp 的元数据文件必须存在于单独 app 的根目录下文件内容按照以下格式编写即可{app_name_cn:飞机大战,app_name_en:airplane-battle,version:1.0.0,publish_time:2026-04-04 12:00:00,category:游戏,description:拖拽飞机躲避敌机自动发射子弹并挑战更高分数,resolution:480x800,supported_models:{Air8101:[{firmware_id:104,min_firmware_version:2010},{firmware_id:105,min_firmware_version:2010}]},zip_size_kb:100,origin_size_kb:300}注意事项如下文件内容必须是 json 格式version 的格式必须是 x.y.z 格式从 1.0.0 开始其余字段参考示例都很好理解5.1.4 user 目录存放 app 具体功能模块的用户 Lua 脚本文件user 目录下不能再包含子目录5.1.5 res 目录存放 app 使用到的图片音频视频字体等资源文件只要不是 Lua 脚本文件都存放到这里代码中使用时直接以/luadb/_._方式使用res 目录下不能再包含子目录5.1.6 libs 目录存放 app 使用到的扩展库脚本文件如果用到的扩展库脚本文件在默认出厂软件中已经包含则此处的 libs 目录是否包含重复的扩展库脚本文件都没有任何影响即使包含了也没有任何用处app 使用的仍然是默认出厂软件环境中的扩展库脚本文件如果用到的扩展库脚本文件在默认出厂软件中没有被包含则此处的 libs 目录必须包含进来为了节省空间如果不确定默认出厂软件中是否已经包含 app 需要的扩展库文件则可以默认已经包含在调试 app 过程中如果发现没有需要的扩展库会提示出错此时再加上扩展库脚本文件调试已经包含在默认出厂软件中的扩展库文件有dhcpsrv、dnsproxy、exapp、excloud、exmtn、exnetif、exwin、httpdns、httpplus、udpsrv2026 年 4 月 7 日的默认出厂软件包含这么多仅供参考后续可能会动态增加或者删除libs 目录下不能再包含子目录5.1.7 其他注意事项每个独立的 app 内部不再需要初始化 lcd 和 tp因为在默认出厂软件中已经完成这两项动作每个 app 都可以使用 fskv 来存储键值对参数仅可以读、写、清除 app 自己创建的参数没有权限操作每个 app 之外的其他 fskv 参数每个 app 都可以使用 io 核心库执行文件和目录操作仅可以控制自己 app 内的目录和文件自己 app 的所有目录和文件都可读自己 app 内的部分目录和文件可写操作目录和文件时以/luadb/或者/开头app 内部会自动做路径映射路径映射关系如下前面三种只读最后两种可读写/luadb/icon.png映射到 /icon.png应用图标特殊处理/luadb/xxx.lua 或 /luadb/xxx.luac按优先级映射/xxx.lua 或者 luac/user/xxx.lua 或者 luac/libs/xxx.lua 或者 luac/luadb/xxx非 lua 文件映射到 /res/xxx资源文件目录/ram/xxx直接返回 /ram/xxx内存文件系统不做转换/xxx其他以/开头的路径映射到 /data/xxx数据存储目录5.2 Trae 生成 app 代码前的准备工作在了解了每个 app 的代码基本格式和要求之后接下来我们使用 Trae 来生成日出日落的时间 app 代码注意5.2.1 和 5.2.2 的顺序不能颠倒必须是先打开项目代码然后再验证项目规则和技能如果此处验证不通过返回到本文的 2.3 章节重新学习操作一遍5.2.1 打开 Trae切换为 SOLO 模式打开 LuatOS-develop 项目代码打开 trae 客户端新建一个会话任务专门用来处理日出日落的时间 app 代码生成调试打开编辑器窗口可以查看 LuatOS-develop 目录内容右键点击 app_store添加到对话。此时可以看到 app_store 目录已经被添加到会话窗口如下图所示5.2 创建 app 项目目录在会话窗口继续输入指令在这个目录下创建一个 Suntime 目录。点击发送箭头按钮等待创建完成创建成功后可以在资源管理器 app_store 目录下看到新建的 Suntime 目录创建 resuserlibs 目录继续在会话窗口输入在Suntime目录下创建resuserlibs目录成功创建后可以在 Suntime_robot 目录下看到子目录 res、userlibs。5.3 添加资源手动把 4.4 中下载的 Suntime.html 复制到 Suntime 目录下快速找到 Suntime 本地目录的方法上图页面 Suntime 右键选择 在文件资源管理器中显示把 4.5 中下载的图片资源复制到 Suntime\res 目录下.把图片名称改成自己好识别的英文名称。参考 4.5 的交互生成一个日出日落时间图标图片下载后修改图片名称为 icon.png复制图片到 Suntime 目录下.完成以上三步后最终如下所示:5.4 生成项目代码在会话窗口输入以下内容LuatOS-develop 路径需要根据你自己电脑上的实际路径来修改并且发送参考D:\git\LuatOS-develop\module\Air8101\project\AirUIFrame\ui_play_board\app_store\Suntime\Suntime.html 中的UI界面和交互逻辑在Suntime中生成LuatOS代码 代码文件格式以及内容参考D:\git\LuatOS-develop\module\Air8101\project\AirUIFrame\ui_play_board\app_store\下的其他目录包含main.luameta.jsonSuntime\user目录下存储具体UI和业务功能的lua代码文件 代码中需要的图片资源在Suntime\user目录下代码中用到的图片资源使用\luadb\xxx.png的路径方式然后luatos-docs-code-102智能体就开始工作了几分钟之后会生成第一份代码思考输出的过程如下图所示查看 Suntime 目录下 生成了 main.lua、meta.json、Suntime_win.lua、config.lua、message.lua 五个文件如下图所示点击查看生成的 5 个代码文件单击保留trae 可能没办法一次就生成可成功运行的代码按照下述第六章的方式运行代码查看运行日志和运行效果继续使用 AI 工具调试修改代码即可如果要学习完整的一个 app 代码调试过程可以参考智能售货机项目开发文章。六、运行 app 并调试代码6.1 准备运行 app右键 app_store选择 在文件资源管理器中显示找到本地的 app_store 文件夹把 app_store 文件夹复制到 LuatOS PC 模拟器所在的目录。可以查看 2.1 PC 模拟器章节中的操作本教程 LuatOS PC 模拟器所在的目录是 E:\PC 模拟器\LuatOS-SoC_V2027_PC6.2 在 PC 模拟器上运行找到 PC 模拟器目录下的 cmd 快捷方式双击打开如下图所示在命令行窗口粘贴输入以下指令luatos-pc-64bit.exe D:\git\LuatOS_project\LuatOS-develop\module\Air8101\project\AirUIFrame\ui_play_board\factory\ D:\git\LuatOS_project\LuatOS-develop\script\libs\输入完成后单击回车键就可以在模拟器上运行 Air8101 UI 畅玩板出厂软件的出厂软件启动后如下图所示鼠标模拟左右滑屏翻到第三页就可以看到自己添加的日出日落的时间 app,点击运行测试 app 功能。点击 日出日落的时间 app 图标就可以正式运行这个 app我们点击一下看看是否可以正常运行点击之后第一个窗口如下图所示6.3 修复问题商品中的图片没有正常显示6.3.1 第一轮修复输入商品中的图片没有正常显示注意使用 D:\git\LuatOS-develop\module\Air8101\project\AirUIFrame\ui_play_board\app_store\Suntime\res 中的图片资源思考修复过程如下图从这次仅仅修改了 Suntime_win.lua打开这个文件如下图所示点击上下切换按钮可以查看具体的修改内容如果你会 LuatOS 编程就知道智能体这次的修复还是存在问题我们先不管有什么问题把 app_store 复制到模拟器目录再运行一下看看效果仍然没有显示出来图片6.3.2 第二轮修复输入你刚才修复之后图片仍然没有显示出来另外出现了以下错误日志信息 [ [2026-04-23 16:03:06.500][00000000.841] I/user.sntp 高精度时间戳 1776931384.647 [2026-04-23 16:03:09.442][00000003.783] I/user.idle_win layout 480 800 landscape false cols 4 card 110 92 per_page 24 [2026-04-23 16:03:09.525][00000003.866] W/airui [Warn] (2.675, 2675) lv_image_set_src: failed to get image info: /app_store/air_quality/icon.png lv_image.c:195[2026-04-23 16:03:15.331][00000009.671] I/user.idle_win open app /app_store/Suntime/ [2026-04-23 16:03:15.331][00000009.672] I/user.exapp.open app started: /app_store/Suntime/ [2026-04-23 16:03:15.333][00000009.674] I/user.[/app_store/Suntime/] main SUNTIME 001.999.000 [2026-04-23 16:03:15.333][00000009.674] I/user.[/app_store/Suntime/] require enter: suntime_win [2026-04-23 16:03:15.335][00000009.676] I/user.[/app_store/Suntime/] sys.run() disabled in sandbox [2026-04-23 16:03:15.335][00000009.676] I/user.[/app_store/Suntime/] app_task waitUntil close_req event /app_store/Suntime/ [2026-04-23 16:03:15.342][00000009.683] I/user.[/app_store/Suntime/] exwin.open window opened, ID: 3 window count: 1修复之后复制代码到模拟器目录之后模拟器关闭之后再次运行效果图如下可以看出这次的日出日落的图片还是没有显示出来6.3.4 第三轮修复输入以下文字同时把阶梯发给它还是不显示图片为什么思考修复过程如下图复制代码到模拟器目录之后模拟器关闭之后再次运行图片显示了但是仍然不完整6.3.5 第四轮修复输入日出日落中间还有个小图片不需要 原本下面还有三个显示区域分别是白昼时长黄昏结束正午参考为什么没有显示思考修复过程如下图复制代码到模拟器目录之后模拟器关闭之后再次运行三个显示区域以及小图标去掉了但是界面还是有修复的比如基于天文算法计算精准到分钟这行小字需要去掉以及其他需要修复的细节。6.3.6 第五轮修复还需要 详细告诉他怎么修改输入基于天文算法计算精准到分钟这行小字需要去掉,还有日出日落需要加边框看一下上图思考修复过程如下图复制代码到模拟器目录之后模拟器关闭之后再次运行效果图如下所示图片终于可以正常显示了通过 6.3 小节调试修复这个问题我们可以总结出重要的一点智能体修复过程中你要学会看代码根据代码思路和实际效果给智能体更详细的输入信息和指令它可以理解得更透彻注运行结果是最终可用的 app 效果比如运行不出来主图片或者 app 打不开以及打开后图片不显示字体问题、颜色不符等等可以按照上述所有步骤反复修改剩下的代码调试问题可以参考智能售货机项目开发文章。希望本文对 Suntime 的解析能帮你减少开发成本高效完成时间相关功能后续可结合官方文档持续优化参数与异常处理。今天的分享就到这里