OctoPrint通知系统详解:及时获取打印状态更新
3D打印过程中,用户往往需要时刻关注打印机状态,如耗材用尽、打印完成或出现异常等情况。OctoPrint作为一款功能强大的3D打印机Web界面,提供了完善的通知系统,帮助用户及时获取打印状态更新。本文将详细介绍OctoPrint通知系统的工作原理、配置方法及实际应用场景,让你轻松掌握如何通过通知系统远程监控打印过程。
通知系统核心组件
OctoPrint的通知功能主要通过两个核心插件实现:Action Command Notification插件和Action Command Prompt插件。这两个插件均为OctoPrint的内置插件,默认情况下已启用,无需额外安装。
Action Command Notification插件
Action Command Notification插件允许固件通过Action命令触发通知,这些通知会显示在OctoPrint的侧边栏中,若配置得当,还会以弹窗形式出现。该插件自OctoPrint 1.4.1版本起加入,源码位于src/octoprint/plugins/action_command_notification。
用户需要相应的权限才能查看和清除通知:
PLUGIN_ACTION_COMMAND_NOTIFICATION_SHOW:查看通知的权限PLUGIN_ACTION_COMMAND_NOTIFICATION_CLEAR:清除通知的权限
以下是一个简单的通知示例,固件发送特定命令后,通知会显示在侧边栏:
Action Command Prompt插件
Action Command Prompt插件则提供了更高级的交互功能,允许固件触发对话框提示,等待用户确认或选择选项。该插件自OctoPrint 1.3.9版本起加入,源码位于src/octoprint/plugins/action_command_prompt。
对话框可以包含多个选项,用户选择后,OctoPrint会将选择结果通过GCODE命令反馈给固件。例如,当检测到耗材用尽时,固件可以触发一个包含多个处理选项的对话框:
通知系统工作原理
OctoPrint的通知系统基于RepRap通信协议中的Action命令。Action命令是一种特殊格式的GCODE注释,以// action:开头,固件通过发送此类命令来触发OctoPrint的特定操作,包括显示通知和提示对话框。
Action命令基础
根据RepRap wiki的定义,Action命令的格式为:// action:command。OctoPrint支持多种内置Action命令,如start、pause、resume等,详细列表可参考官方文档:Action Commands。
通知相关的Action命令主要包括:
notification <message>:显示通知消息prompt_begin <message>:开始定义一个对话框prompt_choice <text>:添加对话框选项prompt_show:显示对话框prompt_end:关闭对话框
通知触发流程
- 固件发送Action命令:打印机固件在特定事件(如耗材用尽、打印完成)发生时,发送包含通知或提示命令的GCODE。
- OctoPrint解析命令:OctoPrint的通信协议模块解析收到的Action命令,并分发给相应的插件处理。
- 插件处理命令:Action Command Notification插件或Action Command Prompt插件根据命令类型,在Web界面显示通知或对话框。
- 用户交互(如需要):对于提示对话框,用户选择后,OctoPrint将结果通过GCODE命令反馈给固件。
配置通知系统
OctoPrint的通知系统可以通过配置文件或Web界面进行自定义,以满足不同用户的需求。
Action Command Notification插件配置
该插件的主要配置项包括:
enable:是否启用通知功能,默认为trueenable_popup:是否以弹窗形式显示通知,默认为false
可以通过编辑配置文件config.yaml来修改这些设置,例如:
plugins:
action_command_notification:
enable: true
enable_popup: true
也可以在OctoPrint的Web界面中,通过设置 > 插件 > Action Command Notification Support进行配置。
Action Command Prompt插件配置
该插件的主要配置项包括:
enable:启用方式,可选值为always(始终启用)、never(禁用)或detect(自动检测),默认为detectcommand:反馈用户选择结果的GCODE命令,默认为M876enable_emergency_sending:是否将选择结果作为紧急命令发送,默认为true
配置示例:
plugins:
action_command_prompt:
enable: always
command: M876
enable_emergency_sending: true
配置可通过Web界面的设置 > 插件 > Action Command Prompt Support进行修改。
实际应用示例
发送简单通知
当打印完成时,固件可以发送以下Action命令触发通知:
// action:notification 打印已完成!请取出模型。
OctoPrint收到该命令后,会在侧边栏显示通知消息,若enable_popup已启用,还会显示弹窗通知。
触发交互对话框
当检测到耗材用尽时,固件可以发送一系列命令来触发一个包含选项的对话框:
// action:prompt_begin 检测到耗材用尽,请选择操作:
// action:prompt_choice 更换耗材并继续
// action:prompt_choice 暂停打印
// action:prompt_choice 取消打印
// action:prompt_show
OctoPrint会显示如下对话框:
用户选择后,OctoPrint会发送默认的M876 S<index>命令(其中<index>为选项的序号,从0开始)给固件。例如,用户选择“取消打印”(第三个选项),OctoPrint会发送M876 S2。
高级应用:自定义通知行为
通过OctoPrint的插件系统,开发者可以扩展通知系统的功能,例如将通知发送到电子邮件、手机APP或其他外部服务。
通知扩展插件
OctoPrint社区提供了多种通知相关的插件,如:
- OctoPrint-Pushbullet:通过Pushbullet服务发送通知到手机或电脑
- OctoPrint-消息推送:通过消息推送服务发送通知到移动设备
- OctoPrint-EmailNotifier:发送电子邮件通知
这些插件可以在插件管理器中搜索安装。
开发自定义通知插件
如果现有插件不能满足需求,开发者可以创建自定义通知插件。OctoPrint的插件系统提供了丰富的钩子(Hook),用于扩展系统功能。相关开发文档可参考:
通过实现octoprint.comm.protocol.action钩子,插件可以监听并处理自定义的Action命令,从而实现特定的通知逻辑。
常见问题解决
通知不显示
如果固件发送了通知命令,但OctoPrint没有显示通知,可能的原因包括:
- 插件未启用:检查Action Command Notification和Action Command Prompt插件是否已启用,可在插件管理器中查看。
- 权限问题:当前登录用户可能没有
PLUGIN_ACTION_COMMAND_NOTIFICATION_SHOW权限,可在用户管理中配置权限。 - 命令格式错误:确保固件发送的Action命令格式正确,应为
// action:notification <message>。
对话框无法关闭
如果提示对话框无法通过prompt_end命令关闭,可能是因为固件发送的命令格式不正确,或插件配置有误。可以尝试在配置文件中重置插件设置,或查看OctoPrint的日志文件以获取详细错误信息。
总结
OctoPrint的通知系统是连接打印机固件和用户的重要桥梁,通过Action命令实现了打印状态的实时反馈。无论是简单的状态通知,还是复杂的交互式提示,都能帮助用户更便捷地监控和管理3D打印过程。
通过本文的介绍,你应该已经掌握了OctoPrint通知系统的工作原理、配置方法和实际应用。如需进一步了解相关技术细节,可以参考以下资源:
合理配置和使用通知系统,将极大提升你的3D打印体验,让你即使不在打印机旁,也能随时掌握打印状态。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






