{"id":22132,"date":"2024-08-06T23:44:32","date_gmt":"2024-08-07T06:44:32","guid":{"rendered":"https:\/\/tdengine.com\/?p=22132"},"modified":"2025-03-30T23:05:21","modified_gmt":"2025-03-31T06:05:21","slug":"solar-mqtt-ingestion","status":"publish","type":"post","link":"https:\/\/tdengine.com\/solar-mqtt-ingestion\/","title":{"rendered":"Solar Panel Monitoring: MQTT Ingestion"},"content":{"rendered":"\n<p>MQTT is a data protocol commonly used for communication in modern IIoT environments, including many renewable energy sites. Devices can send the data they collect to an MQTT broker, potentially via an IoT gateway, so that it can be used in higher-level applications and algorithms. TDengine, being a time-series database designed for the IIoT, includes a built-in MQTT connector that can be configured without writing a single line of code, making it easier than ever to transfer your operations data into persistent storage and share it with your business and analytics apps and teams.<\/p>\n\n\n\n<p>This article describes how use TDengine&#8217;s MQTT connector to ingest and monitor data generated by solar panels at different sites. In this example, the data is sent from an MQTT broker to TDengine Cloud and then visualized in Grafana.<\/p>\n\n\n<div class=\"gb-container gb-container-9a3c1f82 toc\">\n\n<div class=\"gb-headline gb-headline-89b93e98 gb-headline-text\">Table of Contents<\/div>\n\n\n\n<style>\n.toc ol {\ncounter-reset: item\n}\n.toc li {\ndisplay: block\n}\n.toc li:before {\ncontent: counters(item, \".\") \" \";\ncounter-increment: item\n}\n<\/style>\n\n\n<div class=\"gb-container gb-container-bf352232\">\n\n<ol class=\"wp-block-list nopad-li\">\n<li><a href=\"#t1\">Introduction<\/a><\/li>\n\n\n\n<li><a href=\"#t2\">Create an MQTT Data Source<\/a>\n<ol class=\"wp-block-list\">\n<li><a href=\"#t2-1\">Configure the Data Source and Database<\/a><\/li>\n\n\n\n<li><a href=\"#t2-2\">Configure the Connection<\/a><\/li>\n\n\n\n<li><a href=\"#t2-3\">Configure Data Collection<\/a><\/li>\n\n\n\n<li><a href=\"#t2-4\">Transform Your Data<\/a><\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><a href=\"#t3\">View Data in TDengine<\/a><\/li>\n<\/ol>\n\n<\/div>\n<\/div>\n\n\n<h2 class=\"gb-headline gb-headline-f79fd466 gb-headline-text\">Video Tutorial<\/h2>\n\n\n<div class=\"gb-container gb-container-0e862247\">\n\n<iframe width=\"100%\" height=\"100%\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/PFJ_RG2jy30?si=5uNLUOuCJcuJg-Xb\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n<\/div>\n\n\n<h2 class=\"gb-headline gb-headline-0e455e96 gb-headline-text\" id=\"t1\">Introduction<\/h2>\n\n\n\n<p>For this demonstration, a simulator writes data to a public MQTT broker hosted by EMQX. The simulated data is for three solar farms. Each farm has 10 strings, and each string has 10 panels. Data records are transmitted in JSON format and look as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code language-json\"><code class=\"\" data-line=\"\">{\n    &quot;ambienttemperature_c&quot;: &quot;26.29&quot;,\n    &quot;windspeed_mps&quot;: 8.02,\n    &quot;poweroutput_kw&quot;: &quot;350.84&quot;,\n    &quot;current&quot;: &quot;7.17&quot;,\n    &quot;voltage&quot;: &quot;48.92&quot;,\n    &quot;tstamp&quot;: &quot;2024-07-01T21:54:48-07:00&quot;,\n    &quot;panelid&quot;: &quot;panel4&quot;,\n    &quot;string&quot;: &quot;string1&quot;,\n    &quot;site&quot;: &quot;solarfarma&quot;\n}<\/code><\/pre>\n\n\n\n<p>As you can see, these records contain various metrics collected by each solar panel as well as static attributes for the site, string, and panel ID. Note that this simulator is simulating data for coordinates in California and after sunset there is no data except for windspeed and ambient temperature.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-9a71e3ec gb-headline-text\" id=\"t2\">Create an MQTT Data Source<\/h2>\n\n\n\n<p>To follow along, it is easiest to use a Starter account on <a href=\"https:\/\/cloud.tdengine.com\/\">TDengine Cloud<\/a>. If you do not already have an account, you can create one easily. No credit card is required and the instance is active for a month.<\/p>\n\n\n\n<p>Once you have logged into your account, click <strong>Data In<\/strong> in the main menu on the left.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-97f3f615\"><img decoding=\"async\" width=\"1280\" height=\"705\" class=\"gb-image gb-image-97f3f615\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3.png?strip=all&sharp=1\" alt=\"\" title=\"01\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3-300x165.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3-1024x564.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3-768x423.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/01-3.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>On the <strong>Data Sources<\/strong> tab, click <strong>Add Data Source<\/strong>.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-165b8121\"><img decoding=\"async\" width=\"1280\" height=\"442\" class=\"gb-image gb-image-165b8121\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02.png?strip=all&sharp=1\" alt=\"\" title=\"new02\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02-300x104.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02-1024x354.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02-768x265.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/new02.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<h3 class=\"gb-headline gb-headline-309fd5d6 gb-headline-text\" id=\"t2-1\">Configure the Data Source and Database<\/h3>\n\n\n\n<figure class=\"gb-block-image gb-block-image-fd95cd67\"><img decoding=\"async\" width=\"1280\" height=\"748\" class=\"gb-image gb-image-fd95cd67\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1.png?strip=all&sharp=1\" alt=\"\" title=\"03\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1-300x175.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1-1024x598.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1-768x449.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/03-1.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the <strong>Name<\/strong> field, enter a name for your data source.<\/li>\n\n\n\n<li>From the <strong>Type<\/strong> drop-down list, select <strong>MQTT<\/strong>.<\/li>\n\n\n\n<li>Determine whether to specify a connection agent.\n<ul class=\"wp-block-list nopad-li\">\n<li>If your MQTT broker is public, leave the <strong>Agent<\/strong> field blank.<\/li>\n\n\n\n<li>If your MQTT broker is behind a firewall, select an agent on the same network as your MQTT broker. If you have not created an agent in advance, click <strong>Create New Agent<\/strong> and follow the instructions displayed on screen. For more information, see <a href=\"https:\/\/docs.tdengine.com\/cloud\/data-in\/ds\/install-agent\/\">Install Connection Agent<\/a>.<br><br>In this example, the MQTT broker is accessible on public networks, so an agent is not used.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Specify a database in TDengine to store the data ingested from your MQTT data source.<br>Note that you must specify a database that is empty and whose <code class=\"\" data-line=\"\">CACHEMODEL<\/code> parameter has been set to <code class=\"\" data-line=\"\">both<\/code>.<br><br>If a database has not been created in advance, click the <strong>Create Database<\/strong> button.<\/li>\n<\/ol>\n\n\n\n<figure class=\"gb-block-image gb-block-image-0a291058\"><img decoding=\"async\" width=\"1280\" height=\"818\" class=\"gb-image gb-image-0a291058\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1.png?strip=all&sharp=1\" alt=\"\" title=\"04\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1-300x192.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1-1024x654.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1-768x491.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/04-1.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>For more information about creating databases in TDengine, see <a href=\"https:\/\/docs.tdengine.com\/cloud\/tdengine-reference\/sql-manual\/manage-databases\/#create-database\">Create a Database<\/a>.<\/p>\n\n\n\n<h3 class=\"gb-headline gb-headline-fbc65dc3 gb-headline-text\" id=\"t2-2\">Configure the Connection<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Under <strong>Connection Configuration<\/strong>, enter the hostname and port of your MQTT broker.<\/li>\n<\/ol>\n\n\n\n<figure class=\"gb-block-image gb-block-image-6a2dc108\"><img decoding=\"async\" width=\"1280\" height=\"732\" class=\"gb-image gb-image-6a2dc108\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1.png?strip=all&sharp=1\" alt=\"\" title=\"05\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1-300x172.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1-1024x586.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1-768x439.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/05-1.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Under <strong>Authentication<\/strong>, enter the username and password to connect to your MQTT broker and topic.<br>In this demonstration, the MQTT broker and topic used do not require authentication and the fields are left blank.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-headline gb-headline-3d3ff10e gb-headline-text\" id=\"t2-3\">Configure Data Collection<\/h3>\n\n\n\n<p>Enter the information shown as follows. <strong>Note that each client ID must be unique. You must enter a different client ID when you are trying this out.<\/strong><\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-ec4fa2c7\"><img decoding=\"async\" width=\"1280\" height=\"659\" class=\"gb-image gb-image-ec4fa2c7\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1.png?strip=all&sharp=1\" alt=\"\" title=\"06\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1-300x154.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1-1024x527.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1-768x395.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/06-1.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>After you have entered the required information, click <strong>Check Connection<\/strong>. The message &#8220;Your data source is reachable.&#8221; indicates that your data source has been configured correctly.<\/p>\n\n\n\n<p>Note that the &#8220;topic&#8221; is a string which the MQTT broker will use to filter the messages sent to a particular client. QoS is Quality of Service defines the level of delivery guarantee. In this case, we use QoS level 0, which is &#8220;at most once&#8221; or &#8220;fire and forget&#8221;, but in a production environment you may use 1 or 2 depending on network reliability and the requirements of your application.<\/p>\n\n\n\n<h3 class=\"gb-headline gb-headline-21b0264e gb-headline-text\" id=\"t2-4\">Transform Your Data<\/h3>\n\n\n\n<p>To configure the &#8220;Payload Transformation&#8221; section, you can copy and paste the JSON message from the top of this blog.<\/p>\n\n\n\n<p>Watch the video snippet below that shows you how to configure the payload and the supertable.<\/p>\n\n\n<div class=\"gb-container gb-container-0b89556f\">\n\n<iframe width=\"100%\" height=\"100%\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/GZrNrcsU5U4?si=fnbSBgUByabztyVR\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n<\/div>\n\n\n<p>Once the data source is created, you will notice that that status says &#8220;Queued&#8221;. You can just hit the refresh icon above the Status heading and see that it will say &#8220;Running&#8221;.<\/p>\n\n\n\n<p>Note that in this case, this schema will create a subtable for each panel. The supertable is set up to represent solar panels and the contextualization of each panel is present in the tags which tell us which site and in which string the panel is deployed.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-425b0806 gb-headline-text\" id=\"t3\">View Data in TDengine<\/h2>\n\n\n\n<p>Click <strong>Explorer<\/strong> in the main menu to the left to see the database and verify whether it is ingesting data from the MQTT data source.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-9f801e48\"><img decoding=\"async\" width=\"1280\" height=\"315\" class=\"gb-image gb-image-9f801e48\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1.png?strip=all&sharp=1\" alt=\"\" title=\"07\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1-300x74.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1-1024x252.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1-768x189.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/07-1.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<figure class=\"gb-block-image gb-block-image-4e30bb3b\"><img decoding=\"async\" width=\"1280\" height=\"583\" class=\"gb-image gb-image-4e30bb3b\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08.png?strip=all&sharp=1\" alt=\"\" title=\"08\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08-300x137.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08-1024x466.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08-768x350.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/08.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>If you click on a subtable, you can see it has data in it.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-894aa7af\"><img decoding=\"async\" width=\"1280\" height=\"549\" class=\"gb-image gb-image-894aa7af\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09.png?strip=all&sharp=1\" alt=\"\" title=\"09\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09.png?strip=all&amp;sharp=1 1280w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09-300x129.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09-1024x439.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09-768x329.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09.png?strip=all&amp;sharp=1&amp;w=512 512w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/09.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>Now that we are done with setting up an MQTT data source, <a href=\"https:\/\/tdengine.com\/solar-visualization-grafana\/\">in the next article<\/a> we will setup Grafana dashboards to visualize this data in real time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to use TDengine&#8217;s MQTT connector to ingest and monitor data generated by solar panels at different sites.<\/p>\n","protected":false},"author":81,"featured_media":22211,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[21],"tags":[],"ppma_author":[167],"class_list":["post-22132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering"],"authors":[{"term_id":167,"user_id":81,"is_guest":0,"slug":"chait","display_name":"Chait Diwadkar","avatar_url":{"url":"https:\/\/tdengine.com\/wp-content\/uploads\/29.03-05-cdiwadkar.jpg","url2x":"https:\/\/tdengine.com\/wp-content\/uploads\/29.03-05-cdiwadkar.jpg"},"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/22132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/comments?post=22132"}],"version-history":[{"count":34,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/22132\/revisions"}],"predecessor-version":[{"id":23291,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/22132\/revisions\/23291"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/media\/22211"}],"wp:attachment":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/media?parent=22132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/categories?post=22132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/tags?post=22132"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/ppma_author?post=22132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}