<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Czujniki &#8211; tyminski.dev</title>
	<atom:link href="https://tyminski.dev/category/smart_home/czujniki/feed/" rel="self" type="application/rss+xml" />
	<link>https://tyminski.dev</link>
	<description>Praktyczna strona technologii</description>
	<lastBuildDate>Thu, 13 Aug 2026 12:23:44 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://tyminski.dev/wp-content/uploads/2026/04/cropped-logo_big_tracs_600x600-2-32x32.png</url>
	<title>Czujniki &#8211; tyminski.dev</title>
	<link>https://tyminski.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Stacja pogodowa Garni INT 5 podłączona do Home Assistant za pomocą RTL-SDR V4</title>
		<link>https://tyminski.dev/stacja-pogodowa-garni-int-5-podlaczona-do-home-assistant-za-pomoca-rtl-sdr-v4/</link>
					<comments>https://tyminski.dev/stacja-pogodowa-garni-int-5-podlaczona-do-home-assistant-za-pomoca-rtl-sdr-v4/#respond</comments>
		
		<dc:creator><![CDATA[Łukasz Tymiński]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 15:24:30 +0000</pubDate>
				<category><![CDATA[Smart Home]]></category>
		<category><![CDATA[Czujniki]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Garni]]></category>
		<category><![CDATA[homeassistant]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[rtl_433]]></category>
		<category><![CDATA[RTL-SDR]]></category>
		<guid isPermaLink="false">https://tyminski.dev/?p=2253</guid>

					<description><![CDATA[W przypadkowej rozmowie ze znajomy dowiedziałem się, że na zlocie krótkofalowców na jakimś targu kupił stacje meteo z demontażu i podłączył ją radiowo do Home Assistanta. Od razu powiedziałem, że jak tylko będzie miał jeszcze możliwość zakupu to od razu niech mi kupuje dwie. W razie jakby coś nie działało to będzie dawca części. Po&#8230; <br> <a class="read-more" href="https://tyminski.dev/stacja-pogodowa-garni-int-5-podlaczona-do-home-assistant-za-pomoca-rtl-sdr-v4/">Czytaj dalej</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">W przypadkowej rozmowie ze znajomy dowiedziałem się, że na zlocie krótkofalowców na jakimś targu kupił stacje meteo z demontażu i podłączył ją radiowo do Home Assistanta. Od razu powiedziałem, że jak tylko będzie miał jeszcze możliwość zakupu to od razu niech mi kupuje dwie. W razie jakby coś nie działało to będzie dawca części. Po 3 miesiącach miałem w ręku. Klasyczna, analogowa stacja pogodowa Garni z czujnikami (temperatura, wilgotność, wiatr, deszcz, nasłonecznienie, UV) — urządzenie, które samo w sobie nie ma żadnego protokołu komunikacji tylko puszcza w eter sygnał raz na 12 sekund. Jedyne co trzeba zrobić to <strong>podsłuchać jej transmisję radiową</strong> i wciągnąć dane do Home Assistant. Do tego zadania niezbędny jest dongiel RTL-SDR V4.</p>



<figure data-wp-context="{&quot;galleryId&quot;:&quot;6a8008eaa0e39&quot;}" data-wp-interactive="core/gallery" class="wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008eaa27dc&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008eaa27dc" class="wp-block-image size-large wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1024" height="1024" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="2261" src="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144612-1024x1024.jpg" alt="" class="wp-image-2261" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144612-1024x1024.jpg 1024w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144612-300x300.jpg 300w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144612-150x150.jpg 150w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144612-768x768.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008eaa2e95&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008eaa2e95" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="1024" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="2260" src="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144617-1024x1024.jpg" alt="" class="wp-image-2260" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144617-1024x1024.jpg 1024w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144617-300x300.jpg 300w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144617-150x150.jpg 150w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144617-768x768.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008eaa33ff&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008eaa33ff" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="1024" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="2262" src="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144628-1024x1024.jpg" alt="" class="wp-image-2262" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144628-1024x1024.jpg 1024w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144628-300x300.jpg 300w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_144628-150x150.jpg 150w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<h2 class="wp-block-heading">O co chodzi z RTL-SDR?</h2>



<p class="wp-block-paragraph">RTL-SDR to odbiornik radiowy USB (pierwotnie tunery do telewizji cyfrowej DVB-T), który dzięki społecznościowym sterownikom da się przerobić na uniwersalny odbiornik radiowy szerokiego pasma. W praktyce: jeden mały dongiel potrafi &#8222;słuchać&#8221; niemal wszystkiego, co nadaje w zakresie kilkudziesięciu MHz do ponad 1 GHz — w tym popularne pasma ISM 433 MHz i 868 MHz, na których pracuje mnóstwo czujników, stacji pogodowych, pilotów czy liczników mediów.</p>



<p class="wp-block-paragraph">Do dekodowania tych transmisji służy otwarte narzędzie <strong>rtl_433</strong> — program, który rozpoznaje kilkadziesiąt popularnych protokołów urządzeń i zamienia surowy sygnał radiowy na czytelny JSON.</p>



<h2 class="wp-block-heading">Konfiguracja: Docker + MQTT</h2>



<p class="wp-block-paragraph">Całość postawiłem w Dockerze na swoim domowym serwerze:</p>



<pre class="wp-block-code"><code>services:
  rtl_433:
    image: bademux/rtl_433tomqtt:latest
    container_name: rtl_433
    restart: unless-stopped
    volumes:
      - ./rtl_433.conf:/etc/rtl_433/rtl_433.conf:ro
      - /etc/localtime:/etc/localtime:ro
    devices:
      - /dev/bus/usb:/dev/bus/usb
    environment:
      - TZ=Europe/Warsaw
</code></pre>



<p class="wp-block-paragraph">Konfigurację samego rtl_433 trzymam w prostym pliku tekstowym — częstotliwość, wzmocnienie i adres brokera MQTT:</p>



<pre class="wp-block-code"><code>output mqtt://192.168.0.125:1883,user=xxx,pass=xxx,retain=0,events=rtl_433&#91;/model]&#91;/id]
device 0
frequency 868.3M
gain 0
report_meta time:local
</code></pre>



<p class="wp-block-paragraph">Dane z każdego wykrytego urządzenia trafiają na osobny temat MQTT (np. rtl_433/Bresser-7in1/44028), co ułatwia dalszą obróbkę. Aplikacja ma szablony sygnałów dla prawie 200 urządzeń. Moje Garni INT 5 jest rebrandem jednego z obsługiwanych nadajników <strong>Bresser &#8211; 7in1</strong></p>



<h2 class="wp-block-heading">Pułapka, na którą warto uważać: RTL-SDR Blog V4</h2>



<p class="wp-block-paragraph">Tu natrafiłem na najciekawszy problem całego projektu. Mój dongiel to nowsza wersja <strong>RTL-SDR</strong> <strong>Blog V4</strong><sub>,</sub> która wymaga specjalnego, poprawionego sterownika &#8211; standardowa biblioteka librtlsdr dostępna w repozytoriach Ubuntu go nie obsługuje w pełni. Efekt? Odbiornik &#8222;widział&#8221; sygnał (potwierdziłem to wizualnie w programie SDR++ na Macu — wyraźna smuga w waterfallu co ~12 sekund, dokładnie zgodnie z cyklem transmisji stacji), ale rtl_433 uparcie nic nie dekodował.</p>



<figure class="wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1440" height="2560" data-id="2274" src="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-scaled.jpg" alt="" class="wp-image-2274" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-scaled.jpg 1440w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-864x1536.jpg 864w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-1152x2048.jpg 1152w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-1024x1820.jpg 1024w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_174507-608x1080.jpg 608w" sizes="auto, (max-width: 1440px) 100vw, 1440px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1258" height="1198" data-id="2271" src="https://tyminski.dev/wp-content/uploads/2026/08/image-2.png" alt="" class="wp-image-2271" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/image-2.png 1258w, https://tyminski.dev/wp-content/uploads/2026/08/image-2-1024x975.png 1024w, https://tyminski.dev/wp-content/uploads/2026/08/image-2-1134x1080.png 1134w" sizes="auto, (max-width: 1258px) 100vw, 1258px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1440" data-id="2275" src="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-scaled.jpg" alt="" class="wp-image-2275" style="aspect-ratio:1" srcset="https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-scaled.jpg 2560w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-1536x864.jpg 1536w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-2048x1152.jpg 2048w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-1024x576.jpg 1024w, https://tyminski.dev/wp-content/uploads/2026/08/MVIMG_20260810_175816-1920x1080.jpg 1920w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>
</figure>



<p class="wp-block-paragraph">Rozwiązanie: zbudowanie sterownika ze źródeł producenta i podmienienie systemowej biblioteki:</p>



<pre class="wp-block-code"><code>git clone https://github.com/rtlsdrblog/rtl-sdr-blog
cd rtl-sdr-blog &amp;&amp; mkdir build &amp;&amp; cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make &amp;&amp; sudo make install
sudo cp ../rtl-sdr.rules /etc/udev/rules.d/
sudo ldconfig
</code></pre>



<p class="wp-block-paragraph">Po tej zmianie dane popłynęły od razu — pierwszy poprawny odczyt: temperatura, wilgotność, wiatr, opady, UV, wszystko z poprawną sumą kontrolną CRC.</p>



<p class="wp-block-paragraph"><strong>Wniosek:</strong> jeśli masz nowszy dongiel RTL-SDR Blog V4, a program &#8222;widzi&#8221; sygnał, ale nic nie dekoduje — sprawdź wersję sterownika, zanim zaczniesz podejrzewać config czy antenę.</p>



<p class="wp-block-paragraph">Przez to, że kompilowanie sterownika i robienie swojego obrazu nie było w moim planie to zostawiłem zainstalowany rtl_433 bezpośrednio w systemie. Kiedyś będzie czas to faktycznie przygotuję obraz pod odpowiedni kontener. Możliwe jest też, że ktoś to w międzyczasie zrobi <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">Przygotowanie pliku rtl_433.service do automatycznego uruchamiania aplikacji przy starcie systemu:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=rtl_433 - RTL-SDR generic RF receiver and decoder
After=network-online.target
Wants=network-online.target

&#91;Service]
Type=simple
User=linux_user
ExecStart=/usr/bin/rtl_433 -c /iot/rtl433/rtl_433.conf
Restart=on-failure
RestartSec=10

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p class="wp-block-paragraph">Uruchomienie serwisu:</p>



<pre class="wp-block-code"><code>sudo cp rtl_433.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable rtl_433
sudo systemctl start rtl_433</code></pre>



<h2 class="wp-block-heading">Integracja z Home Assistant</h2>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008eaa4c6a&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008eaa4c6a" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="2020" height="1208" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://tyminski.dev/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-2255" srcset="https://tyminski.dev/wp-content/uploads/2026/08/image.png 2020w, https://tyminski.dev/wp-content/uploads/2026/08/image-1536x919.png 1536w, https://tyminski.dev/wp-content/uploads/2026/08/image-1024x612.png 1024w, https://tyminski.dev/wp-content/uploads/2026/08/image-1806x1080.png 1806w" sizes="auto, (max-width: 2020px) 100vw, 2020px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p class="wp-block-paragraph">Zamiast automatycznego discovery, wybrałem prostsze podejście — zwykłe <strong>sensory MQTT</strong> z szablonami wyciągającymi konkretne wartości z JSON-a:</p>



<pre class="wp-block-code"><code>mqtt:
  sensor:
    - name: "Balkon Temperatura"
      state_topic: "rtl_433/Bresser-7in1/44028"
      value_template: "{{ value_json.temperature_C }}"
      unit_of_measurement: "°C"
      device_class: temperature
      state_class: measurement
</code></pre>



<p class="wp-block-paragraph">Analogicznie dla wilgotności, wiatru, opadów i nasłonecznienia. Dodatkowo, template sensor zamienia kierunek wiatru ze stopni na czytelną różę wiatrów (N, NE, E&#8230;), żeby dashboard był bardziej czytelny na pierwszy rzut oka.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008eaa52cf&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008eaa52cf" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1920" height="811" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://tyminski.dev/wp-content/uploads/2026/08/image-1.png" alt="" class="wp-image-2266" srcset="https://tyminski.dev/wp-content/uploads/2026/08/image-1.png 1920w, https://tyminski.dev/wp-content/uploads/2026/08/image-1-1536x649.png 1536w, https://tyminski.dev/wp-content/uploads/2026/08/image-1-1024x433.png 1024w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<h2 class="wp-block-heading">Stylizacja prezentacji danych</h2>



<p class="wp-block-paragraph">Tu dwie rzeczy do usprawnienia. Kierunek wiatru odbierany ze stacji jest w stopniach. Nie bardzo wiadomo w którą stronę wieje wiatr 252° <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Trzeba to sobie ograć template sensorem:</p>



<pre class="wp-block-code"><code>  - name: "Garni Kierunek Wiatru Róża"
    unique_id: balkon_bresser_wind_dir_rose
    state: &gt;
      {% set deg = states('sensor.balkon_garni_kierunek_wiatru') | float(0) %}
      {% set kierunki = &#91;'N','NNE','NE','ENE','E','ESE','SE','SSE',
                          'S','SSW','SW','WSW','W','WNW','NW','NNW'] %}
      {{ kierunki&#91; ((deg + 11.25) / 22.5) | int % 16 ] }}</code></pre>



<p class="wp-block-paragraph">W przyszłości chciałbym zrobić różę wiatru z obracającą się igłą i miniaturą mieszkania. Dzięki czemu będzie można od razu wyobrazić sobie, z której strony wieje wiatr <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>



<p class="wp-block-paragraph">Drugi temat do dopieszczenia to opady. Miernik opadów nalicza narastająco opady. Nie zeruje ich co dobę, tydzień czy miesiąc. Tu Home Assistant przychodzi z pomocą i swoimi <strong>utility_meter</strong>:</p>



<pre class="wp-block-code"><code>utility_meter:
  balkon_opady_dzienne:
    source: sensor.balkon_garni_opady
    unique_id: balkon_opady_dzienne
    cycle: daily
  balkon_opady_miesieczne:
    source: sensor.balkon_garni_opady
    unique_id: balkon_opady_miesieczne
    cycle: monthly</code></pre>



<p class="wp-block-paragraph">W ten sposób mamy kolejne dwie encje, które agregują dane dzienne i miesięczne. Ułatwia to prezentację danych na dashboardach.</p>



<h2 class="wp-block-heading">Kwestia zasięgu</h2>



<p class="wp-block-paragraph">Ostatnia przeszkoda była czysto fizyczna: dongiel stał w korytarzu, a stacja na balkonie — kilka metrów i ściana wystarczyły, żeby sygnał zniknął. Zamiast stawiać osobne urządzenie (miałem pod ręką wolne Raspberry Pi Zero, ale wolałem zostać przy jednym punkcie zarządzania), rozwiązaniem okazało się po prostu wydłużenie kabla USB w stronę balkonu i&#8230; zmiana wzmocnienia z ustawionego na sztywno na tryb automatyczny. Czasem najprostsze rozwiązanie leży najbliżej.</p>



<h2 class="wp-block-heading">Co dalej</h2>



<p class="wp-block-paragraph">Ten sam dongiel, ten sam pipeline (rtl_433 → MQTT → Home Assistant) obsłuży w praktyce dowolne urządzenie nadające w pasmach ISM — kolejne czujniki, piloty, a nawet niektóre liczniki mediów (choć te bywają szyfrowane, o czym może przy okazji innego artykułu). Do obsługi 433 MHz osobno planuję jeszcze przerobiony Sonoff RF Bridge z firmware ESPHome — ale to już temat na kolejny wpis.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Masz w domu jakieś radiowe urządzenie, które chciałbyś wciągnąć do swojego Home Assistant? Napisz w komentarzu — może da się je podsłuchać tą samą metodą.</em></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tyminski.dev/stacja-pogodowa-garni-int-5-podlaczona-do-home-assistant-za-pomoca-rtl-sdr-v4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aqara Vibration Sensor &#8211; czujnik wibracji (DJT11LM)</title>
		<link>https://tyminski.dev/aqara-vibration-sensor-czujnik-wibracji/</link>
					<comments>https://tyminski.dev/aqara-vibration-sensor-czujnik-wibracji/#respond</comments>
		
		<dc:creator><![CDATA[Łukasz Tymiński]]></dc:creator>
		<pubDate>Sun, 06 Feb 2022 22:17:00 +0000</pubDate>
				<category><![CDATA[Czujniki]]></category>
		<category><![CDATA[Smart Home]]></category>
		<category><![CDATA[aqara]]></category>
		<category><![CDATA[z2m]]></category>
		<category><![CDATA[zigbee]]></category>
		<guid isPermaLink="false">https://www.devpower.pl/?p=1594</guid>

					<description><![CDATA[Czujnik wibracji, temperatury oraz odchylenia w jednej, malutkiej obudowie. Bardzo dobry sensor — praktycznie nie ma dla niego sensownego zamiennika w tej cenie i wielkości. Działa po Zigbee i doskonale współpracuje z zigbee2mqtt, więc integracja z Home Assistantem to formalność. Co właściwie mierzy Nazwa &#8222;czujnik wibracji&#8221; trochę spłyca to, co ten sensor naprawdę potrafi. W&#8230; <br> <a class="read-more" href="https://tyminski.dev/aqara-vibration-sensor-czujnik-wibracji/">Czytaj dalej</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Czujnik wibracji, temperatury oraz odchylenia w jednej, malutkiej obudowie. Bardzo dobry sensor — praktycznie nie ma dla niego sensownego zamiennika w tej cenie i wielkości. Działa po Zigbee i doskonale współpracuje z zigbee2mqtt, więc integracja z Home Assistantem to formalność.</p>



<h2 class="wp-block-heading">Co właściwie mierzy</h2>



<div class="wp-block-media-text has-media-on-the-right is-stacked-on-mobile" style="grid-template-columns:auto 27%"><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">Nazwa &#8222;czujnik wibracji&#8221; trochę spłyca to, co ten sensor naprawdę potrafi. W środku siedzi żyroskop i akcelerometr, dzięki czemu w zigbee2mqtt dostajemy trzy różne typy zdarzeń:</p>



<p class="wp-block-paragraph"><strong>vibration</strong> &#8211; sam fakt wykrycia drgań (np. ktoś stuknął w przedmiot, na którym siedzi czujnik)</p>



<p class="wp-block-paragraph"><strong>tilt</strong> &#8211; zmianę kąta nachylenia względem pozycji wyjściowej</p>



<p class="wp-block-paragraph"><strong>drop</strong> &#8211; nagły, gwałtowny ruch (np. upadek albo szarpnięcie)</p>



<p class="wp-block-paragraph">Do tego dochodzi konkretny <strong>kąt nachylenia w stopniach</strong> oraz <strong>siła wibracji</strong>, więc automatyzacje nie muszą opierać się wyłącznie na &#8222;coś drgnęło&#8221;, tylko mogą reagować na konkretne wartości — co robi ogromną różnicę przy dopracowywaniu logiki.</p>
</div><figure class="wp-block-media-text__media"><img decoding="async" src="https://www.tyminski.dev/wp-content/uploads/2025/03/image-6.png" alt="Czujnik wibracji" class="wp-image-1596 size-full"/></figure></div>



<h2 class="wp-block-heading">Moje zastosowanie: deska toaletowa</h2>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:34% auto"><figure class="wp-block-media-text__media"><img decoding="async" src="https://www.tyminski.dev/wp-content/uploads/2025/03/image-7.png" alt="aqara zigbee2mqtt" class="wp-image-1598 size-full"/></figure><div class="wp-block-media-text__content">
<p class="pl10 wp-block-paragraph">Osobiście wykorzystuję żyroskop do badania kąta nachylenia deski toaletowej <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dzięki temu wiem, kiedy deska nie została opuszczona — a to ważne, bo w naszym domu oznacza to, że kot jest zagrożony (temat rozwijałem szerzej w <a href="https://tyminski.dev/spluczka-led-smart-toaleta/">tekście o usmartowionej toalecie</a>). Dodatkowo po opuszczeniu deski leci automatyczne psiknięcie odświeżaczem powietrza — drobiazg, ale porządkuje atmosferę bez konieczności pamiętania o tym samemu.</p>
</div></div>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Inne pomysły na wykorzystanie</h2>



<p class="wp-block-paragraph">Czujnik jest na tyle uniwersalny, że warto go trzymać &#8222;w zapasie&#8221; na nietypowe sytuacje. Kilka przykładów, gdzie sprawdza się równie dobrze:</p>



<p class="wp-block-paragraph"><strong>Skrzynka pocztowa</strong> &#8211; wibracja przy otwarciu klapki jako powiadomienie &#8222;przyszła poczta&#8221;, bez konieczności montowania osobnego kontaktronu</p>



<p class="wp-block-paragraph"><strong>Pralka lub suszarka</strong> &#8211; wykrycie końca prania po ustaniu wibracji, jako tańsza alternatywa dla dedykowanych czujników zużycia energii</p>



<p class="wp-block-paragraph"><strong>Drzwi wejściowe do szafek/schowków</strong> &#8211; tam, gdzie klasyczny kontaktron trudno zamontować estetycznie, a wystarczy wykryć samo &#8222;ktoś tym ruszył&#8221;</p>



<p class="wp-block-paragraph"><strong>Ochrona sprzętu</strong> &#8211; na wartościowym przedmiocie (np. rowerze w garażu) jako prosty alarm antywłamaniowy niezależny od głównego systemu alarmowego</p>



<h2 class="wp-block-heading">Czułość i strojenie</h2>



<p class="wp-block-paragraph">Domyślna czułość czujnika bywa zbyt wysoka do niektórych zastosowań — w zigbee2mqtt da się to skorygować parametrem <strong>sensitivity</strong> (niska/średnia/wysoka), a przy zastosowaniach typu deska toaletowa warto też przetestować próg kąta, od którego automatyzacja faktycznie ma reagować, żeby drobne drgnięcia nie wywoływały fałszywych alarmów.</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p class="wp-block-paragraph">Za tę cenę i rozmiar trudno o równie uniwersalny sensor — jeden mały czujnik, trzy różne typy zdarzeń, i masa nietypowych zastosowań, które w standardowym katalogu &#8222;czujnik ruchu / kontaktron / czujnik zalania&#8221; po prostu nie mieszczą się. Jeśli szukasz czegoś do rozwiązania nietypowego problemu w automatyce domowej — to często właśnie ten sensor okazuje się najprostszym rozwiązaniem.</p>



<div class="tym-cta">
  <p class="tym-cta__question">Masz nietypowy problem do rozwiązania automatyką i nie wiesz, jaki czujnik się sprawdzi?</p>
  <a href="mailto:lukasz@tyminski.dev" class="tym-cta__btn">Napisz do mnie!</a>
  <p class="tym-cta__followup">pogadamy o Twoim projekcie.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://tyminski.dev/aqara-vibration-sensor-czujnik-wibracji/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
