If you are in the market for a solar powered mesh radio device, maybe for Meshtastic, and like me you just want to get up and running with something that is assured to work, then you may want to consider a base station kit from https://mesh-lab.com/products/solar-base-station-kit. Made by same person behind Yeti Wurks, this base station kit has almost everything you need to get a solar powered mesh radio node up and running quickly. I say “almost everything” because, while the solar charger half of the kit includes 6 18650 cells, ideally you would insert at least one 18650 battery into the case as well. The kit was recommended to me by a local mesh group (mspmesh.org). I paid full price for the kit and this is not a sponsored post in any way. What follows is an overview of what you receive in the kit and how to use it.

What is included

The box I received contained everything described on the product listing. This includes:

  • RAK4631 radio in a weather resistant case.
  • Solar charger with 6 18650 cells preinstalled.
  • Antenna.
  • Mounting bracket that you selected at order time.
  • Mounting hardware for the solar panel and more.
  • Directions.
  • Stickers!

Below is a look inside the weather resistant case.

In the case is of course the RAK4631 radio and an additional 18650 cell holder capable of holding up to four additional cells. Pay special attention to the note about battery orientation as the holder is designed for parallel connections rather than serial! Additionally, when inserting the cells pay special attention that the positive side of the cell makes a connection with the contact. In my sample, the cells fit very tightly and it may not make a connection if you don’t slide it against the positive terminal.

Along the edge of the case starting from the top and working clockwise is an N-type antenna connector, a switch to connect/disconnect the four cell battery back from the RAK4631 charge controller, a power connection and USB-C port. Difficult to see in the photo on the left side of the case is a weather resistant vent to allow for pressure equalization.

Also included in the kit is this solar charger, which I’m linking to directly as it provides better photos and description – https://mesh-lab.com/products/off-grid-solar-charger-5-5-watt-5vdc-2-5a. This unit is available separately and includes 6 18650 cells. Also included in the kit is all of the mounting hardware which works perfectly with the 3d printed mount that you selected at order time. The solar panel seems surprisingly efficient and will charge the cells, albeit slowly, even in overcast conditions. Combined with a power efficient RAK4631, this solar panel and battery pack will keep it going for many days. While the panel and battery pack are great, the mounting post included with the panel seems a bit on the flimsy side and I don’t know how it will hold up to the elements over time. For the price, however, I can’t expect much more.

At order time I selected the larger 2″ PVC pipe mounting option. This integrated mount, also available in the store separately, is a 3d printed piece designed to be attached a 2″ PVC pipe using the included worm gear clamps. This all worked very well for me and I had no issues. Again, all screws, clamps and such were included with the kit. The solar panel attaches to the mount as does the weather resistant case. Then the whole unit is attached to whatever pole you have.

Mini Review

I have had the kit for all of a few days as of this writing but I am able to say that everything that is included with the kit works very well together. The RAK4631 radio included in the kit is known for being reliable and power efficient, perfect for solar applications.

If you are looking for an easy to assemble and ready to go device for joining a mesh network, I highly recommend you consider this kit by mesh-lab.com. If you don’t need a solar powered kit there are other options available as well. My thanks to the folks on the mspmesh.org Discord for helping me find a ready made kit. Now that I have something working and in the wild I will likely build additional nodes on my own and I’ll post about my experience here.

Earlier I mentioned that the kit recommends you insert up to four additional 18650 cells into the weather resistant case. This helps ensure proper operation of the RAK4631. I didn’t have any additional cells so, from the recommendation of others, I simply stole one cell from the solar panel. Doing so as easy as opening the back of the solar panel case by removing the rubber covers over the screws, undoing the screws and removing one cell. Be sure to understand how to orient 18650 cells when inserting them into the weather resistant case!

This is a quick guide to performing an over-the-air update of a RAK4631 device using iOS and the DFU application by Nordic Semiconductor. Based on known and personal experience, performing an over-the-air update of this device carries some amount of risk as the device does not have a fall back in the event of an error. If the update fails your device will be left in a state where you need physical, wired access in order to recover. If you have any other method available to you I recommend using that method rather than an over-air-update.

This guide specifically covers using the DFU app on iOS to flash the latest Meshtastic firmware to a RAK4631. Many of these steps may be the same on Android and may work for other, similar devices, but I don’t have these to test with. You will need three things to perform an over-the-air update of a RAK4631 or similar device:

  • iOS device with DFU software installed.
  • The DFU app is properly configured prior to attempting the update.
  • A copy of the correct firmware file you wish to apply to the device. You can find the latest release on the Meshtastic website at https://meshtastic.org/downloads/. I recommend using a “stable” release.

Optionally, if you are using iCloud drive you can download and work with the files on a Mac and place the file on your iCloud drive for easier access on the iOS side.

Configuring DFU

It is very important that you confirm DFU is configured properly prior to applying any update. Failure to do so on iOS will almost certainly result in a “bricked” device that you will need to take down and connect to using USB in order to recover. Configuration is simple. Open the app and tap on settings. Ensure you enable the first option and set the number of packets to 10. Your settings page should look similar to this screenshot:

Note that all options are at their default values, or disabled.

Getting the proper firmware

It is important that you download the correct firmware from the download page. If you do not, you will be unable to perform the update as the DFU app will complain there is no manifest.json file available. To find the correct firmware, use the following steps:

  • Go to the downloads page at https://meshtastic.org/downloads/.
  • Scroll down to the assets section.
  • Find the firmware with “nrf52840” in the name such as firmware-nrf52840-2.6.4.b89355f.zip and download it.
  • Extract the zip file and find the firmware specific to your device with “ota” in the name, for a 4631 it might named firmware-rak4631-2.6.4.b89355f-ota.zip. You are If using a Mac + iCloud drive, copy this file to a location you can find on the iOS device or if already on iOS select this file in the DFU app when told to.

Applying the update

Now to apply the update to the device. Start by opening the DFU application, confirming the configuration is set properly and then tap on select file. Here you should browse to the location of your iCloud drive or the downloads section of iOS and select the firmware file with “ota” in the name.

Next in the Device section, tap on select and find your device. You can also tap on “nearby” to filter on items that are close.

Once you have selected your device, the last step is to tap upload. Be sure to ensure your screen or device does not turn off during the process!. Remember, if for any reason the update fails, you will need to connect the device directly to a computer in order to recover. After some time the update will complete and the device will restart using the new firmware. Adjust any settings that you need to adjust and enjoy your updated device.

As of this writing I have two Heltec V3 Meshtastic nodes that I use to gain access to the greater Meshtastic network in my area. One is installed at a static location, the attic of my house, while the other one is either in my office or I take it with me. I interact with it using the Meshtastic software on my phone or on my desktop computer. One of the features of Meshtastic is to advertise some node metadata including location. My more mobile node gets my current coordinates from the Meshtastic client connected to the node over Bluetooth, but the static node has no way to know its location so I must tell it. In this post, I will walk through how I advertise a static location for the node installed in my attic as it wasn’t as straightforward as I initially thought it would be.

While it isn’t necessary to advertise the location of your node, it is useful because it helps provide some indication as to how your messages are traveling. You also don’t need to advertise a perfectly precise location though you shouldn’t advertise it as being somewhere on the other side of the planet. I am making some heavy assumptions, primarily that you already know how to install the Meshtastic command line client. If not, take a look at the directions available at https://meshtastic.org/docs/software/python/cli/installation/. It is possible to configure the node without using the command line client but I don’t cover that here. I use the command line client because my static node is connected to a raspberry pi via USB which powers it and allows me to manage it that way.

Getting and setting your coordinates

Before you can set the coordinates for a Meshtastic node, you need to know what they are expressed as a latitude longitude pair. I found that the simplest way is to use google.com/maps, look for the location you want to advertise and get the latitude and longitude values from. To do so, search for the location, right click where you want to advertise and click the top pair of values which will copy them to your clip board. Next, modify the following script to suite your needs to set the values on your Meshtastic node:

#!/bin/bash

meshtastic --port /dev/ttyUSB1 --set position.fixed_position True
meshtastic --port /dev/ttyUSB1 --set position.gps_mode 2
meshtastic --port /dev/ttyUSB1 --set position.gps_enabled False
meshtastic --port /dev/ttyUSB1 --set position.gps_update_interval 300
meshtastic --port /dev/ttyUSB1 --setlat 45.126 --setlon -93.488 --setalt 1

Google will provide very precise coordinates but keeping 3 to 4 places of precision is plenty. One key thing to remember is that, despite what the command line help will tell you, you should set the altitude to something other than nothing or 0. You can provide a proper altitude in meters above sea level or simply setting it to 1 will suffice. Depending on your setup, you may not need to specify the port. I show my port for reference as the Pi the node is connected to has other USB devices attached.

After configuration, your node will begin to advertise its position as often as you configured it to using the gps_update_interval value. You can modify this to suit your network.

Bonus content

Keeping with our scripted methods of managing a Meshtastic node, here is a bit of bonus content. I also set a name for my static node so it is easier to identify consistently on the network. If you ever need to factory reset your node and want to set the name again (if you don’t have the config saved or whatever) then this simple script will help:

#!/bin/bash

meshtastic --port /dev/ttyUSB1 --set-owner "MOONBASE" --set-owner-short "R2D2"

This will set the name of your node easily. You can combine these steps into a larger script to help maintain your node more easily.

Flux, or FluxCD, is a “set of continuous and progressive delivery solutions for Kubernetes that are open and extensible” and is my preferred way to do “GitOps” in my Kubernetes clusters. I like Flux because it handles Helm extremely well (I’m a big fan of Helm) and allows me to have a simple fallback if something goes wrong. In this post, I will go through the process of installing flux, k3s that can be used for testing and then creating a Flux project that adopts Flux’s documented monorepo design. I have also published a copy of the work detailed here to Github so you can use as a working starter for your own project.

Continue reading

I previously touched on how I use CarPlay and I promised to provide some details on how I configure and use Home Assistant with CarPlay. For this to work, you must have the Home Assistant companion app installed from the App Store. Also, although I will not directly discuss the Android based app and Android Auto, it is my understanding that all of this is the same or very similar on that platform. Once the companion app is installed, Home Assistant will be shown as an icon on your car display. Opening the app will show you some (configurable) options include one for Quick Access. The Quick Access is where I am concentrating today.

My personal use case for how to use Home Assistant through CarPlay is, while limited, a huge quality of life improvement. I have also previously discussed the Rage Against the Garage Door Opener (RATGDO) device which allows me to tie my Chamberlain based garage door openers into Home Assistant. The CarPlay integration is huge because it allows me to control the garage doors extremely reliably unlike when I use the official remote. My house is wrapped in foil lined insulation as well as metal siding which greatly attenuates the RF signal from the remote leading to some very frustrating moments trying to get doors to open or close. As long as my phone has an internet connect, I can see the status of and control both garage doors on the house without issue.

Out of the box, you will see four icons across the top of the screen when you start Home Assistant. Personally, I find the default setup to be cumbersome and confusing but that would be more about how I have my Home Assistant configured than anything.

Let’s setup a Quick Action. To get started, first open the companion app and find settings. Then open CarPlay (or Android Auto)

screenshot of the CarPlay screen editor for home assistant

You can use the Tabs fly out to configure what tabs appear on your car display and in what order. To add an item to Quick Actions tap on Add item.

Here is where you can add specific entities, scripts, scenes or iOS Actions. iOS Actions is a deprecated way of adding items to CarPlay and unless you specifically need to have actions for your iOS device, I would avoid setting them up as it requires a lot of extra steps. For my use case, I simply want to have quick access to my garage doors so I am adding those entities directly by searching for the name of the entity.

a search field filled in with garage showing some results that match

This is where it can be tricky because a number of entities can have the same name but be different resources in Home Assistant. In fact, it took me a bit of trial and error to find that I wanted to add “Dustin’s Garage Door” that had the “curtain” icon. This entity, with the oddly chosen icon, is the correct one to control the door. On this screen, you can also customize what the icon color will be as well is if you want to require confirmation before performing the action.

screenshot of iOS companion app showing the name of the item being added. The name of the item is dustin's garage door

After making your selections tap on add. Once added, save your settings and the next time you connect to CarPlay you will have access to your chosen entities. Below is a screenshot showing that I can see the status of my door as well as control it by simply tapping on it.

screenshot of CarPlay showing 3 items, two garage doors and one garage light

You can add any entity, script or scene to quick actions and as many as you are willing to scroll the screen through. Having Home Assistant available like this in my car has been a big quality of life improvement and I imagine anyone that has remote locks or other automations will appreciate being able to check on the status of and control those items right there on the radio.

In a previous post, I detailed the audio upgrade I did on my 2015 Mazda 6, where I replaced the stock radio with a new Sony unit that featured CarPlay and Android Auto. Today I am talking about the ways that I am getting the most out of CarPlay.

There were several reasons I wanted to upgrade the stock radio in my car to something that had CarPlay, and while I knew that CarPlay would provide a better experience, CarPlay has been far better than I imagined. The stock radio in my model-year Mazda did not have maps and had a call/texting experience that was basically unusable. The Bluetooth system was, while usable, also slow and just overall poorly executed. CarPlay, on the other hand, continues to impress me with how low-friction the experience really is. Text messages arrive and are read immediately while perfectly ducking or pausing the audio of whatever is playing. Voice commands work extremely well and are very rarely misinterpreted. Phone calls also flow into the system very well, pausing the music as expected and resuming music again when the call is over. I simply cannot explain adequately enough how good the experience is; it is something you must experience. On the surface, this sounds like what basically any stock radio does in a modern car (sans CarPlay), but it is so much smoother than I have seen before. And, based on input from a friend of mine, Android Auto is nearly identical in (as a baseline) to CarPlay in its ability to provide a seamless and well-executed experience.

Outside of the core CarPlay experience, there are two apps I want to specifically bring to light. They are Plexamp and Home Assistant. These two apps are definitely niche, as not everyone collects music and stores it on Plex. Most people are probably using a streaming service, and not everyone is running Home Assistant. However, both apps have proven indispensable.

Plexamp

First, Plexamp. Plexamp, which I have written about in the past, is software that connects to a Plex Server instance with a focus on music playback. This means Plexamp offers a more streamlined music handling experience, including easier navigation, larger cover art display, gapless playback and a lot more. These features alone make Plexamp a great music player, but what really makes it special is the inclusion of an in-car experience through CarPlay (or Android Auto). With Plexamp, I am able to rip my CD collection and make it available wherever I have an Internet connection. Alternatively, I can download albums locally to my phone and play music offline. While other streaming services exist, and I am in fact a Spotify subscriber, I prefer Plexamp in my car because I have found it is generally better at remembering what I was listening to and resuming playback whenever I get into my car. Spotify remains my preferred way to discover new music, and I do sometimes use it in the car. I just find Plexamp to be a better experience overall.

Unlike the main Plex application, Plexamp requires a Plex Pass, which is an added cost on top of the hardware and storage required to run Plex and store your music.

Home Assistant

Home Assistant is open source home automation software that I have used for years. Home Assistant is definitely a “you get what you put into it” type of platform. While it can tie together a lot of different home automation tools, and a lot of progress has been made in making it more user-friendly, some aspects of it can be a bit cumbersome. Case in point, using Home Assistant via CarPlay leans a bit more on the cumbersome side of the equation, but with a bit of effort, there is some great stuff to be done here. How I am leveraging Home Assistant in CarPlay is by creating actions that allow me to control my garage doors. In a previous post I covered Rage Against the Garage Door Opener and this takes it a step further by allowing me to control the door using a soft button on my screen. This completely solved the range issues I was having with the original controller, and it allows me to double-check the status of the door easily. Below is a screenshot of the “Quick access” interface of Home Assistant. In the app, this is called “Actions.” In a future post, I will go into detail on how these are done as it is not immediately obvious.

Screenshot of Home Assistant’s CarPlay interface

I hope you find how I use CarPlay interesting and I will expand on this more in the future, particularly how Home Assistant can be used from within the car.

Computer professionals all know that secrets like API keys and passwords for services must be kept safe, but it isn’t always clear how to do so in a way that isn’t overly cumbersome. In this post, I am going to go through how I achieve this on macOS using GnuPG. I’m using GnuPG because I use both macOS and Linux on a regular basis. I also share my dot files across systems and GnuPG is the most cross platform option available that I am aware of. Although the solution I am using is cross platform, I am describing how to set this up using a Mac.

For this solution, I am leveraging a number of tools, which I’ve listed below. I assume that if you are the sort of person that has need for API tokens in your shell, you are likely also using brew. Here is what you want:

  • GPG Suite – This is optional but highly recommended. It provides a nice GUI for interacting with GPG and, more importantly it provides a way to tie your GPG passphrase to your Apple Key Chain to unlock it. This makes everything much smoother.
  • GPG – brew install gpg provides the command line tools you will need to manage your passwords or API tokens
  • pass – brew install pass provides the command line password tool.

Initial Setup

If you have not used GPG before then there are a few steps you need to take to get things setup.

IMPORTANT: If you are going to use GPG Suite then you will want to start the initial setup using GPG Keychain. Doing so will ensure the gpg command line tool can also see the key(s) you create. If you start with GPG on the command line, or were already using it, you will want to delete all of the .conf files in ~/.gnupg so that the command line client and GPG Keychain are working together.

Using GPG Keychain is an added bonus because it allows you to store your GPG credentials in the Apple Keychain. The Apple Keychain is unlocked whenever you log into your Mac. It isn’t necessary, but it is convenient.

Once you have created your GPG key you can initialize your pass database. First, get the ID of your GPG key. You can use gpg --list-private-keys and get a list. The value you are looking for will be a set of random characters. Then, initialize your pass database with the command below, replacing the ID with your key’s ID:

pass init 21D62AA0B018951161C3CC46E94469CDDCA62DF0

You will get a message that your password store has been initialized. There are other ways to initialize your pass database like storing it in git. You can read more at https://www.passwordstore.org

Adding a secret value to pass

Adding a value to your pass database is simple. Run:

pass insert key

key is the name of the secret you want to store. Press enter and then put in the value. You can organize your keys however you want by separating them using / like a directory separator.

Using the secret value

Using the secret value is equally simple. Since your KeyChain is unlocked when you sign into your computer you should have no issues retrieving the value in a similar way as adding it. Simply use the following command to get the value, adjust the command for your use case:

pass show key

Again, key is the secret you want to retrieve.

Putting it all together

This is great but we can make this more convenient by adding this to our shell startup scripts. On my system, .bash_profile and .bashrc are both processed. In my .base_profile I have added the following to get secret values from pass and assign them environment variables that various programs I use use in order to connect to services. Continuing my example of working against Proxmox, I have entered this into my .base_profile:

export PROXMOX_PASSWORD=$(pass show proxmox_password)

Since I am using GPG Suite, my GPG passphrase is loaded from my Mac’s Key Chain system once I have saved the pass phrase to it (you are asked the first time you decrypt a value). This way, my start up scripts do not contain any sensitive information and my environment is built from securely stored values.

Either around the time I got my brakes replaced, or while I had the battery disconnected to install the new radio, my transmission seemed to pick up a bad habit. Under 35 mph, pressing the brakes would often result in an aggressive downshift making it feel like you pressed the brake pedal even harder. For the most part, this is expected behavior for Mazda’s Skyactiv transmission, but it shouldn’t be so jarring. The video embedded here describes a procedure to tell the car to initiate a relearning or calibration process for the transmission that can help in some cases. I was able to get my car to run the calibration without issue, and while I can say it definitely caused a change in behavior, I can’t say it fixed the harsh downshift 100% of the time. It still happens but much more rarely now.

If you have even a passing concern about the way your Skyactiv Mazda transmission is behaving, this is a very easy step you can try first. The channel is filled with a lot of information and is also worth watching.

breville barista express machine

For about a year I have been making espresso based drinks at home. Coffee, and coffee based drinks, is not something I got interested in until after Covid but my appreciation of it has grown over the years to the point where I found it was better financially to make it at home than buy it daily from a local shop. In this post I am going to discuss the equipment and accessories I have found success with and why you may or may not want to do the same at home. I am not going to get into how to use this equipment as there is a lot of content on YouTube to choose from. One of the best is James Hoffman.

The drinks I make are mostly mochas and occasional lattes, both hot and iced.

Major Equipment

Cutting right to the chase, I went with a Breville Barista Express. I did a lot of research at the time and I wanted to be sure that if I didn’t like making espresso at home, it wasn’t because I selected bad equipment. The Breville seemed to be well regarded for a home machine that had a built in grinder. It is the right size, I liked the look of it and it is capable of making excellent espresso based drinks. Having the built in grinder was a plus for me because I have limited space available.

Pros of this model include:

  • built in grinder works well
  • easy to fill hopper and water tank
  • easy to empty water tray
  • brew head and steam system heat up quickly
  • programmable volumetric controls
  • double and single shot baskets as well as pressurized baskets for pre-ground coffee (though I don’t recommend using pre-ground)
  • includes accessories like tamper and milk jug

Cons of this model include:

  • the steam wand is not cool touch
  • being a single boiler means the steam is slow

Bottom line, this is a great machine for a beginner or at home barista that wants to get everything covered with a single purchase. You can technically get just this, your choice of beans and get started. That said, if I were to start over I would consider a dual boiler machine, even if that means an external grinder, just so that steam performance is better.

Accessories

While the Breville includes everything you really need to get started, I wanted to further improve my enjoyment of the process. Here I’ll go through the accessories I use.

Milk Pitcher

Having a milk pitcher that includes measurements right inside the pitcher is very helpful. The pitcher included with the Breville is unmarked so you are left guessing how much milk to use. There are many copy cat pitchers on Amazon, but I am using this “Adorever” one.

Thermometer

Getting a consistent milk temperature is hard to do without a thermometer. This one with a clip and little zones telling you the ideal temperatures is easy to use and works perfectly. Clip it to the side of the milk pitcher while frothing the milk.

Funnel

I find using a funnel an absolute must if you want to keep your area clean. Even without the funnel you’re going to make a small mess but the funnel makes it much easier to keep the grounds in the basket. I selected this funnel because it fits the Breville portafilter and the grinder spout perfect. While I am linking to the stainless steel version it is no longer the only version available. The aluminum one will work just as well and costs less, the important part is the funnel makes it much easier to get the grounds from the grinder and into the basket.

Puck Screen

Venturing into “less necessary” territory we have a puck screen. The linked to item is designed to fit the size of portafilter the Breville uses, at 54mm. A puck screen goes on top of the tamped coffee grounds and primarily works to keep the water screen of the group head clean longer. In my opinion, it has rather debatable benefits beyond that.

WDT Tool

The Weiss Distribution Technique tool is another item that has debatable benefits but I do find it makes it a lot easier to tamp the grounds so that they are more even. I use the tool to help ensure the grounds are spread more evenly in the basket though you may find a leveling distribution tool works better.

Basket Removal Tool

I have found that removing the basket in the Breville portafilter to be a bit on the difficult side. This little tool makes it much easier to remove the basket for cleaning.

Scale

Having a scale is a must for getting your espresso shot setup properly. Without a scale you are really flying blind and hoping for the best. Each brand and type of bean will require you to setup the machine just a bit differently to ensure you are getting the right flavor from the coffee. Using a scale helps ensure all your ratios are correct. This link is for the scale I have but any scale that has a fast response time and a built in timer will work just as well.

Bottle Pourers

If you don’t want to use a pump for flavors you might consider some pourers to make it all easier. This pack includes a good number of pourers that work well with most syrup bottles. For syrups and sauces, I use mostly Monin but Torani can be easier to find in stores.

Measuring Shot Glass

I use two different, small measuring cups during my brew process. The first one is a 3oz shot glass with measuring lines. This shot glass allows me to measure out syrups and sauces with ease to ensure I get just the right ratios. For the espresso shot I use a small cup that includes measuring lines that is still wide enough to catch the output from the portafilter spout. This helps me see what the liquid output is.

Finishing Up

Ok, that was actually more than I thought it would be. Again, not everything here is necessary but I find these products help make the process of brewing espresso easier and more enjoyable!

Disclaimer: This post contains Amazon Affiliate links. If you purchase something from Amazon using a link I provided I will likely receive a commission for that sale. This helps support the site!

One of the more frustrating changes in the past year was the Chamberlain group removing access to their APIs for third parties. This meant I could no longer see the status of my garage door openers or control them using Home Assistant, which is my preferred method for doing home automation. In this post, I am going to discuss how I got around this using a device called “ratgdo.”

Ratgdo is a micro-controller based device created by Paul Wieland to control “virtually any residential Chamberlain or Liftmaster manufactured garage door opener and also offers basic support for other brands which use dry contacts to control the door.” The device is a custom made PCB that connects to the terminals on the garage door opener and, using various protocols like esphome, Apple Homekit, MQTT and more, allow you to see the status of the door and control it.

Setting up the device was quite simple. I started by connecting it to my computer using the included USB cable and visited the firmware installation page. Since I am using Home Assistant I opted for the esphome method. After selecting my board I clicked the connect button and it flashed the device with the proper firmware. After that, Home Assistant saw the new esphome device and offered to set it up. From there I setup the buttons and integrations I wanted and I was done.

If you are looking for a way to add some smarts to your garage door opener the ratgdo device is a fantastic way to do it and I highly recommend it. The prebuilt PCB costs about $45 (as of this writing) but is a quick and easy way to get going without a lot of fuss.