{"id":1155,"date":"2023-12-27T00:28:27","date_gmt":"2023-12-26T23:28:27","guid":{"rendered":"https:\/\/chochol.io\/smart-home\/ads-b-receiver-installation-and-configuration-on-raspberry-pi\/"},"modified":"2025-08-23T19:53:02","modified_gmt":"2025-08-23T17:53:02","slug":"ads-b-receiver-installation-and-configuration-on-raspberry-pi","status":"publish","type":"post","link":"https:\/\/chochol.io\/en\/hardware\/ads-b-receiver-installation-and-configuration-on-raspberry-pi\/","title":{"rendered":"ADS-B: Receiver installation and configuration on Raspberry Pi"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1155\" class=\"elementor elementor-1155 elementor-779\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66bd127 e-flex e-con-boxed e-con e-parent\" data-id=\"66bd127\" 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-18f747b elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"18f747b\" 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__18f747b\" 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__18f747b\" 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__18f747b\" 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-7cb70a7 elementor-widget elementor-widget-text-editor\" data-id=\"7cb70a7\" 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 style=\"color: #7a7a7a; font-family: Roboto, sans-serif; font-size: 16px; font-weight: 400; text-align: left;\">Today we will cover the installation and initial configuration of our own kit for receiving the location of aircraft in the sky using a <strong>Raspberry Pi<\/strong> and a couple of accessories, which I will describe in the following.<\/p><h2><span style=\"font-size: 1.75rem; text-align: var(--text-align);\">Introduction to our project<\/span><\/h2><p>I will divide the guide into several steps &#8211; from the initial setup, to preparing the system, installing Docker containers on the Raspberry Pi, sharing our data with other flight information aggregation portals.<\/p><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\" alt=\"ADS-B operating principle\" width=\"800\" height=\"600\" 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\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p><p style=\"text-align: left;\"><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 style=\"text-align: left;\">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 style=\"text-align: left;\">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><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 own setup.<\/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 Raspberry Pi, 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>Taking these tips into account, I decided to install the antenna on the roof of the building where I live. I&#8217;m glad I foresaw the need for this a few years ago and took it into account during the construction of the development, talking to the developer about some housing changes. One of these changes was to take the <strong>antenna cable<\/strong> and c<strong>at 6 network cable<\/strong> directly from my apartment to the roof.<\/p><p>By locating the antenna on the roof, I am sure that I have given it free access to the open sky. Using this optimal height, I also avoid terrain interference, which helps improve the range of received signals.<\/p><h3>Paperwork for the use of the roof in housing buildings<\/h3><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. 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><p>Remember that different rules may apply to each building and community, so it is always a good idea to consult with the management of the community or cooperative, and to consult with the Tenants&#8217; Rights and Housing Maintenance Division of the <a href=\"https:\/\/www.gov.pl\/web\/rozwoj-technologia\/departament-mieszkalnictwa\" target=\"_blank\" rel=\"noopener\">Housing Department<\/a> of the Ministry of Development and Technology (there is such a department in Poland) to make sure that all the formalities are met.<\/p><p>Creating an antenna in a private home is usually more trouble-free, as it does not require permission from other residents or institutions.<\/p><h3>Required equipment and components<\/h3><p>In my case, in order for me to start receiving any information sent by aircraft, it was necessary to have:<\/p><ul><li><strong>Hardware<\/strong>:<ul><li><a href=\"https:\/\/www.raspberrypi.com\/products\/raspberry-pi-4-model-b\/\" target=\"_blank\" rel=\"noopener\">Raspberry Pi 4B<\/a> in 2 or 4 GB version,<ul><li>Currently, you can already use the commercially available <strong>Raspberry Pi 5<\/strong>, however, its availability is very low. I recommend using <a href=\"https:\/\/rpilocator.com\" target=\"_blank\" rel=\"noopener\">rpilocator.com<\/a> to see where you can currently get a reasonably priced device;<\/li><\/ul><\/li><li><a href=\"https:\/\/www.raspberrypi.com\/products\/poe-hat\/\" target=\"_blank\" rel=\"noopener\">Raspberry Pi PoE HAT<\/a>,<ul><li>Due to the fact that one network cable is routed to the roof, I decided to power the Raspberry Pi over PoE using the <a href=\"https:\/\/www.dipol.com.pl\/zasilanie_poe_-standard_ieee_802_3af_oraz_ieee_802_3at_bib746.htm\" target=\"_blank\" rel=\"noopener\">802.3af<\/a> standard;<\/li><li>It is powered by <a href=\"https:\/\/mikrotik.com\/product\/rb5009upr_s_in\" target=\"_blank\" rel=\"noopener\">Mikrotik RB5009UPr+S+IN<\/a> router;<\/li><\/ul><\/li><li><a href=\"https:\/\/www.amazon.pl\/AirNav-RadarBox-FlightStick-wbudowanym-wzmacniaczem\/dp\/B07K47P7XD\" target=\"_blank\" rel=\"noopener\">SDR receiver<\/a> that covers 1090 MHz in range,<ul><li>The USB receiver from AirNav has a built-in filter and amplifier for the aforementioned frequency &#8211; hence it made economic sense to buy it;<\/li><\/ul><\/li><li><a href=\"https:\/\/www.amazon.pl\/AirNav-ADS-B-antena-zewn%C4%99trzna-zl%C4%85czem\/dp\/B07K7YW1XJ\/ref=pd_lpo_sccl_2\/257-2470953-4955066?pd_rd_w=PDyxh&amp;content-id=amzn1.sym.3565e7ba-17d4-4fb8-8047-07786c03b133&amp;pf_rd_p=3565e7ba-17d4-4fb8-8047-07786c03b133&amp;pf_rd_r=76QVBQDGMZX32XB5C110&amp;pd_rd_wg=dwb3D&amp;pd_rd_r=1cc0b1ca-2738-40e8-b49b-399fd0229b14&amp;pd_rd_i=B07K7YW1XJ&amp;psc=1\" target=\"_blank\" rel=\"noopener\">Antenna<\/a> optimized for operation at 1090 MHz,<ul><li>I was able to buy the antenna at a bargain price on Allegro, hence it will serve me in describing the instructions further;<\/li><\/ul><\/li><li><a href=\"https:\/\/www.westerndigital.com\/pl-pl\/products\/memory-cards\/wd-purple-microsd?sku=WDD032G1P0C\" target=\"_blank\" rel=\"noopener\">WD Purple memory card<\/a> with a capacity of 32GB.<ul><li>The choice of a card from Western Digital is intended to ensure greater reliability and durability. In your solution, you can use other manufacturers of memory cards designed for video surveillance &#8211; they have longer durability and higher TBW (Total Bytes Written);<\/li><\/ul><\/li><\/ul><\/li><li><strong>Additional equipment:<\/strong><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>3 pcs. <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 the 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><\/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-bb0eabc e-flex e-con-boxed e-con e-parent\" data-id=\"bb0eabc\" 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-8827a90 elementor-widget elementor-widget-gallery\" data-id=\"8827a90\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;columns&quot;:3,&quot;columns_tablet&quot;:3,&quot;lazyload&quot;:&quot;yes&quot;,&quot;gallery_layout&quot;:&quot;grid&quot;,&quot;columns_mobile&quot;:1,&quot;gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;link_to&quot;:&quot;file&quot;,&quot;aspect_ratio&quot;:&quot;3:2&quot;,&quot;overlay_background&quot;:&quot;yes&quot;,&quot;content_hover_animation&quot;:&quot;fade-in&quot;}\" data-widget_type=\"gallery.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-gallery__container\">\n\t\t\t\t\t\t\t<a class=\"e-gallery-item elementor-gallery-item elementor-animated-content\" href=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/61560A86-A091-4A54-9BE6-BA0A9A2A6663-scaled.jpeg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"8827a90\" data-elementor-lightbox-title=\"Raspberry Pi 4B PoE\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTAyMiwidXJsIjoiaHR0cHM6XC9cL2Nob2Nob2wuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjNcLzEyXC82MTU2MEE4Ni1BMDkxLTRBNTQtOUJFNi1CQTBBOUEyQTY2NjMtc2NhbGVkLmpwZWciLCJzbGlkZXNob3ciOiI4ODI3YTkwIn0%3D\">\n\t\t\t\t\t<div class=\"e-gallery-image elementor-gallery-item__image\" data-thumbnail=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/61560A86-A091-4A54-9BE6-BA0A9A2A6663-300x169.jpeg\" data-width=\"300\" data-height=\"169\" aria-label=\"Elektroniczny modu\u0142 z obudow\u0105 na USB, ekranem, wentylatorem i gniazdami na p\u0142ytce PCB, na stole serwisowym\" role=\"img\" ><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-gallery-item__overlay\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<a class=\"e-gallery-item elementor-gallery-item elementor-animated-content\" href=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/IMG_1997-scaled.jpeg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"8827a90\" data-elementor-lightbox-title=\"ADS-B receiver on the pole\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTAyMywidXJsIjoiaHR0cHM6XC9cL2Nob2Nob2wuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjNcLzEyXC9JTUdfMTk5Ny1zY2FsZWQuanBlZyIsInNsaWRlc2hvdyI6Ijg4MjdhOTAifQ%3D%3D\">\n\t\t\t\t\t<div class=\"e-gallery-image elementor-gallery-item__image\" data-thumbnail=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/IMG_1997-225x300.jpeg\" data-width=\"225\" data-height=\"300\" aria-label=\"Roof RF antenna mast with coax cables and metal mounting brackets against cloudy sky\" role=\"img\" ><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-gallery-item__overlay\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<a class=\"e-gallery-item elementor-gallery-item elementor-animated-content\" href=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/IMG_1996-scaled.jpeg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"8827a90\" data-elementor-lightbox-title=\"ADS-B receiver on the pole\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTAyNCwidXJsIjoiaHR0cHM6XC9cL2Nob2Nob2wuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjNcLzEyXC9JTUdfMTk5Ni1zY2FsZWQuanBlZyIsInNsaWRlc2hvdyI6Ijg4MjdhOTAifQ%3D%3D\">\n\t\t\t\t\t<div class=\"e-gallery-image elementor-gallery-item__image\" data-thumbnail=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/IMG_1996-225x300.jpeg\" data-width=\"225\" data-height=\"300\" aria-label=\"Rooftop wireless antenna mast with vertical elements, coax cable and outdoor control box, viewed against skyline\" role=\"img\" ><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-gallery-item__overlay\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6857b85 elementor-widget elementor-widget-text-editor\" data-id=\"6857b85\" 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<h3>A few words about memory cards<\/h3><p>In the hardware section, I elaborate on the components used. One important aspect is the memory card, which is important for stable operation of the Raspberry Pi, especially if it is used for a long time and works 24\/7.<\/p><p>There are several reasons why a cheap microSD card may not be suitable for a Raspberry Pi running for a long time. Here are some factual reasons:<\/p><ol><li><p><strong>Durability:<\/strong> low-cost microSD cards are usually not designed for heavy continuous use over long periods of time. 24\/7 operation can lead to faster wear and failure of the memory card. In contrast, cards such as <a href=\"https:\/\/documents.westerndigital.com\/content\/dam\/doc-library\/pl_pl\/assets\/public\/western-digital\/product\/embedded-flash\/surveillance-wd-purple-microSD\/product-brief-wd-purple-sc-qd101-ultra-endurance-microsd.pdf\" target=\"_blank\" rel=\"noopener\">WD Purple<\/a> and <a href=\"https:\/\/www.kingston.com\/pl\/memory-cards\/industrial-grade-microsd-uhs-i-u3\" target=\"_blank\" rel=\"noopener\">Kingston Industrial<\/a> are specifically designed for continuous use, which indicate their durability;<\/p><\/li><li><p><strong>Weather resistance:<\/strong> Raspberry Pi, which works 24\/7, can be exposed to various weather conditions, such as temperature changes and humidity. Cheap microSD cards may be less resistant to these conditions, which can lead to failures. Industrial cards often have better weather resistance parameters, guaranteeing reliability in a variety of conditions.<\/p><\/li><\/ol><h3>Software<\/h3><p>To make our receiver work effectively, we will use the Raspberry Pi OS Lite operating system, devoid of a desktop environment. On the other hand, we will give it commands over SSH.<\/p><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><h4>Installing the Operating System<\/h4><p>Use the <a href=\"https:\/\/chat.openai.com\/c\/link\" target=\"_new\" rel=\"noopener\">official installer<\/a> to install Raspberry Pi OS Lite on your device.<\/p><p><img decoding=\"async\" class=\"aligncenter wp-image-810\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.39.58-1024x881.png\" alt=\"Raspberry Pi OS website\" width=\"800\" height=\"688\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.39.58-1024x881.png 1024w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.39.58-300x258.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.39.58-768x661.png 768w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.39.58.png 1315w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p><h4>Data Monitoring and Sharing Software<\/h4><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\" alt=\"Flightradar24 Add ADS-B coverage\" width=\"800\" height=\"554\" 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\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/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>Installing and configuring the operating system<\/h2>\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-ae469e1 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"ae469e1\" 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>The following instructions are described based on Raspberry Pi Imager v.1.8.4 and Raspberry Pi OS Lite 2023-12-11. <\/p>\n<\/span>\n\t\t\t\n\t\t\t\t\t\t<button type=\"button\" class=\"elementor-alert-dismiss\" aria-label=\"Dismiss this alert.\">\n\t\t\t\t\t\t\t\t\t<span aria-hidden=\"true\">&times;<\/span>\n\t\t\t\t\t\t\t<\/button>\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-3f51228 elementor-widget elementor-widget-text-editor\" data-id=\"3f51228\" 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<h3>Raspberry Pi Imager<\/h3><ul><li>Raspberry Pi Device: Select <strong>Raspberry Pi 4<\/strong> (<em>or Raspberry Pi 5 &#8211; depending on what you have<\/em>),<\/li><li>Operating System: Select R<strong>aspberry Pi OS<\/strong> (other) and then <strong>Raspberry Pi OS Lite (64-bit)<\/strong>,<\/li><li>Storage: select your <strong>storage media<\/strong> that you have connected to your computer,<\/li><li>Then click <strong>Next<\/strong>,<\/li><\/ul><p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-808\" src=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.03.47.png\" alt=\"Raspberry Pi Imager\" width=\"792\" height=\"590\" srcset=\"https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.03.47.png 792w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.03.47-300x223.png 300w, https:\/\/chochol.io\/wp-content\/uploads\/2023\/12\/Screenshot-2023-12-26-at-14.03.47-768x572.png 768w\" sizes=\"(max-width: 792px) 100vw, 792px\" \/><\/p><ul><li>When the <strong>Use OS customization<\/strong> information prompt appears, click <strong>Edit settings<\/strong>,<\/li><li>For macOS computers &#8211; When you see the next prompt stating <em>Would you like to prefill the wifi password from the system keychain<\/em>, select <strong>No<\/strong>.<\/li><li>When the operating system customization window opens, go to the <strong>General<\/strong> tab and complete it with the following parameters:<ul><li>Check <strong>Set hostname<\/strong> and type: rpi01<\/li><li>Check <strong>Set username and password<\/strong> and type:<ul><li>Username: <strong>pi<\/strong><\/li><li>Password: <strong>Set your own password<\/strong><\/li><\/ul><\/li><li>Check <strong>Set locale settings<\/strong>, then set:<ul><li>Time zone: <strong>Europe\/Warsaw<\/strong>,<\/li><li>Keyboard layout: <strong>us<\/strong>.<\/li><\/ul><\/li><\/ul><\/li><li>Go to the next <strong>Services<\/strong> tab and check <strong>Enable SSH<\/strong>, leaving <strong>Use password authentication<\/strong>.<\/li><li>To save your settings, click <strong>Save<\/strong>.<\/li><li>Then return to the previous <strong>Use OS customization<\/strong> window and click <strong>Yes<\/strong> to apply the modifications you made.<\/li><li>A warning window will pop up informing you that all the data on the memory card will be erased permanently. Confirm this action. At this point, the Imager tool will format the card and install the operating system on it with the modifications made.<\/li><\/ul><p>For information on the changes made to the operating system for the ARM64 platform, <a href=\"https:\/\/downloads.raspberrypi.com\/raspios_lite_arm64\/release_notes.txt\" target=\"_blank\" rel=\"noopener\">click here<\/a>.<\/p><h3>Raspberry Pi OS<\/h3><p>Once the installation process is complete, insert the memory card into the Raspberry Pi. Then connect them to the power supply and to the router or switch using a network cable terminated with an RJ45 connector.<\/p><p>The system update is sufficient to continue the configuration process. Regular updates not only ensure security, but also enable you to take advantage of the latest features and fixes, which translates into smooth and efficient operation. Before you proceed with further configuration, it&#8217;s a good idea to make sure the software on the Raspberry Pi OS is up to date.<\/p><p>In addition, in the process, we will deactivate the Wi-Fi and Bluetooth functions.<\/p><h4>System and package updates<\/h4><ul><li>Launch PuTTY (Windows OS) or Termius (macOS), then connect to your device,<\/li><li>Enter the following command to update the package list,<\/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-2d88e59 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"2d88e59\" 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-2d88e59\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo apt update<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_2d88e59 = 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_2d88e59();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_2d88e59 );\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-65a3ebd elementor-widget elementor-widget-text-editor\" data-id=\"65a3ebd\" 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>\n<li>Then use the command prompt and follow the instructions to install available updates.<\/li>\n<\/ul>\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-7b2a8a4 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"7b2a8a4\" 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-7b2a8a4\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo apt upgrade<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_7b2a8a4 = 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_7b2a8a4();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_7b2a8a4 );\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-c9a4c62 elementor-widget elementor-widget-text-editor\" data-id=\"c9a4c62\" 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>Deactivation of Wi-Fi and Bluetooth<\/h4><p>The deactivation of the Wi-Fi and Bluetooth module is aimed at minimizing possible interference in the radio environment and saving energy resources.<\/p><p>To disable Wi-Fi and Bluetooth, we can do it in two ways:<\/p><ul><li><strong>Method 1:<\/strong> Via <strong>rfkill<\/strong><ul><li>To use the <strong>rfkill<\/strong> command, make sure the tool is installed. If not, install them with the following command:<\/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-1b8b9b5 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"1b8b9b5\" 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-1b8b9b5\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo apt-get update &amp;&amp; sudo apt-get install rfkill<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_1b8b9b5 = 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_1b8b9b5();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_1b8b9b5 );\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-4d1f69b elementor-widget elementor-widget-text-editor\" data-id=\"4d1f69b\" 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>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Then execute the following commands:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\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-6891361 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"6891361\" 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-6891361\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code># Dezaktywacja Wi-Fi\nsudo rfkill block wifi\n\n# Dezaktywacja Bluetooth\nsudo rfkill block bluetooth<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_6891361 = 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_6891361();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_6891361 );\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-c70a2a9 elementor-widget elementor-widget-text-editor\" data-id=\"c70a2a9\" 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>\n<li><strong>Method 2:<\/strong> By editing the configuration\n<ul>\n<li>In the configuration file <strong>\/boot\/config.txt<\/strong>, add the necessary lines to disable Wi-Fi and Bluetooth.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\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-707556e elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"707556e\" 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-707556e\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code># Dezaktywacja Wi-Fi\nsudo echo &quot;dtoverlay=disable-wifi&quot; | sudo tee -a \/boot\/config.txt\n\n# Dezaktywacja Bluetooth\nsudo echo &quot;dtoverlay=disable-bt&quot; | sudo tee -a \/boot\/config.txt<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_707556e = 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_707556e();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_707556e );\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-1b16e0f elementor-widget elementor-widget-text-editor\" data-id=\"1b16e0f\" 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>After installing the tool or making changes to the configuration file, it is recommended to restart the Raspberry Pi:<\/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-ce67959 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"ce67959\" 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-ce67959\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo reboot<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_ce67959 = 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_ce67959();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_ce67959 );\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-54ddbd6 elementor-widget elementor-widget-text-editor\" data-id=\"54ddbd6\" 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>Fixed IP address on LAN via DHCP Reservation<\/h4><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); text-align: var(--text-align);\">For home labs, where complex network structures are not often necessary<\/span>, <strong style=\"font-family: var( --e-global-typography-text-font-family ), Sans-serif; text-align: var(--text-align);\">the DHCP Reservation option<\/strong> <span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); text-align: var(--text-align);\">provides a simple and effective tool for managing fixed IP addresses for key devices.<\/span><\/p><p>The process of configuring IP address reservation in the DHCP server may vary depending on the router manufacturer. The following is a general description of this process, and for the purposes of our configuration, we assume that our device has been assigned an IP address reservation of <strong>192.168.100.10<\/strong>.<\/p><ul><li>Logging into the <strong>router&#8217;s administrative interface<\/strong>:<ul><li>Enter the router&#8217;s administrative interface via a web browser,<\/li><li>Log in to your administrative account,<\/li><\/ul><\/li><li>Finding the <strong>DHCP<\/strong> section:<ul><li>In the router&#8217;s interface, find the section related to <strong>DHCP<\/strong> or <strong>LAN Settings<\/strong>,<\/li><\/ul><\/li><li>Selecting <strong>DHCP Reservation<\/strong>:<ul><li>In the <strong>DHCP<\/strong> section, look for an option related to IP address reservation,<\/li><\/ul><\/li><li>Adding reservations:<ul><li>In the case of <strong>TP-Link, Netgear or Asus<\/strong> etc.:<ul><li>Select <strong>DHCP Reservation<\/strong> or a similar option,<\/li><li>Add a new reservation, specifying the device&#8217;s <strong>MAC address<\/strong> a<strong>nd assigned IP address<\/strong> (e.g. 192.168.100.10)<\/li><\/ul><\/li><li>In the case of <strong>MikroTik<\/strong>:<ul><li>Go to the <strong>IP &gt; DHCP Server<\/strong>,<\/li><li>In the <strong>Leases<\/strong> tab, find your device,<\/li><li><strong>Double-click<\/strong> on the selected device,<\/li><li>In the DHCP Lease window of the selected device, click <strong>Copy<\/strong>,<\/li><li>In the New DHCP Lease window, <strong>set your desired<\/strong> IP address, then save the configuration by clicking <strong>Apply<\/strong> and then <strong>OK<\/strong>.<\/li><\/ul><\/li><\/ul><\/li><li><strong>Restart the device<\/strong> and wait for the Raspberry Pi to get a new IP address.<\/li><\/ul><h4>Change of SDR serial number<\/h4><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>For the purposes of this guide, we assume that the SDR used to receive ADS-B Mode-S (1090 MHz) will have the serial number <strong>1090<\/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-ee3a472 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"ee3a472\" 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-ee3a472\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>docker run --rm -it --device \/dev\/bus\/usb --entrypoint rtl_eeprom ghcr.io\/sdr-enthusiasts\/docker-adsb-ultrafeeder -s 1090<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_ee3a472 = 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_ee3a472();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_ee3a472 );\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-bde8bf8 elementor-widget elementor-widget-text-editor\" data-id=\"bde8bf8\" 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-ee5a66c elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"ee5a66c\" 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-ee5a66c\"\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-markup command-line\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><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:          1090\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_ee5a66c = 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_ee5a66c();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_ee5a66c );\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-730bcd0 elementor-widget elementor-widget-text-editor\" data-id=\"730bcd0\" 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><h2>Installing and configuring software<\/h2><h3>Docker script from SDR Enthusiasts<\/h3><p>To make the installation and configuration easier, we&#8217;ll use the <a href=\"https:\/\/github.com\/sdr-enthusiasts\/docker-install\" target=\"_blank\" rel=\"noopener\">docker-install.sh<\/a> script we&#8217;ve already prepared. The script will automatically check and install the necessary components and perform the configuration.<\/p><p>You can read the list of all the activities that will be performed by <a href=\"https:\/\/sdr-enthusiasts.gitbook.io\/ads-b\/setting-up-the-host-system\/running-docker-install\" target=\"_blank\" rel=\"noopener\">clicking on the link<\/a>.<\/p><ul><li>To use the script, <strong>enter the following command<\/strong>:<\/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-4b0dc8b elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"4b0dc8b\" 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-4b0dc8b\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>bash &lt;(curl -s https:\/\/raw.githubusercontent.com\/sdr-enthusiasts\/docker-install\/main\/docker-install.sh)<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_4b0dc8b = 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_4b0dc8b();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_4b0dc8b );\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-8d918cb elementor-widget elementor-widget-text-editor\" data-id=\"8d918cb\" 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<div class=\"w-full text-token-text-primary\" data-testid=\"conversation-turn-125\">\n<div class=\"px-4 py-2 justify-center text-base md:gap-6 m-auto\">\n<div class=\"flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group\">\n<div class=\"relative flex w-full flex-col lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"29a19af8-315c-46ef-8e3a-c00a2c5084b2\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<ul>\n<li>During the installation of the script, <strong>you will receive real-time information<\/strong> about the activities performed.<\/li>\n<li>Once the installation is complete, <strong>you will receive a summary of the process<\/strong>.<\/li>\n<li>Then, it is recommended to <strong>restart the device<\/strong>.<\/li>\n<li>After the reboot, we will <strong>continue with the installation of the Portainer agent<\/strong>.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-25cb997 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"25cb997\" 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-25cb997\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo reboot<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_25cb997 = 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_25cb997();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_25cb997 );\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-4b563b7 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"4b563b7\" 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>Installing the Portainer Agent is essential if you already have a main Portainer server on your network and want to remotely manage a device such as a Raspberry Pi. This step will also make it easier to add new container images to the Raspberry Pi in the future.<\/p>\n<p>If you don't already have a main Portainer server, it is recommended that you install it on one of the servers on your LAN so that you can effectively manage various devices, including Raspberry Pi, remotely and centrally.<\/p>\n<\/span>\n\t\t\t\n\t\t\t\t\t\t<button type=\"button\" class=\"elementor-alert-dismiss\" aria-label=\"Dismiss this alert.\">\n\t\t\t\t\t\t\t\t\t<span aria-hidden=\"true\">&times;<\/span>\n\t\t\t\t\t\t\t<\/button>\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-d9d197f elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"d9d197f\" 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>The following tips are described based on Portainer Community Edition 2.19.4 and Portainer Agent 2.19.4<\/p>\n<\/span>\n\t\t\t\n\t\t\t\t\t\t<button type=\"button\" class=\"elementor-alert-dismiss\" aria-label=\"Dismiss this alert.\">\n\t\t\t\t\t\t\t\t\t<span aria-hidden=\"true\">&times;<\/span>\n\t\t\t\t\t\t\t<\/button>\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-38254d3 elementor-widget elementor-widget-text-editor\" data-id=\"38254d3\" 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<h3>Portainer Agent &#8211; Remote management of containers<\/h3><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>The main tasks of a Portainer agent are:<\/p><ul><li><strong>Container Management:<\/strong> The agent allows Portainer to remotely start, stop, delete and monitor Docker containers on a given host.<\/li><li><strong>System Information Transfer:<\/strong> The agent collects information about the system, such as resource consumption, network availability and other parameters, and then transfers it to the Portainer so that users can track the status of their containers.<\/li><li><strong>Container Updates:<\/strong> Portainer using the agent enables updates to Docker images and containers on all connected hosts.<\/li><li><strong>Security:<\/strong> The agent works with Portainer in a secure manner, allowing secure remote management of containers without opening additional ports on the host.<\/li><\/ul><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 Raspberry Pi, 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=\"size-full wp-image-707 aligncenter\" 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=\"613\" height=\"479\" \/><\/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\" alt=\"Portainer Add Environment\" width=\"492\" height=\"66\" 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\" sizes=\"(max-width: 492px) 100vw, 492px\" \/><\/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\" alt=\"Portainer Environment Wizard\" width=\"800\" height=\"532\" 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\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/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 to the <strong>Raspberry Pi<\/strong> and type 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-9e69f35 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"9e69f35\" 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-9e69f35\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><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 \/var\/lib\/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_9e69f35 = 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_9e69f35();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_9e69f35 );\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-806cf55 elementor-widget elementor-widget-text-editor\" data-id=\"806cf55\" 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>rpi01<\/strong><\/li><li>Environment address: <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. Therefore, I suggest using <strong>\/opt\/adsb<\/strong>:<\/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-1886da3 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"1886da3\" 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-1886da3\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><code>sudo mkdir -p -m 777 \/opt\/adsb\ncd \/opt\/adsb<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_1886da3 = 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_1886da3();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_1886da3 );\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-1fe99a2 elementor-widget elementor-widget-text-editor\" data-id=\"1fe99a2\" 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>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-99152e2 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"99152e2\" 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-99152e2\"\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 command-line copy-to-clipboard\"data-previewers=\"\"data-user=\"pi\"data-host=\"rpi01\"data-output=\"\"><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_99152e2 = 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_99152e2();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_99152e2 );\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-533004d elementor-widget elementor-widget-text-editor\" data-id=\"533004d\" 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 with the 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\" alt=\"Portainer Environment\" width=\"1024\" height=\"81\" 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\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/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-c4193b7 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"c4193b7\" 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-c4193b7\"\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-yaml line-numbers\"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\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    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    volumes:\n      - \/opt\/adsb\/ultrafeeder\/globe_history:\/var\/globe_history\n      - \/opt\/adsb\/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_c4193b7 = 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_c4193b7();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_c4193b7 );\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-4f92470 elementor-widget elementor-widget-text-editor\" data-id=\"4f92470\" 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-6fabefa elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"6fabefa\" 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-6fabefa\"\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\"data-previewers=\"\"><code>FEEDER_ALT_FT=&lt;wysoko\u015b\u0107 anteny w stopach&gt;\nFEEDER_ALT_M=&lt;wysoko\u015b\u0107 anteny w metrach&gt;\nFEEDER_LONG=&lt;szeroko\u015b\u0107 geograficzna&gt;\nFEEDER_TZ=&lt;strefa czasowa&gt;\nFEEDER_NAME=&lt;nazwa lokalizacji&gt;\nADSB_SDR_SERIAL=1090\nADSB_SDR_GAIN=autogain\nULTRAFEEDER_UUID=&lt;Tw&oacute;j UUID z wcze\u015bniejszego kroku&gt;\nFEEDER_HEYWHATSTHAT_ID=&lt;Tw&oacute;j ID z heywhatsthat z wcze\u015bniejszego kroku&gt;\nFEEDER_HEYWHATSTHAT_ALTS=&lt;po\u017c\u0105dane altitudy zasi\u0119gu teoretycznego&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_6fabefa = 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_6fabefa();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_6fabefa );\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-cef4f17 elementor-widget elementor-widget-text-editor\" data-id=\"cef4f17\" 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><strong>Legend:<\/strong><\/p>\n<ul>\n<li><strong>FEEDER_ALT_FT<\/strong> is the height of the antenna above sea level in feet,<\/li>\n<li><strong>FEEDER_ALT_M<\/strong> is the height of the antenna above sea level in meters,<\/li>\n<li><strong>FEEDER_LAT<\/strong> is the latitude of the antenna (also available at the link above),<\/li>\n<li><strong>FEEDER_LONG<\/strong> is the longitude of the antenna (also available at the link above),<\/li>\n<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>\n<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>\n<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>\n<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>\n<li><strong>ULTRAFEEDER_UUID<\/strong> is the previously generated UUID,<\/li>\n<li><strong>FEEDER_HEYWHATSTHAT_ID<\/strong> is the code from the URL generated earlier,<\/li>\n<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>\n<\/ul>\n<p>For example:<\/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-e29b177 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"e29b177\" 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-e29b177\"\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\"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_e29b177 = 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_e29b177();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_e29b177 );\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-24f16da elementor-widget elementor-widget-text-editor\" data-id=\"24f16da\" 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 goes successfully, the message <strong>Success: Stack successfully deployed<\/strong> will appear in the upper right corner of the screen, and then two newly created containers will appear in the container list.<\/p><p>On my Raspberry Pi there are currently as many as 12 containers responsible for sharing data to message aggregators. <strong>\ud83d\ude80<\/strong><\/p><h2>Ultrafeeder after deployment<\/h2><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 my station transmitted to?<\/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><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>Raspberry Pi Documentation: <a href=\"https:\/\/www.raspberrypi.com\/documentation\/computers\/os.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.raspberrypi.com\/documentation\/computers\/os.html<\/a><\/li><li>Deactivating Wi-Fi and Bluetooth on Raspberry Pi: <a href=\"https:\/\/pimylifeup.com\/raspberry-pi-disable-wifi\/\" target=\"_blank\" rel=\"noopener\">https:\/\/pimylifeup.com\/raspberry-pi-disable-wifi\/<\/a><\/li><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>Mikolaj Kaminski, Airborne radar on your desk: <a href=\"https:\/\/becomeapro.pl\/lotniczy-radar-twoim-biurku-ads-b\/\" target=\"_blank\" rel=\"noopener\">https:\/\/becomeapro.pl\/lotniczy-radar-twoim-biurku-ads-b\/<\/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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Discover the secrets of installing and configuring your own ADS-B antenna on a Raspberry Pi. Develop skills and track aircraft in real time.<\/p>\n","protected":false},"author":1,"featured_media":1021,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[94],"tags":[98,102,103,113,117],"class_list":["post-1155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-ads-b","tag-docker","tag-docker-compose","tag-portainer","tag-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/posts\/1155","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=1155"}],"version-history":[{"count":0,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/posts\/1155\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/media\/1021"}],"wp:attachment":[{"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/media?parent=1155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/categories?post=1155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chochol.io\/en\/wp-json\/wp\/v2\/tags?post=1155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}