后端发布版本
本文列出了所有 RainMaker 后端发布版本。如需获取支持,请联系 esp-rainmaker-support@espressif.com。
2026 年后端发布版本
3.9.0 (2026.6.5)
Refer to the RainMaker version 3.0.0 release notes for downtime considerations.
Please upgrade the RainMaker Dashboard to 2.8.0 after upgrading the backend.
-
New Features:
-
Admin User Group Management: Admins can now manage an end user's device groups on their behalf. They can create, view, update and delete a user's groups, add or remove nodes, auto-share groups with other users (no recipient approval needed), and view or cancel pending sharing invitations. Gated by a new
admin_user_operationsdeployment setting. Refer to the Admin User Group APIs for details. -
Cancel Pending Commands: Users can now cancel their own pending command-response requests. Admins can cancel their own and any user's pending requests. Requests can be cancelled by request ID, by node, or by node and command ID. Cancelled requests are reported with a new
cancelledstatus. Refer to the Command Response API for details. -
Admin Node Registrations: Added admin APIs to view the history of node registrations and check the detailed status of individual registration jobs. Refer to the Admin Node Registrations API for details.
-
Node Manufacturing Data: Admins can now bulk-upload node manufacturing data (QR codes, manual pairing codes, optional MAC and serial number) for nodes via a CSV file. Files are processed in the background; admins can poll status, view duplicate counts, and download a report of any failed rows. End users can read the uploaded QR code and manual pairing code for their nodes via the corresponding user API. Refer to the Admin File API for details.
-
Node Proxy: Users (via the phone apps) can now report OTA status on behalf of their nodes. Useful for cases where nodes do not have Internet connectivity (e.g., BLE-only nodes). Refer to the Node Proxy API for details.
-
Simple Time Series: Devices can now publish multi-parameter simple time-series data on the existing
node/+/tsdataMQTT topic by settingts_data_version: "2026-04-01". A newtzfield is preferred for timezone; the oldertzpcontinues to work but is deprecated.On deployments with AWS Timestream, the same payload routes to two different stores:
ts_data_version: 2021-09-13goes to the time-series store, while2026-04-01goes to the simple time-series store. The simple time-series flow can optionally includevalidity,tz, andcumulativefields, and its aggregation behaviour differs from the time-series store — see the Time Series API and Simple Time Series API.Refer to the Simple Time Series API for details.
-
-
Other Changes:
- RainMaker Controller:
PUT /v1/user/nodes/{node_id}/groups/{group_id}/controllernow acceptsenableanddisableas theoperationvalues, replacingsubscribe/unsubscribe. The oldersubscribe/unsubscribevalues continue to work as legacy values; phone apps and any automation should adopt the new values going forward. - Command Response:
- Single-command MQTT delivery: After a node reconnects, the backend now delivers one pending command at a time (oldest first), so firmware is not flooded. Commands are delivered in timestamp order, and the original request timestamp is included in the command payload sent to the node. The next pending command is triggered on MQTT acknowledgment. Override now also cancels commands that are already in progress.
- Descriptive errors: If a single stored command response or request payload cannot be decoded, the API now returns a clear error for that command and continues returning the rest. Previously, one undecodable entry failed the whole call.
- User Data Request: The user-data request status API now returns the full request record with a clear description for each lifecycle state (queued, in progress, failed, ready). Refer to the Data Request API for details.
- RainMaker Controller:
-
Bug Fixes:
- User Management:
- Sign-up: Passwords from incomplete sign-up requests were getting stored and re-used on subsequent attempts, so after user confirmation the password set in the very first sign-up request was getting used. This is now fixed; the password from the latest sign-up attempt is applied. Confirmed accounts continue to receive
ERROR_ACCOUNT_ALREADY_EXISTS. - Forgot password: Verification rate limit failures now return HTTP 400 (client error) instead of HTTP 500.
- Sign-up: Passwords from incomplete sign-up requests were getting stored and re-used on subsequent attempts, so after user confirmation the password set in the very first sign-up request was getting used. This is now fixed; the password from the latest sign-up attempt is applied. Confirmed accounts continue to receive
- Group Sharing: When a group is shared without specifying a target username (added in 3.8.0), the recipient could not get info about the sender. The same can now be queried using the request id, similar to regular sharing requests.
- Automation Triggers: Automations could re-fire when an unrelated parameter was reported. Triggers now run only when the current update touches a parameter referenced by the rule. Existing
AND/ORrule semantics are preserved. - Time-Series Pagination:
GET /v1/user/nodes/tsdataandGET /v1/admin/nodes/tsdatacould return a stalenext_idat the end of a result set, causing clients to refetch already-seen rows or miss the true end. End-of-stream now correctly returns an emptynext_id. - Simple Time Series Aggregation: When devices published non-numeric values (arrays, booleans, strings, or objects) on the simple time-series topic, the aggregation pipeline failed and entered a retry loop, inflating CloudWatch costs. Raw data was stored correctly. Aggregation now safely skips non-numeric types; float and integer aggregation are unchanged.
- Command Response: When a device reported a parameter-update command (command ID 1) failure with an empty payload, the cloud incorrectly rejected the response as invalid. Failed parameter-update responses are now correctly recorded.
- RBAC: Toggling RBAC via
PUT /v1/admin/deployment_settings/rbacwas not always picked up promptly — some API calls continued to behave as if the previous setting were active. The change now takes effect immediately and propagates fully across the deployment within 15 minutes.
- User Management:
3.8.0 (2026.4.16)
请参阅 RainMaker 3.0.0 版本发布说明,了解停机相关注意事项。
升级到此版本之前,必须在部署区域将 Amazon API Gateway 配额 Routes per HTTP API 增加到 500。详情和控制台示例请参阅部署 FAQ 中的 增加 Amazon API Gateway 限制。
升级后端之后,请将 RainMaker 管理面板升级到 2.8.0 版本。
-
新增功能:
- 节点/组共享:支持在不知道目标用户名的情况下共享节点或组。可以通过二维码、邮件等方式分享请求 ID,任何用户都能接受共享。这适用于目标用户尚未注册或你不确定其用户名的场景。详情请参阅 组共享 API。
- 访客用户转换:访客账号现在可以转换为正式用户账号,转换后需要验证电子邮件地址。详情请参阅 转换访客用户 API。
- 共享子角色:节点和组共享时可以设置
sub_role字段(取值 1–4),实现更精细的权限控制。命令响应中也会包含此字段。详情请参阅 节点共享 API。注意:此功能主要由手机应用和固件使用,后端不会强制执行基于此字段的访问控制。 - 活跃用户统计:管理员可以通过新增的 API 查询指定时间以来的活跃用户数。详情请参阅 管理员用户 API。
- 用户活动记录:
last_activity_timestamp字段现在在所有环境类型中都会更新(之前仅在启用归档功能的环境中更新)。
- 用户活动记录:
- MQTT 访问日志增强:访问日志和统计信息现在包含设备属性(
type、model、fw_version),并支持 获取原始 MQTT 消息。可以按设备类型、型号和固件版本筛选统计数据。详情请参阅 MQTT 统计 API。 - iOS 推送通知:新增基于令牌(.p8 密钥)的 APNS 认证方式,这是 Apple 官方推荐的做法,无需再管理证书过期问题。建议使用证书认证的应用迁移到令牌认证。详情请参阅 移动平台应用程序 API。
- 用户数据导出:数据文件准备就绪后,系统会自动发送邮件通知用户下载。
- Lambda 运行时升级:Go Lambda 运行时已从
provided.al2升级至provided.al2023,性能和安全性得到提升。 - 标签管理:
- 管理员通过 admin/tags API 查询时可以查看标签来源。详情请参阅 管理员标签 API。
-
重大变更:
- 标签:
- 新的
rmaker.event.tags_updated事件替换了tag_added和tag_removed事件。
- 新的
- 标签:
-
其他变更:
- 组共享优化:重复共享同一节点/组给同一用户时(无论角色是否相同),将跳过审批流程。
- 用户文件删除:用户可以通过 删除用户文件 API 删除自己上传的文件。
- 管理员文件审批:管理员批准公共文件上传时,现在可 以添加备注信息。
-
问题修复:
- 节点连接:短暂的断开连接会连续生成不必要的“节点已断开”和“节点已连接”通知。由于节点在约 10 秒内重试连接,因此将断开事件处理延迟从 5 秒增加到 20 秒。
- 命令响应:
- 当提供了
start_time和end_time但未启用历史记录时,不会返回验证错误。 - 用户 API (
GET /v1/user/nodes/cmd) 在返回用户自己的命令的同时还返回了管理员发起的命令。
- 当提供了
- 标签:
- 当节点使用不同的标签重新注册(带有
update_nodes标志)时,节点注册流程未清理悬空/僵尸节点标签。 - 在 user-node-mapping 期间添加的标签对管理员不可见,并且它们的 Tag_Name/Tag_Value 计数向所有管理员显示不正确。
- 当节点使用不同的标签重新注册(带有
- 用户组:当
node_details=true时,GET /v1/user/node_group的node_details条目中缺少primary标志,而GET /v1/user/nodes包含了它。 - 节点注册:电子邮件发送失败会阻止节点注册流程。
- 用户节点 API:当存在非活动映射时,带有
node_details=true的GET /v1/user/nodes中的分页功能损坏。 - 访问日志:提前退出的 MQTT Lambda 调用(例如,反序列化失败、未找到节点)未被捕获到 Firehose 访问日志中。
- 统计 API:UTC+ 时区用户在查询当天统计信息时会收到不正确的
ERROR_DATE_RANGE_HAS_FUTURE_DATES错误。 - 简单时间序列:
node/+/simple_tsdata上的简单时间序列数据消息未写入 MQTT 访问日志。- 查询聚合时,非 UTC 节点返回的日期范围不正确。
- 查询聚合时,每日范围聚合会为额外的一天返回数据。