{"id":20904,"date":"2024-05-09T15:50:45","date_gmt":"2024-05-09T13:50:45","guid":{"rendered":"https:\/\/chochol.io\/smart-home\/ads-b-receiver-installation-and-configuration-on-synology-nas\/"},"modified":"2025-08-23T19:56:09","modified_gmt":"2025-08-23T17:56:09","slug":"ads-b-receiver-installation-and-configuration-on-synology-nas","status":"publish","type":"post","link":"https:\/\/chochol.io\/en\/hardware\/ads-b-receiver-installation-and-configuration-on-synology-nas\/","title":{"rendered":"ADS-B: Receiver installation and configuration on Synology NAS"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"20904\" class=\"elementor elementor-20904 elementor-20864\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1916e7e e-flex e-con-boxed e-con e-parent\" data-id=\"1916e7e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-97653fe elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"97653fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<div class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__97653fe\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__97653fe\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__97653fe\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-055cc70 elementor-widget elementor-widget-text-editor\" data-id=\"055cc70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Hello!<\/h2><p><a href=\"https:\/\/chochol.io\/en\/hardware\/ads-b-receiver-installation-and-configuration-on-raspberry-pi\/\">In a previous tutorial<\/a>, I discussed configuration on the Raspberry Pi. Today we will focus on the installation and initial setup of a kit for receiving aircraft locations in the air using a <strong>Synology <\/strong> device and a few accessories. What&#8217;s more, I&#8217;ll show you how to use an existing server for this purpose, which can be an alternative to setting up from scratch.<\/p><p>I will divide the guide into several steps &#8211; from the initial setup, to preparing the system, installing Docker containers on Synology, sharing our data with other flight information aggregation portals.<\/p><h2>Introduction<\/h2><h3>What is the ADS-B?<\/h3><p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-886\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67-1024x768.webp\" sizes=\"(max-width: 800px) 100vw, 800px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67-1024x768.webp 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67-300x225.webp 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67-768x576.webp 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67-1536x1152.webp 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/68747470733a2f2f7777772e73706f727479732e636f6d2f2f6d656469612f777973697779672f626c6f672f31335f2d5f4e617669676174696e675f616e645f4175746f6d6174696f6e5f696e5f7468655f323173745f43656e747572792e706e67.webp 1600w\" alt=\"ADS-B operating principle\" width=\"800\" height=\"600\" \/><\/p><p><strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Automatic_Dependent_Surveillance%E2%80%93Broadcast\" target=\"_blank\" rel=\"noopener\">ADS-B (Automatic Dependent Surveillance-Broadcast)<\/a><\/strong> is an automatic surveillance and transmission system used in aviation. This technology allows aircraft to transmit data, such as <strong>position, speed, altitude and identification, to other ships and ground stations<\/strong>. It is based on GPS technology and transponders mounted on board aircraft.<strong><br \/><\/strong><\/p><p>The <strong>ADS-B<\/strong> system operates on two main frequencies: <strong>1090 MHz<\/strong> and <strong>978 MHz<\/strong>. Both bands are used depending on the world region and application.<\/p><p>In fact, most large aircraft are equipped with ADS-B transponders, operating at 1090 MHz, while smaller aircraft, especially those operating in the United States, can use UAT at 978 MHz. The interaction of the two bands is intended to increase the efficiency and flexibility of ADS-B in air traffic management.<\/p><h3>What is Synology?<\/h3><p><img decoding=\"async\" class=\"alignleft\" src=\"https:\/\/cdn6.aptoide.com\/imgs\/e\/3\/2\/e329de5bc241b2d63080f5b056b2681f_icon.png\" alt=\"\" width=\"258\" height=\"258\" aria-hidden=\"false\"><strong>Synology<\/strong> is a company specializing in the production of network hardware and software for data storage and management. Their main products are NAS (Network Attached Storage) servers, which offer a wide range of functions such as file storage, media sharing, backup, and hosting network services.<\/p><p>Thanks to their flexibility, Synology devices are used both in home networks, where they serve as a central data storage and media server, and in businesses, where they are used to store and share files and run a variety of business applications, such as email servers, file servers, and project management platforms.<\/p><p>In addition, Synology devices are popular in security-oriented environments, where they are used to store surveillance camera footage and run video surveillance systems. Moreover, thanks to the wide range of applications available in their ecosystem, users can expand the functionality of their NAS servers by installing virtualization servers or cloud data management solutions, among others. In this way, Synology becomes not only a central data storage point, but also a platform for extensive IT infrastructure management in diverse environments.<\/p><h2>Preparation<\/h2><p>Before installing an ADS-B pickup system, it is a good idea to make solid preparations. <strong>Here is a more extensive description of what was needed based on my setup for my colleague.<\/strong><\/p><p>For the creation of the guide, I will use the documentation provided by the <a href=\"https:\/\/sdr-enthusiasts.gitbook.io\/ads-b\/\" target=\"_blank\" rel=\"noopener\">SDR-Enthusiasts<\/a> team, who have done a very good job. <strong>I sincerely thank them for making this information available.<\/strong> In the rest of the tutorial, I will also use their containers, which will make the installation and configuration process easier.<\/p><h3>Location<\/h3><p>When setting up an ADS-B receiving system using a Synology server, keep in mind the importance of a suitable place to install the antenna. Here are some tips that you may find helpful.<\/p><ul><li><strong>Antenna location:<\/strong> Choose a location that provides free access for the antenna to the open sky. Make sure that the antenna will not be obscured by obstacles &#8211; such as trees, buildings or other objects;<\/li><li><strong>Avoid interference:<\/strong> Place the antenna away from devices that generate electromagnetic interference, which could affect the quality of received signals;<\/li><li><strong>Wiring safety:<\/strong> Ensure safe routing of cables from the antenna to the receiver, avoiding potential sources of damage. Protect your cabling from bad weather;<\/li><li><strong>Optimum height:<\/strong> Try to place the antenna at an optimal height to minimize terrain interference and improve the range of received signals;<\/li><\/ul><p>By locating the antenna on the roof, we are sure that we have given it free access to the open sky. By taking advantage of this optimal height, we also avoid terrain interference, which contributes to improving the range of received signals.<\/p><h3>Paperwork for the use of the roof in housing buildings<\/h3><h4>Background of the problem<\/h4><p>When planning to install an antenna on the roof of a housing building, it is necessary to comply with the formalities of the construction law, especially when dealing with a building covered by a community or cooperative.<\/p><h4>Make sure that the following steps have been taken<\/h4><p>Therefore, the following steps must be taken to erect the mast and antenna on the roof:<\/p><ul><li><strong>Community or Cooperative Consent:<\/strong> Before proceeding with the installation, it is important to obtain the approval of the community or housing cooperative board. Typically, the roofs of apartment buildings are considered common areas, and decisions on their use require the approval of the housing community.<\/li><li><strong>Construction Law:<\/strong> You should check the construction law to find out if installing an antenna on the roof requires any special permits or approvals. In some cases, depending on the type of antenna and the planned installation, additional paperwork may be required.<\/li><li><strong>Contract and Liability:<\/strong> The community or cooperative may also require the signing of a contract, which will specify the terms of use of the roof, rights and obligations related to the installation of the antenna. It is also worth discussing issues related to possible damage to the roof or other building components during installation.<\/li><li><strong>Structure Safety:<\/strong> Regardless of the purpose of the antenna installation, the mast should be sturdy and safe. Make sure it meets all safety standards to avoid possible damage or accidents.<\/li><li><strong>Notification to the Housing Community:<\/strong> Before starting work, it is important to inform neighbors and residents about the planned installation, and to listen to their concerns or objections, if any. Cooperation with residents can help reach an agreement on the installation of the antenna.<\/li><\/ul><h3>Required equipment and components<\/h3><p>In our case, in order for my colleague to start receiving any information sent by aircraft, it was necessary to have:<\/p><h4>Hardware<\/h4><ul><li><a href=\"https:\/\/www.synology.com\/pl-pl\/support\/download\/DS720+\" target=\"_blank\" rel=\"noopener\">Synology DS720+ <\/a> (purchased some time ago), 2x HDD, 4x 2-2.7 GHz, upgraded to 8 GB RAM, 2x USB 3.0, 2x 1 GbE LAN;<\/li><li><a href=\"https:\/\/amzn.to\/4cHwvMP\" target=\"_blank\" rel=\"noopener\">SDR receiver,<\/a> which ranges from 1090 MHz,The USB receiver from AirNav has a built-in filter and amplifier for the aforementioned frequency &#8211; hence its purchase was economically justified;<\/li><li><a href=\"https:\/\/amzn.to\/49r2q1g\" target=\"_blank\" rel=\"noopener\">Antenna<\/a> optimized for operation at 1090 MHz,<\/li><\/ul><h4>Mounting method<\/h4><p>It is worth noting that the ADS-B antenna can be mounted on a mast from a satellite dish, if we do not have any other place available to place it. However, it is advisable to arrange the installation to avoid overloading the mast from the satellite dish and not to create a kind of &#8220;Christmas tree&#8221;.<\/p><p>Therefore, if possible, consider installing a separate antenna mount or mast specifically designed for ADS-B antenna installation. Such a procedure will not only ensure stable placement of the antenna, but also allow easier management of the installation and ensure future flexibility. With an additional bracket or mast, you will have the ability to install other antennas in the future, which can be useful for system expansion or additional communication needs.<\/p><p>In the case of installing an antenna on the roof of a residential building &#8211; below I describe the additional components that in my case were necessary for the installation of antennas (three antennas are currently installed: ADS-B, Airband and Open Glider Network).<\/p><h4>Additional equipment<\/h4><ul><li><a href=\"https:\/\/www.dipol.com.pl\/maszt_balastowy_bezinwazyjny_mbw-1200_E8741.htm\" target=\"_blank\" rel=\"noopener\">Non-invasive ballast mast<\/a> with a height of 1.2 m;<\/li><li><a href=\"https:\/\/www.dipol.com.pl\/szafka_hermetyczna_signal_cctv_210-230-145_ip66_R90601.htm\" target=\"_blank\" rel=\"noopener\">Hermetic box<\/a> for mounting on the pole of a pole without invasion;<\/li><li><a href=\"https:\/\/www.obi.pl\/cegly-i-pustaki\/bloczek-betonowy-fundamentowy-38-cm-x-24-cm-x-12-cm\/p\/5453659\" target=\"_blank\" rel=\"noopener\">Concrete blocks<\/a> for the load of a non-invasive mast;<\/li><li><a href=\"https:\/\/www.leroymerlin.pl\/produkty\/urzadzanie-wnetrz\/dywany-wycieraczki-chodniki\/wycieraczki\/wycieraczka-zewnetrzna-alfa-100-x-50-cm-gumowa-czarna-42050715.html\" target=\"_blank\" rel=\"noopener\">Rubber wiper<\/a>, on which the non-invasive mast will be placed.<\/li><\/ul><h3>Software<\/h3><p>As software for monitoring and sharing ADS-B data with other aggregators, we will use <a href=\"https:\/\/sdr-enthusiasts.gitbook.io\/ads-b\/intro\/overview\" target=\"_blank\" rel=\"noopener\">Ultrafeeder<\/a> from SDR-Enthusiasts. I will describe the installation steps below, following the instructions provided by the manufacturer.<\/p><p>The introduction of this software will make it possible to effectively monitor air traffic and share the collected data with other portals operating in the ADS-B area.<\/p><p>By making the signal available to air traffic monitoring platforms such as <a href=\"https:\/\/www.flightradar24.com\/add-coverage\" target=\"_blank\" rel=\"noopener\">FlightRadar24<\/a>, <a href=\"https:\/\/www.flightaware.com\/adsb\/\" target=\"_blank\" rel=\"noopener\">FlightAware<\/a> and <a href=\"https:\/\/www.radarbox.com\/sharing-data\" target=\"_blank\" rel=\"noopener\">RadarBox<\/a>, we can expect to benefit from free subscriptions to these portals. This enables a more complete use of advanced features, real-time tracking of air traffic and access to additional information and statistics. Sharing ADS-B data thus becomes a tangible investment in the growing aviation community, while giving access to a more advanced air traffic monitoring experience.<img decoding=\"async\" class=\"aligncenter wp-image-809\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.37.17-1024x710.png\" sizes=\"(max-width: 800px) 100vw, 800px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.37.17-1024x710.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.37.17-300x208.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.37.17-768x532.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.37.17.png 1446w\" alt=\"Flightradar24 Add ADS-B coverage\" width=\"800\" height=\"554\" \/><\/p><h3>Collecting the location parameters of our receiver<\/h3><p>In order to properly configure the receiver, it is necessary to collect precise data on its location. Here is the key information you need to obtain:<\/p><h4>Antenna height (above sea level)<\/h4><ul><li>For this information, visit <a href=\"https:\/\/www.freemaptools.com\/elevation-finder.htm\" target=\"_new\" rel=\"noopener\">https:\/\/www.freemaptools.com\/elevation-finder.htm<\/a>. Move the pin closer to the exact location of the antenna, and then consider the distance from the ground level where the antenna is installed.<\/li><\/ul><h4>Latitude and longitude of the antenna (to at least five decimal places)<\/h4><ul><li>To get this information, visit <a href=\"https:\/\/www.gps-coordinates.net\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.gps-coordinates.net<\/a> or <a href=\"https:\/\/maps.google.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/maps.google.com<\/a>, zoom in to the exact location of the antenna and click to get the exact latitude and longitude data. Alternatively, you can use a handy GPS.<\/li><\/ul><p>Providing precise location data is a key step in effectively configuring an ADS-B receiver. Be sure to enter this information with the utmost accuracy to ensure effective system operation and provide reliable air traffic data.<\/p><h2>Step 1 &#8211; Installing the antenna on the roof<\/h2><p>When installing an antenna on the roof of a house or multi-family building, there are a few general rules to follow. On the roof of the house, ensure that the antenna is stably mounted (I described above).<\/p><p>In the case of a multifamily building, it is worthwhile to use the technical channel where cables run between floors. In this case, you should add your cable to the existing infrastructure, and it should be clearly marked who is responsible for the cable.<\/p><p>When installing an antenna on the roof of a building, it is also important to pay attention to fire safety features, such as a sealing compound, such as the one available from <a href=\"https:\/\/www.hilti.pl\/c\/CLS_FIRESTOP_PROTECTION_7131\/CLS_FIRESTOP_SEALANTS_SPRAY_7131\/r1169913?CHA_PACKAGING=Nab%C3%B3j&amp;CHD_WEIGHT_PM=0.45%20kg&amp;combo_content=11d3b65d3c3a67667b1f5628a14afec7&amp;itemCode=378247\" target=\"_blank\" rel=\"noopener\">HILTI products<\/a>. If there is a fireproof membrane between floors, it may be necessary to supplement it with sealant on our side. The sealing material is designed to protect the space from smoke and fire penetration in the event of a fire, which is important for maintaining the integrity of the building&#8217;s fire protection system.<\/p><h2>Step 2 &#8211; Configuration in the Synology DSM<\/h2><h3>Installing Docker (Container Manager) on Synology<\/h3><p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" src=\"https:\/\/www.synology.com\/img\/dsm\/container-manager\/icon_container_manager.png\" alt=\"Container Manager\" width=\"72\" height=\"72\" \/>Until version 6.2, a Docker package was available on the Synology DiskStation Manager (DSM) operating system, which allowed users to run application containers on NAS servers. With the introduction of DSM 7, Synology decided to introduce its own solution, known as <a href=\"https:\/\/www.synology.com\/pl-pl\/dsm\/feature\/docker\" target=\"_blank\" rel=\"noopener\">Container Manager<\/a>.<\/p><ul><li><strong>Log in to the DSM interface <\/strong> &#8211; Open a web browser and log in to the administration panel on your Synology device, using the appropriate credentials (administrator account),<\/li><li><strong>Install Container Manager <\/strong> &#8211; After logging in, go to the Package Center (which is the central place to manage applications on Synology devices). Search for the Container Manager package and install it on your device.<\/li><\/ul><h3>Support for USB external devices on DSM 7<\/h3><p><strong>DSM 7<\/strong> no longer includes support for <strong>USB dongles<\/strong> such as <strong>Wi-Fi<\/strong>, <strong>Bluetooth<\/strong>, <strong>3G\/4G<\/strong>, <strong>USB DAC\/speaker<\/strong> and <strong>DTV dongle<\/strong>. If your device is currently connected to Synology, it was probably disconnected after upgrading to <strong>DSM 7<\/strong>. To restore the operation of these devices, follow these steps (it is necessary to set the appropriate access permissions and load kernel modules to allow USB dongles):<\/p><ul><li style=\"list-style-type: none;\"><ul><li>Go to the <strong>Control Panel<\/strong>, then scroll down to find the <strong>Task Scheduler<\/strong>.<\/li><li>Click <strong>Create<\/strong> and select <strong>Run task <\/strong> &#8211; <strong>User-defined script<\/strong>,<\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-891 aligncenter\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/Screenshot-2024-01-03-at-16.14.21.png\" sizes=\"(max-width: 513px) 100vw, 513px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/Screenshot-2024-01-03-at-16.14.21.png 513w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/01\/Screenshot-2024-01-03-at-16.14.21-300x76.png 300w\" alt=\"Synology, Control Panel Task Scheduler\" width=\"513\" height=\"130\" \/><\/p><ul><li>On the <strong>Create Task <\/strong> &#8211; <strong>General tab<\/strong>, enter the following values:<ul><li>Task:<strong> Remaping 80\/443 ports<\/strong>,<\/li><li>User: <strong>root<\/strong>,<\/li><\/ul><\/li><li>On the Create Task &#8211; Task Settings tab, enter the following values:<ul><li>Submit the launch details in an email: <strong>Check and enter your email address<\/strong>,<\/li><li>Submit launch details only when the script is unexpectedly terminated: <strong>Check<\/strong>,<\/li><li>Run the command: <strong>Paste the following script in your text editor<\/strong>:<\/li><\/ul><\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4e387e elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"d4e387e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-d4e387e\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-bash line-numbers copy-to-clipboard\"data-previewers=\"\"><code>chmod 777 \/dev\/ttyUSB0\nchmod 777 \/dev\/ttyACM0\n\/sbin\/modprobe usbserial\n\/sbin\/modprobe ftdi_sio\n\/sbin\/modprobe cdc-acm<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_d4e387e = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_d4e387e();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_d4e387e );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f6f7bd elementor-widget elementor-widget-text-editor\" data-id=\"7f6f7bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>After making these settings, click <strong>OK<\/strong> to save and activate the new scheduled task.<\/li><li>Now our script will run automatically after each reboot, making sure that the appropriate access permissions and kernel modules are loaded.<\/li><li>To ensure that the changes you&#8217;ve made work as expected, <strong>I encourage you to restart your Synology NAS (DSM)<\/strong>. This simple action ensures that all modifications will be successfully taken into account during the reboot. After these pleasant steps, the new settings should laugh flawlessly after a server restart.<\/li><\/ul><h3>Change of SDR serial number<\/h3><p>Most RTL-SDR devices are shipped with identical serial numbers. If more than one SDR device is present on our system, this can result in potential confusion. To avoid such a situation, it is recommended to assign SDR serial numbers that are consistent with the frequencies on which these devices operate and receive messages.<\/p><p>You can read more about this process in a separate guide that <a href=\"https:\/\/chochol.io\/en\/hardware\/how-to-change-rtl-sdr-dongle-serial-number-on-linux\/\">I wrote here. \ud83d\udc49 Look into it.<\/a><\/p><p>For the purposes of this tutorial, we assume that the SDR used to receive ADS-B Mode-S (1090 MHz) will have the serial number <strong>00001090<\/strong>.<\/p><p>If you have more than one SDR device connected to Raspberry Pi &#8211; unplug them and leave only the one responsible for receiving 1090 MHz. Then execute the following command.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c5dd43 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"6c5dd43\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-6c5dd43\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-bash line-numbers copy-to-clipboard\"data-previewers=\"\"><code>docker run --rm -it --device \/dev\/bus\/usb --entrypoint rtl_eeprom ghcr.io\/sdr-enthusiasts\/docker-adsb-ultrafeeder -s 00001090<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_6c5dd43 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_6c5dd43();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_6c5dd43 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5c29fe elementor-widget elementor-widget-text-editor\" data-id=\"f5c29fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>You should see the following message (<em>your data may be slightly different, but make sure that the new serial number of the device is 1090<\/em>):<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1214498 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"1214498\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-1214498\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-php line-numbers\"data-previewers=\"\"><code>Found 1 device(s):\n  0:  Generic RTL2832U\n\u200b\nUsing device 0: Generic RTL2832U\nFound Rafael Micro R820T tuner\n\u200b\nCurrent configuration:\n__________________________________________\nVendor ID:              0x0bda\nProduct ID:             0x2832\nManufacturer:           Realtek\nProduct:                RTL2832U\nSerial number:          00001000\nSerial number enabled:  yes\nIR endpoint enabled:    no\nRemote wakeup enabled:  no\n__________________________________________\n\u200b\nNew configuration:\n__________________________________________\nVendor ID:              0x0bda\nProduct ID:             0x2832\nManufacturer:           Realtek\nProduct:                RTL2832U\nSerial number:          00001090\nSerial number enabled:  yes\nIR endpoint enabled:    no\nRemote wakeup enabled:  no\n__________________________________________\nWrite new configuration to device [y\/n]? y\n\u200b\nConfiguration successfully written.\nPlease replug the device for changes to take effect.<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_1214498 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_1214498();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_1214498 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-972e562 elementor-widget elementor-widget-text-editor\" data-id=\"972e562\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Press <strong>y<\/strong> to continue.<\/p><h3>Portainer &#8211; Container management<\/h3><h4>One host<\/h4><p>It&#8217;s worth installing Portainer because it&#8217;s a tool that allows you to easily manage Docker containers on a single host or in a cluster. With an intuitive user interface, Portainer allows you to monitor resources, start, stop and delete containers and manage Docker images.<\/p><p>If you are using only one host, installing Portainer is easy. All you need to do is install it directly on the machine running Docker. You can then access the Portainer&#8217;s interface through a web browser by typing in the IP address of the host and the port number on which the Portainer is running (default port 9000).<\/p><p>We need a directory to put the files from Portainer there.<\/p><ul><li>Log in to your file server and open <strong>File Station<\/strong>.<\/li><li>In the shared folder named <strong>docker<\/strong>, create a new folder and name it <strong>portainer<\/strong>.<\/li><\/ul><p>For Microsoft Windows operating system I recommend <a href=\"https:\/\/www.putty.org\/\" target=\"_blank\" rel=\"noopener\">PuTTY<\/a>, while for Apple macOS operating systems I recommend <a href=\"https:\/\/termius.com\/\" target=\"_blank\" rel=\"noopener\">Termius<\/a>.<\/p><ul><li>I personally use macOS, thus I will use Termius.<\/li><li>Log in to your Synology account over SSH.<\/li><li>Type the following command to install the Portainer.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6e0b2e elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"e6e0b2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Information<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\"><p>Verify that access to the docker folder is on volume1 - if you installed Container Manager on volume2, then you need to change the number in the Portainer installation code.<\/p>\n<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7562b5 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"e7562b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-e7562b5\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-php line-numbers copy-to-clipboard\"data-previewers=\"\"><code>sudo docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v \/var\/run\/docker.sock:\/var\/run\/docker.sock -v \/volume1\/docker\/portainer:\/data portainer\/portainer-ce:latest<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_e7562b5 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_e7562b5();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_e7562b5 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93f9a2f elementor-widget elementor-widget-text-editor\" data-id=\"93f9a2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Open a browser and type <strong>http:\/\/IP-ADRES:9000\/<\/strong>. Choose a username and a strong password, confirm them, and then click <strong>Create User<\/strong>.<\/li><li>Then click <strong>Get Started<\/strong> to continue using the local environment in which Portainer is running.<\/li><\/ul><h4>Multiple hosts<\/h4><p><a href=\"https:\/\/docs.portainer.io\/admin\/environments\/add\/docker\/agent\" target=\"_blank\" rel=\"noopener\">The Portainer Agent<\/a> is a tool that acts as an interface between Portainer (the platform for managing Docker containers) and the host on which Docker containers are run. The agent enables remote management of Docker containers on hosts via Portainer.<\/p><p>Using the Portainer agent facilitates centralized and automated management of Docker containers on multiple hosts from a single user interface.<\/p><p>To install Portainer Agent on your Synology, follow these steps:<\/p><ul><li>Log in to your account and go to the administration interface.<ul><li>Are you using the <strong>Authentik<\/strong> single sign-on system? Make the login process easier for yourself by integrating Portainer with Authentik with the help of <a href=\"https:\/\/chochol.io\/en\/software\/authentik-single-sign-on-configuration-for-portainer\/\">these instructions<\/a>.<\/li><\/ul><\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-707\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-16.03.02.png\" sizes=\"(max-width: 613px) 100vw, 613px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-16.03.02.png 613w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-21-at-16.03.02-300x234.png 300w\" alt=\"Portainer login screen\" width=\"600\" height=\"469\" \/><\/p><ul><li>At the bottom left of the <strong>Settings<\/strong> section, select and click <strong>Environments<\/strong>,<\/li><li>Click <strong>Add environment<\/strong>,<\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-823\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.55.42.png\" sizes=\"(max-width: 492px) 100vw, 492px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.55.42.png 492w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.55.42-300x40.png 300w\" alt=\"Portainer Add Environment\" width=\"492\" height=\"66\" \/><\/p><ul><li>From the list of proposed environments, select the option to connect <strong>Docker Standalone<\/strong>. Then click <strong>Start Wizzard<\/strong>,<\/li><\/ul><p><strong><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-824\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41-1024x681.png\" sizes=\"(max-width: 800px) 100vw, 800px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41-1024x681.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41-300x200.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41-768x511.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41-550x367.png 550w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-17.56.41.png 1069w\" alt=\"Portainer Environment Wizard\" width=\"800\" height=\"532\" \/><\/strong><\/p><ul><li>Leave the <strong>Agent<\/strong> option checked, then <strong>copy the command to install<\/strong> the agent on the remote device,<\/li><li>Log in over SSH to <strong>Synology<\/strong> and enter the following command:<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-995033d elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"995033d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-995033d\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-bash line-numbers copy-to-clipboard\"data-previewers=\"\"><code>docker run -d \\\n  -p 9001:9001 \\\n  --name portainer_agent \\\n  --restart=always \\\n  -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n  -v \/volume1\/@docker\/volumes:\/var\/lib\/docker\/volumes \\\n  portainer\/agent:2.19.4<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_995033d = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_995033d();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_995033d );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99731ef elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"99731ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Information<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Verify that access to the @docker\/volumes folder is on volume1 - if you installed Container Manager on volume2, you will need to change the number in the installation code of the Container Agent.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-60da9ef elementor-widget elementor-widget-text-editor\" data-id=\"60da9ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Wait until the Agent is installed on the remote device.<\/li><li>Return to editing Quick Setup in the Portainer,<\/li><li>In the Name space, type the hostname of the remote device: <strong>syno02 <\/strong><\/li><li>Environment address: example <strong>192.168.100.10:9001<\/strong><\/li><li>Confirm the configuration with the <strong>Connect<\/strong> button. After successfully connecting to the remote device, you will return to the main screen for selecting the environment you want to work in.<\/li><\/ul><h3>Preparing the environment for ADS-B<\/h3><h4>Create a directory<\/h4><p>We need a catalog to put our application. The name of this directory will be the name of our application.<\/p><ul><li>Log in to your file server and open <strong>File Station<\/strong>.<\/li><li>In the shared folder named <strong>docker<\/strong>, create a new folder and name it <strong>ultrafeeder<\/strong>.<\/li><li>Inside the ultrafeeder folder, create two additional folders: globe_history and graphs1090.<\/li><\/ul><h4>Generate the UUID of your receiver<\/h4><p>UUID (Universally Unique Identifier) is a unique identifier used for recognition on various data transfer servers. If you don&#8217;t have a UUID, you can create a new one by logging into your device, then run the following command:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-134ff4e elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"134ff4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-134ff4e\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-bash line-numbers copy-to-clipboard\"data-previewers=\"\"><code>cat  \/proc\/sys\/kernel\/random\/uuid<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_134ff4e = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_134ff4e();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_134ff4e );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e67dd3 elementor-widget elementor-widget-text-editor\" data-id=\"7e67dd3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>You can use the resulting string of this command (in the format 00000000-0000-0000-0000-000000000000) as your UUID. In further configurations, you will use the same UUID for each feeder of your station.<\/p><h4>Create a heywhatsthat panorama ID<\/h4><p>Heywhatsthat is a website that can generate an overlay on a map, showing a theoretical range based on obstacles and the curvature of the earth. In the upper left corner of the panorama page you will find the URL, which will look like this: <a href=\"https:\/\/www.heywhatsthat.com\/?view=CW5KV545\" target=\"_blank\" rel=\"noopener\">https:\/\/www.heywhatsthat.com\/?view=CW5KV545<\/a>. This code will be used later in the configuration instructions.<\/p><p>To create a panorama, follow the steps below:<\/p><ul><li><strong>Go to<\/strong> <a href=\"https:\/\/heywhatsthat.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/heywhatsthat.com\/,<\/a><\/li><li>Click <strong>New Panorama<\/strong>,<\/li><li><strong>Set the exact location<\/strong> of your antenna,<\/li><li><strong>Enter the title<\/strong> of your location \/ antenna,<\/li><li><strong>Submit the request<\/strong> and wait for the processing to complete,<\/li><\/ul><h3>Installing Ultrafeeder using Docker Compose in Portainer<\/h3><p>The <a href=\"https:\/\/sdr-enthusiasts.gitbook.io\/ads-b\/foundations\/deploy-ultrafeeder-container\" target=\"_blank\" rel=\"noopener\">Ultrafeeder<\/a> container is the heart of our ADS-B receiver. It receives signals at 1090 MHz from your SDR, demodulates the messages, making them available to all other containers. We will now create a configuration file in Docker Compose using the Portainer.<\/p><ul><li>From the Portainer&#8217;s home screen, <strong>select your device<\/strong> that you previously connected centrally or with an agent.<\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-829 size-large\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.32.54-1-1024x81.png\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.32.54-1-1024x81.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.32.54-1-300x24.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.32.54-1-768x61.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.32.54-1.png 1517w\" alt=\"Portainer Environment\" width=\"1024\" height=\"81\" \/><\/p><ul><li>Go to the <strong>Stacks<\/strong> section, then <strong>Add stack<\/strong>.<ul><li>Name: <strong>adsb-feeder<\/strong><\/li><li>Web editor: <strong>Paste the following code content<\/strong><\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8bae4e3 elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"8bae4e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Reminder for UniFi Network Application users<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">If a Unifi Network Application container is installed on the same device, note that both containers are configured to access port 8080 by default. If this is the case, there may be a port conflict, which may prevent the Ultrafeeder container from running properly. To avoid this problem, it is recommended to change the port number for the Ultrafeeder container to something other than 8080. Providing unique ports for each application will avoid conflicts and ensure correct operation of both containers.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8200144 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"8200144\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-8200144\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-php line-numbers copy-to-clipboard\"data-previewers=\"\"><code>version: &#039;3.8&#039;\n\nservices:\n  ultrafeeder:\n  # ultrafeeder combines a number of functions:\n  # - it retrieves and decodes 1090MHz Mode A\/C\/S data from the SDR(s) using Wiedehopf&#039;s branch of readsb\n  # - it implements a `tar1090` based map on port 80 (mapped to port 8080 on the host)\n  # - it includes graph1090 (system statistics website) on http:\/\/xxxxx\/graphs1090\n  # - it sends ADSB data directly (without the need of additional containers) to the\n  #   &quot;new&quot; aggregators, and, if desired, also to AdsbExchange\n  # - it includes mlat-client to send MLAT data to these aggregators\n  # - it includes an MLAT Hub to consolidate MLAT results and make them available to the built-in map and other services\n\n    image: ghcr.io\/sdr-enthusiasts\/docker-adsb-ultrafeeder:lastest\n    tty: true\n    container_name: ultrafeeder\n    hostname: ultrafeeder\n    restart: unless-stopped\n    device_cgroup_rules:\n      - &#039;c 189:* rwm&#039;\n    ports:\n      - 8080:80               # to expose the web interface\n      - 9273-9274:9273-9274   # to expose details for grafana\n    environment:\n      # --------------------------------------------------\n      # general parameters:\n      - LOGLEVEL=error\n      - TZ=${FEEDER_TZ}\n      # --------------------------------------------------\n      # SDR related parameters:\n      - READSB_DEVICE_TYPE=rtlsdr\n      - READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL}\n      - READSB_RTLSDR_PPM=${ADSB_SDR_PPM}\n      #\n      # --------------------------------------------------\n      # readsb\/decoder parameters:\n      - READSB_LAT=${FEEDER_LAT}\n      - READSB_LON=${FEEDER_LONG}\n      - READSB_ALT=${FEEDER_ALT_M}m\n      - READSB_GAIN=${ADSB_SDR_GAIN}\n      - READSB_RX_LOCATION_ACCURACY=2\n      - READSB_STATS_RANGE=true\n      #\n      # --------------------------------------------------\n      # Sources and Aggregator connections:\n      # Note - remove the ones you are not using \/ feeding\n      #  Make sure that each line ends with a semicolon &quot;;&quot;,  with the\n      #  exception of the last line which shouldn&#039;t have a &quot;;&quot;\n      - ULTRAFEEDER_CONFIG=\n          adsb,dump978,30978,uat_in;\n          adsb,feed.adsb.fi,30004,beast_reduce_plus_out;\n          adsb,in.adsb.lol,30004,beast_reduce_plus_out;\n          adsb,feed.airplanes.live,30004,beast_reduce_plus_out;\n          adsb,feed.planespotters.net,30004,beast_reduce_plus_out;\n          adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out;\n          adsb,data.avdelphi.com,24999,beast_reduce_plus_out;\n          adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out;\n          adsb,feed.radarplane.com,30001,beast_reduce_plus_out;\n          adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out;\n          mlat,feed.adsb.fi,31090,39000;\n          mlat,in.adsb.lol,31090,39001;\n          mlat,feed.airplanes.live,31090,39002;\n          mlat,mlat.planespotters.net,31090,39003;\n          mlat,feed.theairtraffic.com,31090,39004;\n          mlat,skyfeed.hpradar.com,31090,39005;\n          mlat,feed.radarplane.com,31090,39006;\n          mlat,dati.flyitalyadsb.com,30100,39007\n          #mlathub,piaware,30105,beast_in;\n          #mlathub,rbfeeder,30105,beast_in;\n          #mlathub,radarvirtuel,30105,beast_in;\n          #mlathub,planewatch,30105,beast_in\n      # --------------------------------------------------\n      - UUID=${ULTRAFEEDER_UUID}\n      - MLAT_USER=${FEEDER_NAME}\n      - READSB_FORWARD_MLAT_SBS=true\n      #\n      # --------------------------------------------------\n      # TAR1090 (Map Web Page) parameters:\n      - UPDATE_TAR1090=true\n      - TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}\n      - TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}\n      - TAR1090_MESSAGERATEINTITLE=true\n      - TAR1090_PAGETITLE=${FEEDER_NAME}\n      - TAR1090_PLANECOUNTINTITLE=true\n      - TAR1090_ENABLE_AC_DB=true\n      - TAR1090_FLIGHTAWARELINKS=true\n      - HEYWHATSTHAT_PANORAMA_ID=${FEEDER_HEYWHATSTHAT_ID}\n      - HEYWHATSTHAT_ALTS=${FEEDER_HEYWHATSTHAT_ALTS}\n      - TAR1090_SITESHOW=true\n      - TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE=true\n      - TAR1090_RANGE_OUTLINE_WIDTH=2.0\n      - TAR1090_RANGERINGSDISTANCES=50,100,150,200\n      - TAR1090_RANGERINGSCOLORS=&#039;#1A237E&#039;,&#039;#0D47A1&#039;,&#039;#42A5F5&#039;,&#039;#64B5F6&#039;\n      - TAR1090_USEROUTEAPI=true\n      #\n      # --------------------------------------------------\n      # GRAPHS1090 (Decoder and System Status Web Page) parameters:\n      - GRAPHS1090_DARKMODE=true\n      #\n      # --------------------------------------------------\n      - PROMETHEUS_ENABLE=true\n    volumes:\n      - \/volume1\/docker\/ultrafeeder\/globe_history:\/var\/globe_history\n      - \/volume1\/docker\/ultrafeeder\/graphs1090:\/var\/lib\/collectd\n      - \/proc\/diskstats:\/proc\/diskstats:ro\n      - \/dev:\/dev:ro\n    tmpfs:\n      - \/run:exec,size=256M\n      - \/tmp:size=128M\n      - \/var\/log:size=32M<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_8200144 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_8200144();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_8200144 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a6c9e82 elementor-widget elementor-widget-text-editor\" data-id=\"a6c9e82\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Environment variables in the Portainer<\/h4><ul><li>In the above file, there are several parameters that have values labeled as <strong>${PARAMETR}<\/strong>. These values are read from the environment variables section &#8211; which are described below.<\/li><li>Under the code editor, in the <strong>environment variables<\/strong> section, go to <strong>Advanced mode<\/strong>.<\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-18.44.11.png\" alt=\"Advanced environment Portainer\" width=\"817\" height=\"165\" \/><\/p><ul><li>Paste the following content, and the prompts that are in parentheses <strong>&lt;TEXT&gt;<\/strong> replace with values according to the legend described below:<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c76053a elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"c76053a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-c76053a\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-php line-numbers\"data-previewers=\"\"><code>FEEDER_ALT_FT=&lt;antenna height in feet&gt;\nFEEDER_ALT_M=&lt;antenna height in meters&gt;\nFEEDER_LONG=&lt;latitude&gt;\nFEEDER_TZ=&lt;time zone&gt;\nFEEDER_NAME=&lt;location name&gt;\nADSB_SDR_SERIAL=1090\nADSB_SDR_GAIN=autogain\nULTRAFEEDER_UUID=&lt;Your UUID from an earlier step&gt;\nFEEDER_HEYWHATSTHAT_ID=&lt;Your heywhatsthat ID from earlier step&gt;\nFEEDER_HEYWHATSTHAT_ALTS=&lt;desired theoretical range altitudes&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_c76053a = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_c76053a();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_c76053a );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d3d9461 elementor-widget elementor-widget-text-editor\" data-id=\"d3d9461\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5>Legend:<\/h5><ul><li><strong>FEEDER_ALT_FT<\/strong> is the height of the antenna above sea level in feet,<\/li><li><strong>FEEDER_ALT_M<\/strong> is the height of the antenna above sea level in meters,<\/li><li><strong>FEEDER_LAT<\/strong> is the latitude of the antenna (also available at the link above),<\/li><li><strong>FEEDER_LONG<\/strong> is the longitude of the antenna (also available at the link above),<\/li><li><strong>FEEDER_TZ<\/strong> is the time zone in the format <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones\" target=\"_blank\" rel=\"noopener\">TZ database name,<\/a><\/li><li><strong>FEEDER_NAME<\/strong> is the name of the location. It is used only in the title of the map&#8217;s website,<\/li><li><strong>ADSB_SDR_SERIAL<\/strong> is the serial number of the ADS-B dongle; the previous steps set this to 1090 by default, but if you are using a different serial number, enter it here,<\/li><li><strong>ADSB_SDR_GAIN<\/strong> is the desired gain of the dongle in dB or <strong>autogain<\/strong>, if you want the software to determine the optimal gain,<\/li><li><strong>ULTRAFEEDER_UUID<\/strong> is the previously generated UUID,<\/li><li><strong>FEEDER_HEYWHATSTHAT_ID<\/strong> is the code from the URL generated earlier,<\/li><li><strong>FEEDER_HEYWHATSTHAT_ALTS<\/strong> is a list of altitudes in meters for which the map will display the theoretical maximum range; common starting points are 3000 meters and 12000 meters.<\/li><\/ul><p>For example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb42137 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"cb42137\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-cb42137\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-material-dark\"\n            data-dark-theme=\"mdp-theme-material-dark\"\n        >\n            \n                <pre class=\"language-php line-numbers\"data-previewers=\"\"><code>FEEDER_ALT_FT=50.524\nFEEDER_ALT_M=15.4\nFEEDER_LAT=52.16547\nFEEDER_LONG=20.96719\nFEEDER_TZ=Europe\/Warsaw\nADSB_SDR_SERIAL=1090\nADSB_SDR_GAIN=autogain\nADSB_SDR_PPM=1\nULTRAFEEDER_UUID=00000000-0000-0000-0000-000000000000\nFEEDER_HEYWHATSTHAT_ID=CW5KV545\nFEEDER_HEYWHATSTHAT_ALTS=3000,12000<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_cb42137 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/chochol.io\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_cb42137();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_cb42137 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3674fa8 elementor-widget elementor-widget-text-editor\" data-id=\"3674fa8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To return to the previous view, select <strong>Simple mode<\/strong> in the Portainer. In this mode, the Portainer will automatically assign the entered environment variables to the <strong>name<\/strong> and <strong>value<\/strong> categories. If you plan to add more ADS-B data aggregators to your setup, this will make the process easier, as you will be able to add variables that you will need in the future.<\/p><h3>Implementing Docker Compose in production<\/h3><p>The last step left is to create the environment and run the installation. To do so, under the Actions section, click on <strong>Deploy the stack<\/strong> and wait a while for the Docker container images to be downloaded to the device&#8217;s memory.<\/p><p>If everything is successful, you will see <strong>Success: Stack successfully deployed <\/strong> in the upper right corner of the screen, and then two newly created containers will appear in the container list. <strong>\ud83d\ude80<\/strong><\/p><h3>Access to data via browser<\/h3><p>Once configured and running using the above example, the container will make the website available on port 8080 of the host. Here are some generated web pages:<\/p><ul><li><strong>http:\/\/IP-ADRES-RPI:8080\/<\/strong> : A map of tar1090 and a table of all aircraft that the antenna detected and decoded,<\/li><li><strong>http:\/\/IP-ADRES-RPI:8080\/graphs1090\/<\/strong> : A page with graphs and statistics of our receiver&#8217;s performance.<\/li><\/ul><h3>Where is the ADS-B data from the station transmitted?<\/h3><p>If you want to learn more about specific information and what protocol is used to send data from the receiver, <a href=\"https:\/\/sdr-enthusiasts.gitbook.io\/ads-b\/foundations\/deploy-ultrafeeder-container#feeding-directly-from-ultrafeeder\" target=\"_blank\" rel=\"noopener\">take a look at the link here<\/a>. The authors of SDR-Enthusiasts describe this question very precisely, along with a definition of who is a commercial and who is a non-profit data aggregator.<\/p><h3>Disk I\/O IOPS and Disk I\/O Bandwith graphs missing in graphs1090<\/h3><p>At the time of writing the tutorial, I noticed that input\/output (I\/O) data from the disk on which Ultrafeeder is installed is not being transferred to Graphs1090. In the near future, I will report the problem via a ticket on GitHub to the author of the component so that he can make an appropriate fix to the code.<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-20896\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-09-at-15.42.39-1024x277.png\" alt=\"ADS-B Graphs10190, Disk I\/O\" width=\"1024\" height=\"277\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-09-at-15.42.39-1024x277.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-09-at-15.42.39-300x81.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-09-at-15.42.39-768x208.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-09-at-15.42.39.png 1279w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p><p>If you have additional questions about the setup, <strong>go ahead and leave a comment under this article<\/strong> or <strong>contact me directly<\/strong>. I will be happy to answer any concerns and help solve any problems. Your questions can help improve this guide for other users.<\/p><h2>Additional sources and information<\/h2><p>Thank you for reaching this point. For further exploration and more information, I recommend checking out the links below. They are valuable sources that were used in the development of this guide.<\/p><ul><li>Information about ADS-B: <a href=\"https:\/\/dlapilota.pl\/wiadomosci\/dlapilota\/ads-b-automatic-dependent-surveillance-broadcast\" target=\"_blank\" rel=\"noopener\">https:\/\/dlapilota.pl\/wiadomosci\/dlapilota\/ads-b-automatic-dependent-surveillance-broadcast<\/a><\/li><li>List of tools for ADS-B, projects: <a href=\"https:\/\/github.com\/rickstaa\/awesome-adsb\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/rickstaa\/awesome-adsb<\/a><\/li><li>Instructions for using Heywhatsthat.com: <a href=\"https:\/\/github.com\/wiedehopf\/tar1090#heywhatsthatcom-range-outline\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/wiedehopf\/tar1090#heywhatsthatcom-range-outline<\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7e1c862 e-flex e-con-boxed e-con e-parent\" data-id=\"7e1c862\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-baf6ef8 elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient elementor-widget elementor-widget-global elementor-global-20844 elementor-widget-posts\" data-id=\"baf6ef8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;cards_columns&quot;:&quot;3&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;,&quot;cards_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20374 post type-post status-publish format-standard has-post-thumbnail hentry category-software tag-authentik\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/software\/authentik-single-sign-on-configuration-for-wordpress\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2-300x169.png\" class=\"attachment-medium size-medium wp-image-20353\" alt=\"WordPress logo icon with orange circle, overlaid on blurred multi-screen website previews\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/04\/Okladka-artykulow-Chochol.io_-2.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Software<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/software\/authentik-single-sign-on-configuration-for-wordpress\/\">\n\t\t\t\tAuthentik: Single Sign-On Configuration for WordPress\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Configure Single Sign-On between Authentik and WordPress for secure and comfortable login. Learn about step-by-step configuration.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-21466 post type-post status-publish format-standard has-post-thumbnail hentry category-smart-home tag-diy tag-esphome tag-home-assistant tag-home-automation tag-iot\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/smart-home\/home-assistant-measure-electricity-with-pzem004t\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1-300x169.png\" class=\"attachment-medium size-medium wp-image-21430\" alt=\"Close-up of valve regulated lead-acid battery wiring panel with charge controller and blue home icon overlay\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/09\/chochol.io-Okladka-artykulow-1.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Smart Home<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/smart-home\/home-assistant-measure-electricity-with-pzem004t\/\">\n\t\t\t\tHome Assistant: Measure electricity with PZEM004T\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Discover how to configure PZEM004T v3 with ESPHome to monitor electricity consumption in a smart home. Practical guide. <\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20961 post type-post status-publish format-standard has-post-thumbnail hentry category-software tag-docker tag-docker-compose tag-portainer tag-synology\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/software\/portainer-installation-guide-on-synology-in-docker\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2-300x169.png\" class=\"attachment-medium size-medium wp-image-20950\" alt=\"Portainer.io web UI with Home screen showing Docker container list and a centered storage download icon\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-2.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Software<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/software\/portainer-installation-guide-on-synology-in-docker\/\">\n\t\t\t\tPortainer: Installation guide on Synology in Docker\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Discover how to quickly install Portainer on Synology &#8211; simple step-by-step instructions. Manage your Docker containers today!<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20855 post type-post status-publish format-standard has-post-thumbnail hentry category-computer-networking tag-mikrotik tag-synology\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/computer-networking\/mikrotik-configure-authentication-with-synology-radius-server\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1-300x169.png\" class=\"attachment-medium size-medium wp-image-20806\" alt=\"System configuration UI window with 3D network folder icon overlay on Windows desktop\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/05\/Okladka-artykulow-Chochol.io_-1.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Computer networking<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/computer-networking\/mikrotik-configure-authentication-with-synology-radius-server\/\">\n\t\t\t\tMikrotik: Configure authentication with Synology RADIUS Server\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Discover how to configure Synology RADIUS Server on Mikrotik devices. Learn about the steps and benefits of integration in our article.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-1162 post type-post status-publish format-standard has-post-thumbnail hentry category-hardware tag-docker tag-docker-compose tag-nginx-proxy-manager tag-portainer tag-synology\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/hardware\/synology-free-ports-80-443-for-nginx-proxy-manager\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_-300x169.png\" class=\"attachment-medium size-medium wp-image-1032\" alt=\"Synology Package Center screen with icons, including Advanced Media Extensions, two-server network, and Note Station\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Okladka-artykulow-Chochol.io_.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Hardware<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/hardware\/synology-free-ports-80-443-for-nginx-proxy-manager\/\">\n\t\t\t\tSynology: Free ports 80\/443 for Nginx Proxy Manager\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Unblock the ports on the Synology and configure Nginx Proxy Manager. Przewodnik u\u0142atwi instalacj\u0119 serwera proxy, zapewniaj\u0105c proste zarz\u0105dzanie serwerem.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-2028 post type-post status-publish format-standard has-post-thumbnail hentry category-hardware tag-docker tag-docker-compose tag-synology\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/chochol.io\/en\/hardware\/tvheadend-satip-decoder-installation-and-configuration\/\" tabindex=\"-1\" target=\"_blank\"><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3-300x169.png\" class=\"attachment-medium size-medium wp-image-1924\" alt=\"Server rack interior with cable connectors; blue up\/down arrows and orange diamond overlay in the center\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3-300x169.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3-1024x576.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3-768x432.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3-1536x864.png 1536w, https:\/\/chochol.io\/wp-content\/uploads\/2024\/02\/Okladka-artykulow-Chochol.io_-3.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Hardware<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<span class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/chochol.io\/en\/hardware\/tvheadend-satip-decoder-installation-and-configuration\/\">\n\t\t\t\tTVHeadend: SAT>IP decoder installation and configuration\t\t\t<\/a>\n\t\t<\/span>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Telestar Digibit Twin: Discover the step-by-step configuration of a SAT>IP decoder with TVHeadend in Docker Compose in today&#8217;s blog post.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Discover the secrets of installing and configuring your own ADS-B antenna on your Synology. Develop skills and track aircraft in real time.<\/p>\n","protected":false},"author":1,"featured_media":20868,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[94],"tags":[98,102,103,113,121],"class_list":["post-20904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-ads-b","tag-docker","tag-docker-compose","tag-portainer","tag-synology"],"_links":{"self":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/posts\/20904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/comments?post=20904"}],"version-history":[{"count":0,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/posts\/20904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/media\/20868"}],"wp:attachment":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/media?parent=20904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/categories?post=20904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/tags?post=20904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}