{"id":6551,"date":"2024-06-23T18:57:59","date_gmt":"2024-06-23T18:57:59","guid":{"rendered":"https:\/\/lora.vsb.cz\/?page_id=6551"},"modified":"2025-08-14T09:31:47","modified_gmt":"2025-08-14T09:31:47","slug":"ttn-gateways-monitoring-tgm","status":"publish","type":"page","link":"https:\/\/lora.vsb.cz\/index.php\/ttn-gateways-monitoring-tgm\/","title":{"rendered":"TTN Gateways Monitoring &#8211; TGM"},"content":{"rendered":"<table style=\"height: 66px;\" width=\"356\">\n<tbody>\n<tr>\n<td style=\"text-align: left; min-width: 100px;\" width=\"10%\"><strong>TTN version:<\/strong><\/td>\n<td><strong><span style=\"color: #008000;\">TTNv3<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left; min-width: 100px;\" width=\"10%\"><strong>System:<\/strong><\/td>\n<td><strong>64-bit<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left; min-width: 100px;\" width=\"10%\"><strong>Last updated:<\/strong><\/td>\n<td>June 28, 2024<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For gateways monitoring, we use an open-source time series database <a href=\"https:\/\/www.influxdata.com\/\" target=\"_blank\" rel=\"noopener\"><strong>InfluxDB<\/strong><\/a>\u00a0and an open-source analytical and interactive visualization web application\u00a0<a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noopener\"><strong>Grafana<\/strong><\/a>. Gateway data is loaded from The Things Stack using our <strong>TGM<\/strong>. The TGM makes a GET requests, parses the data received in the response, and then stores the data (number of <strong>uplinks<\/strong> and <strong>downlinks<\/strong>, times &#8211; <strong>last uplink<\/strong> received at, <strong>last downlink<\/strong> received at and <strong>last status<\/strong> received at) in the InfluxDB database.<\/p>\n<p><a href=\"https:\/\/lora.vsb.cz\/tgm_1\/\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-7274\" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1.png\" alt=\"TTN Gateways monitoring dashboard\" width=\"2437\" height=\"1114\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1.png 2437w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1-300x137.png 300w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1-1024x468.png 1024w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1-768x351.png 768w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1-1536x702.png 1536w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_1-2048x936.png 2048w\" sizes=\"auto, (max-width: 2437px) 100vw, 2437px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #189bd6;\"><strong>Prepare<\/strong><\/span><\/h2>\n<ul>\n<li>Raspberry Pi 4\/5 or Linux server<\/li>\n<li>The Things Stack with active gateways<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">Raspberry Pi OS setup<\/span><\/strong><strong><span style=\"color: #800000;\"> and Docker installation<\/span><\/strong><\/h2>\n<h6><strong>Raspberry Pi OS setup<\/strong><\/h6>\n<ol>\n<li>From\u00a0<strong><a href=\"https:\/\/www.raspberrypi.com\/software\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.raspberrypi.com\/software\/<\/a><\/strong>\u00a0download\u00a0<strong>Raspberry Pi Imager<\/strong>\u00a0and install it.<\/li>\n<li>Insert the microSD card into the computer.<\/li>\n<li>Run\u00a0<strong>Raspberry Pi Imager<\/strong>.<\/li>\n<li>Click on\u00a0<strong>CHOOSE OS<\/strong>.<\/li>\n<li>Click on\u00a0<strong>Raspberry Pi OS (other)<\/strong>.<\/li>\n<li>Click on\u00a0<strong>Raspberry Pi OS Lite (64-bit)<\/strong>.<\/li>\n<li>Click on\u00a0<strong>CHOOSE STORAGE<\/strong>.<\/li>\n<li>Select the inserted microSD card on which you want to install Raspberry Pi OS.<\/li>\n<li>Click on <strong>Next<\/strong>.<\/li>\n<li>Would you like to apply OS customisation settings? &#8211; <strong>EDIT SETTINGS<\/strong>.<\/li>\n<li><strong>Set hostname<\/strong>.<\/li>\n<li><strong>Set username and password<\/strong>. (<span style=\"color: #ff6600;\">we recommend a 17-digit password containing lower and upper case letters, numbers and symbols<\/span>)<\/li>\n<li>If you will use WiFi \u2013\u00a0<strong>Configure wireless LAN<\/strong>. (<span style=\"color: #ff6600;\">optional<\/span>)<\/li>\n<li><strong>Set locale settings<\/strong>.<\/li>\n<li>Click on tab <strong>SERVICES<\/strong>.<\/li>\n<li>If you will be connecting remotely via SSH \u2013<strong>\u00a0Enable SSH<\/strong>\u00a0\u2013\u00a0<strong>Use password authentication<\/strong>. (<span style=\"color: #ff6600;\">optional<\/span>)<\/li>\n<li>Click on\u00a0<strong>SAVE<\/strong>.<\/li>\n<li>Click on <strong>YES<\/strong>.<\/li>\n<li>Click on\u00a0<strong>YES<\/strong>.<\/li>\n<li>Click on\u00a0<strong>CONTINUE<\/strong>.<\/li>\n<li>Insert the microSD card into the Raspberry Pi.<\/li>\n<li>Turn on the Raspberry Pi.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h6><strong>Remote connection via SSH (optional)<\/strong><\/h6>\n<ol>\n<li>Connect to your router and find the IP address of your Raspberry Pi.<\/li>\n<li>From a Windows PC, you can connect using <strong>Command Prompt<\/strong> (CMD) or <strong><a href=\"https:\/\/www.chiark.greenend.org.uk\/~sgtatham\/putty\/latest.html\" target=\"_blank\" rel=\"noopener\">PuTTY<\/a><\/strong>.<\/li>\n<li>On Windows PC open <strong>Command Prompt<\/strong> (CMD).<\/li>\n<li>Type <code><strong>ssh -p <em>port <\/em><em>username<\/em>@<em>IP<\/em><\/strong><em>_<\/em><strong><em>Address<\/em><\/strong><\/code> (for example: ssh -p 22 loravsb@192.168.1.120).<\/li>\n<li>Type your password.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h6><strong>Post-installation steps<\/strong><\/h6>\n<ol>\n<li>Update, upgrade and reboot Raspberry Pi. This will ensure that any security vulnerabilities are patched:\n<pre>$ sudo apt update\r\n$ sudo apt full-upgrade\r\n$ sudo reboot<\/pre>\n<\/li>\n<li>Connect again via SSH.<\/li>\n<li>Use a different port for SSH and disable root login.\u00a0First, open the SSH configuration file with a text editor:\n<pre>$ sudo nano \/etc\/ssh\/sshd_config\r\n<\/pre>\n<\/li>\n<li>Locate the line with <code>Port 22<\/code> and change it to the desired port number (for example, change the port to 2222). Locate the line with <code>PermitRootLogin<\/code> and change its value to <code>no<\/code> (this will disable root login via SSH):\n<pre><span class=\"hljs-keyword\">Port 2222\r\nPermitRootLogin no<\/span>\r\n\r\n<\/pre>\n<\/li>\n<li>Save the changes and exit the text editor.<\/li>\n<li>Restart the SSH service to apply the changes:\n<pre>$ sudo systemctl restart ssh\r\n<\/pre>\n<\/li>\n<li>Log out and connect again via SSH on the new port.<\/li>\n<li>Install and configure the built-in firewall, ufw, to limit incoming and outgoing network connections. In the <code>sudo ufw limit 2222\/tcp<\/code> rule, change port 2222 to port you have chose for SSH above.\n<pre>$ sudo apt install ufw\r\n$ sudo ufw <span class=\"hljs-keyword\">default<\/span> deny incoming\r\n$ sudo ufw <span class=\"hljs-keyword\">default<\/span> deny outgoing\r\n$ sudo ufw limit 2222\/tcp\r\n$ sudo ufw allow out 123\/udp\r\n$ sudo ufw allow <span class=\"hljs-keyword\">out<\/span> <span class=\"hljs-keyword\">to<\/span> <span class=\"hljs-keyword\">any<\/span> port 53\r\n$ sudo ufw allow <span class=\"hljs-keyword\">out<\/span> <span class=\"hljs-keyword\">to<\/span> <span class=\"hljs-keyword\">any<\/span> port <span class=\"hljs-number\">80\r\n$ sudo ufw allow <span class=\"hljs-keyword\">out<\/span> <span class=\"hljs-keyword\">to<\/span> <span class=\"hljs-keyword\">any<\/span> port 443\r\n$ sudo ufw enable<\/span>\r\n<\/pre>\n<p><span style=\"color: #ff6600;\">Note: Firewall rules will have no effect on ports opened by Docker.<\/span><\/li>\n<li>Reboot Raspberry Pi:\n<pre>$ sudo reboot<\/pre>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h6><strong>Docker<\/strong><\/h6>\n<ol>\n<li>Connect again via SSH.<\/li>\n<li>Install the latest Docker version using the convenience script provided by docker:\n<pre class=\" prettyprinted\"><span class=\"pln\">$ curl <\/span><span class=\"pun\">-<\/span><span class=\"pln\">fsSL https<\/span><span class=\"pun\">:<\/span><span class=\"com\">\/\/get.docker.com -o get-docker.sh<\/span><span class=\"pln\">\r\n$ sudo sh <\/span><span class=\"kwd\">get<\/span><span class=\"pun\">-<\/span><span class=\"pln\">docker<\/span><span class=\"pun\">.<\/span><span class=\"pln\">sh\r\n$ sudo groupadd docker\r\n$ sudo usermod <\/span><span class=\"pun\">-<\/span><span class=\"pln\">aG docker $USER\r\n$ newgrp docker\r\n$ sudo systemctl enable docker<\/span><span class=\"pun\">.<\/span><span class=\"pln\">service\r\n$ sudo systemctl enable containerd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">service<\/span><\/pre>\n<\/li>\n<\/ol>\n<p>For more information on Docker installation, see\u00a0<strong><a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.docker.com\/engine\/install\/<\/a><\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">TTS API key<\/span><\/strong><\/h2>\n<ol>\n<li>In\u00a0<strong>TTS -&gt; YourUsername -&gt; Personal API keys<\/strong> click on <strong>+ Add API key<\/strong>.<\/li>\n<li>Write something in the\u00a0<strong>Name<\/strong>.<\/li>\n<li>Select\u00a0<strong>Grant individual rights<\/strong>.<\/li>\n<li>Check <strong>List gateways the user is collaborator of<\/strong>.<\/li>\n<li>Click on button\u00a0<strong>Create API key<\/strong>.<\/li>\n<li>Click the\u00a0<strong>Copy to Clipboard<\/strong>\u00a0button and save the key somewhere safe for later use.<\/li>\n<li>In the section below, you will use the <strong>API key<\/strong>.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">Option 1: InfuxDB v1.8.10, <span style=\"caret-color: #800000;\">Grafana and TGM 1 setup<\/span><\/span><\/strong><\/h2>\n<p>If you want to deploy the new Grafana, InfluxDB v1.8.10 and TGM 1, follow the instructions in this section.<\/p>\n<ol>\n<li>Clone the repository with TGM 1 and go to the created directory:\n<pre>$ git clone https:\/\/github.com\/OndrejKnebl\/tgm_1.git\r\n$ cd tgm_1<\/pre>\n<\/li>\n<li>Create internal Docker networks:\n<pre>$ sudo docker network create myNetworkIandG\r\n$ sudo docker network create myNetworkIandM<\/pre>\n<\/li>\n<li>Run this command to edit the <strong>docker-compose.yml<\/strong> file:\n<pre>$ sudo nano docker-compose.yml<\/pre>\n<\/li>\n<li>Copy and paste the <strong>API key<\/strong> you got previously saved to the <strong><strong>TTN_PERSONAL_API_KEY <\/strong><\/strong>variable.<\/li>\n<li>Replace the values \u200b\u200bof the following variables with your values and save the <strong>docker-compose.yml<\/strong> file:\n<pre>INFLUXDB_DB,\r\nINFLUXDB_ADMIN_USER,\r\nINFLUXDB_ADMIN_PASSWORD,\r\nINFLUXDB_WRITE_USER,\r\nINFLUXDB_WRITE_USER_PASSWORD,\r\nINFLUXDB_READ_USER,\r\nINFLUXDB_READ_USER_PASSWORD,\r\nDB_USERNAME,\r\nDB_PASSWORD,\r\nDB_NAME,\r\nDB_MEASUREMENT<\/pre>\n<\/li>\n<li>Build the image:\n<pre>$ sudo docker compose build<\/pre>\n<\/li>\n<li>Now, you can start it <strong>running in the background<\/strong> with the following command:\n<pre>$ sudo docker compose up -d<\/pre>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3><strong>Grafana setup<\/strong><\/h3>\n<ol>\n<li>Now you can visit your Grafana web application from a browser in your internal network at <code><strong><em>http:\/\/IP<\/em><\/strong><em>_<\/em><strong><em>AddressOfServer:3000<\/em><\/strong><\/code> (for example 192.168.1.120:3000).<\/li>\n<li>Log in with username <strong>admin<\/strong> and password <strong>admin<\/strong>.<\/li>\n<li>Change your Grafana account password.<\/li>\n<li>Click on <strong>Connections -&gt; Data sources -&gt; Add data source<\/strong>.<\/li>\n<li>Choose <strong>InfluxDB<\/strong>.<\/li>\n<li>Query Language = <strong>InfluxQL<\/strong><\/li>\n<li>URL = <code><strong>http:\/\/influxdb<\/strong><strong>:8086<\/strong><\/code><\/li>\n<li>Database = <span style=\"color: #ff6600;\"><em>ttnGateways<\/em><\/span><\/li>\n<li>User = <span style=\"color: #ff6600;\"><em>myNewReadUser<\/em><\/span><\/li>\n<li>Password = <span style=\"color: #ff6600;\"><em>myNewReadUserPassword<\/em><\/span><\/li>\n<li>HTTP Method = <strong>GET<\/strong><\/li>\n<li>Click on <strong>Save &amp; test<\/strong><\/li>\n<li>Continue with the &#8222;Grafana dashboard setup&#8220; section below.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">Option 2: InfuxDB v2, <span style=\"caret-color: #800000;\">Grafana and TGM 2 setup<\/span><\/span><\/strong><\/h2>\n<p>If you want to deploy the new Grafana, InfluxDB v2 and TGM 2, follow the instructions in this section.<\/p>\n<ol>\n<li>Clone the repository with TGM 2 and go to the created directory:\n<pre>$ git clone https:\/\/github.com\/OndrejKnebl\/tgm_2.git\r\n$ cd tgm_2<\/pre>\n<\/li>\n<li>Create internal Docker networks:\n<pre>$ sudo docker network create myNetworkIandG\r\n$ sudo docker network create myNetworkIandM<\/pre>\n<\/li>\n<li>Build the image:\n<pre>$ sudo docker compose build<\/pre>\n<\/li>\n<li>Now, you can start it running\u00a0with the following command:\n<pre>$ sudo docker compose up<\/pre>\n<\/li>\n<li>Now you can visit your InfluxDB web application from a browser in your internal network at <code><strong><em>http:\/\/IP<\/em><\/strong><em>_<\/em><strong><em>AddressOfServer:8086<\/em><\/strong><\/code> (for example 192.168.1.120:8086).<\/li>\n<li>Click on <strong>GET STARTED.<\/strong><\/li>\n<li><strong>Setup your Initial User<\/strong> &#8211; Username, Password, Organization and Bucket.<\/li>\n<li>Click on <strong>CONTINUE<\/strong>.<\/li>\n<li>Click on <strong>QUICK START<\/strong>.<\/li>\n<li>In the left menu, click <strong>Load data -&gt; API Tokens -&gt; + GENERATE API TOKEN -&gt; Custom API Token<\/strong>.<\/li>\n<li>Write something to Description.<\/li>\n<li>Click on <strong>Buckets<\/strong> and check the <strong>Read box<\/strong> next to the <strong>previously created bucket<\/strong>.<\/li>\n<li>Click on <strong>GENERATE<\/strong>.<\/li>\n<li>Click on the <strong>COPY TO CLIPBOARD<\/strong> button and save the key somewhere safe for later use in Grafana.<\/li>\n<li>Click on <strong>cross button<\/strong>.<\/li>\n<li>Click on <strong>+ GENERATE API TOKEN -&gt; Custom API Token<\/strong>.<\/li>\n<li>Write something to Description.<\/li>\n<li>Click on <strong>Buckets<\/strong> and check the <strong>Write box<\/strong> next to the <strong>previously created bucket<\/strong>.<\/li>\n<li>Click on <strong>GENERATE<\/strong>.<\/li>\n<li>Click on the <strong>COPY TO CLIPBOARD<\/strong> button and save the key somewhere safe for later use in <strong>docker-compose.yml<\/strong> file for <strong>TGM<\/strong>.<\/li>\n<li>Click on <strong>cross button<\/strong>.<\/li>\n<li>Logout from your InfluxDB web application.<\/li>\n<li><strong>In the terminal<\/strong> with container outputs running, <strong>press Ctrl+C<\/strong>.<\/li>\n<li>Run this command to edit the <strong>docker-compose.yml<\/strong> file:\n<pre>$ sudo nano docker-compose.yml<\/pre>\n<\/li>\n<li>Copy and paste the <strong>TTN API key<\/strong> you got previously saved to the <strong><strong>TTN_PERSONAL_API_KEY <\/strong><\/strong>variable.<\/li>\n<li>Replace the values \u200b\u200bof the following variables with your values and save the <strong>docker-compose.yml<\/strong> file:\n<pre>DB_WRITE_TOKEN,\r\nDB_ORG,\r\nDB_BUCKET<\/pre>\n<\/li>\n<li>Now, you can start it <strong>running in the background<\/strong> with the following command:\n<pre>$ sudo docker compose up -d<\/pre>\n<\/li>\n<li>Continue with the &#8222;Grafana dashboard setup&#8220; section below.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3><strong>Grafana setup<\/strong><\/h3>\n<ol>\n<li>Now you can visit your Grafana web application from a browser in your internal network at <code><strong><em>http:\/\/IP<\/em><\/strong><em>_<\/em><strong><em>AddressOfServer:3000<\/em><\/strong><\/code> (for example 192.168.1.120:3000).<\/li>\n<li>Log in with username <strong>admin<\/strong> and password <strong>admin<\/strong>.<\/li>\n<li>Change your Grafana account password.<\/li>\n<li>Click on <strong>Connections -&gt; Data sources -&gt; Add data source<\/strong>.<\/li>\n<li>Choose <strong>InfluxDB<\/strong>.<\/li>\n<li>Query Language = <strong>InfluxQL<\/strong><\/li>\n<li>URL = <code><strong>http:\/\/influxdb2<\/strong><strong>:8086<\/strong><\/code><\/li>\n<li>Database = <span style=\"color: #ff6600;\"><em>myBucket<\/em><\/span><\/li>\n<li>User = <span style=\"color: #ff6600;\"><em>myInitialUser<\/em><\/span><\/li>\n<li>Password = <span style=\"color: #ff6600;\"><em>myReadToken<\/em><\/span><\/li>\n<li>HTTP Method = <strong>GET<\/strong><\/li>\n<li>Click on <strong>Save &amp; test<\/strong><\/li>\n<li>Continue with the &#8222;Grafana dashboard setup&#8220; section below.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">Grafana dashboard setup<\/span><\/strong><\/h2>\n<ol>\n<li>Click on <strong>Dashboards -&gt; New -&gt; New Dashboard<\/strong>.<\/li>\n<li>Choose + <strong>Add visualization -&gt; influxdb.<\/strong><\/li>\n<li>In the <strong>FROM<\/strong> line click on <strong>select measurement<\/strong> and select <strong>GW <\/strong>(InfliuxDB v2 &#8211; your <strong>Bucket<\/strong>)<strong>.<\/strong><\/li>\n<li>Click on <strong>+<\/strong> and select <strong>host::tag<\/strong>.<\/li>\n<li>Click on <strong>select tag value<\/strong> and select your gateway.<\/li>\n<li>In the <strong>SELECT <\/strong>line click on <strong>value<\/strong> and select for example <strong>uplink_count<\/strong>.<\/li>\n<li>Then change <strong>mean()<\/strong> to <strong>last()<\/strong>.<\/li>\n<li>In the <strong>GROUP BY<\/strong> line change <strong>fill(null)<\/strong> to <strong>fill(none)<\/strong>.<\/li>\n<li>You can change the Type, Title, Unit, Display name, Color scheme and many more in the menu on the right.<\/li>\n<li>Next, click on <strong>Save<\/strong>.<\/li>\n<li>Continue like this for the other panels and gateways.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7275\" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_2.png\" alt=\"TTN Gateways monitoring panel\" width=\"800\" height=\"552\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_2.png 1297w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_2-300x207.png 300w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_2-1024x707.png 1024w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/06\/tgm_2-768x530.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/li>\n<li>If you want to display the increase in the number of Downlinks\/Uplinks since the last data collection, it is necessary to write the query manually.<\/li>\n<li>In the settings of the newly added blank panel, press the pencil symbol and put the query with <strong>uplink or downlink count<\/strong>\u00a0in the field.<\/li>\n<li>An example of creating a query to determine the difference is shown below:\n<pre>SELECT difference_value \r\nFROM (\r\nSELECT difference(last(\"uplink_count\")) AS difference_value \r\nFROM \"GW\" \r\nWHERE (\"host\"::tag = 'tts-vsb-gw002') AND $timeFilter \r\nGROUP BY time($__interval) fill(none)\r\n) \r\nWHERE difference_value &gt;= 0<\/pre>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>TTN version: TTNv3 System: 64-bit Last updated: June 28, 2024 For gateways monitoring, we use an open-source time series database InfluxDB\u00a0and an open-source analytical and interactive visualization web application\u00a0Grafana. Gateway data is loaded from The Things Stack using our TGM. The TGM makes a GET requests, parses the data received in the response, and then [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6551","page","type-page","status-publish","hentry","post"],"_links":{"self":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/6551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/comments?post=6551"}],"version-history":[{"count":77,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/6551\/revisions"}],"predecessor-version":[{"id":8919,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/6551\/revisions\/8919"}],"wp:attachment":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/media?parent=6551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}