<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Trying is the first step to failure...</title><link>http://rutten.me/post/</link><description>Recent content in Posts on Trying is the first step to failure...</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 06 Aug 2026 08:02:26 +0200</lastBuildDate><atom:link href="http://rutten.me/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo</title><link>http://rutten.me/2026/08/06/hugo/</link><pubDate>Thu, 06 Aug 2026 08:02:26 +0200</pubDate><guid>http://rutten.me/2026/08/06/hugo/</guid><description>&lt;img src="http://rutten.me/2026/08/06/hugo/hero_image.jpg" alt="Featured image of post Hugo" /&gt;&lt;h2 id="hugo-powered-website"&gt;Hugo Powered website
&lt;/h2&gt;&lt;p&gt;So it was time to update my website again.
Just a simple new post. My last post is litteraly over 2 years ago. So.. Not my main routine :)
Although in theory very simple, I always has issues with &lt;a class="link" href="https://jekyllrb.com" target="_blank" rel="noopener"
 &gt;Jekyll&lt;/a&gt;. Mostlikely a me-issue, but none the less quite annoying.&lt;/p&gt;
&lt;h2 id="meet-hugo"&gt;Meet Hugo
&lt;/h2&gt;&lt;p&gt;Back then I was also looking to &lt;a class="link" href="https://gohugo.io" target="_blank" rel="noopener"
 &gt;Hugo&lt;/a&gt;.
So why not make it my new project.&lt;/p&gt;
&lt;p&gt;Both systems are using Markdown. So it was quite easy to get my previous posts in Hugo. Every post needed a slightly modification in the header section, they differ a bit in options and also depending on the theme you are using.&lt;/p&gt;
&lt;p&gt;So spent a few good moments, and here we are. For now ;-)&lt;/p&gt;
&lt;h2 id="image-source"&gt;Image source
&lt;/h2&gt;&lt;p&gt;I try to use as many original/own images where possible.
Other images are sourced from &lt;a class="link" href="https://pixabay.com" target="_blank" rel="noopener"
 &gt;Pixabay&lt;/a&gt;, found in the Royalty-free images section.&lt;/p&gt;</description></item><item><title>E-Books Lenen op Linux</title><link>http://rutten.me/2026/08/05/e-books-lenen-op-linux/</link><pubDate>Wed, 05 Aug 2026 19:22:46 +0200</pubDate><guid>http://rutten.me/2026/08/05/e-books-lenen-op-linux/</guid><description>&lt;img src="http://rutten.me/2026/08/05/e-books-lenen-op-linux/hero_image.jpg" alt="Featured image of post E-Books Lenen op Linux" /&gt;&lt;h2 id="boeken-lenen-bij-de-bibliotheek-op-linux-besturingssystemen"&gt;Boeken lenen bij de bibliotheek op Linux besturingssystemen
&lt;/h2&gt;&lt;p&gt;Als je e-books bij bijvoorbeeld de bibliotheek wilt lenen, krijg je vaak te maken met een Adobe DRM beveiligd boek.
Of ja, boek. Je krijg eerst een URLLink.acsm bestand waarmee je het DRM beveiligde boek kan downloaden.
De standaard methode hiervoor is om Adobe Digital Editions te gebruiken.&lt;/p&gt;
&lt;p&gt;Zolang je Windows gebruikt geen enkel probleem. Maar ben je een Linux gebruiker?
Het draaien van Adobe Digital Editions via &lt;a class="link" href="https://winehq.org" target="_blank" rel="noopener"
 &gt;wine&lt;/a&gt; is geen enkel probleem. De authorisatie werkt, URLLink.acsm bestand openen werkt. Hoef je alleen nog maar de ePub te kopieren naar de e-reader en klaar&amp;hellip; Zolang je e-reader geauthoriseerd is.
En daar kwam ik achter toen ik mijn Kobo e-reader naar fabrieksinstellingen had hersteld.&lt;/p&gt;
&lt;h2 id="de-e-reader-authoriseren"&gt;De e-reader authoriseren
&lt;/h2&gt;&lt;p&gt;In Windows kan je de e-reader met de computer verbinden en in Adobe Digital Editions het apparaat selecteren en authoriseren.
Via wine kreeg ik mijn e-reader echter niet te zien. Geen authorisatie? Geen geleende boeken.&lt;/p&gt;
&lt;p&gt;Installeer &lt;a class="link" href="https://calibre-ebook.com" target="_blank" rel="noopener"
 &gt;Calibre&lt;/a&gt;, en download de &lt;a class="link" href="https://github.com/Leseratte10/acsm-calibre-plugin/releases" target="_blank" rel="noopener"
 &gt;DeACSM plugin&lt;/a&gt;.
Nadat Calibe is gestart ga je naar &lt;em&gt;Preferences &amp;gt; Plugins &amp;gt; Load Plugin from file&lt;/em&gt;. Selecteer nu DeACSM_0.0.16.zip. Herstart Calibre na installatie van de plugin.&lt;/p&gt;
&lt;h2 id="plugin-authoriseren"&gt;Plugin authoriseren
&lt;/h2&gt;&lt;p&gt;Ga naar &lt;em&gt;Preferences &amp;gt; Plugins&lt;/em&gt; en dubbelklik op DeACSM. (Onder &amp;ldquo;File type &amp;gt; DeACSM&amp;rdquo;)
Kies de optie &amp;ldquo;Link to ADE account&amp;rdquo;. Login met uw ByteBooks account. (Opvolger van Adobe ID) Laat de emulatie op ADE 2.0.1 staan.&lt;/p&gt;
&lt;p&gt;Onderstaande is een experimentele functie in DeACSM v0.0.16 en werkt alleen voor e-readers die de (verborgen) map .adobe-digital-editions hebben. Op mijn Kobo Clara 2E geen probleem.
Kies de optie &amp;ldquo;Authorize eReader over USB&amp;rdquo;. Verbind nu de e-reader met je computer.&lt;/p&gt;
&lt;p&gt;Afhankelijk van uw Linux distributie, is het pad /media/ of /run/media/ gevolgd door gebruikersnaam/KOBOReader*
&lt;img alt="Authorize e-reader via Calibre" class="gallery-image" data-flex-basis="513px" data-flex-grow="214" height="228" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2026/08/05/e-books-lenen-op-linux/calibre_authorize_ereader.png" width="488"&gt;&lt;/p&gt;
&lt;p&gt;Op een Kobo e-reader kan je de status controleren bij &lt;em&gt;Meer &amp;gt; Instellingen &amp;gt; Accounts &amp;gt; Adobe&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="geen-adobe-digital-editions-meer-nodig"&gt;Geen Adobe Digital Editions meer nodig
&lt;/h2&gt;&lt;p&gt;Dus nu terug naar Adobe Digital Editions om URLLink.acsm bestanden te openen? Kan. Werkt ook.
Maar nog beter: Met de DeACSM plugin kan je deze bestanden nu direct openen in Calibre!
Klik op &amp;ldquo;Add books&amp;rdquo; en selecteer het URLLink.acsm bestand. Na enkele seconden verschijnt het gedownloade boek in je Calibre library.&lt;/p&gt;
&lt;h2 id="epub-naar-de-e-reader"&gt;ePub naar de e-reader
&lt;/h2&gt;&lt;p&gt;Je kan nu het ePub bestand naar je e-reader kopieren. Hiervoor zijn meerdere methodes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Handmatig&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De standaard locatie is /home/username/Calibre Library/auteur/boek/
Verbind je e-reader met een kabel en open je file manager. Kopieer het epub bestand handmatig naar je ereader.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Via Calibre&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sluit je e-reader via een kabel aan op de computer. Na enkele seconden verschijnt in Calibre de knop &amp;ldquo;Send to device&amp;rdquo;.
Selecteer een of meerdere bestanden in Calibre. Send to device.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Via Kobo Cloud plugin&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Via&lt;a class="link" href="https://github.com/fsantini/KoboCloud" target="_blank" rel="noopener"
 &gt;Kobo Cloud&lt;/a&gt; synchroniseer ik mijn Kobo e-reader. Dit kan o.a. vanaf Nextcloud, Google Drive of Dropbox.
In Google Drive heb ik een gedeelde map eBooks. In Calibre heb ik de Library locatie aangepast naar deze map. Alles wat in Calibre staat wordt hierdoor automatisch gesynchroniseerd naar Google Drive, en via de Kobo Cloud plugin weer naar mijn e-reader.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Direct via Dropbox integratie (Kobo)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Een aantal Kobo e-readers hebben directe ondersteuning voor Dropbox.
Zie &lt;a class="link" href="https://help.kobo.com/hc/nl/articles/360033830114-Boeken-toevoegen-aan-je-eReader-met-Dropbox" target="_blank" rel="noopener"
 &gt;Kobo Help&lt;/a&gt; voor meer informatie.&lt;/p&gt;
&lt;p&gt;Ook bij deze methode zou je de Calibre Library locatie kunnen aanpassen naar je Dropbox folder. (Waarschijnlijk /home/username/dropbox/Apps/Rakuten Kobo/)
Zelf gebruik ik deze methode niet, dus ik weet niet zeker of het werkt met de submappen die Calibre aanmaakt.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Methodes 3 en 4, de Library &amp;ldquo;in de cloud&amp;rdquo; zetten worden door Calibre niet aangeraden, maar werken wel. Op eigen risico.&lt;/p&gt;
&lt;h2 id="drm-blijft-behouden"&gt;DRM blijft behouden
&lt;/h2&gt;&lt;p&gt;Deze methode verwijderd DRM niet. Dat is ook niet het doel van DeACSM.
Daar zijn andere methodes voor. Dus netjes je geleende boek virtueel terugbrengen nadat hij is verlopen!&lt;/p&gt;</description></item><item><title>CWWK Black Screen</title><link>http://rutten.me/2024/06/10/cwwk-black-screen/</link><pubDate>Mon, 10 Jun 2024 16:43:00 +0100</pubDate><guid>http://rutten.me/2024/06/10/cwwk-black-screen/</guid><description>&lt;img src="http://rutten.me/2024/06/10/cwwk-black-screen/hero_image.jpg" alt="Featured image of post CWWK Black Screen" /&gt;&lt;h2 id="cwwktopton-black-screen"&gt;CWWK/TopTon black screen
&lt;/h2&gt;&lt;p&gt;Recently I have bought a &lt;a class="link" href="https://cwwk.net/collections/frontpage/products/cwwk-x86-p5-super-mini-router-12th-gen-intel-n100-ddr5-4800mhz-firewall-pc-2x-i226-v-2-5g-lan-fanless-mini-pc" target="_blank" rel="noopener"
 &gt;CWWK X86 P5 SUPER Mini PC&lt;/a&gt; for my &lt;a class="link" href="https://opnsense.org" target="_blank" rel="noopener"
 &gt;OPNSense&lt;/a&gt; firewall.
I bought the machine without storage and RAM, so I needed to provide my own.&lt;/p&gt;
&lt;p&gt;My first idea was to replace my current &lt;a class="link" href="https://proxmox.org" target="_blank" rel="noopener"
 &gt;Proxmox&lt;/a&gt; homeserver so I went with 32GB of RAM.&lt;br&gt;
Later I decided that I only wanted my firewall on this machine, so I didn&amp;rsquo;t need much RAM and bought 8GB.
The memory modules I did test are
&lt;a class="link" href="https://www.corsair.com/us/en/p/memory/cmsx32gx5m2a4800c40/vengeance-ddr5-sodimm-32gb-2x16gb-ddr5-4800-pc5-38400-c40-1-1v-cmsx32gx5m2a4800c40" target="_blank" rel="noopener"
 &gt;Corsair VENGEANCE DDR5 SODIMM 32GB&lt;/a&gt;
and &lt;a class="link" href="https://eu.crucial.com/memory/ddr5/ct8g48c40u5" target="_blank" rel="noopener"
 &gt;Crucial RAM 8GB DDR5&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Both worked fine, but..&lt;br&gt;
A small PSA: When you first powered on the machine, or when changing memory, the first boot takes about a minute, without any beeps. Just a black screen.
Every next boot is normal.&lt;/p&gt;
&lt;p&gt;It is possible that this is also the case with other models and/or TopTon or other rebrands of this machine.&lt;/p&gt;</description></item><item><title> Updated Theme</title><link>http://rutten.me/2023/06/09/updated-theme/</link><pubDate>Fri, 09 Jun 2023 19:00:00 +0100</pubDate><guid>http://rutten.me/2023/06/09/updated-theme/</guid><description>&lt;img src="http://rutten.me/2023/06/09/updated-theme/hero_image.jpg" alt="Featured image of post Updated Theme" /&gt;&lt;h2 id="updated-theme"&gt;Updated theme
&lt;/h2&gt;&lt;p&gt;Since I switched to Jekyll I used &lt;a class="link" href="https://beautifuljekyll.com" target="_blank" rel="noopener"
 &gt;Beautiful Jekyll&lt;/a&gt; as website theme.
It is not bad but it wasn&amp;rsquo;t great either.
So after viewing a few themes and testing, I have a winner. And it is&amp;hellip; &lt;a class="link" href="http://www.csrhymes.com/bulma-clean-theme/" target="_blank" rel="noopener"
 &gt;Bulma Clean Theme&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Migrating to Jekyll</title><link>http://rutten.me/2023/05/02/migrating-to-jekyll/</link><pubDate>Tue, 02 May 2023 13:34:00 +0100</pubDate><guid>http://rutten.me/2023/05/02/migrating-to-jekyll/</guid><description>&lt;img src="http://rutten.me/2023/05/02/migrating-to-jekyll/hero_image.png" alt="Featured image of post Migrating to Jekyll" /&gt;&lt;h2 id="migrating-from-wordpress-to-jekyll"&gt;Migrating from Wordpress to Jekyll
&lt;/h2&gt;&lt;p&gt;Today I have started the migration of my Wordpress website to &lt;a class="link" href="https://jekyllrb.com" target="_blank" rel="noopener"
 &gt;Jekyll&lt;/a&gt;. I will also experiment with hosting my site with &lt;a class="link" href="https://pages.github.com/" target="_blank" rel="noopener"
 &gt;GitHub Pages&lt;/a&gt;.
Most of the content is already migrated, but there is some manual work left. It could be possible that a few images are missing or layout is a bit weird.&lt;/p&gt;
&lt;p&gt;My site isn&amp;rsquo;t very big or interesting in general. So I will probably delete some articles and only keep the most useful or interesting ones.&lt;br&gt;
I mean, who cares that my site got a SSL certificate back in 2014? Ok, back then it wasn&amp;rsquo;t that common, but still. So&amp;hellip; &lt;em&gt;delete post&lt;/em&gt; aaaand it&amp;rsquo;s gone.
Only a couple of pages left which could be useful for other people.&lt;/p&gt;</description></item><item><title>My Esphome Home Assistant Enabled Chicken Coop Door</title><link>http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/</link><pubDate>Fri, 01 Jul 2022 20:14:51 +0100</pubDate><guid>http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/</guid><description>&lt;img src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/hero_image.jpg" alt="Featured image of post My Esphome Home Assistant Enabled Chicken Coop Door" /&gt;&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="PXL_20220630_161406624.jpg" &gt;&lt;img alt="Inside the chicken coop" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220630_161406624-150x150.jpg" width="150"&gt;&lt;/a&gt; Since a couple of weeks I have 3 Pekin Bantam hens in my garden. Although it is not a big deal opening and closing the chicken coop door daily, it still is a fun little project to automate this. For example the coop automatically opens at sunrise and closes at sunset.&lt;/p&gt;
&lt;p&gt;In my &lt;a class="link" href="https://www.home-assistant.io" target="_blank" rel="noopener"
 &gt;Home Assistant&lt;/a&gt; installation I’m already using the &lt;a class="link" href="https://esphome.io" target="_blank" rel="noopener"
 &gt;ESPHome&lt;/a&gt; integration for other small sensors in my home. So why not make use of ESPHome?&lt;/p&gt;
&lt;p&gt;The total cost for this project is about 25 euros. I did recycle multiple parts of my old defective 3D printer, therefore I only needed new endstops and the stepper driver.&lt;/p&gt;
&lt;p&gt;In the partlist I added the current (July 2022) prices from AliExpress. I will add a link to the products I &lt;strong&gt;*think*&lt;/strong&gt; you can use, although they are slightly different then the ones I already had. See it as a global shopping guideline.&lt;/p&gt;
&lt;p&gt;My chicken coop door is a drawbridge style door. With some adjustments this project can also be used for a sliding door. My first proof-of-concept build was a sliding door, until I realized that I didn’t have the required height…&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
 &lt;iframe loading="lazy" 
 src="https://www.youtube.com/embed/gCggZgzH2fE" 
 allowfullscreen 
 title="YouTube Video"
 &gt;
 &lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id="partlist"&gt;Partlist
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="PXL_20220630_161327653.jpg" &gt;&lt;img alt="NodeMCU and A4988 in a 3D printed case" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220630_161327653-150x150.jpg" width="150"&gt;&lt;/a&gt;This is the minimum amount of parts to get your own Home Assistant / ESPHome enabled chicken coop door.&lt;/p&gt;
&lt;p&gt;Guess it is probably a bit over-engineered. But hey, it works 🙂&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005004242163383.html" target="_blank" rel="noopener"
 &gt;NodeMCU v3 CH340&lt;/a&gt; (3 euro)&lt;/li&gt;
&lt;li&gt;USB adapter + micro USB cable (5 euro)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005003708661308.html" target="_blank" rel="noopener"
 &gt;NEMA 17 stepper motor&lt;/a&gt; (10 euro)&lt;/li&gt;
&lt;li&gt;Stepper motor wire (Included with motor)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/32918948939.html" target="_blank" rel="noopener"
 &gt;Timing belt&lt;/a&gt; (1 euro)&lt;br&gt;
Size: GT2-6mm, 1 meter&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005002226516848.html" target="_blank" rel="noopener"
 &gt;Timing belt gear&lt;/a&gt; (1,30 euro)&lt;br&gt;
20 Teeth Bore 5mm, width 6mm&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005001621706694.html" target="_blank" rel="noopener"
 &gt;A4988 stepper driver&lt;/a&gt; (1 euro)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005001731366424.html" target="_blank" rel="noopener"
 &gt;12V, 2A power supply + DC male connector&lt;/a&gt; (3,50 euro)&lt;/li&gt;
&lt;li&gt;Some counterweight attached to the timing belt&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="optional--nice-to-have"&gt;Optional / Nice to have
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005003139255707.html" target="_blank" rel="noopener"
 &gt;Endstop&lt;/a&gt; (2x) (2,50 euro)&lt;/li&gt;
&lt;li&gt;Momentary button / push button (2x)
I used a &lt;a class="link" href="https://aliexpress.com/item/1005004122367698.html" target="_blank" rel="noopener"
 &gt;reset button&lt;/a&gt; with a 3D printed arcade button, but a &lt;a class="link" href="https://aliexpress.com/item/32681503273.html" target="_blank" rel="noopener"
 &gt;premade&lt;/a&gt; button will also do fine)&lt;/li&gt;
&lt;li&gt;Chain, 1 meter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class="link" href="PXL_20220630_161421819.jpg" &gt;&lt;img alt="Chicken coop door opened" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220630_161421819-150x150.jpg" width="150"&gt;&lt;/a&gt;The endstops are used to stop the stepper motor immediately when they are being pressed, even if the &lt;strong&gt;target&lt;/strong&gt; or &lt;strong&gt;open_duration&lt;/strong&gt; in the &lt;a class="link" href="#esphome-yaml-code" &gt;source code&lt;/a&gt; below aren’t met.&lt;br&gt;
If you decide not to use endstops make sure to adjust the &lt;strong&gt;target&lt;/strong&gt; and &lt;strong&gt;open_duration&lt;/strong&gt; to match as closely as possible. This prevents the stepper motor from continuing spinning while the chicken coop door is already fully opened or closed.&lt;/p&gt;
&lt;p&gt;The buttons are used to manually open or close the chicken coop door. Also useful when your WiFi or HomeAssistant isn’t working. You can always open/close the door.&lt;/p&gt;
&lt;p&gt;The chain is added to prevent the weight of the door to “hang” on the motor constantly, instead the weight is “diverted” by the chain.&lt;/p&gt;
&lt;h2 id="very-optional"&gt;Very optional
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;3D printer to print some parts.&lt;/li&gt;
&lt;li&gt;Multimeter (Setting/measuring the voltage reference for the driver)&lt;/li&gt;
&lt;li&gt;Soldering iron (Unless you don’t care about cable length)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005001393566382.html" target="_blank" rel="noopener"
 &gt;Shrinkable tube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aliexpress.com/item/1005001988998580.html" target="_blank" rel="noopener"
 &gt;Dupont connectors&lt;/a&gt; (I always try to combine wires into a larger connector, feels more stable.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following 3D print models were used. You can of course use others if you like them more.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.thingiverse.com/thing:3721033" target="_blank" rel="noopener"
 &gt;NodeMCU DIY Smart LED Case&lt;/a&gt; (Scaled the height / Z axis to 500%)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.thingiverse.com/thing:1960261" target="_blank" rel="noopener"
 &gt;NEMA 17 Mount&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.thingiverse.com/thing:2622416" target="_blank" rel="noopener"
 &gt;Arcade-style tactile button&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wiring"&gt;Wiring
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="Chicken_coop_door.png" &gt;&lt;img alt="Wiring" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/Chicken_coop_door-150x150.png" width="150"&gt;&lt;/a&gt;Here is the schema to connect everything to the NodeMCU.&lt;br&gt;
The NodeMCU itself is powered via micro USB.
The A4988 driver is powered by the 12V 2A power supply and connected to the VMOD and GND pins. (Not drawn in the schema)&lt;/p&gt;
&lt;p&gt;The stepper motor cable is connected to the A4988 driver. You need to connect phase 1 to 1A/1B and phase 2 to 2A/2B. Or 1 to 2A/2B and 2 to 1A/1B, this order is less important.&lt;br&gt;
For some reason the stepper motor I used had the green and blue wires switched. So the phases weren’t wired correctly: 1A/2A and 1B/2B. Not a big deal, I just swapped them in the dupont connector.&lt;/p&gt;
&lt;p&gt;In the schematics I used the (default) wiring order, I assume that this is correct for most motors and that mine was just a bit odd.&lt;/p&gt;
&lt;h2 id="setting-the-correct-vref-value"&gt;Setting the correct VREF value
&lt;/h2&gt;&lt;p&gt;It is important to set the correct VREF value on the A4988 stepper driver. The term VREF stands for voltage reference, basically the current provided from the driver to the stepper motor. To calculate the correct VREF, I want to point you to the detailed guide from &lt;a class="link" href="https://all3dp.com/2/vref-calculator-tmc2209-tmc2208-a4988/" target="_blank" rel="noopener"
 &gt;all3dp&lt;/a&gt;. It is not very hard, but they explain it much better.&lt;/p&gt;
&lt;p&gt;Setting the value too low and your stepper motor can skip steps while having it too high can cause overheating and damage the motor. Although our usage isn’t as precise/heavy as a 3D printer. So I can imagine that skipping a few steps or a (short) period overheating isn’t really a big issue. Still better to prevent this.&lt;/p&gt;
&lt;h2 id="esphome-yaml-code"&gt;ESPHome YAML Code
&lt;/h2&gt;&lt;p&gt;It was a bit of trial and error to get it working, but in the end the chicken coop is working with the code below. Maybe that it could be done prettier, or maybe it even has some unnecessary code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt; 10
&lt;/span&gt;&lt;span class="lnt"&gt; 11
&lt;/span&gt;&lt;span class="lnt"&gt; 12
&lt;/span&gt;&lt;span class="lnt"&gt; 13
&lt;/span&gt;&lt;span class="lnt"&gt; 14
&lt;/span&gt;&lt;span class="lnt"&gt; 15
&lt;/span&gt;&lt;span class="lnt"&gt; 16
&lt;/span&gt;&lt;span class="lnt"&gt; 17
&lt;/span&gt;&lt;span class="lnt"&gt; 18
&lt;/span&gt;&lt;span class="lnt"&gt; 19
&lt;/span&gt;&lt;span class="lnt"&gt; 20
&lt;/span&gt;&lt;span class="lnt"&gt; 21
&lt;/span&gt;&lt;span class="lnt"&gt; 22
&lt;/span&gt;&lt;span class="lnt"&gt; 23
&lt;/span&gt;&lt;span class="lnt"&gt; 24
&lt;/span&gt;&lt;span class="lnt"&gt; 25
&lt;/span&gt;&lt;span class="lnt"&gt; 26
&lt;/span&gt;&lt;span class="lnt"&gt; 27
&lt;/span&gt;&lt;span class="lnt"&gt; 28
&lt;/span&gt;&lt;span class="lnt"&gt; 29
&lt;/span&gt;&lt;span class="lnt"&gt; 30
&lt;/span&gt;&lt;span class="lnt"&gt; 31
&lt;/span&gt;&lt;span class="lnt"&gt; 32
&lt;/span&gt;&lt;span class="lnt"&gt; 33
&lt;/span&gt;&lt;span class="lnt"&gt; 34
&lt;/span&gt;&lt;span class="lnt"&gt; 35
&lt;/span&gt;&lt;span class="lnt"&gt; 36
&lt;/span&gt;&lt;span class="lnt"&gt; 37
&lt;/span&gt;&lt;span class="lnt"&gt; 38
&lt;/span&gt;&lt;span class="lnt"&gt; 39
&lt;/span&gt;&lt;span class="lnt"&gt; 40
&lt;/span&gt;&lt;span class="lnt"&gt; 41
&lt;/span&gt;&lt;span class="lnt"&gt; 42
&lt;/span&gt;&lt;span class="lnt"&gt; 43
&lt;/span&gt;&lt;span class="lnt"&gt; 44
&lt;/span&gt;&lt;span class="lnt"&gt; 45
&lt;/span&gt;&lt;span class="lnt"&gt; 46
&lt;/span&gt;&lt;span class="lnt"&gt; 47
&lt;/span&gt;&lt;span class="lnt"&gt; 48
&lt;/span&gt;&lt;span class="lnt"&gt; 49
&lt;/span&gt;&lt;span class="lnt"&gt; 50
&lt;/span&gt;&lt;span class="lnt"&gt; 51
&lt;/span&gt;&lt;span class="lnt"&gt; 52
&lt;/span&gt;&lt;span class="lnt"&gt; 53
&lt;/span&gt;&lt;span class="lnt"&gt; 54
&lt;/span&gt;&lt;span class="lnt"&gt; 55
&lt;/span&gt;&lt;span class="lnt"&gt; 56
&lt;/span&gt;&lt;span class="lnt"&gt; 57
&lt;/span&gt;&lt;span class="lnt"&gt; 58
&lt;/span&gt;&lt;span class="lnt"&gt; 59
&lt;/span&gt;&lt;span class="lnt"&gt; 60
&lt;/span&gt;&lt;span class="lnt"&gt; 61
&lt;/span&gt;&lt;span class="lnt"&gt; 62
&lt;/span&gt;&lt;span class="lnt"&gt; 63
&lt;/span&gt;&lt;span class="lnt"&gt; 64
&lt;/span&gt;&lt;span class="lnt"&gt; 65
&lt;/span&gt;&lt;span class="lnt"&gt; 66
&lt;/span&gt;&lt;span class="lnt"&gt; 67
&lt;/span&gt;&lt;span class="lnt"&gt; 68
&lt;/span&gt;&lt;span class="lnt"&gt; 69
&lt;/span&gt;&lt;span class="lnt"&gt; 70
&lt;/span&gt;&lt;span class="lnt"&gt; 71
&lt;/span&gt;&lt;span class="lnt"&gt; 72
&lt;/span&gt;&lt;span class="lnt"&gt; 73
&lt;/span&gt;&lt;span class="lnt"&gt; 74
&lt;/span&gt;&lt;span class="lnt"&gt; 75
&lt;/span&gt;&lt;span class="lnt"&gt; 76
&lt;/span&gt;&lt;span class="lnt"&gt; 77
&lt;/span&gt;&lt;span class="lnt"&gt; 78
&lt;/span&gt;&lt;span class="lnt"&gt; 79
&lt;/span&gt;&lt;span class="lnt"&gt; 80
&lt;/span&gt;&lt;span class="lnt"&gt; 81
&lt;/span&gt;&lt;span class="lnt"&gt; 82
&lt;/span&gt;&lt;span class="lnt"&gt; 83
&lt;/span&gt;&lt;span class="lnt"&gt; 84
&lt;/span&gt;&lt;span class="lnt"&gt; 85
&lt;/span&gt;&lt;span class="lnt"&gt; 86
&lt;/span&gt;&lt;span class="lnt"&gt; 87
&lt;/span&gt;&lt;span class="lnt"&gt; 88
&lt;/span&gt;&lt;span class="lnt"&gt; 89
&lt;/span&gt;&lt;span class="lnt"&gt; 90
&lt;/span&gt;&lt;span class="lnt"&gt; 91
&lt;/span&gt;&lt;span class="lnt"&gt; 92
&lt;/span&gt;&lt;span class="lnt"&gt; 93
&lt;/span&gt;&lt;span class="lnt"&gt; 94
&lt;/span&gt;&lt;span class="lnt"&gt; 95
&lt;/span&gt;&lt;span class="lnt"&gt; 96
&lt;/span&gt;&lt;span class="lnt"&gt; 97
&lt;/span&gt;&lt;span class="lnt"&gt; 98
&lt;/span&gt;&lt;span class="lnt"&gt; 99
&lt;/span&gt;&lt;span class="lnt"&gt;100
&lt;/span&gt;&lt;span class="lnt"&gt;101
&lt;/span&gt;&lt;span class="lnt"&gt;102
&lt;/span&gt;&lt;span class="lnt"&gt;103
&lt;/span&gt;&lt;span class="lnt"&gt;104
&lt;/span&gt;&lt;span class="lnt"&gt;105
&lt;/span&gt;&lt;span class="lnt"&gt;106
&lt;/span&gt;&lt;span class="lnt"&gt;107
&lt;/span&gt;&lt;span class="lnt"&gt;108
&lt;/span&gt;&lt;span class="lnt"&gt;109
&lt;/span&gt;&lt;span class="lnt"&gt;110
&lt;/span&gt;&lt;span class="lnt"&gt;111
&lt;/span&gt;&lt;span class="lnt"&gt;112
&lt;/span&gt;&lt;span class="lnt"&gt;113
&lt;/span&gt;&lt;span class="lnt"&gt;114
&lt;/span&gt;&lt;span class="lnt"&gt;115
&lt;/span&gt;&lt;span class="lnt"&gt;116
&lt;/span&gt;&lt;span class="lnt"&gt;117
&lt;/span&gt;&lt;span class="lnt"&gt;118
&lt;/span&gt;&lt;span class="lnt"&gt;119
&lt;/span&gt;&lt;span class="lnt"&gt;120
&lt;/span&gt;&lt;span class="lnt"&gt;121
&lt;/span&gt;&lt;span class="lnt"&gt;122
&lt;/span&gt;&lt;span class="lnt"&gt;123
&lt;/span&gt;&lt;span class="lnt"&gt;124
&lt;/span&gt;&lt;span class="lnt"&gt;125
&lt;/span&gt;&lt;span class="lnt"&gt;126
&lt;/span&gt;&lt;span class="lnt"&gt;127
&lt;/span&gt;&lt;span class="lnt"&gt;128
&lt;/span&gt;&lt;span class="lnt"&gt;129
&lt;/span&gt;&lt;span class="lnt"&gt;130
&lt;/span&gt;&lt;span class="lnt"&gt;131
&lt;/span&gt;&lt;span class="lnt"&gt;132
&lt;/span&gt;&lt;span class="lnt"&gt;133
&lt;/span&gt;&lt;span class="lnt"&gt;134
&lt;/span&gt;&lt;span class="lnt"&gt;135
&lt;/span&gt;&lt;span class="lnt"&gt;136
&lt;/span&gt;&lt;span class="lnt"&gt;137
&lt;/span&gt;&lt;span class="lnt"&gt;138
&lt;/span&gt;&lt;span class="lnt"&gt;139
&lt;/span&gt;&lt;span class="lnt"&gt;140
&lt;/span&gt;&lt;span class="lnt"&gt;141
&lt;/span&gt;&lt;span class="lnt"&gt;142
&lt;/span&gt;&lt;span class="lnt"&gt;143
&lt;/span&gt;&lt;span class="lnt"&gt;144
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-YAML" data-lang="YAML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;esphome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;esp-chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ESP8266&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;board&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nodemcuv2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ssid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="l"&gt;secret wifi_domotica&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="l"&gt;secret wifi_domotica_key&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fast_connect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ssid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ESP Config Chickencoop&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="l"&gt;secret wifi_domotica_key&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;captive_portal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Enable logging&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Enable Home Assistant API&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="l"&gt;secret api_key&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;ota&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;stepper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;a4988&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;step_pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dir_pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max_speed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;steps/s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;acceleration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deceleration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;endstop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chickencoop&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;device_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;garage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;open_action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.report_position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.set_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;logger.log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chickencoop opening&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;open_duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20.&lt;/span&gt;&lt;span class="l"&gt;0sec&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;open_endstop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;endstop_bottom&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;close_action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.report_position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.set_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="m"&gt;2100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;logger.log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chickencoop closing&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;close_duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20.&lt;/span&gt;&lt;span class="l"&gt;0sec&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;close_endstop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;endstop_top&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stop_action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.report_position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.set_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max_duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15.&lt;/span&gt;&lt;span class="l"&gt;0sec&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;binary_sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Endstop Top / Door fully closed&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpio&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;endstop_top&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inverted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;endstop_top&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on_press&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;logger.log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Endstop TOP reached&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;cover.stop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.report_position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.set_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Endstop Bottom / Door fully opened&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpio&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;endstop_bottom&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D6&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inverted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;endstop_bottom&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on_press&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;logger.log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Endstop BOTTOM reached&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;cover.stop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.report_position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;stepper.set_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop_door&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Manual open button&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpio&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inverted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chickencoop manual opening&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Small filter, to debounce the button press.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delayed_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;25ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delayed_off&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;25ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on_press&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cover.open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Manual close button&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpio&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;D2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inverted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chickencoop manual closing&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Small filter, to debounce the button press.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delayed_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;25ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;delayed_off&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;25ms&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on_press&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cover.close&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chickencoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can add it to the Home Assistant lovelace interface and it shows up as a garage door.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Chicken coop door in Home Assistant lovelace" class="gallery-image" data-flex-basis="1498px" data-flex-grow="624" height="82" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/Screenshot-2022-07-01-21.10.09.png" width="512"&gt;&lt;/p&gt;
&lt;h2 id="the-residents"&gt;The residents
&lt;/h2&gt;&lt;p&gt;And finally… the residents!&lt;/p&gt;
&lt;p&gt;Meet Els, Ans and Bep, here they are chilling at their chicknick table hidding for some rain under an umbrella.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="PXL_20220626_162037519.jpg" &gt;&lt;img alt="Chicknick table, with rain-proof umbrella ;-)" class="gallery-image" data-flex-basis="318px" data-flex-grow="132" height="771" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220626_162037519-1024x771.jpg" srcset="http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220626_162037519-1024x771_hu_80b1653e4be7ad5a.jpg 800w, http://rutten.me/2022/07/01/my-esphome-home-assistant-enabled-chicken-coop-door/PXL_20220626_162037519-1024x771.jpg 1024w" width="1024"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>UniFi Guest Portal With Ipv6</title><link>http://rutten.me/2018/11/23/unifi-guest-portal-with-ipv6/</link><pubDate>Fri, 23 Nov 2018 12:17:56 +0100</pubDate><guid>http://rutten.me/2018/11/23/unifi-guest-portal-with-ipv6/</guid><description>&lt;img src="http://rutten.me/2018/11/23/unifi-guest-portal-with-ipv6/hero_image.jpg" alt="Featured image of post UniFi Guest Portal With Ipv6" /&gt;&lt;p&gt;For some reason Ubiquiti / UniFi doesn’t really love IPv6 after all those years. It took quite some time before the UniFi Controller itself supported IPv6. Beta IPv6 implementation started almost a year ago with the release of UniFi 5.7.7. But this doesn’t include the devices. Or at least not my Ubiquity AP-AC Lite. You can only configure IPv4 on the management interface.&lt;/p&gt;
&lt;p&gt;Luckily this doesn’t mean that your mobile devices can’t get IPv6, this works perfectly. Well perfectly… As long as you don’t use the Guest Portal for that SSID.&lt;br&gt;
If you want to use the Guest Portal the accesspoint just drops all IPv6 traffic on your guest network.&lt;/p&gt;
&lt;p&gt;User &lt;a class="link" href="https://community.ubnt.com/t5/UniFi-Wireless/Guest-mode-cannot-access-IPv6/m-p/1299150/highlight/true#M111684" target="_blank" rel="noopener"
 &gt;mrbig&lt;/a&gt; at the Ubiquity forums has found and posted a method to get SLAAC (Stateless autoconfiguration) working with the Guest Portal enabled.&lt;br&gt;
For DHCPv6 (Stateful autoconfiguration) this method doesn’t seem to work.&lt;br&gt;
The author does give a warning: All guests can send multicast traffic. So I guess that this could be a security issue. The original post is from 2015 and so far this still seems to be the best option.&lt;/p&gt;
&lt;p&gt;Edit the config.properties file (unifi path/data/sites/default/config.properties)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;config.system_cfg.1=ebtables.101.cmd=-t nat -I GUESTIN 1 -p IPv6 --dst 33:33:00:00:00:00/ff:ff:00:00:00:00 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;config.system_cfg.2=ebtables.102.cmd=-t nat -I GUESTIN 2 -p IPv6 -j AUTHORIZED_GUESTS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;config.system_cfg.3=ebtables.103.cmd=-t nat -I GUESTOUT 3 -p IPv6 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Go to your UniFi Controller to adopt this changes: Devices &amp;gt; select your AP &amp;gt; Config &amp;gt; Manage Device &amp;gt; Force Provision.&lt;/p&gt;
&lt;p&gt;If you connect to your guest network you should receive IPv6 addresses on your devices.&lt;/p&gt;</description></item><item><title>VMWare Esxi 6 7 and I219 V</title><link>http://rutten.me/2018/09/07/vmware-esxi-6-7-and-i219-v/</link><pubDate>Fri, 07 Sep 2018 10:31:14 +0100</pubDate><guid>http://rutten.me/2018/09/07/vmware-esxi-6-7-and-i219-v/</guid><description>&lt;img src="http://rutten.me/2018/09/07/vmware-esxi-6-7-and-i219-v/hero_image.jpg" alt="Featured image of post VMWare Esxi 6 7 and I219 V" /&gt;&lt;p&gt;A free tip for people with a (to new?) Intel I219V (Or Intel I219-V for search results 🙂&lt;/p&gt;
&lt;p&gt;Recently I begun with the upgrade of my VMWare server, running on an Intel i3-6100 6th gen. My current motherboard’s chipset was only able to handle 6th and 7th gen and I wanted to upgrade to the Intel i5-8400 8th gen. So I also needed a new motherboard: &lt;strong&gt;&lt;a class="link" href="https://www.asrock.com/mb/Intel/H370M-ITXac/index.asp" target="_blank" rel="noopener"
 &gt;ASRock H370M-ITX/ac&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This board has 2 network interfaces, the Intel I211AT and an Intel I219V. And the latter is a bit picky in VMWare.&lt;br&gt;
The I219V should be supported in ESXi. So no problem, right? Untill I installed ESXi 6.7 and had only 1 network card available.&lt;/p&gt;
&lt;p&gt;As it appears Intel created different I219V’s “generations” in the past years. My version is probably generation 7 (Hence the (7) in the name below), which has vendor/device ID: 8086:&lt;strong&gt;15bc&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lspci -v | grep &amp;#34;Class 0200&amp;#34; -B 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000:00:1f.6 Ethernet controller Network controller: Intel Corporation Ethernet Connection (7) I219-V
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Class 0200: 8086:15bc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000:01:00.0 Ethernet controller Network controller: Intel Corporation I211 Gigabit Network Connection [vmnic0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Class 0200: 8086:1539
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;According to VMWare this card (Specific the version with device ID 15bc) is native supported in ESXi 6.5 U2 but not in 6.7:&lt;br&gt;
&lt;a class="link" href="https://www.vmware.com/resources/compatibility/detail.php?deviceCategory=io&amp;amp;productid=45884&amp;amp;vcl=true" target="_blank" rel="noopener"
 &gt;https://www.vmware.com/resources/compatibility/detail.php?deviceCategory=io&amp;amp;productid=45884&amp;amp;vcl=true&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So I decided to install ESXi 6.5 U2, and update to 6.7 afterwards. I have tested this with the current latest version, ESXi-6.7.0-20180804001-standard. In this version it is still working. Let’s hope that the future will be the same. Or that it will be supported native in ESXi 6.7 some day.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 22/2/2019&lt;/strong&gt;&lt;br&gt;
A clean install with ESXi-6.7.0-20190104001-standard is still not detecting this NIC, unless upgraded from 6.5 U2.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;esxcli network nic list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Name PCI Device Driver Admin Status Link Status Speed Duplex MAC Address MTU Description
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;------ ------------ ------ ------------ ----------- ----- ------ ----------------- ---- -------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vmnic0 0000:00:1f.6 ne1000 Up Down 0 Half 70:85:c2:7a:7d:26 1500 Intel Corporation Ethernet Connection (7) I219-V
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vmnic1 0000:01:00.0 igbn Up Up 1000 Full 70:85:c2:7a:7d:24 1500 Intel Corporation I211 Gigabit Network Connection
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;According to other websites it should also be possible to install ESXi 6.7 directly, and by manually installing older drivers from ESXi 6.5 U2. Somehow this method didn’t work for me. And a clean install with 6.5 U2 with upgrade does.&lt;/p&gt;</description></item><item><title>Project Pifi Raspberripi as Travel Router</title><link>http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/</link><pubDate>Wed, 01 Aug 2018 10:00:35 +0100</pubDate><guid>http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/</guid><description>&lt;img src="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/hero_image.jpg" alt="Featured image of post Project Pifi Raspberripi as Travel Router" /&gt;&lt;h2 id="the-problem"&gt;The problem…
&lt;/h2&gt;&lt;p&gt;While traveling around and visiting some nice remote campgrounds it sometimes occurs that there is only WiFI at the central building, or it is limited to 1 device only. And if you don’t have much mobile data… Problem!&lt;br&gt;
In rare occasions it also happens that cellphone reception is quite eh, non existent 🙂&lt;br&gt;
Even with my limited internet usage during holidays I’d like to search/plan trips or send some pictures to family and friends to make them jealous.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The solution
&lt;/h2&gt;&lt;p&gt;&lt;img alt="PiFi" class="gallery-image" data-flex-basis="434px" data-flex-grow="180" height="566" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/PiFi.png" srcset="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/PiFi_hu_70364fa8b8126f89.png 800w, http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/PiFi.png 1024w" width="1024"&gt;&lt;/p&gt;
&lt;p&gt;Connect the RaspberryPI to the existing network. Setup an accesspoint Pi-Fi. Connect your devices to your Pi-Fi.&lt;/p&gt;
&lt;h2 id="requirements"&gt;Requirements
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Raspberry Pi&lt;/li&gt;
&lt;li&gt;USB WiFi dongle&lt;/li&gt;
&lt;li&gt;microSD card&lt;/li&gt;
&lt;li&gt;Micro USB power adapter&lt;/li&gt;
&lt;li&gt;Network cable for initial configuration&lt;/li&gt;
&lt;li&gt;SSH client (e.g. PuTTY)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is recommended to use a Raspberry Pi 3 or newer, these versions have one WiFi adapter built in. Additionally you need one USB WiFi dongle. If you are using an older Raspberry Pi you will need two.&lt;/p&gt;
&lt;h2 id="usb-wifi-dongle"&gt;USB WiFi dongle
&lt;/h2&gt;&lt;p&gt;&lt;img alt="600Mbps Dual Band 2.4/5Ghz Wireless USB WiFi Network Adapter Antenna 802.11" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/s-l1600-150x150.jpg" width="150"&gt;
I have bought the “&lt;a class="link" href="https://www.ebay.com/itm/600Mbps-Dualband-WiFi-Adapter-Dongle-WLAN-Stick-IEEE-802-11b-g-150Mb-USB-2-0/222871146804?hash=item33e427d134" target="_blank" rel="noopener"
 &gt;600Mbps Dual Band 2.4/5Ghz Wireless USB WiFi Network Adapter Antenna 802.11&lt;/a&gt;” on eBay for less than 3 euro.&lt;/p&gt;
&lt;p&gt;This adapter has a MediaTek (Ralink) mt7601u chipset. The chipset used in this adapter is supported by OpenWRT/LEDE. There is a small external antenna and it has an SMA connector (I hope this is the correct name!) so replacing it with a better antenna should be possible.&lt;/p&gt;
&lt;p&gt;The USB dongle will be used to receive the existing WiFi network, while the Raspberry Pi itself will host your own WiFi network, for the fun called Pi-Fi. Having a large antenna will hopefully result in a stable connection with the existing network 🙂&lt;/p&gt;
&lt;p&gt;It doesn’t really matter which WiFi dongle you buy, as long as the chipset is supported in OpenWRT/LEDE. And no, having Linux support doesn’t guarantee this!&lt;/p&gt;
&lt;h2 id="openwrtlede"&gt;OpenWRT/LEDE
&lt;/h2&gt;&lt;p&gt;Download the Raspberry Pi image from the &lt;a class="link" href="https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi" target="_blank" rel="noopener"
 &gt;OpenWRT/LEDE website&lt;/a&gt;. The current version is 17.01.4 LEDE. Choose the correct image, for the Raspberry Pi 3: rpi-3-ext4-sdcard.img.gz. Flash the image with a tool such as &lt;a class="link" href="https://etcher.io" target="_blank" rel="noopener"
 &gt;Etcher&lt;/a&gt; to a microSD card. Once you are done flashing the image insert it to your Raspberry Pi and power it on.&lt;/p&gt;
&lt;p&gt;You need to give your computer a temporary static IP address in the 192.168.1.x range. If your current network is already in the 192.168.1.x range it is advised to connect your computer directly to the Raspberry Pi, or be sure that no other device (mostly routers) is using 192.168.1.1.&lt;/p&gt;
&lt;p&gt;Once you are ready go to &lt;a class="link" href="http://192.168.1.1" target="_blank" rel="noopener"
 &gt;http://192.168.1.1&lt;/a&gt; and click the login button and set a password.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wireless WAN" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/LEDE-LuCI-150x150.png" width="150"&gt;Now go to the page &lt;strong&gt;Network &amp;gt; Wireless&lt;/strong&gt;&lt;br&gt;
You will probably only see one wireless adapter because OpenWRT/LEDE doesn’t include many drivers. To get internet on your Pi-Fi we will need to join an existing WiFi network, which will be our Wireless WAN, or wwan.&lt;/p&gt;
&lt;p&gt;On the wireless page you should see at least 1 adapter, the internal wireless adapter. “Generic MAC80211 802.11bgn (radio0)”. Click on the “Scan” button. Find your WiFi network and click “Join Network”. Enter the WPA passphrase if required. Be sure that “Create / Assign firewall-zone” is set to wan. Click “submit” followed by “Save &amp;amp; Apply”. Sometimes it is required to reboot to get internet working. Go to &lt;strong&gt;System &amp;gt; Reboot&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="drivers"&gt;Drivers
&lt;/h2&gt;&lt;p&gt;Login via SSH (192.168.1.1) with username root, and your password.&lt;/p&gt;
&lt;p&gt;Update the package list:&lt;br&gt;
opkg update&lt;/p&gt;
&lt;p&gt;Optional: I find it usefull to have an extra package ‘usbutils’ installed, which provides ‘lsusb’ among some other tools.&lt;br&gt;
opkg install usbutils&lt;/p&gt;
&lt;p&gt;In this example the USB adapter is using a mt7601u chipset, so let’s go ahead and install the drivers and load the module.&lt;/p&gt;
&lt;p&gt;opkg install kmod-mt7601u&lt;br&gt;
This will also install the kmod-mac80211 and mt7601u-firmware packages. The driver is installed but not yet loaded.&lt;/p&gt;
&lt;p&gt;modprobe mt7601u&lt;/p&gt;
&lt;p&gt;If you are lucky your adapter is now recognized and added to the wireless config file automatically. Go back to the webinterface and go the page &lt;strong&gt;Network &amp;gt; Wireless&lt;/strong&gt;. If there are two adapters everything is okay. And sometimes it is required to reboot.&lt;/p&gt;
&lt;p&gt;If you still don’t see the adapter after a reboot please login via SSH again.&lt;br&gt;
cd /etc/config&lt;br&gt;
mv wireless bak.wireless # To create a ‘backup’&lt;br&gt;
wifi config &amp;gt; wireless # Writes a new ‘wireless’ file.&lt;br&gt;
Optional: Restart Luci webinterface via “/etc/init.d/uhttpd restart”.&lt;/p&gt;
&lt;h2 id="the-config"&gt;The config
&lt;/h2&gt;&lt;p&gt;In the webinterfe go to the page &lt;strong&gt;Network &amp;gt; Wireless&lt;/strong&gt;.&lt;br&gt;
There are two devices: radio0 and radio1. The radio0 device is your internal wireless adapter and radio1 is the USB wireless adapter.&lt;br&gt;
I suspect the internal wireless adapter to be less strong due to a smaller antenna, so I prefer to use the internal adapter as hotspot, while the USB adapter with a larger/stronger antenna is being used to connect to the existing wireless network.&lt;/p&gt;
&lt;p&gt;&lt;img alt="radio0 wlan settings" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="150" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="http://rutten.me/2018/08/01/project-pifi-raspberripi-as-travel-router/LEDE-Wireless-LuCI-150x150.png" width="150"&gt;&lt;/p&gt;
&lt;h2 id="setup-your-pi-fi-hotspot"&gt;Setup your Pi-Fi hotspot
&lt;/h2&gt;&lt;p&gt;In the radio0 section click the “Edit” button.&lt;br&gt;
Change &lt;strong&gt;Mode&lt;/strong&gt; to “Access Point” and &lt;strong&gt;Network&lt;/strong&gt; to “lan”. If you want your hotspot to be private you can change this in the tab “Wireless Security”. Click “Save &amp;amp; Apply” to eh.. save and apply the settings. What else did you expect? 🙂&lt;/p&gt;
&lt;h2 id="joining-existing-wireless-network"&gt;Joining existing wireless network
&lt;/h2&gt;&lt;p&gt;Now we can join the existing wireless network with our USB adapter. In the radio1 section click the “Scan” button and join your wireless network.&lt;/p&gt;
&lt;p&gt;I often see the message “Wireless is disabled or not associated”. The easiest and quickest method to fix this seems to be the magical reboot. So once again perform a reboot if this happens.&lt;/p&gt;
&lt;h2 id="change-the-ip-range"&gt;Change the IP range
&lt;/h2&gt;&lt;p&gt;The 192.168.1.x range is quitte popular as a private network range. To prevent potential issues I’d like to change this to something less common.&lt;br&gt;
In the webinterface go to the page &lt;strong&gt;Network &amp;gt; Interfaces&lt;/strong&gt;.&lt;br&gt;
Edit the LAN interface and change “IPv4 address” to 10.13.37.1. Yes, very 1337 indeed… After you click on “Save &amp;amp; Apply” you can change your computers static IP address back to DHCP, or a static address in the 10.13.37.x range.&lt;/p&gt;
&lt;h2 id="while-on-the-road"&gt;While on the road
&lt;/h2&gt;&lt;p&gt;Every time you visit a place and want to use your Pi-Fi as personal hotspot you will need to join the wireless network. As far as I know you can’t save multiple wireless networks. So when you revisit an old location you need to reconnect your Pi-Fi to the existing network.&lt;/p&gt;
&lt;p&gt;So connect your device to your Pi-Fi network, open your browser and go to the webinterface (Now listening at &lt;a class="link" href="http://10.13.37.1" target="_blank" rel="noopener"
 &gt;http://10.13.37.1&lt;/a&gt;) and follow the steps described in “Joining existing wireless network”.&lt;/p&gt;</description></item></channel></rss>