{"id":374504,"date":"2026-10-05T08:24:17","date_gmt":"2026-10-05T08:24:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/iot-data-widget\/"},"modified":"2026-10-12T06:29:19","modified_gmt":"2026-10-12T06:29:19","slug":"iot-data-widget","status":"publish","type":"plugin","link":"https:\/\/az.wordpress.org\/plugins\/iot-data-widget\/","author":23567623,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.1.3","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"IoT Data Widget","header_author":"WPVeloxa","header_description":"Displays live data from smart home devices (Home Assistant, REST API, MQTT, Shelly\/Tasmota\/ESPHome presets, Shelly Cloud) on your website via shortcode and Gutenberg block, with a guided setup wizard, a redesigned and auto-refreshing appearance, and a built-in diagnostics page. Pro adds threshold alerts, email reports, and a public embed mode.","assets_banners_color":"9a9ea3","last_updated":"2026-10-12 06:29:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/wpveloxa.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":459,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wpveloxa","date":"2026-10-05 08:23:57","revision":3728390},"1.0.1":{"tag":"1.0.1","author":"wpveloxa","date":"2026-10-06 11:45:28","revision":3730704},"1.0.2":{"tag":"1.0.2","author":"wpveloxa","date":"2026-10-07 08:07:53","revision":3732074},"1.0.4":{"tag":"1.0.4","author":"wpveloxa","date":"2026-10-12 06:29:19","revision":3740607}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3728391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3728391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3728391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3728391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"iot-data-widget\/widget":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"iot-data-widget\/widget","title":"IoT Data Widget","category":"widgets","icon":"chart-line","description":"Displays a live value from Home Assistant (or another configured source) on your page.","keywords":["home assistant","iot","smart home","sensor","gauge"],"textdomain":"iot-data-widget","attributes":{"connection":{"type":"string","default":""},"style":{"type":"string","default":"card"},"entity":{"type":"string","default":""},"entities":{"type":"string","default":""},"items":{"type":"string","default":""},"label":{"type":"string","default":""},"onLabel":{"type":"string","default":""},"offLabel":{"type":"string","default":""},"states":{"type":"string","default":""},"min":{"type":"number","default":0},"max":{"type":"number","default":100},"range":{"type":"string","default":"24h"},"points":{"type":"number","default":20},"styleMode":{"type":"string","default":"default"},"bgColor":{"type":"string","default":"#ffffff"},"textColor":{"type":"string","default":"#222222"},"accentColor":{"type":"string","default":"#2980b9"},"borderRadius":{"type":"number","default":8},"fontSize":{"type":"number","default":16}},"supports":{"html":false},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css"}},"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3728414,"resolution":"1","location":"assets","locale":"","width":1454,"height":744},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3728391,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3728391,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3728391,"resolution":"4","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"Card, gauge and list widgets showing live values on a page.","2":"The setup wizard previews the widget and gives you a ready-to-paste shortcode.","3":"Insert the IoT Widget block and choose the connection, entity and style in the sidebar.","4":"The wizard starts by asking where your site runs, so the device and WordPress can actually reach each other."}},"plugin_section":[],"plugin_tags":[284427,74243,80,253521],"plugin_category":[43],"plugin_contributors":[284428],"plugin_business_model":[],"class_list":["post-374504","plugin","type-plugin","status-publish","hentry","plugin_tags-home-assistant","plugin_tags-iot","plugin_tags-shortcode","plugin_tags-smart-home","plugin_category-customization","plugin_contributors-wpveloxa","plugin_committers-wpveloxa"],"banners":{"banner":"https:\/\/ps.w.org\/iot-data-widget\/assets\/banner-772x250.png?rev=3728391","banner_2x":"https:\/\/ps.w.org\/iot-data-widget\/assets\/banner-1544x500.png?rev=3728391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/iot-data-widget\/assets\/icon-128x128.png?rev=3728391","icon_2x":"https:\/\/ps.w.org\/iot-data-widget\/assets\/icon-256x256.png?rev=3728391","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/iot-data-widget\/assets\/screenshot-1.png?rev=3728414","caption":"Card, gauge and list widgets showing live values on a page."},{"src":"https:\/\/ps.w.org\/iot-data-widget\/assets\/screenshot-2.png?rev=3728391","caption":"The setup wizard previews the widget and gives you a ready-to-paste shortcode."},{"src":"https:\/\/ps.w.org\/iot-data-widget\/assets\/screenshot-3.png?rev=3728391","caption":"Insert the IoT Widget block and choose the connection, entity and style in the sidebar."},{"src":"https:\/\/ps.w.org\/iot-data-widget\/assets\/screenshot-4.png?rev=3728391","caption":"The wizard starts by asking where your site runs, so the device and WordPress can actually reach each other."}],"raw_content":"<!--section=description-->\n<p>IoT Data Widget lets you embed live values from smart home sensors and devices \u2014 temperature, humidity, tank levels, device status, anything with a numeric or text value \u2014 on any WordPress page or post. Activating the plugin drops you straight into a guided setup wizard that gets you from \"no connection\" to a working widget and a ready-to-paste shortcode in a few clicks.<\/p>\n\n<p>The free version is fully functional, not a crippled trial: unlimited connections, Home Assistant, push mode, Generic REST, the Card\/Status list\/Gauge display styles, the shortcode and Gutenberg block, the setup wizard, and the diagnostics page all work with no time limit and no license. Pro adds more data sources, history graphs and alerts \u2014 see \"What's included in Free vs Pro?\" in the FAQ below for the full breakdown.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to two services that are <strong>not<\/strong> the smart-home API\/device you configure yourself:<\/p>\n\n<ul>\n<li><strong>Freemius<\/strong> (licensing, update delivery, and \u2014 if you opt in \u2014 basic usage analytics). On first activation you're asked whether to allow anonymous diagnostic data (server environment, WordPress\/PHP version, plugin version, site URL) to be sent \u2014 you can decline, and review\/opt out again later from your account on freemius.com. No data about your connections, entities, or the values they return is ever included. <a href=\"https:\/\/freemius.com\/terms\/\">Terms of Service<\/a>, <a href=\"https:\/\/freemius.com\/privacy\/\">Privacy Policy<\/a>.<\/li>\n<li><strong>Open-Meteo<\/strong> (optional, user-triggered) \u2014 clicking \"Try it with demo data\" in the setup wizard fetches live weather for a Warsaw coordinate pair from <a href=\"https:\/\/open-meteo.com\">Open-Meteo<\/a>, purely to show a working example widget. No account or personal data involved. <a href=\"https:\/\/open-meteo.com\/en\/terms\">Terms &amp; Privacy<\/a>. Skip this step and no request is ever made.<\/li>\n<\/ul>\n\n<p>Every other outbound request goes only to the URL\/host <strong>you<\/strong> configure for a connection.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>iot-data-widget<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip through <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen \u2014 this opens the <strong>setup wizard<\/strong> automatically (skip this step by activating several plugins at once, or by clicking \"Skip the wizard\" on its first screen).<\/li>\n<li>Follow the wizard: pick a connection type, configure and test it live, choose an entity, and copy the ready-made shortcode from the preview screen \u2014 or configure a connection manually under <strong>IoT Data Widget<\/strong> in the admin menu instead:\n\n<ul>\n<li><strong>Home Assistant<\/strong>: enter your instance URL (e.g. <code>http:\/\/homeassistant.local:8123<\/code>) and a Long-Lived Access Token. Generate one in Home Assistant under your profile page \u2192 <strong>Security<\/strong> \u2192 <strong>Long-Lived Access Tokens<\/strong> \u2192 <strong>Create Token<\/strong>. If the URL is a local network address, also turn on <strong>Settings \u2192 Allow local network addresses<\/strong> (the wizard's \"Same network as my devices\" option does this for you).<\/li>\n<li><strong>Push mode<\/strong>: no URL\/credentials to enter \u2014 the wizard generates a channel and a ready-to-paste snippet for your device instead.<\/li>\n<li><strong>Generic REST, advanced mode<\/strong>: enter the full URL of a JSON endpoint. Leave Authorization empty for public APIs, or enter a full header (e.g. <code>Authorization: Bearer xxx<\/code> or <code>X-API-Key: xxx<\/code>) if the API requires one.<\/li>\n<\/ul><\/li>\n<li>Add the widget to a page (the wizard already does this for you, with a shortcode ready to paste):\n\n<ul>\n<li><strong>Gutenberg<\/strong>: insert the \"IoT Data Widget\" block, pick your connection and entity in the sidebar \u2014 for Home Assistant, search and filter by domain instead of typing an entity ID.<\/li>\n<li><strong>Shortcode<\/strong>: use <code>[iotdw_widget]<\/code> directly \u2014 see the FAQ below for examples.<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%27s%20the%20human-readable%20source%20for%20the%20minified%20javascript%3F\"><h3>Where's the human-readable source for the minified JavaScript?<\/h3><\/dt>\n<dd><p>blocks\/iot-widget\/build\/index.js (the Gutenberg block editor script) is a compiled bundle. Its full, human-readable source is included in this plugin's ZIP at <code>blocks\/iot-widget\/src\/<\/code> \u2014 build it yourself with <code>npm install &amp;&amp; npm run build<\/code> (standard <code>@wordpress\/scripts<\/code> toolchain, see <code>package.json<\/code>).<\/p><\/dd>\n<dt id=\"what%27s%20included%20in%20free%20vs%20pro%3F\"><h3>What's included in Free vs Pro?<\/h3><\/dt>\n<dd><p>Free (no time limit, no license, unlimited connections): Home Assistant, push mode, Generic REST data sources; Card\/Status list\/Gauge display styles; status rules (a text and a status colour for a value or range); the setup wizard, shortcode, Gutenberg block, and diagnostics page.<\/p>\n\n<p>Pro adds:<\/p>\n\n<ul>\n<li><strong>More data sources<\/strong> \u2014 device presets for Shelly, Tasmota and ESPHome (pick the device, enter its IP, no JSONPath needed; Shelly Gen1 and ESPHome presets are in beta), Shelly Cloud, and MQTT (polled every 2 minutes, or real-time with the optional server-side listener, which requires SSH access).<\/li>\n<li><strong>History graphs<\/strong> \u2014 Chart and Mini trend (sparkline) display styles, plus Grid for entities from different connections in one widget.<\/li>\n<li><strong>Alerts and reports<\/strong> \u2014 email or webhook alerts when a value crosses a threshold, and recurring email reports with min\/max\/average.<\/li>\n<li><strong>Embed and export<\/strong> \u2014 a token-protected public embed page without the site theme, and CSV export of recorded history.<\/li>\n<li><strong>Manually tracked entities<\/strong> \u2014 history and alerts for widgets placed outside post content, e.g. in theme templates.<\/li>\n<\/ul>\n\n<p>Agency adds white-label branding on top of Pro. You can compare plans and upgrade from <strong>IoT Data Widget \u2192 Upgrade<\/strong> in your WordPress admin.<\/p><\/dd>\n<dt id=\"what%20shortcode%20examples%20are%20there%3F\"><h3>What shortcode examples are there?<\/h3><\/dt>\n<dd><p>Card (single value): <code>[iotdw_widget connection=\"Home\" entity=\"sensor.living_room_temperature\"]<\/code><\/p>\n\n<p>Status list (several entities at once): <code>[iotdw_widget connection=\"Home\" style=\"list\" entities=\"sensor.temperature,sensor.humidity,sensor.battery\"]<\/code><\/p>\n\n<p>Gauge (numeric value with a min\/max range): <code>[iotdw_widget connection=\"Home\" style=\"gauge\" entity=\"sensor.tank_level\" min=\"0\" max=\"100\"]<\/code><\/p>\n\n<p>Generic REST (entity is a JSONPath into the JSON response): <code>[iotdw_widget connection=\"Weather API\" entity=\"current_weather.temperature\"]<\/code><\/p><\/dd>\n<dt id=\"can%20a%20widget%20show%20%22running%22%20with%20a%20green%20dot%20instead%20of%201%3F\"><h3>Can a widget show \"Running\" with a green dot instead of 1?<\/h3><\/dt>\n<dd><p>Yes \u2014 add status rules. In the block, open <strong>Status rules<\/strong> in the sidebar; in a shortcode, use the <code>states<\/code> attribute. Each rule is <code>condition:text:colour<\/code>, rules are separated by <code>;<\/code>, up to 5 per widget, and the first matching rule wins:<\/p>\n\n<ul>\n<li>A relay: <code>[iotdw_widget connection=\"Home\" entity=\"switch.pump\" states=\"0:Off:red;1:Running:green\"]<\/code><\/li>\n<li>Temperature thresholds, keeping the number and adding only a colour dot: <code>states=\"..18::grey;18..24::green;24..::red\"<\/code><\/li>\n<\/ul>\n\n<p>A condition is a number (<code>1<\/code>), a range <code>18..24<\/code> (from 18, below 24), <code>..18<\/code> (below 18) or <code>24..<\/code> (24 and above). Colours: green, yellow, red, grey. Rules work in the Card, Status list and Gauge styles (in Gauge the status is shown under the dial). A widget without rules looks exactly as before.<\/p>\n\n<p>Entities with a non-numeric state (a relay's on\/off, a presence sensor's home\/away...) show their real state (\"ON\", \"home\") in Card and Status list styles; a raw true\/false from a JSON API shows as \"On\"\/\"Off\".<\/p><\/dd>\n<dt id=\"i%20don%27t%20want%20to%20use%20the%20setup%20wizard%20%E2%80%94%20can%20i%20skip%20it%3F\"><h3>I don't want to use the setup wizard \u2014 can I skip it?<\/h3><\/dt>\n<dd><p>Yes, every wizard screen has a \"Skip the wizard, I'll configure manually\" link that takes you straight to the regular Connections page, where everything works exactly as it did before the wizard existed. Nothing about manual configuration changed or was removed.<\/p><\/dd>\n<dt id=\"can%20i%20run%20the%20setup%20wizard%20again%20after%20my%20first%20connection%3F\"><h3>Can I run the setup wizard again after my first connection?<\/h3><\/dt>\n<dd><p>Yes \u2014 click \"Run the setup wizard again\" on the Connections page. It always creates a brand-new connection through the same guided steps; it never edits or overwrites one you already have.<\/p><\/dd>\n<dt id=\"why%20didn%27t%20activating%20the%20plugin%20open%20the%20setup%20wizard%3F\"><h3>Why didn't activating the plugin open the setup wizard?<\/h3><\/dt>\n<dd><p>If you activated several plugins at once (the \"bulk actions\" checkbox list on the Plugins screen), the wizard intentionally doesn't open \u2014 a redirect in the middle of a bulk action would be disruptive. Open it anytime from <strong>IoT Data Widget \u2192 Setup Wizard<\/strong> in the admin menu.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20a%20home%20assistant%20long-lived%20access%20token%3F\"><h3>How do I get a Home Assistant Long-Lived Access Token?<\/h3><\/dt>\n<dd><p>In Home Assistant, click your username in the bottom-left corner to open your profile, scroll to <strong>Security<\/strong>, then <strong>Long-Lived Access Tokens<\/strong> \u2192 <strong>Create Token<\/strong>. Copy it immediately \u2014 Home Assistant only shows it once.<\/p>\n\n<p>Home Assistant doesn't let you limit what a token can do \u2014 it inherits the full permissions of whichever account created it, and it never expires until you revoke it. We recommend creating a separate, non-administrator account in Home Assistant just for this token. If your WordPress site is on external\/shared hosting, also consider push mode instead \u2014 it never stores a Home Assistant token at all.<\/p><\/dd>\n<dt id=\"how%20are%20my%20device%20credentials%20protected%3F\"><h3>How are my device credentials protected?<\/h3><\/dt>\n<dd><p>Credentials you enter (Home Assistant tokens and Generic REST authorization headers \u2014 plus, in Pro, MQTT broker passwords and Shelly Cloud keys) are encrypted before being stored in your WordPress database, using a key derived from your site's own configuration. This protects them if the database itself leaks \u2014 a backup, a database dump, a SQL injection in an unrelated plugin on the same install, or a staging clone. It does <strong>not<\/strong> protect against someone who has already fully compromised your server, since the encryption key lives on that same server.<\/p>\n\n<p>If you ever uninstall the plugin, we recommend also revoking the Home Assistant token (and rotating any other credentials you entered) from the device\/service side.<\/p>\n\n<p>Push mode sidesteps this entirely: the plugin never stores any credentials to your devices, because your device sends data to the plugin instead of the other way around.<\/p><\/dd>\n<dt id=\"my%20device%20is%20on%20the%20same%20network%20as%20wordpress%2C%20but%20the%20connection%20is%20refused\"><h3>My device is on the same network as WordPress, but the connection is refused<\/h3><\/dt>\n<dd><p>For security, the plugin doesn't connect to local network addresses (like 192.168.x.x or homeassistant.local) unless you allow it. If WordPress runs on the same network as your devices \u2014 a Raspberry Pi, NAS or home server \u2014 turn on <strong>IoT Data Widget \u2192 Settings \u2192 Allow local network addresses<\/strong> (on a multisite network, only a network administrator can). Choosing \"Same network as my devices\" in the setup wizard does this for you. If your site is hosted externally, use push mode instead: it can't reach your home network anyway.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20any%20rest%20api%2C%20or%20only%20home%20assistant%3F\"><h3>Does this work with any REST API, or only Home Assistant?<\/h3><\/dt>\n<dd><p>Both. The Generic REST connector (free) works with any API that returns JSON over HTTP(S), authenticated or not.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20data%20anywhere%20else%3F\"><h3>Does the plugin send my data anywhere else?<\/h3><\/dt>\n<dd><p>No. The values shown in your widgets never leave your own WordPress installation to any third party \u2014 the plugin only connects to the URL you configure in each connection. See \"External services\" below for the small number of exceptions.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20connection%20or%20entity%20is%20misconfigured%3F\"><h3>What happens if a connection or entity is misconfigured?<\/h3><\/dt>\n<dd><p>The widget fails gracefully: site visitors simply see nothing where the widget would be, while logged-in administrators see a clear error message in its place.<\/p><\/dd>\n<dt id=\"will%20this%20hit%20my%20home%20assistant%20instance%20on%20every%20page%20view%3F\"><h3>Will this hit my Home Assistant instance on every page view?<\/h3><\/dt>\n<dd><p>No \u2014 responses are cached for 60 seconds by default (not configurable per widget in this version), so repeated page views within that window are served from cache.<\/p><\/dd>\n<dt id=\"something%20isn%27t%20working%20%E2%80%94%20what%27s%20the%20fastest%20way%20to%20get%20help%3F\"><h3>Something isn't working \u2014 what's the fastest way to get help?<\/h3><\/dt>\n<dd><p>Go to <strong>IoT Data Widget \u2192 Diagnostics<\/strong> and click \"Copy diagnostic report\", then paste it into your support email or ticket. Tokens, keys and passwords are never included in the report.<\/p><\/dd>\n<dt id=\"what%20languages%20does%20the%20plugin%20come%20with%3F\"><h3>What languages does the plugin come with?<\/h3><\/dt>\n<dd><p>English (default) and Polish. The Polish translation is included in the plugin and loads automatically on WordPress 6.7 or newer when your site language is Polish. Other languages can be contributed on <a href=\"https:\/\/translate.wordpress.org\/\">translate.wordpress.org<\/a> \u2014 any string not yet translated falls back to English.<\/p><\/dd>\n<dt id=\"what%27s%20the%20plugin%27s%20privacy%20policy%3F\"><h3>What's the plugin's privacy policy?<\/h3><\/dt>\n<dd><p>No telemetry beyond the opt-in Freemius diagnostics (see \"External services\" below); the plugin author never sees your data or connection details. Credentials are encrypted at rest. Fetched values are cached temporarily (WP Transients, 60s default), not logged or retained beyond that. Uninstalling leaves your data in place unless you check \"Remove all plugin data\" under Settings first. If the external API\/instance you connect to processes personal data, your site's own privacy policy should disclose that connection.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added: status rules \u2014 show a text and a coloured status dot for a value or a range (for example \"Running\" with a green dot for a relay, or green\/red for temperature thresholds); up to 5 rules per widget, in the block sidebar or with the shortcode's <code>states<\/code> attribute. Works in the Card, Status list and Gauge styles. Widgets without rules look exactly as before.<\/li>\n<li>Fixed: a unit set in the shortcode (<code>unit=\"\u00b0C\"<\/code>) no longer disappears when the widget refreshes its value after the page loads.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added: Polish translation of the whole plugin \u2014 admin screens, setup wizard, widgets, the block editor, and the licensing screens (opt-in, account, upgrade) (WordPress 6.7 or newer).<\/li>\n<li>Changed: Pro-only styles in the block's style list are marked \"(Pro)\".<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Security: requests to local network addresses (192.168.x.x, 10.x.x.x, homeassistant.local\u2026) are now blocked unless \"Allow local network addresses\" is turned on under Settings; cloud metadata and link-local addresses are always blocked, including via redirects. If this site already connects to a device on your local network, the setting is turned on automatically during the update \u2014 nothing stops working. Choosing \"Same network as my devices\" in the setup wizard turns it on too.<\/li>\n<li>Added: widgets placed in classic theme widget areas (sidebars, footers) now load their styles and refresh live \u2014 previously they appeared unstyled and never updated.<\/li>\n<li>Fixed: widgets line up with the content column in classic themes such as Twenty Twenty-One. Widgets placed one after another now stack vertically \u2014 use a Row or Columns block to place them side by side.<\/li>\n<li>Fixed: \"Test connection\" (and alert e-mails in Pro) show \"On\"\/\"Off\" instead of \"true\"\/\"false\" for on\/off devices such as Shelly relays.<\/li>\n<li>Fixed: the free version no longer schedules or lists Pro-only background tasks (MQTT polling, email reports, value history); updating removes them.<\/li>\n<li>Fixed: the setup wizard labels Shelly Cloud and Supla as Pro, and shows an accurate message if the demo connection can't be saved.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added: \"Upgrade\" link in the plugin menu and the plugin list, and an upgrade link next to Pro-only styles (visible to administrators only).<\/li>\n<li>Fixed: database error when the same widget appears twice on a page \u2014 saving the page in the block editor no longer fails.<\/li>\n<li>Fixed: widget alignment in block themes such as Twenty Twenty-Five \u2014 Card and Gauge now line up with the content column, with even spacing between widgets.<\/li>\n<li>Fixed: the setup wizard now continues to entity selection after you configure a connection, instead of returning to the Connections list.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>\n\n<ul>\n<li>Home Assistant, push mode, and Generic REST connectors \u2014 all free, with no connection limit.<\/li>\n<li>Guided setup wizard: pick a connection type, configure and test it live, choose an entity, and get a ready-to-paste shortcode before anything is saved.<\/li>\n<li>Card, Status list and Gauge display styles \u2014 free. Chart, Mini trend\/sparkline, and Grid (recorded history) \u2014 Pro.<\/li>\n<li><code>[iotdw_widget]<\/code> shortcode and a Gutenberg block with a searchable entity browser and live preview.<\/li>\n<li>Connection credentials are encrypted at rest.<\/li>\n<li>Built-in response caching, always on.<\/li>\n<li>Appearance personalization \u2014 site-wide defaults with a live preview, and per-widget overrides in the block editor.<\/li>\n<li>Diagnostics page with environment info, scheduled-task status, per-connection health (including push channel activity), and a one-click \"Copy diagnostic report\" button.<\/li>\n<\/ul>","raw_excerpt":"Show live data from your smart home devices on your WordPress site with a shortcode or block. Pro adds more data sources, history graphs and alerts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=374504"}],"author":[{"embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpveloxa"}],"wp:attachment":[{"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374504"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374504"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374504"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374504"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374504"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/az.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}