<?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>node-red &#8211; tyminski.dev</title>
	<atom:link href="https://tyminski.dev/tag/node-red/feed/" rel="self" type="application/rss+xml" />
	<link>https://tyminski.dev</link>
	<description>Praktyczna strona technologii</description>
	<lastBuildDate>Fri, 31 Jul 2026 12:15:17 +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>node-red &#8211; tyminski.dev</title>
	<link>https://tyminski.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Brama garażowa w bloku &#8211; sterowanie z poziomu Home Assistant&#8217;a</title>
		<link>https://tyminski.dev/brama-garazowa-w-bloku-sterowanie-z-poziomu-home-assistanta/</link>
					<comments>https://tyminski.dev/brama-garazowa-w-bloku-sterowanie-z-poziomu-home-assistanta/#respond</comments>
		
		<dc:creator><![CDATA[Łukasz Tymiński]]></dc:creator>
		<pubDate>Tue, 20 Apr 2021 19:20:00 +0000</pubDate>
				<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Smart Home]]></category>
		<category><![CDATA[esp]]></category>
		<category><![CDATA[esphome]]></category>
		<category><![CDATA[node-red]]></category>
		<category><![CDATA[sonoff]]></category>
		<guid isPermaLink="false">https://www.devpower.pl/?p=995</guid>

					<description><![CDATA[Sterowanie bramami w domkach jednorodzinnych nie jest tak problematyczne jak sterowanie tego typu urządzeniami w zabudowie wielorodzinnej. Gdzie tak na prawdę nie mamy możliwości ingerowania w instalacje. Mamy do dyspozycji symulację otwierania przy pomocy pilota. W skrajnych przypadkach, takich jak np. mieszkanie po drugiej stronie budynku skąd nie ma szans dotrzeć sygnał radiowy do bramy,&#8230; <br> <a class="read-more" href="https://tyminski.dev/brama-garazowa-w-bloku-sterowanie-z-poziomu-home-assistanta/">Czytaj dalej</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Sterowanie bramami w domkach jednorodzinnych nie jest tak problematyczne jak sterowanie tego typu urządzeniami w zabudowie wielorodzinnej. Gdzie tak na prawdę nie mamy możliwości ingerowania w instalacje. Mamy do dyspozycji symulację otwierania przy pomocy pilota. W skrajnych przypadkach, takich jak np. mieszkanie po drugiej stronie budynku skąd nie ma szans dotrzeć sygnał radiowy do bramy, zostajemy bez możliwości sterowania bramą przy pomocy telefonu. Ja na szczęście mam widok na bramę z okna kuchennego.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img decoding="async" src="https://www.tyminski.dev/wp-content/uploads/2021/04/IMG-0586-1024x768.jpg" alt="" class="wp-image-999 size-full"/></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">Dodatkowym utrudnieniem jest kodowanie sygnału z pilota. Nie możemy użyć tu np. sonoff RF, który &#8222;podszyłby się&#8221; pod oryginalny pilot. Dlatego też ostatecznie okazuje się, że jest tylko jedna opcja jaką możemy wykorzystać. Zintegrować oryginalny pilot z ESP. Na wszystkie esp daje espHome i tak też było w tym przypadku. No dobra, znalazłem jeden wyjątek <a href="https://tyminski.dev/smart-czajnik-redmond-rk-m216s-e-w-home-assistant/" target="_blank" rel="noreferrer noopener">bramka do czajnika</a> na esp32 gdzie zastosowałem autorskie oprogramowanie.</p>
</div></div>



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



<p class="wp-block-paragraph">Wgrywamy na płytkę EspHome. Konfigurujemy sobie switch&#8217;a z odpowiednim pinem, którym będziemy sterować przekaźnikiem. Osobiście preferuje komunikację po MQTT więc stosowny wpis z konfiguracją brokera musi się pojawić. Pierwotnie zrealizowałem w konfiguracji automatyzację włącznika jako relay, który sam się wyłączał po 500ms. Niestety tak krótkich impulsów nie wyłapywał node-red więc zrobiłem zwykły włącznik a wyłączanie go po 500ms realizuję już w node-red.  </p>



<pre class="wp-block-code"><code>switch:
  - platform: gpio
    pin: D8
    name: "Brama MCU - Remote"
    icon: "mdi:gate"</code></pre>



<p class="wp-block-paragraph">Dlaczego ma tu ingerować Node-red ? Chociażby żeby w momencie otwierania bramy alexa dźwięk informujący o otwarciu bramy. Jest to np. przydatne w momencie kiedy, żona wraca z ciężkimi zakupami a ja czym prędzej zbiegam do garażu aby pomóc <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Nie musi dzwonić i informować mnie o swoim powrocie <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;" /> Poza tym na pewno coś jeszcze wymyślę więc otwarcie sobie drogi i możliwość obsługi pilota z poziomu node-reda wydała mi się uzasadniona.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8008e3e08f7&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008e3e08f7" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" 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://www.tyminski.dev/wp-content/uploads/2021/04/Screenshot.png" alt="" class="wp-image-1016"/><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">Ok, to tyle jeśli chodzi o oprogramowanie. Zajmijmy się teraz stroną hardware&#8217;ową.</p>



<h2 class="wp-block-heading">Niezbędne elementy układu</h2>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile"><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">Elementy, które poza oczywistym esp, w moim przypadku node MCU i pilotem, który musiałem rozebrać to: przekaźnik z cewką na 5V, tranzystor NPN, rezystor 4,7kOhm, dioda prostownicza i kilka kabelków oraz płytka prototypowa aby wszystko w miarę trwale i stabilnie utrzymać w harmonii. Całość polutowana według załączonego schematu. Poniżej przedstawiam efekt ostateczny mojego spawania. </p>
</div><figure class="wp-block-media-text__media"><img decoding="async" src="https://www.tyminski.dev/wp-content/uploads/2021/04/Relay-Sample.jpg" alt="" class="wp-image-1025 size-full"/></figure></div>



<p class="wp-block-paragraph">Zastanawiam sie jak to teraz ukryć. Na parapecie leżeć nie może. Jakaś wydrukowana czy gotowa obudowa wpłynie negatywnie na komfort użytkowania okna. Najprawdopodobniej wykuję we wnęcę miejsce na puszkę kieszeniową. Doprowadzę tam zasilanie od przycisku rolety dzięki czemu będę mógł tam wrzucić ładowarkę i rozwiążę problem zasilania esp.   </p>



<figure data-wp-context="{&quot;galleryId&quot;:&quot;6a8008e3e0b21&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;6a8008e3e0e5f&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008e3e0e5f" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" 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="1002" src="https://tyminski.dev/wp-content/uploads/2021/04/IMG-0592.jpg" alt="" class="wp-image-1002"/><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;6a8008e3e124b&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008e3e124b" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" 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="1003" src="https://tyminski.dev/wp-content/uploads/2021/04/IMG-0594.jpg" alt="" class="wp-image-1003"/><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;6a8008e3e1647&quot;}" data-wp-interactive="core/image" data-wp-key="6a8008e3e1647" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" 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="1004" src="https://tyminski.dev/wp-content/uploads/2021/04/IMG-0595.jpg" alt="" class="wp-image-1004"/><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">Podsumowanie</h2>



<p class="wp-block-paragraph">Po blisko 2 tygodniach użytkowania jestem zadowolony z rozwiązania. Jedynym problemem, który zaobserwowałem to chwilowy, ograniczony dostęp do internetu w podziemnym garażu. Trzeba podjechać pod bramę zanim użyje się przycisku na telefonie. Mam nadzieję, że kogoś mój projekt zainspiruje. Poniżej zamieszczam kompletny kod mojego ESP, które aktualnie zajmuje się tylko bramą. Każdy jednak wie jak to jest z tymi esp i najprawdopodobniej za chwilę wykorzystam pozostałe piny. Chociażby mam juz pomysł na wykonanie przycisku na ścianie. żeby bramę można było otwierać również z poziomu zwykłego przycisku na ścianie.</p>



<pre class="wp-block-code"><code>esphome:
  name: brama_mcu
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: "ssid"
  password: "haslo"
  
    # Optional manual IP
  manual_ip:
    static_ip: 192.168.1.109
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Brama Hotspot"
    password: "12345678"

captive_portal:
logger:
ota:

mqtt:
  broker: 192.168.1.110
  username: login
  password: haslo
  discovery: True   

# Enable Web server
web_server:
  port: 80

sensor:
  - platform: wifi_signal
    name: "Brama MCU - Wifi Signal"
    update_interval: 60s
    icon: mdi:wifi
  - platform: uptime
    name: "Node1 - Uptime"
    update_interval: 60s
    icon: mdi:clock-outline
    
switch:
  - platform: gpio
    pin: D8
    name: "Brama MCU - Remote"
    icon: "mdi:gate"

text_sensor:
  - platform: version
    name: "Brama MCU - Version"
    icon: mdi:cube-outline</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://tyminski.dev/brama-garazowa-w-bloku-sterowanie-z-poziomu-home-assistanta/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
