<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zabbix | Tomokatsu Yukishita | yre.jp</title><link>https://yre.jp/en/tag/zabbix/</link><atom:link href="https://yre.jp/en/tag/zabbix/index.xml" rel="self" type="application/rss+xml"/><description>Zabbix</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-US</language><lastBuildDate>Tue, 19 Jul 2022 00:00:00 +0000</lastBuildDate><image><url>https://yre.jp/media/icon_hufbc159bd6ce6a866189b19a79c0d0f51_12846_512x512_fill_lanczos_center_3.png</url><title>Zabbix</title><link>https://yre.jp/en/tag/zabbix/</link></image><item><title>Continuous CO2 Monitoring with Raspberry Pi, CO2-mini, and Zabbix: A Complete Setup Guide</title><link>https://yre.jp/en/post/co2-mini/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://yre.jp/en/post/co2-mini/</guid><description>&lt;p>During the COVID-19 pandemic, I bought a CO2 monitor — the CUSTOM CO2-mini. It runs on USB power, and as it turns out, it can also communicate over USB. I connected it to a Raspberry Pi and set up Zabbix to continuously monitor indoor CO2 levels. Here is the full setup guide.&lt;/p>
&lt;h2 id="hardware">Hardware&lt;/h2>
&lt;h3 id="raspberry-pi">Raspberry Pi&lt;/h3>
&lt;a href="https://www.amazon.co.jp/dp/B081YD3VL5?tag=yre03-22" target="_blank" rel="noopener nofollow sponsored" class="amazon-card">
&lt;div class="amazon-card-image">
&lt;img src="https://m.media-amazon.com/images/I/51ETv8Le3nL._AC_.jpg" alt="Raspberry Pi 4 Model B 4GB (Japan authorized distributor)">
&lt;/div>
&lt;div class="amazon-card-info">
&lt;div class="amazon-card-title">Raspberry Pi 4 Model B 4GB (Japan authorized distributor)&lt;/div>
&lt;div class="amazon-card-meta">
&lt;span class="amazon-btn">Amazonで見る&lt;/span>
&lt;/div>
&lt;/div>
&lt;/a>
&lt;h3 id="co2-mini-custom-co2-monitor">CO2-mini (CUSTOM CO2 Monitor)&lt;/h3>
&lt;a href="https://www.amazon.co.jp/dp/B00I3XJ9LM?tag=yre03-22" target="_blank" rel="noopener nofollow sponsored" class="amazon-card">
&lt;div class="amazon-card-image">
&lt;img src="https://m.media-amazon.com/images/I/31zFBrDz0-L._SL1000_.jpg" alt="CUSTOM CO2 Monitor CO2-mini">
&lt;/div>
&lt;div class="amazon-card-info">
&lt;div class="amazon-card-title">CUSTOM CO2 Monitor CO2-mini&lt;/div>
&lt;div class="amazon-card-meta">
&lt;span class="amazon-btn">Amazonで見る&lt;/span>
&lt;/div>
&lt;/div>
&lt;/a>
&lt;h3 id="power-supply-and-microsd-card">Power Supply and microSD Card&lt;/h3>
&lt;a href="https://www.amazon.co.jp/dp/B07DN5V3VN?tag=yre03-22" target="_blank" rel="noopener nofollow sponsored" class="amazon-card">
&lt;div class="amazon-card-image">
&lt;img src="https://m.media-amazon.com/images/I/61Iaz4sqdaS._AC_SL1500_.jpg" alt="Smraza Raspberry Pi 4 USB-C Power Supply 5V 3A with On/Off Switch">
&lt;/div>
&lt;div class="amazon-card-info">
&lt;div class="amazon-card-title">Smraza Raspberry Pi 4 USB-C Power Supply 5V 3A with On/Off Switch&lt;/div>
&lt;div class="amazon-card-meta">
&lt;span class="amazon-btn">Amazonで見る&lt;/span>
&lt;/div>
&lt;/div>
&lt;/a>
&lt;a href="https://www.amazon.co.jp/dp/B08K41Q79R?tag=yre03-22" target="_blank" rel="noopener nofollow sponsored" class="amazon-card">
&lt;div class="amazon-card-image">
&lt;img src="https://m.media-amazon.com/images/I/51D2iw1fbnS._AC_SL1000_.jpg" alt="SanDisk Ultra microSD 128GB UHS-I Class10">
&lt;/div>
&lt;div class="amazon-card-info">
&lt;div class="amazon-card-title">SanDisk Ultra microSD 128GB UHS-I Class10&lt;/div>
&lt;div class="amazon-card-meta">
&lt;span class="amazon-btn">Amazonで見る&lt;/span>
&lt;/div>
&lt;/div>
&lt;/a>
&lt;h2 id="reading-data-from-the-co2-mini-python">Reading Data from the CO2-mini (Python)&lt;/h2>
&lt;p>When you connect the CO2-mini to a Raspberry Pi via USB, it is recognized without any special drivers. Data retrieval uses the &lt;a href="https://github.com/heinemml/CO2Meter" target="_blank" rel="noopener">heinemml/CO2Meter&lt;/a> Python library.&lt;/p>
&lt;h3 id="installing-the-library">Installing the Library&lt;/h3>
&lt;p>On Raspberry Pi OS Bookworm (2023 and later), installing packages directly into the system Python with &lt;code>pip&lt;/code> is restricted. Use a virtual environment instead:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">python3 -m venv /root/co2env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/root/co2env/bin/pip install git+https://github.com/heinemml/CO2Meter
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="alert alert-note">
&lt;div>
On Raspberry Pi OS Bookworm and later, &lt;code>sudo pip3 install ...&lt;/code> may fail with an &amp;ldquo;externally managed environment&amp;rdquo; error. Using a virtual environment as shown above is the safe approach.
&lt;/div>
&lt;/div>
&lt;h3 id="script-writing-co2-and-temperature-to-shared-memory">Script: Writing CO2 and Temperature to Shared Memory&lt;/h3>
&lt;p>To make values accessible to the Zabbix agent, the script continuously writes them to files under &lt;code>/dev/shm/&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">CO2Meter&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sensor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">CO2Meter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/dev/hidraw0&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># may be hidraw1 or similar on your system&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sensor&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_data&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="s1">&amp;#39;temperature&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="s1">&amp;#39;co2&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/dev/shm/co2&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;co2&amp;#39;&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/dev/shm/temperature&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;temperature&amp;#39;&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="alert alert-note">
&lt;div>
The device path &lt;code>/dev/hidraw0&lt;/code> may differ on your system. Run &lt;code>ls /dev/hidraw*&lt;/code> to find the correct path after plugging in the CO2-mini.
&lt;/div>
&lt;/div>
&lt;h3 id="auto-start-at-boot-crontab">Auto-start at Boot (crontab)&lt;/h3>
&lt;p>The device requires root access, so create a shell script that runs as root:&lt;/p>
&lt;p>&lt;code>/root/co2.sh&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>sleep &lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/root/co2env/bin/python3 /root/co2.py
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Add to root&amp;rsquo;s crontab to run at boot:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">@reboot /root/co2.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="zabbix-configuration">Zabbix Configuration&lt;/h2>
&lt;p>The approach is:&lt;/p>
&lt;ul>
&lt;li>The Python script continuously writes CO2 and temperature values to &lt;code>/dev/shm/&lt;/code>&lt;/li>
&lt;li>The Zabbix agent reads those files via &lt;code>cat&lt;/code> and returns the values&lt;/li>
&lt;/ul>
&lt;h3 id="zabbix-server-creating-the-host-and-items">Zabbix Server: Creating the Host and Items&lt;/h3>
&lt;p>Install the zabbix-agent on the Raspberry Pi and add it as a host in Zabbix server.&lt;/p>
&lt;p>
&lt;figure id="figure-adding-the-raspberry-pi-as-a-zabbix-host">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Zabbix host creation screen showing the Raspberry Pi&amp;amp;rsquo;s IP address being added as a new host" srcset="
/media/co2-mini/da06e12e47b74a91077c01cd16525293_hu313760b14cba40592b4c4bfe8a53f596_72911_1b1d6d1894adc4b8bbffecf8e53f3544.webp 400w,
/media/co2-mini/da06e12e47b74a91077c01cd16525293_hu313760b14cba40592b4c4bfe8a53f596_72911_fea422ab79f99abf87bd10e92c424003.webp 760w,
/media/co2-mini/da06e12e47b74a91077c01cd16525293_hu313760b14cba40592b4c4bfe8a53f596_72911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://yre.jp/media/co2-mini/da06e12e47b74a91077c01cd16525293_hu313760b14cba40592b4c4bfe8a53f596_72911_1b1d6d1894adc4b8bbffecf8e53f3544.webp"
width="760"
height="196"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Adding the Raspberry Pi as a Zabbix host
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Create two items — one for CO2 concentration and one for temperature.&lt;/p>
&lt;p>
&lt;figure id="figure-creating-co2-and-temperature-items-in-zabbix">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Zabbix item list showing CO2 concentration and temperature items for the Raspberry Pi host" srcset="
/media/co2-mini/5ce5e9a101dc3a9f247f663aa8f0a7b3_hud28ccdbdbed7334ddc3ee0b604058f9a_103897_9c11300127e1612b7ef1f8456817bccb.webp 400w,
/media/co2-mini/5ce5e9a101dc3a9f247f663aa8f0a7b3_hud28ccdbdbed7334ddc3ee0b604058f9a_103897_90cd0f3739ec77d7e841d665277f56f1.webp 760w,
/media/co2-mini/5ce5e9a101dc3a9f247f663aa8f0a7b3_hud28ccdbdbed7334ddc3ee0b604058f9a_103897_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://yre.jp/media/co2-mini/5ce5e9a101dc3a9f247f663aa8f0a7b3_hud28ccdbdbed7334ddc3ee0b604058f9a_103897_9c11300127e1612b7ef1f8456817bccb.webp"
width="760"
height="608"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Creating CO2 and temperature items in Zabbix
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>
&lt;figure id="figure-configuring-item-keys-to-match-userparameter-names">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Zabbix item key configuration screen showing UserParameter keys co2.co2 and co2.temp being set" srcset="
/media/co2-mini/9017e828e3c4efcae08dca0091351baa-1024x819_hu8f2faefe9ab31af6c31fc87aa0f0d22a_115242_3294bf3e25f8357036b10c044d045648.webp 400w,
/media/co2-mini/9017e828e3c4efcae08dca0091351baa-1024x819_hu8f2faefe9ab31af6c31fc87aa0f0d22a_115242_e4cb036ba6e841d0d2fb0d635f2939e1.webp 760w,
/media/co2-mini/9017e828e3c4efcae08dca0091351baa-1024x819_hu8f2faefe9ab31af6c31fc87aa0f0d22a_115242_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://yre.jp/media/co2-mini/9017e828e3c4efcae08dca0091351baa-1024x819_hu8f2faefe9ab31af6c31fc87aa0f0d22a_115242_3294bf3e25f8357036b10c044d045648.webp"
width="760"
height="608"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Configuring item keys to match UserParameter names
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Use the following item keys:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">co2.co2 (CO2 concentration)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">co2.temp (Temperature)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="zabbix-agent-configuration-file">Zabbix Agent: Configuration File&lt;/h3>
&lt;p>Edit &lt;code>/etc/zabbix/zabbix_agentd.conf&lt;/code> to set the server address:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Server=&amp;lt;zabbix-server address&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ServerActive=&amp;lt;zabbix-server address&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="userparameter-configuration">UserParameter Configuration&lt;/h3>
&lt;p>Create &lt;code>/etc/zabbix/zabbix_agentd.conf.d/userparameter_co2.conf&lt;/code>. It simply &lt;code>cat&lt;/code>s the shared memory files:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">UserParameter=co2.co2,cat /dev/shm/co2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">UserParameter=co2.temp,cat /dev/shm/temperature
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Restart the agent:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">sudo systemctl restart zabbix-agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="results">Results&lt;/h2>
&lt;p>CO2 concentration and temperature are now graphed in Zabbix.&lt;/p>
&lt;p>
&lt;figure id="figure-co2-concentration-graph-in-zabbix-values-drop-at-ventilation-events">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Zabbix graph showing real-time CO2 concentration data from Raspberry Pi &amp;#43; CO2-mini. Values drop when the room is ventilated" srcset="
/media/co2-mini/2f571cc59d7fa276e5cedf024f4227cf_hu277cd2d825a81d3f8ff9ed731bf6d1ea_117855_48a1d62b253931673888293d34fd422b.webp 400w,
/media/co2-mini/2f571cc59d7fa276e5cedf024f4227cf_hu277cd2d825a81d3f8ff9ed731bf6d1ea_117855_f0c054ecb0a4aa5844ee97e07d272a80.webp 760w,
/media/co2-mini/2f571cc59d7fa276e5cedf024f4227cf_hu277cd2d825a81d3f8ff9ed731bf6d1ea_117855_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://yre.jp/media/co2-mini/2f571cc59d7fa276e5cedf024f4227cf_hu277cd2d825a81d3f8ff9ed731bf6d1ea_117855_48a1d62b253931673888293d34fd422b.webp"
width="760"
height="165"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
CO2 concentration graph in Zabbix. Values drop at ventilation events
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>
&lt;figure id="figure-long-term-trend-in-winter-windows-tend-to-stay-closed-allowing-co2-to-build-up">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Zabbix graph showing weeks of CO2 concentration history. In winter, CO2 spikes are visible when ventilation is reduced" srcset="
/media/co2-mini/78ac805712a44e11300fa5ba4588254c_hu495835c02be0289c551a3002b397186b_290858_2cad7f32843dfd27d09684ba3e89f769.webp 400w,
/media/co2-mini/78ac805712a44e11300fa5ba4588254c_hu495835c02be0289c551a3002b397186b_290858_0a7ce34aa4d5b3be8bfd7327941efc86.webp 760w,
/media/co2-mini/78ac805712a44e11300fa5ba4588254c_hu495835c02be0289c551a3002b397186b_290858_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://yre.jp/media/co2-mini/78ac805712a44e11300fa5ba4588254c_hu495835c02be0289c551a3002b397186b_290858_2cad7f32843dfd27d09684ba3e89f769.webp"
width="760"
height="269"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Long-term trend. In winter, windows tend to stay closed, allowing CO2 to build up
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Since setting up the monitor, I ventilate much more frequently. Seeing the numbers makes it obvious exactly when ventilation is needed.&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Role&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>CO2-mini&lt;/td>
&lt;td>Measures CO2 concentration and temperature via USB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Raspberry Pi&lt;/td>
&lt;td>Reads sensor data and writes it to shared memory&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python (CO2Meter library)&lt;/td>
&lt;td>Communicates with CO2-mini and parses data&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Zabbix (agent + server)&lt;/td>
&lt;td>Collects data, graphs it, and stores long-term history&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The complete scripts are available on GitHub:&lt;/p>
&lt;p>&lt;a href="https://github.com/yukishita/co2-mini" target="_blank" rel="noopener">GitHub - yukishita/co2-mini: Program to log CUSTOM CO2-mini data with Zabbix&lt;/a>&lt;/p></description></item></channel></rss>