<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://andrewbfang.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://andrewbfang.com/blog/" rel="alternate" type="text/html" hreflang="en" /><updated>2023-02-05T19:59:34+00:00</updated><id>https://andrewbfang.com/blog/feed.xml</id><title type="html">DIY with Andrew</title><subtitle>Hi! I'm Andrew Fang, and I write about all kinds of DIY projects based on needs I have encountered in my personal life. This blog serves as an archive of the various tips and tricks I have come across from my extensive Googling.</subtitle><author><name>Andrew Fang</name></author><entry><title type="html">How to control Rinnai water heater</title><link href="https://andrewbfang.com/blog/how-to-control-rinnai-water-heater/" rel="alternate" type="text/html" title="How to control Rinnai water heater" /><published>2023-02-05T17:41:42+00:00</published><updated>2023-02-05T17:41:42+00:00</updated><id>https://andrewbfang.com/blog/how-to-control-rinnai-water-heater</id><content type="html" xml:base="https://andrewbfang.com/blog/how-to-control-rinnai-water-heater/">&lt;p&gt;Recirculate hot water via smart home commands
&lt;!--more--&gt;&lt;/p&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@type&quot;: &quot;HowTo&quot;,
    &quot;name&quot;: &quot;How to control Rinnai water heater&quot;,
    &quot;image&quot;: {
      &quot;@type&quot;: &quot;ImageObject&quot;,
      &quot;url&quot;: &quot;/blog/assets/images/2023-02-05/alexa.jpeg&quot;
    },
    &quot;estimatedCost&quot;: {
      &quot;@type&quot;: &quot;MonetaryAmount&quot;,
      &quot;currency&quot;: &quot;USD&quot;,
      &quot;value&quot;: &quot;25&quot;
    },
    &quot;tool&quot;: [
      {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Echo&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Rinnai tankless water heater&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Rinnai wifi module&quot;
      }
    ],
    &quot;step&quot;: [
      {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Install the Control R Skill&quot;,
        &quot;url&quot;: &quot;/#using-alexa&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Install the Rinnai Control R Alexa skill&quot;
        }]
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Configure a custom routine&quot;,
        &quot;url&quot;: &quot;/#using-alexa&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Set up a custom routine so that you can trigger the skill with a shorter phrase.&quot;
        }]
      }],
    &quot;totalTime&quot;: &quot;PT59M&quot;
    }
  &lt;/script&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;&lt;em&gt;Disclosure: This blog is a participant in the Amazon Services LLC Associates Program as well as other affiliate programs, designed to provide a means for me to earn fees by linking to Amazon and affiliated sites at no extra cost to you. Please see the full &lt;a href=&quot;https://andrewbfang.com/affiliateDisclosure.html&quot;&gt;disclosure&lt;/a&gt; for more details.&lt;/em&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-needed&quot;&gt;Time needed&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&amp;lt; 10 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/40yzdhG&quot;&gt;Amazon Echo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Rinnai tankless water heater with &lt;a href=&quot;https://amzn.to/3X6SQut&quot;&gt;wifi module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-story&quot;&gt;The story&lt;/h2&gt;

&lt;p&gt;I have a Rinnai tankless water heater that can recirculate water when I immediately need hot water. It’s got a &lt;a href=&quot;https://amzn.to/3X6SQut&quot;&gt;wifi module&lt;/a&gt; hooked in which lets me recirculate water via the app or a &lt;a href=&quot;https://amzn.to/3DKfemm&quot;&gt;push button&lt;/a&gt;. The button works fine, but I only have one of them and I couldn’t justify spending $60 on another button. The app also works most of the time, but it’s a little cumbersome to have to open the app and then navigate to the recirculate screen.&lt;/p&gt;

&lt;h3 id=&quot;using-alexa&quot;&gt;Using Alexa&lt;/h3&gt;

&lt;p&gt;I found that Rinnai actually has an Alexa skill. I have an &lt;a href=&quot;https://amzn.to/40yzdhG&quot;&gt;Amazon Echo&lt;/a&gt; sitting around, so I set this up. (The Echo dot is also cheaper than the Rinnai button, and can do way more). In the Alexa App, go to the “more” tab, tap on “Skills &amp;amp; Games”, and search for Rinnai. Activate that skill and log in with your Rinnai account.&lt;/p&gt;

&lt;p&gt;However, after setting it up, I realized that I had to say “Alexa, ask control r for hot water” which was a bit awkward. I just want to say “Alexa, hot water”. Turns out, there is a way to do this!&lt;/p&gt;

&lt;p&gt;Back in the Alexa app, go to Routines, and create a new routine that triggers when you say “Alexa, hot water” (or whatever you want). Then, add a custom action with the phrase “Alexa, ask control r for hot water”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2023-02-05/alexa.jpeg&quot; alt=&quot;alexa routine&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now, you can just say “Alexa, hot water” (or whatever you set), and it will trigger the Rinnai Control R skill!&lt;/p&gt;

&lt;div id=&quot;amzn-assoc-ad-d2735add-9dd8-4698-bd9d-ee7e2036e217&quot;&gt;&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&amp;amp;adInstanceId=d2735add-9dd8-4698-bd9d-ee7e2036e217&quot;&gt;&lt;/script&gt;</content><author><name>Andrew Fang</name></author><category term="rinnai," /><category term="water" /><category term="heater," /><category term="smart" /><category term="home," /><category term="alexa" /><summary type="html">Recirculate hot water via smart home commands</summary></entry><entry><title type="html">How to control Tesla with Siri (Homebridge edition)</title><link href="https://andrewbfang.com/blog/how-to-control-tesla-with-siri-homebridge/" rel="alternate" type="text/html" title="How to control Tesla with Siri (Homebridge edition)" /><published>2023-01-04T03:41:42+00:00</published><updated>2023-01-04T03:41:42+00:00</updated><id>https://andrewbfang.com/blog/how-to-control-tesla-with-siri-homebridge</id><content type="html" xml:base="https://andrewbfang.com/blog/how-to-control-tesla-with-siri-homebridge/">&lt;p&gt;Performing Tesla controls (such as opening the trunk) with Siri via Homebridge
&lt;!--more--&gt;&lt;/p&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@type&quot;: &quot;HowTo&quot;,
    &quot;name&quot;: &quot;How to control Tesla with Siri (Homebridge edition)&quot;,
    &quot;image&quot;: {
      &quot;@type&quot;: &quot;ImageObject&quot;,
      &quot;url&quot;: &quot;/blog/assets/images/2022-07-13/tesla_widget.png&quot;
    },
    &quot;estimatedCost&quot;: {
      &quot;@type&quot;: &quot;MonetaryAmount&quot;,
      &quot;currency&quot;: &quot;USD&quot;,
      &quot;value&quot;: &quot;35&quot;
    },
    &quot;tool&quot;: [
      {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;iPhone&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Tesla&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Raspberry Pi&quot;
      }
    ],
    &quot;step&quot;: [
      {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Set up Homebridge&quot;,
        &quot;url&quot;: &quot;/#homebridge&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Set up an instance of Homebridge.&quot;
        }]
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Configure Homebridge with the Tesla plugin&quot;,
        &quot;url&quot;: &quot;/#homebridge-tesla-configuration&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Configure Homebridge to talk to Tesla.&quot;
        }]
      }],
    &quot;totalTime&quot;: &quot;PT59M&quot;
    }
  &lt;/script&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;&lt;em&gt;Disclosure: This blog is a participant in the Amazon Services LLC Associates Program as well as other affiliate programs, designed to provide a means for me to earn fees by linking to Amazon and affiliated sites at no extra cost to you. Please see the full &lt;a href=&quot;https://andrewbfang.com/affiliateDisclosure.html&quot;&gt;disclosure&lt;/a&gt; for more details.&lt;/em&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-needed&quot;&gt;Time needed&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&amp;lt; 10 minutes (if you already have a running instance of Homebridge)&lt;/li&gt;
  &lt;li&gt;Otherwise, 1 hour or more to include the time it takes to set up Homebridge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;iPhone with &lt;a href=&quot;https://apps.apple.com/app/id1552058613&quot;&gt;Auth app for Tesla&lt;/a&gt; installed&lt;/li&gt;
  &lt;li&gt;A Tesla car (&lt;a href=&quot;https://ts.la/andrew11282&quot;&gt;Don’t have one?&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3iibHnP&quot;&gt;Raspberry pi 3B or better&lt;/a&gt; or machine running Homebridge. Note: Raspberry Pi’s have gone up a lot in price in 2022 due to the chip shortage. If you’re really lucky, you can find one from an authorized seller via a redirect from https://www.raspberrypi.com/products/, but lately it’s been sold out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-story&quot;&gt;The story&lt;/h2&gt;

&lt;p&gt;The story is the same as my &lt;a href=&quot;https://andrewbfang.com/blog/how-to-control-tesla-with-siri/&quot;&gt;previous post&lt;/a&gt;. I just want to control my car with Siri – either from my phone or (ideally) from my watch. The method with Shortcuts had its issues – for me it was often unreliable, and it never worked from my watch. After a while, I just stopped using it.&lt;/p&gt;

&lt;p&gt;Earlier last year, I dug out my Raspberry Pi and installed &lt;a href=&quot;https://homebridge.io&quot;&gt;Homebridge&lt;/a&gt; to tie all my smart home devices together. Well, it turns out the creator of Homebridge wrote a &lt;a href=&quot;https://www.npmjs.com/package/homebridge-tesla&quot;&gt;Tesla plugin&lt;/a&gt; to make Teslas appear as smart home accessories. This exposes various Tesla controls (locking/unlocking the car, opening/closing trunk, opening the frunk) as Home controls, which are understood by Siri. This method works &lt;em&gt;a lot&lt;/em&gt; better than the Shortcuts method, and I’ve been pretty impressed. If you’re wondering, your car doesn’t need to be connected to your home wifi as long as you have a hub (for iOS 16+ this requires an &lt;a href=&quot;https://amzn.to/3XdxUlP&quot;&gt;Apple TV&lt;/a&gt; or a &lt;a href=&quot;https://www.apple.com/homepod-mini/&quot;&gt;Homepod&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;homebridge&quot;&gt;Homebridge&lt;/h3&gt;

&lt;p&gt;Homebridge is pretty easy to install on most computing devices.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/homebridge/homebridge-raspbian-image/wiki/Getting-Started&quot;&gt;Homebridge Raspbian Image&lt;/a&gt; (if you’re willing to dedicate your RaspberryPi solely to Homebridge)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian&quot;&gt;RaspberryPi OS&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-macOS&quot;&gt;MacOS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Windows-10-Using-Hyper-V&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/oznu/docker-homebridge&quot;&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alternatively, you can spend money and just buy a machine that comes preinstalled with Homebridge – &lt;a href=&quot;https://hoobs.com&quot;&gt;HOOBS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m not going to walk through the whole Homebridge set up process (maybe I’ll do an article about this one day, but there’s lots of guides and tutorials out there already). Going forward, I’ll assume that you have Homebridge set up.&lt;/p&gt;

&lt;p&gt;Simply install the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;homebridge-tesla&lt;/code&gt; plugin (as you would with any other plugin).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2023-01-03/homebridge-tesla.png&quot; alt=&quot;homebridge tesla&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;homebridge-tesla-configuration&quot;&gt;Homebridge Tesla configuration&lt;/h3&gt;

&lt;p&gt;The plugin now needs to be configured with the right details to access your car. Go into the plugin settings, and set three things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Name – this is the name of your smart home “room”. I just named mine “Tesla”.&lt;/li&gt;
  &lt;li&gt;VIN – you can get at the very bottom of your Tesla app. The plugin uses this as an identifier, to send the command control to the right vehicle.&lt;/li&gt;
  &lt;li&gt;Tesla API Refresh Token – This is what the plugin uses for authentication. The easiest way to generate this is using &lt;a href=&quot;https://apps.apple.com/app/id1552058613&quot;&gt;Auth app for Tesla&lt;/a&gt;. After signing in via Tesla’s single sign on, the app will spit out a long alphanumeric code – copy this into the plugin config.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, just restart Homebridge and after some initial configuration, you should see several Tesla controls in your &lt;a href=&quot;https://www.apple.com/home-app/&quot;&gt;Apple Home&lt;/a&gt; app!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note: As mentioned in the &lt;a href=&quot;https://github.com/nfarina/homebridge-tesla&quot;&gt;README&lt;/a&gt;, there is a bug in iOS 16 that causes all the Home accessories to be named the same. To remediate this problem, go into each Home tile and change it’s name to whatever you want.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, you should have something like this!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2023-01-03/tesla-home.jpeg&quot; alt=&quot;tesla Apple home&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Also mentioned in the &lt;a href=&quot;https://github.com/nfarina/homebridge-tesla&quot;&gt;README&lt;/a&gt;, you’ll get the default services enabled:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“Unlock the car doors” (My Siri gets confused by this, so I gave the car doors a special name instead.)&lt;/li&gt;
  &lt;li&gt;“Open the trunk” (I found that “Unlock the trunk” and “Lock the trunk” is more reliable. Note that since the trunk is exposed as a smart home lock, “unlock” is mapped to opening the trunk and “unlock” is mapped to closing the trunk).&lt;/li&gt;
  &lt;li&gt;“Open the front trunk” (Same note as above, “Unlock the front trunk” is more reliable for me.)&lt;/li&gt;
  &lt;li&gt;“Set the climate to 72 degrees” (turns on climate control if off)&lt;/li&gt;
  &lt;li&gt;“Turn on sentry mode”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also configure the plugin to enable these additional services:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“Set the charge limit to 80%”&lt;/li&gt;
  &lt;li&gt;“Set the charging amps to 24”&lt;/li&gt;
  &lt;li&gt;“Turn on the steering wheel heater”&lt;/li&gt;
  &lt;li&gt;“Turn on the defrost”&lt;/li&gt;
  &lt;li&gt;“Open the charge port”&lt;/li&gt;
  &lt;li&gt;“Turn on the charger” (begins charging even if outside schedule)&lt;/li&gt;
  &lt;li&gt;“Turn on the starter” (enables keyless driving)&lt;/li&gt;
  &lt;li&gt;“Open HomeLink” (opens your garage or other door via HomeLink in supported vehicles)&lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;amzn-assoc-ad-7faf9c20-cca0-4ec1-b6ec-98a3c0c24342&quot;&gt;&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&amp;amp;adInstanceId=7faf9c20-cca0-4ec1-b6ec-98a3c0c24342&quot;&gt;&lt;/script&gt;</content><author><name>Andrew Fang</name></author><category term="tesla," /><category term="siri," /><category term="automation," /><category term="homebridge" /><summary type="html">Performing Tesla controls (such as opening the trunk) with Siri via Homebridge</summary></entry><entry><title type="html">How to epoxy garage flooring</title><link href="https://andrewbfang.com/blog/how-to-epoxy-garage-flooring/" rel="alternate" type="text/html" title="How to epoxy garage flooring" /><published>2022-07-19T01:55:42+00:00</published><updated>2022-07-19T01:55:42+00:00</updated><id>https://andrewbfang.com/blog/how-to-epoxy-garage-flooring</id><content type="html" xml:base="https://andrewbfang.com/blog/how-to-epoxy-garage-flooring/">&lt;p&gt;Painting on a layer of epoxy to the floor of a garage to make it pretty and easy to clean
&lt;!--more--&gt;&lt;/p&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@type&quot;: &quot;HowTo&quot;,
    &quot;name&quot;: &quot;How to epoxy garage flooring&quot;,
    &quot;image&quot;: {
      &quot;@type&quot;: &quot;ImageObject&quot;,
      &quot;url&quot;: &quot;/blog/assets/images/2022-07-18/epoxy_finished.jpg&quot;
    },
    &quot;estimatedCost&quot;: {
      &quot;@type&quot;: &quot;MonetaryAmount&quot;,
      &quot;currency&quot;: &quot;USD&quot;,
      &quot;value&quot;: &quot;250&quot;
    },
    &quot;supply&quot;: [
      {
        &quot;@type&quot;: &quot;HowToSupply&quot;,
        &quot;name&quot;: &quot;EpoxyShield Garage Floor Coating Kit&quot;
      },
      {
        &quot;@type&quot;: &quot;HowToSupply&quot;,
        &quot;name&quot;: &quot;Epoxy primer&quot;
      },{
        &quot;@type&quot;: &quot;HowToSupply&quot;,
        &quot;name&quot;: &quot;Concrete cleaning solution&quot;
      },{
        &quot;@type&quot;: &quot;HowToSupply&quot;,
        &quot;name&quot;: &quot;Painter's tape&quot;
      }
    ],
    &quot;tool&quot;: [
      {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Long handled squeegee&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Pressure washer&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Epoxy paint roller&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Broom&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Wire brush&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Bucket&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Hose&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Paint tray&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Small paint brush&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Paint roller&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Long handled paint roller frame&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Scissors&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Protective eyewear and gloves&quot;
      }
    ],
    &quot;step&quot;: [
      {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Prep and clean the floor&quot;,
        &quot;url&quot;: &quot;/#prep-and-clean-the-floor&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Empty the garage.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Sweep.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Clean the floor by pressure washing.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Use garage cleaning solution to scrub stains (such as that from oil). Scrape off any other gunk&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Cover the area with etching solution.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Scrub and rinse (3 times).&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Wait at least 24 hours.&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-18/cleaned.jpg&quot;
        }
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Repair&quot;,
        &quot;url&quot;: &quot;/#repair&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToTip&quot;,
          &quot;text&quot;: &quot;This step can be skipped if you do not have any visible cracks.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Mix putty with a putty knife on cardboard.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Apply putty over cracks.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Wait at least 8 hours.&quot;
        }]
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Apply primer&quot;,
        &quot;url&quot;: &quot;/#apply-primer&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToTip&quot;,
          &quot;text&quot;: &quot;This step can be skipped if your concrete was not previously coated.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Paint the edges of the flooring with the primer.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Paint the rest of the flooring.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Wait at least 6 hours&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-18/primed.jpg&quot;
        }
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Apply epoxy&quot;,
        &quot;url&quot;: &quot;/#apply-epoxy&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Mix pouch.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Pour directly on flooring, use roller to spread out, trimming edges as you go along.&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Add chips&quot;
        },{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Wait 8-12 hours for foot traffic, 1 day for vehicles&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-18/epoxy_finished.jpg&quot;
        }
      }],
    &quot;totalTime&quot;: &quot;P4D&quot;
    }
  &lt;/script&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;&lt;em&gt;Disclosure: This blog is a participant in the Amazon Services LLC Associates Program as well as other affiliate programs, designed to provide a means for me to earn fees by linking to Amazon and affiliated sites at no extra cost to you. Please see the full &lt;a href=&quot;https://andrewbfang.com/affiliateDisclosure.html&quot;&gt;disclosure&lt;/a&gt; for more details.&lt;/em&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-needed&quot;&gt;Time needed&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;~2-4 days, around 1-2 hours each day&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3O9vfVq&quot;&gt;EpoxyShield Garage Floor Coating Kit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3zdXGNL&quot;&gt;Epoxy primer&lt;/a&gt; (optional)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3INl4Vu&quot;&gt;Patch and repair kit&lt;/a&gt; (optional)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3IJdHyr&quot;&gt;Concrete cleaning solution&lt;/a&gt; (optional)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3Pk7wn0&quot;&gt;Painter’s tape&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3cn8cJF&quot;&gt;Long handled squeegee&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3IJptbS&quot;&gt;Pressure washer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3RzXwY6&quot;&gt;Epoxy paint roller&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3B2wz9T&quot;&gt;Push Broom&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3uTBTsb&quot;&gt;Wire brush&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3zcet3G&quot;&gt;Paint tray&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3aRQb5D&quot;&gt;Small paint brush&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3O9Dj8N&quot;&gt;Paint roller&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3yMRF9o&quot;&gt;Paint roller frame&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3B2wz9T&quot;&gt;Paint roller extension rod&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bucket or old milk jug&lt;/li&gt;
  &lt;li&gt;Hose&lt;/li&gt;
  &lt;li&gt;Scissors&lt;/li&gt;
  &lt;li&gt;Protective eyewear&lt;/li&gt;
  &lt;li&gt;Gloves&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-story&quot;&gt;The story&lt;/h2&gt;

&lt;p&gt;Ever seen those speckled coated garage floorings in really nice homes?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/epoxy_finished.jpg&quot; alt=&quot;completed floor&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Not only are they more aesthetic, but coated garage floors are also easier to clean. To have this done professionally would cost thousands of dollars, but there are products like the &lt;a href=&quot;https://amzn.to/3O9vfVq&quot;&gt;Rust-Oleum EpoxyShield Garage Floor Coating Kit&lt;/a&gt;, which is what I used, that are much more affordable. The difference between DIY and professional coatings is usually how good it looks and how long they last. When done right, the look should be similar. I’ve yet to time-test the durability of the DIY solution, so keep that in mind when deciding whether to do it yourself. I ultimately chose to go down the DIY route and hope that the coating will last for years to come.&lt;/p&gt;

&lt;h3 id=&quot;prep-and-clean-the-floor&quot;&gt;Prep and clean the floor&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/step1-prep.jpg&quot; alt=&quot;step 1 - prep&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is the hardest and most time consuming part. First, empty the garage of everything so that every square inch of the flooring is accessible. I did this project right before I moved in, to take advantage of the opportunity when the garage would be empty. After the concrete floor is fully exposed, sweep thoroughly with a broom or a &lt;a href=&quot;https://amzn.to/3B2wz9T&quot;&gt;push broom&lt;/a&gt;. Next, wash the flooring. A hose might be enough, but I would recommend using a &lt;a href=&quot;https://amzn.to/3IJptbS&quot;&gt;pressure washer&lt;/a&gt;, especially if the garage has seen it’s share of action. If there are oil spots or other heavy stains, you might want to use some &lt;a href=&quot;https://amzn.to/3IJdHyr&quot;&gt;concrete cleaning solution&lt;/a&gt;. Pour the solution onto the stain either as is (or diluted if the stain is light), and let is soak for around 20 minutes, then scrub vigorously with a &lt;a href=&quot;https://amzn.to/3uTBTsb&quot;&gt;wire brush&lt;/a&gt;. Scrape off any other gunk that may be on the concrete. Rinse off the cleaner, and use the &lt;a href=&quot;https://amzn.to/3cn8cJF&quot;&gt;long handled squeegee&lt;/a&gt; to push the water out of the garage.&lt;/p&gt;

&lt;p&gt;Once the concrete if fully cleaned, it’s time to do the etching. Etching is a chemical process that opens the pores of the surface and allows the epoxy layer to better adhere to the concrete. There is a pack of powder included in the &lt;a href=&quot;https://amzn.to/3O9vfVq&quot;&gt;kit&lt;/a&gt; — this needs to be mixed with water to form the etching solution. A full bag mixes with 2 gallons of water. You can either get a large watering can to do this, but I just used an old milk jug and used half a bag at a time. Be sure to wear gloves for this. Working section by section, pour the solution on exposed concrete and use that &lt;a href=&quot;https://amzn.to/3uTBTsb&quot;&gt;wire brush&lt;/a&gt; to give it a good scrub. The area should fizz, and once the fizzing stops, rinse off the area with clean water while scrubbing the areas you etched. Scrub and rinse at least 3 times to make sure there’s no more solution left on the surface. Use the &lt;a href=&quot;https://amzn.to/3cn8cJF&quot;&gt;long handled squeegee&lt;/a&gt; again to make the floor as dry as possible.&lt;/p&gt;

&lt;p&gt;Wait 24 hours.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/cleaned.jpg&quot; alt=&quot;cleaned floor&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;repair&quot;&gt;Repair&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/step2-repair.jpg&quot; alt=&quot;step 2 - repair cracks&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This step is only necessary if you have cracks in your concrete. I skipped this step, but here are some insights based on some videos I’ve watched.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://amzn.to/3INl4Vu&quot;&gt;Rust-Oleum patch and repair kit&lt;/a&gt; is a 2 part epoxy that creates a solution stronger than concrete. Mix the two parts following the instructions (2 parts Base (b), 1 part Activator (a)) on a piece of cardboard. The epoxy will harden, so only mix what you will use in the next 10-20 minutes, and mix until the solution has a putty-like consistency. Spread the epoxy on cracks and use the putty knife to smooth the areas out.&lt;/p&gt;

&lt;p&gt;Wait 8 hours.&lt;/p&gt;

&lt;h3 id=&quot;apply-primer&quot;&gt;Apply Primer&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/step3-primer.jpg&quot; alt=&quot;step 3 - primer&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This step is only necessary if your garage floor was previously coated and you’re not working with bare concrete. Again, I skipped this step, but here are some insights.&lt;/p&gt;

&lt;p&gt;Before starting, use &lt;a href=&quot;https://amzn.to/3Pk7wn0&quot;&gt;painter’s tape&lt;/a&gt; to tape up any areas of the wall that touch areas of concrete that you will be painting.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://amzn.to/3zdXGNL&quot;&gt;Rust-Oleum floor primer&lt;/a&gt; can be used to allow the epoxy to bind to previously coated flooring. Stir the primer thoroughly, and then working in small sections, use a small brush to paint the edges of the garage. Make sure you start from the inside of the garage and work outwards so you avoid stepping on painted areas. Using a roller, roll the primer onto the rest of the flooring.&lt;/p&gt;

&lt;p&gt;Wait 6 hours.&lt;/p&gt;

&lt;h3 id=&quot;apply-epoxy&quot;&gt;Apply Epoxy&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/step4-epoxy.jpg&quot; alt=&quot;step 4 - apply epoxy&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you skipped the primer step above, make sure you use &lt;a href=&quot;https://amzn.to/3Pk7wn0&quot;&gt;painter’s tape&lt;/a&gt; to tape up any areas of the wall that touch areas of concrete that you will be painting.&lt;/p&gt;

&lt;p&gt;Some kits will come with a foam roller — mine did not, so I purchased an &lt;a href=&quot;https://amzn.to/3RzXwY6&quot;&gt;epoxy paint roller&lt;/a&gt; (note that the roller is meant specifically for epoxy, and will be more shed-resistant).&lt;/p&gt;

&lt;p&gt;Wearing protective gloves, mix both sides of the pouch provided in the &lt;a href=&quot;https://amzn.to/3O9vfVq&quot;&gt;kit&lt;/a&gt; and then burst the pouch by rolling side A into side B, and mix for another 2 minutes. You’ll have one hour to complete the project once the pouch has been mixed. Cut a little corner off the pouch to open, and then pour it directly onto the floor, in roughly 4 foot ribbons. Working in sections, trim the sides using a paint brush and roll out the epoxy. Work your way from the back of the garage, careful not to paint yourself into a corner. Once each section is complete, toss the decorative chips (make sure the paint is still wet when you do this). Leave a 1 foot section of epoxy without the chips so that you can evenly distribute the next section. Continue this until you’ve covered the whole garage.&lt;/p&gt;

&lt;p&gt;Wait 8-12 hours before foot traffic, 1-2 days before vehicle traffic.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-18/epoxy_finished.jpg&quot; alt=&quot;completed floor&quot; /&gt;&lt;/p&gt;

&lt;div id=&quot;amzn-assoc-ad-c297f70c-2f23-4024-951a-78d6540cc89d&quot;&gt;&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&amp;amp;adInstanceId=c297f70c-2f23-4024-951a-78d6540cc89d&quot;&gt;&lt;/script&gt;</content><author><name>Andrew Fang</name></author><category term="epoxy," /><category term="garage" /><category term="floor," /><category term="painting" /><summary type="html">Painting on a layer of epoxy to the floor of a garage to make it pretty and easy to clean</summary></entry><entry><title type="html">How to add an outlet to a light switch</title><link href="https://andrewbfang.com/blog/how-to-add-an-outlet-to-a-light-switch/" rel="alternate" type="text/html" title="How to add an outlet to a light switch" /><published>2022-07-17T01:55:42+00:00</published><updated>2022-07-17T01:55:42+00:00</updated><id>https://andrewbfang.com/blog/how-to-add-an-outlet-to-a-light-switch</id><content type="html" xml:base="https://andrewbfang.com/blog/how-to-add-an-outlet-to-a-light-switch/">&lt;p&gt;Changing out a light switch for a combination outlet and switch
&lt;!--more--&gt;&lt;/p&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@type&quot;: &quot;HowTo&quot;,
    &quot;name&quot;: &quot;How to add an outlet to a light switch&quot;,
    &quot;image&quot;: {
      &quot;@type&quot;: &quot;ImageObject&quot;,
      &quot;url&quot;: &quot;/blog/assets/images/2022-07-16/combination_switch_outlet.png&quot;
    },
    &quot;estimatedCost&quot;: {
      &quot;@type&quot;: &quot;MonetaryAmount&quot;,
      &quot;currency&quot;: &quot;USD&quot;,
      &quot;value&quot;: &quot;15&quot;
    },
    &quot;supply&quot;: [
      {
        &quot;@type&quot;: &quot;HowToSupply&quot;,
        &quot;name&quot;: &quot;combination switch and outlet&quot;
      }
    ],
    &quot;tool&quot;: [
      {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;screwdriver&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;needle nose plier&quot;
      },{
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;voltage tester&quot;
      }
    ],
    &quot;step&quot;: [
      {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Turn off the power&quot;,
        &quot;url&quot;: &quot;/#turn-off-the-power&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Turn off the power to the area.&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-16/breaker.jpg&quot;
        }
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Remove the existing switch&quot;,
        &quot;url&quot;: &quot;/#remove-the-existing-switch&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToTip&quot;,
          &quot;text&quot;: &quot;A needle nose plier might be useful for this step.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Carefully remove the existing switch.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Locate the hot, load, neutral, and ground wires.&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-16/exposed-wiring.jpg&quot;
        }
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Install the combination outlet and switch&quot;,
        &quot;url&quot;: &quot;/#install-the-combination-outlet-and-switch&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Depending on your preferred set up, wire in the new combination switch and outlet.&quot;
        }, {
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Secure the new outlet into the wall.&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-16/completed.png&quot;
        }
      }],
    &quot;totalTime&quot;: &quot;PT20M&quot;
    }
  &lt;/script&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;&lt;em&gt;Disclosure: This blog is a participant in the Amazon Services LLC Associates Program as well as other affiliate programs, designed to provide a means for me to earn fees by linking to Amazon and affiliated sites at no extra cost to you. Please see the full &lt;a href=&quot;https://andrewbfang.com/affiliateDisclosure.html&quot;&gt;disclosure&lt;/a&gt; for more details.&lt;/em&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-needed&quot;&gt;Time needed&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&amp;lt; 20 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Phillips-head and/or flathead screwdriver(s)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3PiQ5Ty&quot;&gt;Combination switch and outlet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3cah9FU&quot;&gt;Needle nose plier&lt;/a&gt; (optional, but helpful)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3IKr80R&quot;&gt;Voltage tester&lt;/a&gt; (optional, but helpful)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-story&quot;&gt;The story&lt;/h2&gt;
&lt;p&gt;Ever wish you had an outlet somewhere far from your existing outlets? In my case, I wanted to put my vacuum cleaner in the closet, and have it be able to charge while it was in there. Sure, I could call an electrician to lay new wiring, but who knows how much that would cost. (Or I could run an extension cord in, but that ruins the aesthetic of the house). Fortunately for me, I have an light switch in my closet, so I searched the web for a way to leverage that, and I came across the combination switch and outlet.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-16/combination_switch_outlet.png&quot; alt=&quot;Combination switch and outlet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The concept behind this is quite simple — instead of just having electricity go through the switch in order to control something (in my case, a light), the current also goes in to power the outlet.&lt;/p&gt;

&lt;h2 id=&quot;the-installation&quot;&gt;The installation&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚠️ WARNING: Touching a live wire &lt;em&gt;can&lt;/em&gt; kill or seriously injure you. If you are unsure or uncomfortable about any part of the installation process, contact an electrician.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You don’t need to be electrician to do this, but you should have some basic knowledge on how electrical wiring works.&lt;/p&gt;

&lt;h3 id=&quot;turn-off-the-power&quot;&gt;Turn off the power&lt;/h3&gt;

&lt;p&gt;Before we start, make sure you’ve turned off the power. Go to the circuit breaker and find the corresponding breaker to that part of your home (hopefully it’s labeled well, otherwise it’ll be trial-and-error — flip on the switch where you’re doing the installation and try each breaker switch until the power to the switch goes off).  Flip the circuit breaker switch off.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-16/breaker.jpg&quot; alt=&quot;circuit breaker&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;remove-the-existing-switch&quot;&gt;Remove the existing switch&lt;/h3&gt;

&lt;p&gt;Next, use your screwdriver to carefully remove the cover from your light switch. Unscrew the screws holding in the existing switch. Pull out the switch, and then take note of which is the load, which is the line. If it’s not labeled, you might need to get a voltage tester to verify (watch &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU?t=68&quot;&gt;this&lt;/a&gt; to see how). Separate the wiring from the old switch (having a pair of needle nose pliers is useful here), and ready the wires for installation. Note: you should have at least one hot, one load, one neutral, and one ground wire.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-16/exposed-wiring.jpg&quot; alt=&quot;Exposed wiring&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;install-the-combination-outlet-and-switch&quot;&gt;Install the combination outlet and switch&lt;/h3&gt;

&lt;p&gt;Now all we need to do is install the combination outlet and switch! &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU&quot;&gt;The video&lt;/a&gt; mentioned above is actually very useful to see the various ways the combination outlet and switch can be wired in. In my case, I wanted to have the outlet always on (so that the vacuum could charge), and the switch should maintain the same behavior (turns on/off the light). To do this, there’s two ways (depending on the number of wires that you have available). In my case, the wiring I had available was 1 hot (black), 1 load (black), 1 neutral (white), and 1 ground (bare copper). Wiring instructions for this configuration can be found at &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU?t=226&quot;&gt;3:46&lt;/a&gt;. The wiring looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Hot --&amp;gt; Black &quot;common&quot; screw
Load --&amp;gt; Brass &quot;A1&quot; screw
Neutral --&amp;gt; Silver &quot;N&quot; screw
Ground --&amp;gt; Green screw
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you have two hot wires and want to this same thing, but on separate feeds, start watching at &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU?t=381&quot;&gt;6:21&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Other ways of wiring this together are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The switch controls the outlet (switch flipped off == outlet off): start watching at &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU?t=168&quot;&gt;2:48&lt;/a&gt;. To be honest though, if you want to do this, I’d suggest just buying a switch like &lt;a href=&quot;https://amzn.to/3PwcvR9&quot;&gt;this one from Amazon&lt;/a&gt; or &lt;a href=&quot;https://amzn.to/3vj58oD&quot;&gt;this one from Kasa&lt;/a&gt;, and plug that into the outlet. You’ll be able to turn on/off the thing plugged into the outlet manually, with your phone, and with your smart home.&lt;/li&gt;
  &lt;li&gt;The switch controls both the light and the outlet (switch flipped off == light off AND outlet off), start watching at &lt;a href=&quot;https://youtu.be/gJpS0-5JQgU?t=305&quot;&gt;5:05&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have the wires connected to this new combination outlet and switch, screw this back into the wall and reattach the wall plate.&lt;/p&gt;

&lt;p&gt;Celebrate!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-16/completed.png&quot; alt=&quot;Installed vacuum and outlet&quot; /&gt;&lt;/p&gt;

&lt;div id=&quot;amzn-assoc-ad-b7678f07-35c9-4e5c-bfd4-ff67759f048f&quot;&gt;&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&amp;amp;adInstanceId=b7678f07-35c9-4e5c-bfd4-ff67759f048f&quot;&gt;&lt;/script&gt;</content><author><name>Andrew Fang</name></author><category term="electrical," /><category term="outlet," /><category term="switch" /><summary type="html">Changing out a light switch for a combination outlet and switch</summary></entry><entry><title type="html">How to control Tesla with Siri</title><link href="https://andrewbfang.com/blog/how-to-control-tesla-with-siri/" rel="alternate" type="text/html" title="How to control Tesla with Siri" /><published>2022-07-14T01:55:42+00:00</published><updated>2022-07-14T01:55:42+00:00</updated><id>https://andrewbfang.com/blog/how-to-control-tesla-with-siri</id><content type="html" xml:base="https://andrewbfang.com/blog/how-to-control-tesla-with-siri/">&lt;p&gt;Performing Tesla controls (such as opening the trunk) with Siri via Shortcuts
&lt;!--more--&gt;&lt;/p&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@type&quot;: &quot;HowTo&quot;,
    &quot;name&quot;: &quot;How to control Tesla with Siri&quot;,
    &quot;image&quot;: {
      &quot;@type&quot;: &quot;ImageObject&quot;,
      &quot;url&quot;: &quot;/blog/assets/images/2022-07-13/tesla_widget.png&quot;
    },
    &quot;estimatedCost&quot;: {
      &quot;@type&quot;: &quot;MonetaryAmount&quot;,
      &quot;currency&quot;: &quot;USD&quot;,
      &quot;value&quot;: &quot;0&quot;
    },
    &quot;tool&quot;: [
      {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;iPhone&quot;
      }, {
        &quot;@type&quot;: &quot;HowToTool&quot;,
        &quot;name&quot;: &quot;Tesla&quot;
      }
    ],
    &quot;step&quot;: [
      {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Authentication&quot;,
        &quot;url&quot;: &quot;/#authentication&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Provide authentication via a refresh token.&quot;
        }]
      }, {
        &quot;@type&quot;: &quot;HowToStep&quot;,
        &quot;name&quot;: &quot;Writing the Shortcut&quot;,
        &quot;url&quot;: &quot;/#writing-the-shortcut&quot;,
        &quot;itemListElement&quot;: [{
          &quot;@type&quot;: &quot;HowToDirection&quot;,
          &quot;text&quot;: &quot;Write / download the shortcut.&quot;
        }],
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;/blog/assets/images/2022-07-13/shortcut_trunk2.jpeg&quot;
        }
      }],
    &quot;totalTime&quot;: &quot;PT10M&quot;
    }
  &lt;/script&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;&lt;em&gt;Disclosure: This blog is a participant in the Amazon Services LLC Associates Program as well as other affiliate programs, designed to provide a means for me to earn fees by linking to Amazon and affiliated sites at no extra cost to you. Please see the full &lt;a href=&quot;https://andrewbfang.com/affiliateDisclosure.html&quot;&gt;disclosure&lt;/a&gt; for more details.&lt;/em&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-needed&quot;&gt;Time needed&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&amp;lt; 10 minutes (assuming you’re familiar with how Shortcuts work)&lt;/li&gt;
  &lt;li&gt;&amp;lt; 5 minutes if you want to skip over the story and go straight to the bottom to download the Shortcut&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;iPhone running iOS 13+, with &lt;a href=&quot;https://apps.apple.com/us/app/shortcuts/id915249334&quot;&gt;Shortcuts&lt;/a&gt; and &lt;a href=&quot;https://apps.apple.com/app/id1552058613&quot;&gt;Auth app for Tesla&lt;/a&gt; installed&lt;/li&gt;
  &lt;li&gt;A Tesla car (&lt;a href=&quot;https://ts.la/andrew11282&quot;&gt;Don’t have one?&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-story&quot;&gt;The story&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you have Homebridge or are interested in another (more reliable, at least for me) method of controlling your Tesla with siri, see &lt;a href=&quot;https://andrewbfang.com/blog/how-to-control-tesla-with-siri-homebridge/&quot;&gt;this post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of the features that’s missing from the default &lt;a href=&quot;https://apps.apple.com/us/app/tesla/id582007913&quot;&gt;Tesla&lt;/a&gt; app is the ability to make requests to the car via Siri. When I’m walking to the car with a cart full of groceries, I want to easily open the trunk without having to unlock my phone, open the Tesla app, then tap on the trunk button.&lt;/p&gt;

&lt;p&gt;As of late 2021, Tesla’s app now allows you to configure 4 quick actions, which also show up on the widget. These controls can be customized by long pressing on one of the four icons in the app. As you can see here, I’ve set mine to lock / hvac / trunk / frunk.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/images/2022-07-13/tesla_widget.png&quot; alt=&quot;tesla widget&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This isn’t bad, but there’s something to be said about being able to perform these actions without having to look at the screen. There are actually several apps out there that solve this problem, but they’re all paid apps. I went in search for a free solution.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href=&quot;https://apps.apple.com/us/app/shortcuts/id915249334&quot;&gt;Shortcuts&lt;/a&gt;. Introduced in iOS 13, Shortcuts lets you write custom workflows that can then be triggered by Siri, or even added as a widget on your home screen. People have done amazingly complex things via Shortcuts, and I actually found a wonderful &lt;a href=&quot;https://jordanmerrick.com/shortcuts/shortcuts-for-tesla/&quot;&gt;post&lt;/a&gt; by Jordan Merrick that showcases a bunch of shortcuts that do the exact things I want. I used this for a while, but recently, things seem to have stopped working (maybe because these Shortcuts use an unofficial Tesla API? 🤷🏻).&lt;/p&gt;

&lt;p&gt;So, I did some more Googling. I came across &lt;a href=&quot;https://tesla-info.com/guide/tesla-automation.php&quot;&gt;this article&lt;/a&gt; by tesla-info, which introduces a service written by the folks at tesla-info to invoke what is probably another unofficial Tesla API.&lt;/p&gt;

&lt;p&gt;Before I go further, I want to note that I’m not sponsored by tesla-info. I wish I were. Additionally, I haven’t done a comprehensive investigation into the tesla-info APIs to make sure they’re 100% safe, so let me know in the comments if you’ve found otherwise. Ultimately, in order for this to work, we’re going to have to trust them with our authentication token.&lt;/p&gt;

&lt;p&gt;Here’s a blurb from the &lt;a href=&quot;https://tesla-info.com/tesla-token.php&quot;&gt;tesla-info blog&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In general, tesla-info does not like the idea of third parties having access to your tesla details including token. This put us in a moral dilemma as many owners want to make use of the unofficial Tesla API for various activities and as part of scripting.&lt;/p&gt;

  &lt;p&gt;What we have come up with is the best compromise we can think of, we don’t need your Tesla email address or password to generate your tokens, you use the Tesla login to generate an intermediate code we can use, and we don’t store the resulting information.&lt;/p&gt;

  &lt;p&gt;We have also created an approach to sending commands to your car using either the API or refresh token, these can be turned into Apple shortcuts or included in home automation. We still don’t store your details and require you to send is either a valid API token or fresh token on every request. Obviously, you have to trust us here, but we are no different to any other application or web solution that uses your tokens, where we are different is that we don’t store them and if our security is compromised, your details are not available to be taken.&lt;/p&gt;

  &lt;p&gt;If at any time you feel the security of yours, ours or any third party that has ever had yo9ur details has been compromised or your token leaked, visit tesla.com and change your Tesla password.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Assuming we trust them enough, we can use the tesla-info APIs to ask our car to perform specific actions. The different commands are detailed in their &lt;a href=&quot;https://tesla-info.com/guide/tesla-automation.php&quot;&gt;automation blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;authentication&quot;&gt;Authentication&lt;/h3&gt;

&lt;p&gt;Obviously in order to send commands to your car, you’re going to need to be logged in. Recently, Tesla updated their 3rd party authentication to go through their SSO (single sign on) portal. For Shortcuts, I’ve found Kim Hansen’s &lt;a href=&quot;https://apps.apple.com/app/id1552058613&quot;&gt;Auth app for Tesla&lt;/a&gt; to be exactly what I need. After downloading the app, sign in with your Tesla credentials and the app will store a refresh token and an access token. Now, instead of needing to pass your Tesla username and password around, you can simply use these tokens. In fact, this app exposes itself to Shortcuts, so you don’t even need to worry about anything, just launch the app once, sign in, generate your token, and then let Shortcuts handle everything else.&lt;/p&gt;

&lt;h3 id=&quot;writing-the-shortcut&quot;&gt;Writing the Shortcut&lt;/h3&gt;

&lt;p&gt;Now, putting it all together, we can create a shortcut like this:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;img src=&quot;/blog/assets/images/2022-07-13/shortcut_trunk1.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;/blog/assets/images/2022-07-13/shortcut_trunk2.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;(If you just want the shortcut without an explanation of how it works, skip to the bottom for the download link.)&lt;/p&gt;

&lt;p&gt;In this example, we’re asking the car to open the rear trunk. This particular command requires a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;request&lt;/code&gt;, as well as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;value&lt;/code&gt;, though some other commands will only require a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;request&lt;/code&gt;. Note that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Get Refresh Token&lt;/code&gt; is donated by Auth app for Tesla, and that will deliver your token as long as you’re signed in to that app. Once we have all these pieces, we simply need to make a request to that URL and that should trigger the action for your car.&lt;/p&gt;

&lt;p&gt;One more thing. We’ll need to give the shortcut permissions. Hit the (i) at the bottom of the Shortcut edit page and make sure it has all the permissions like so:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;img src=&quot;/blog/assets/images/2022-07-13/shortcut_trunk3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;/blog/assets/images/2022-07-13/shortcut_trunk4.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Now, when you play the Shortcut, your action should be carried out and the request should be sent to your car. Even better, you can “Hey Siri … Open Trunk” (or whatever you call your shortcut), and it’ll perform that same request.&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://www.icloud.com/shortcuts/3bdbb03cd79e44b686b1636e1f9b894c&quot;&gt;Get the shortcut&lt;/a&gt; &amp;amp; give it a try!&lt;/p&gt;

&lt;div id=&quot;amzn-assoc-ad-7faf9c20-cca0-4ec1-b6ec-98a3c0c24342&quot;&gt;&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&amp;amp;adInstanceId=7faf9c20-cca0-4ec1-b6ec-98a3c0c24342&quot;&gt;&lt;/script&gt;</content><author><name>Andrew Fang</name></author><category term="tesla," /><category term="siri," /><category term="shortcuts," /><category term="automation" /><summary type="html">Performing Tesla controls (such as opening the trunk) with Siri via Shortcuts</summary></entry><entry><title type="html">My new blog</title><link href="https://andrewbfang.com/blog/my-new-blog/" rel="alternate" type="text/html" title="My new blog" /><published>2022-07-11T01:55:42+00:00</published><updated>2022-07-11T01:55:42+00:00</updated><id>https://andrewbfang.com/blog/my-new-blog</id><content type="html" xml:base="https://andrewbfang.com/blog/my-new-blog/">&lt;p&gt;This blog series is a new journey in which I will document do-it-yourself projects that I have taken on. I will do my best to document each venture with the materials and time needed. Most of these projects should require no prior knowledge, and many are a result of me scouring the depths of Google to find solutions to my unique problems.
&lt;!--more--&gt;
At first, I will be able to write more frequently, as I have a backlog of adventures that have been undocumented. After that, we’ll have to see what life throws at me.&lt;/p&gt;

&lt;p&gt;Hope you find these useful and inspiring!&lt;/p&gt;</content><author><name>Andrew Fang</name></author><category term="intro" /><summary type="html">This blog series is a new journey in which I will document do-it-yourself projects that I have taken on. I will do my best to document each venture with the materials and time needed. Most of these projects should require no prior knowledge, and many are a result of me scouring the depths of Google to find solutions to my unique problems.</summary></entry></feed>