Skip to content

Cookie preferences

We use cookies for our own analytics, to see how our campaigns perform and, if you allow it, to load content from other services such as the Google site search. We never sell your data. Necessary cookies keep the site working and cannot be switched off. See our Cookie Policy for details and our Privacy Policy for how we handle personal data.

Security, load balancing and remembering your cookie choice.

Show us which pages people read and how they find the site, so we can improve it (Google Analytics).

Show us which of our ad campaigns bring visitors to the site and remember the campaign or partner link you arrived from (Google Ads, partner program). We do not use these cookies to build advertising profiles.

Load the site search from Google when you use it. Google sets its own cookies and shows ads in the search results.

© 2026 The ThingsBoard Authors
Try for free

ThingsBoard Cloud

Choose your data region

Your data stays in the region you choose, for residency and compliance. No credit card required.

Rather run it yourself? Install on your own servers

Persistent RPC table

  • Widget
  • v1.0.0
  • Sep 1, 2026
  • MIT license
  • v4.2+ | Built-in

Displays Persistent RPC requests based on entity alias and optional filter with the ability of pagination. It also allows to resend or delete selected RPC requests.

Widget Type
  • Control
Category
  • Tables & Lists
  • Controls
Use Cases
  • Industrial Automation
  • Predictive Maintenance
  • Smart Building

Who it’s for

Anyone commanding devices that are not always connected — battery sensors that wake on a schedule, cellular equipment with intermittent coverage, anything where a command is queued rather than delivered. The question is which commands are still waiting, which were delivered, and which failed.

What it does

The Persistent RPC table lists queued and completed RPC requests for the entities an alias resolves to, showing each request’s id, message type, status and method. Requests can be inspected in detail, resent, or deleted from the queue, so a command stuck against an offline device can be dealt with rather than waited on.

  • Visibility into the queue — persistent RPC is otherwise invisible until it either arrives or expires.
  • Resend and delete are actions on the row, so a failed command is retried and an obsolete one is removed without going near the API.
  • Request details show the full record, including the payload and the response.
  • A filter narrows the list, which matters on a device that has accumulated a long command history.
  • The columns shown are configurable, defaulting to request id, message type, status and method.
  • The Persistent RPC table shows the queue, not the device: whether a command achieved anything is a question for the device’s own telemetry.

How to set up

Data keys

The Persistent RPC table takes no data keys — it lists RPC requests for the entities its alias resolves to.

MethodDirectionParametersSent when
The request’s own methodTwo-way (request-response)The request’s stored payloadWhen an existing request is resent from the table

Table

SettingDefaultEffect
Columns to displayrpcId, messageType, status, methodWhich request fields appear as columns
Default sort order-createdTimeNewest first
Display request detailsOnOpens the full request record
Allow send RPC requestOnShows the resend action
Allow delete requestOnShows the delete action
Enable filterOnLets the reader narrow the list
Default page size10Rows per page

Point the alias at the devices whose commands this table is for. The delete action removes queued requests, so a table scoped more broadly than intended can discard commands nobody meant to cancel.

How to customize

  • To show more of each request — add columns under Columns to display.
  • To make it read-only — turn off Allow send RPC request and Allow delete request for a monitoring board.
  • To find a specific command — leave Enable filter on so the list can be narrowed by status or method.
  • To fit the tile — set the Default page size and the page step settings.
  • To open on the oldest first — change the Default sort order, which is useful when working a backlog rather than watching new commands.

Tips

  • Put this table beside the widget that issues the commands. A persistent command gives the operator no feedback at the moment of sending, and the queue is the only place the outcome is visible.
  • Clear expired requests rather than leaving them to accumulate. A device that has been offline for a week collects a queue that all delivers at once on reconnection, which is rarely what anyone wanted by then.

Share Your Widget with the Community

Built a custom widget? Export it as a JSON from ThingsBoard and publish it to the IoT Hub through a simple 4-step wizard (Upload, Listing, Readme, Review & Submit). Share it with thousands of ThingsBoard developers worldwide and get featured in the catalog.