Edging for Drainage

2024-01-24 16:26 - General

The drainage in the backyard here is not great. At the corner of the driveway, there's a tiny drainage ditch which should help. But that corner of the drive way is not (is no longer?) the low spot. So when there's enough rain, a significant portion of the driveway ends up forming a large puddle. Last time I visited Mom, I brought back a 2-stroke edge trimmer, with the idea that it's the perfect thing to dig a tiny supplemental "ditch" along that edge of the driveway, to help get the water away. (Into the existing drainage ditch, from the too-low parts of the driveway. As-is the grass and dirt comes right up to the concrete, holding the water in pretty effectively.)

Today there was just enough of a break between the snow (now melting) and rain (forecast to start this morning, but not here yet) that I thought: now's the time! I gave it a shot and couldn't start it. (I'd guess it's been over a decade since it has run.) I checked the spark plug: very dirty, but I could see at least a faint spark. So I dribbled some gas straight in the cylinder, and then I did get it to start, and run but for only a second or so. So what's the problem? Fuel delivery!

Took off the tiny carburetor to investigate. Got surprised by the air intake path: there's only one option from the carburetor side, but it comes through a strange path. I can just see a foam air filter peeking out in one spot, but not where air gets into the other side of it. But then I wondered: wait, where does the fuel come in? Found the intake on the carburetor, which didn't have a fuel hose attached. Found that and ... quickly learned that it's hardened to unusability. And in fact, already broken in half. This is probably the primary problem.

It's so bad that a piece of it crumbled in my hand, just holding it, while trying to figure out the size. With the bit that was left, I managed to figure out that a 1/16″ fit a little loosely but a 5/64″ fit snugly. It snakes a complex path from the tank to the carburetor, so in addition to needing the right size to connect on either end, I'll need it small enough to fit through all those passages, too!

RGH3 Modding an XBox 360

2024-01-11 23:24 - Gaming

I have a significant collection of video game consoles. Wherever possible and practical, I prefer to "mod" them. Mod is short for modify, and generally means lifting the restrictions that they come with — mostly for copy protection. These mods have many benefits but a significant one is being able to run games without relying on the optical drive the whole time. In these ten or twenty year old devices, the moving optical drives often fail.

Back in 2015 I tried to mod the XBox 360 I had at the time. Long story short, I failed to remove the "x-clamp" (which holds the heat sink down to the APU) and damaged the logic board in the process. (I still have all those parts, maybe I should try some trace repair again.) More recently I accepted an XBox (OG) and XBox 360 that was being given away. Then even more recently I heard about the "RGH3" mod. The 360 has pretty good protection built in. For a long time, besides some simple piracy-only based modifications "RGH" (reset glitch hack) was the only way to mod a 360 for full control. The idea is based around sending a very brief reset signal to the CPU at just the right time, so that as it is performing verification checks very early in the booting process, the check (and only the check) can be corrupted. Then the console otherwise boots as normal, but has not verified its firmware. This used to take a special extra "mod chip" and quite a bit of very careful wiring. The third version, RGH3, amazingly uses the console itself to send this reset glitch signal. That makes it a comparatively very simple modification: just two wires. (Two permanently, a few more temporarily.)

The SMC end of the two RGH3 wires.

Last month, I opened up the 360. I confirmed that it's a newish (relatively speaking) "Corona" variant. Because it's new, it's designed to prevent RGH style attacks. Because the modding community(/related business(es)) is clever (and a bit lucky) there is a "POST fix adapter" to restore access to the otherwise removed signal trace. It just so happens that this is one of the outermost "pins" of the APU, so a carefully positioned piece of wire can touch it. And the adapter is designed to hold a little pin in just the right spot. That's one end of one of the two wires needed. The picture above is the other end of the two wires. With POST dealt with, these are the two "easy" remaining connections. They're tiny, but they're exposed and directly available. (It's not unusual for all sorts of important signal traces to have test points in commercial products, intended for use during design and manufacture.) I'd estimate that the white circles drawn around these two points, where my added blue wires terminate, to be about one millimeter across. Possibly one and a half. Those blue wires are 30 gauge "wire wrapping" wires. The wire itself is 0.255 millimeter in diameter. The higher of those two solder points I did rather well on. The lower/rightmost one isn't as great. The exposed wire is too long and the solder has barely attached it. But attached it is! I got away with it.

The third, and most difficult, RGH3 solder point.

Here's the remaining wire end. It's attached to a via, which starts off covered in solder mask. The point of this mask is to prevent solder from going here. This must be scraped off, without damaging the tiny and fragile exposed copper part of the via. I did so with a fiberglass "scratch pen". I slightly exposed an adjacent via and track, so those were covered with some polyimide tape before proceeding. For this one, the via-as-solder-point is hardly wider than that quarter-millimeter wire. This one took a few tries, and I ended up leaving a little extra solder on the capacitor. Once this tiny joint was complete however, I didn't want to mess with it.

I added some tiny dabs of hot glue to keep the wires in place, to avoid breaking these fragile joints through mechanical fatigue. I also added an in-line resistor on one of the lines as suggested by the guide I was following. The following steps were mostly software based. When first flashing Xell (xenon linux loader — xenon is the code name for the first XBox 360 variant) the first time it didn't take. I turned the 360 on and Xell should have launched, but the standard retail dashboard did, instead. After sleeping on it I wrote Xell a second time and somehow this time it worked. This is just the first step however, unlocking the next step: the XeBuild which actually modifies the console's behavior. (It requires knowing the per-device encryption key, which Xell somehow is able to read.) This also did not boot after flashing it, this time Xell remained. I tried writing a second time, and this did not work. But Xell also supports writing this sort of update, so I tried a third time using it (instead of the PicoFlasher I used to get this far) and it worked. From there I just had to install some custom software and I was in full control, huzzah!

You Should Not Lower Your Thermostat (To Save Energy)

2024-01-03 15:37 - Opinion

Not only is it common for thermostats to offer features to set different target temperatures at different times of day, it's commonly advised that if you (during heating season) "lower your thermostat one degree, you'll save" about 1 percent for each degree of thermostat adjustment per 8 hours or [net] 3% on your heating bill or between 1 and 3 percent of your heating bill or by regularly turning down the temperature by 10 to 15 degrees before leaving the house for an eight-hour span, you can save between 5% and 15% a year on your heating bill. Though, most of the sources I could (easily) find all cite the same Department of Energy numbers, which repeats "You can easily save energy in the winter by ... setting it lower while you're asleep or away from home" and "During winter, the lower the interior temperature, the slower the heat loss".

That last point comes closest to convincing me. Yes, it is definitely true that a lower temperature delta directly relates to a slower transfer of energy. But if it's 30° outside and 70° inside, how much can it really matter whether that delta is 40 or 38 degrees? I've doubted this since I was young, living in my parents house and not in control of the thermostat. Then I moved into apartments where I didn't control the heat. But now, I'm living in a detached home and I do control the thermostat.

Because it's programmable, it's easy to set it cooler overnight, for less heating. So I've done that. But does this really save any money? I can only dive deeper into the data I have, for the ~70 year old home I'm in. But that's at least something.

Temperature history data for just over three weeks, from the same room as the thermostat.

Here's the full data set I'm operating from, covering most of December 2023. Critically this includes nearly a week around Christmas. I was traveling then and set the thermostat extra low. Normally it's set to 71°, I let that drop to 67° "overnight" and all the way to 60° while I was away for a few days. (I think? The graph looks higher. It's set to 60° now...) This is generally visible in the graph above. Though all days vary widely as the weather does, the difference is clear, especially e.g. between the 21st and 22nd.

A zoomed temperature chart covering the most recent few days.

Here's a closer view of just the past couple days, and thus a better view of the topic really in question. Do I save money overall by letting the heater relax overnight? My argument (which I'll soon try to back up with data) is no: The jagged peaks and troughs while the thermostat maintains that slightly lower temperature overnight look very close to those during the day, while it maintains a higher temperature. Then yes there's a large period each evening where there's no heating going on, but a seemingly equal period in the morning as the heater works overtime to raise the temperature back up.

I let the thermostat relax starting at 10PM. (This is hard to see in the graphs because the their time zones are incorrect, whoops.) A normal heat/cool cycle can be roughly two hours, and it might have just completed at 10:00 PM, or just be about to start, or anywhere in between. Temperature has fallen below the night setting (so the furnace starts up) usually by 12:30 to 1:00 AM, where it stays until 6:00 AM when the thermostat resumes its normal daytime setting (this one, always on time because it's always well below that newly active setting). It then takes until 9:30 AM, sometimes a bit more, to satisfy the thermostat that normal daytime temperature has been reached. Very close to the same three and a half hours to fall to, and to rise from, the lower overnight setting.

A separately zoomed temperature graph to show some typical daytime, nighttime, and holiday thermostat behavior.

This might be the most interesting graph. I've managed to color-code it red while heating and blue while not. That's visually interesting but hard to use directly. However, I've used the "rising" and "falling" signals that controls the color of this chart as an input for further consideration.

Outside temperature is a confounding factor for such analysis. I've tried to analyze a wide enough time range to average out its effects. Also, I've applied moving averages to try to eliminate measurement noise from the result. That said, first result: there were 13,484 minutes where the temperature was rising and 20,354 where it was falling. Or: the heater was active for 39.85% of the time, perhaps call it 40%. But we'll save those significant figures because the next step is to wonder: how does that proportion vary depending on the set point of the thermostat?

I wrote some code to group these rising and falling temperature periods together, and distinguish them by the current temperature when switching from one to another. (I.e. if we were rising and are now falling, and the temperature is over 70: that's a normal daytime event. And so on.) And here's the results (time is minutes):

SettingTime OnTime OffPercent On
Normal7,99610,42543.41%
Night3,9315,20143.05%
Holiday1,5564,72824.76%

For the data above I had my little program simply look at whether the temperature was rising or falling, and whether it was closest to the normal, night, or holiday range. Then for each minute, record which bucket we fell into. (I tried other more clever-seeming things, but they made the three hour coast or burn always get recorded completely into the "wrong" bucket, throwing off the numbers. There's really no good way to record those long segments that are partially normal and partially night time.)

First: Clearly setting the thermostat down by 11° has a real effect: I spend 75% more (!) (time with the furnace on, thus) energy to heat this home to 71° as compared to 60°. (In December average temperatures were mostly in the 40s, and those days I was away were right in the typical range.) That's much more of an effect than I expected. I left early on the 22nd and returned by early evening of the 26th. Average outdoor temperatures were roughly 45° for that time. Or, the furnace had to add 15° to get to 60° vs. adding 26° to get to 71° — almost exactly a difference of 75%! It's definitely worth turning the furnace down when leaving for several days straight.

We can confirm this with usage data from the utility:

December natural gas usage.

This says weather on the 15th/16th was very close to that on the 23rd/24th. But gas usage was 12.8 vs. 5.1 on those two pairs of days, respectively. An even bigger difference, though of course I wasn't using hot water or anything else while I wasn't here.

But "normal" vs. "night" results are so close as to be indistinguishable from measurement noise. For this house with this furnace, the idea of night time energy savings look just as wrong as I originally thought. I'll wager that with better insulation the inside temperature would fall slower, perhaps the furnace could stay off all night or nearly so. And might even rise faster (i.e. more efficiently) in the morning. But here, it doesn't seem to happen.

How about in theory? Starting from the same 45° we examined before: Raising the indoors up to 71° is a difference of 26°, and my relaxed setting is a difference of 22°. A theoretical difference of 18%, but not borne out by actual observed measurements. But that "average 45°" comparison only made sense when I was inspecting several whole days at the same setting. In reality, the outdoor temperature falls by much more than four degrees overnight, so I'd expect to use the heat more, then. Maybe I'm really saving roughly 20%, but also spending just as much more due to the lower night time outdoor temperature? I'd have to not drop the thermostat overnight for a while and re-run this whole analysis to try to figure that out.

Tire Rotation? Car says no

2023-10-05 11:57 - General

My last post was about some scheduled maintenance I did to my car. Slightly ahead of schedule, because I don't know its history from before I bought it. Better to waste a tiny bit of money doing maintenance early than a big amount when something goes wrong thanks to poor maintenance. One of the items on the list was a tire rotation. This should be a pretty easy job.

I got my "childhood" (late teenage of course, if true, but there appears to be a sticker on the box from a few years too late for that) car tool kit from Mom's house last month. It's got a pair of jack stands and a hydraulic jack which are perfect for this. I actually jacked the car up first, forgetting my order of operations. Put it back down and proceeded to loosen the wheel nuts with the wheels on the ground. I had a little trouble at first (we'll get back to this, later), on one of the rear wheels. Front wheels I've gotten all the nuts off "no problem", and re-installed them to torque spec.

Well, actually: I did have some problems with the nuts. I got lucky that I found a breaker bar around Opa's workbench which was long enough to give me enough leverage to budge some of the nuts which the four-way tire iron couldn't. But in ½" drive, I only had 12 point sockets of this size, which probably did not help! But after this point I got everything off that I tried to get off, though I had to put so much force that I shook the whole car.

Why did I have problems? First, an almost-definite contributing factor: auto shops with huge air impact guns over tighten lug nuts, making them extra difficult to remove. But apparently also: Ford's swollen lug nuts is not only a known problem but there's been a lawsuit about it. (Which was dismissed, but still evidence that this isn't a rare issue.) They've got a structural nut, plus a softer (and prettier?) metal layer wrapped around that. The second layer can shift and swell, making it hard to get a socket on and hard to remove the lug nuts. (For more, see the YouTube video Easily remove swollen lug nuts on Fords — that method is just cutting the softer outer layer off! The video clearly shows both the before and after view of this.) I didn't know this when I started. At least one nut, I stripped/rounded it a bit. Since then, I got a bolt extractor kit. This morning, I forced that extractor on the worst bolt.

And I heaved, and I huffed and I puffed, and I could not get it off. I put my impact driver on it. Nothing. So finally I found a pipe to act as a cheater bar. Unfortunately the extractor I could get locally has only a ⅜" drive, so I didn't have a very big wrench attached. (The extractor kit has online reviews, one of which mentions removing a 135-lb-ft spec nut. My lug nuts' spec is 100-lb-ft, so the extractor should handle this! But who knows how overly-tight some shop might have made this in the past?) The wrench bent before the nut came loose. At this point I was worried: I hammered that extractor on the nut (which as I understand is typical use for an extractor). But the nut didn't come off, so how will I get the extractor loose? I certainly don't want to drive around with it on.

The carnage after I failed to remove a lug nut.

Well, remember how the nut actually has a weak (very probably aluminum) outer layer? What I managed to do was not loosen the nut, but to rip holes in that outer layer. Then the extractor was loose enough to pull off by hand. As best I can tell, what it was gripping on is now gone. So it's off. And that nut is surely still on there. Hard to get a good picture, but you can just see the outer and inner layer of the damaged nut.

So I guess I'm fine for now, but I'll pretty definitely need to hire someone to get all the lug nuts off, at which point they can probably do the tire rotation for me too!

First Car Maintenance

2023-10-02 22:19 - General

Last year I got a car. It's just reached 90k miles, and I have no idea how it was maintained by the prior owners. So I've elected to do some of the 100k-mile scheduled maintenance now. So I: Did an oil change, with filter. Replaced the air filters (engine and cabin), and replaced the spark plugs.

The engine air filter and spark plug replacement both require removing a plastic cover from above the engine, which houses the air filter. Some of the screws holding the air filter in are not accessible when this cover is in place, and the cover completely blocks the plugs. I looked into this cover, and all the things attached to it, first. But then I did the oil change, and stopped with just that for the day. Started the engine to check it afterwards, and oh no: it was not running right. After a little extra time checking how/why it was running poorly I realized it was the easy/obvious problem: I didn't plug a sensor back in, while investigating removal of that engine cover. Plugged it back in, all is well!

Both air filters and the spark plugs had clear Ford branding on them. They're either original and never changed, or likely changed at a dealer, with official parts. The engine filter had a very poor quality date code looking thing that would imply it was never changed, but only if I read it to say that it was four years older than the car, so ¯\_(ツ)_/¯ .

I plan to do a tire rotation as well, but that turned extra complicated. So it's not done, and I'll talk about that later!

Air Conditioner Support Bracket

2023-05-22 09:33 - Making

When I moved in here, the house still had the original single pane windows from the 40s installed. Not only did that merit attention, there was historically only a single air conditioner in the whole house — installed in the one window that had been replaced with a more traditional double-hung arrangement, to fit the A/C. And since it was responsible for the whole house, it is a big unit! Very early this year, we had all the windows replaced. That means they're "replacement" windows. Rather than being built into the house (i.e. "new construction" windows) they're designed to fit into the existing opening. Which means some of the structure of the window moves inward, to what used to be window opening. So, this one important window opening is now in a slightly different place, and the existing support structure won't hold up the existing A/C correctly. Given that it's such a big one, I wanted to be sure that we can hold it up well. So I came up with a design.

My design, in SketchUp, for a wooden bracket to hold the existing air conditioner in the new window opening.

It starts with a 2x4 cut into a complex shape to fit around all the bumps and tabs in the window frame plus a bit at the bottom of the A/C which sticks down. Attached to that is another which sticks straight out, two to brace it, and then another which sticks down. This final one has both a triangle brace and an extra foot to reach around the brick window sill down to the main exterior wall of the house.

Newly built A/C support bracket, exterior view. Newly built A/C support bracket, interior view.

Here it is. It was built from reclaimed wood which used to be a bench. It's not the prettiest, but it will be underneath the air conditioner, so it doesn't need to be. It's full of extra holes, but that's OK. It's also wood from a product meant to be outside. I'm not sure what kind of wood, but it's reddish. I could believe cedar, either way it should stand up to the elements OK. Some of the building was done a bit freehand, but with the key sizes measured it came out extremely close to my original design. I can pretty well hang myself off it, so I'm sure it will hold the A/C up just fine.

(Don't) Fix the Colors in SuperMicro IPMIView

2023-04-26 21:55 - Tech

A while back I set up a home server (and a remote backup server at my Mom's) with one primary goal: Proper KVM-over-IP, so that complete remote support and repair is possible. I ended up building around used SuperMicro server motherboards, which include IPMI (Intelligent Platform Management Interface) for remote management, including KVM (Keyboard/Video/Mouse) control and remote virtual USB media (boot from an ISO image located with/controlled by the IPMI client).

I ended up with oldish boards, to make them cheap. Oldish but "enterprise grade" is plenty for my needs! There's a catch though: newish IPMIView clients and oldish servers aren't 100% compatible. Reference some good community documentation at Reddit titled Fix X9DR Supermicro IPMI Colors Broken / Glitched (Archive) which even links to the official SuperMicro support page (Archive) — both of which instruct you to download some files from the IPMI device's built in web server, and replace part of the IPMIView client.

I did that, years ago at this point I want to say. More recently, I was trying to manage these servers, remotely. No matter what I tried, I would always get an error message "Session ID is Expired" when attaching the virtual media to boot from. (And I couldn't find this message documented anywhere online!) Generally to verify that if I reboot, I'll be able to do so from rescue media. But at least once, I really needed to do so. And I couldn't!

I tried lots of things over lots of time. Eventually, I could get it working in a completely blank virtual machine, with just IPMIView installed. Most of the time I did this, I instinctively patched the client files to fix the colors: I've known to do this, and done it as a matter of course, for years. At least once I must not have and after a while I figured out that's where things were working.

It's much more important that my lightly-used rescue environment works than that it looks pretty, so I've reverted the documented patching in all of my IPMIView clients, for now. (Though of course this kind of "for now" turns permanent pretty quickly.)

Weekend Project: Wireless Power Control

2023-04-16 19:51 - Making

An X10 PalmPad remote. An X10 CM19A RF signal transceiver. A Sonoff S31 WiFi enabled power switch.

As I mentioned recently, I'm working on "smarting up" power control at home. Back in my co-op apartment I had a fully X10 based system, and I still have many of the parts for it. An important one is the HR12A PalmPad Remote Control. For those I've looked at, remote controls are either missing or terribly expensive for modern "smart" home systems. The link shows that a still brand new one from X10 is only $17, and it has both on and off buttons for eight devices, plus a switch to control another eight, plus a dim/bright control. The closest thing I can find (they're hard to find!) is an YoLink Remote which only controls five devices and costs $30 (and probably only works with their proprietary system).

This pairs with the CM19A USB PC Transceiver which can both receive and send RF X10 signals. I previously used this to send X10 signals, via my home server. I've reworked that now: it's only receiving. The PalmPad remote sends signals when I press buttons and the server receives them via the CM19A. It then generates network requests. So far to the fan/light control I mentioned earlier and to the last thing pictured: A Sonoff S31 "smart switch".

Since they're cheap and I already have several: now it's easy to leave one PalmPad by the couch, one by the desktop computer, and one near my bed. If I'm planning to head to bed? I can turn the light and/or fan off in the living room, and the light on in the bedroom. Without extra trips back and forth, and without fumbling around in the dark. And I've got five more buttons to assign, without even flipping the switch! I can send the same controls from a computer/tablet/phone through the little web app running on my home server. I've barely had it a day and I already greatly appreciate being able to easily turn the ceiling fan on or off as I please, without getting up.

Smart Switches and Existing Wiring

2023-04-01 15:51 - General

Back in my studio apartment, I had remote control of my lights and some appliances. I used X10 devices for this, a design originally from the 1970s to pass data over power wires. Slightly newer devices also could use radio signals. The great thing is that they're very cheap, being old technology. Since they want to use the power lines to transmit the data, compatibility can be limited in a whole house scenario. (The data doesn't cross the two phases, so won't reach the whole house easily. Which part of the house is which phase can often be rather arbitrary.)

Sketchy temporary install of my first "smart" switch.

So I've been looking for a newer "smart" switch type of device I could adopt. I still want it to be inexpensive, but I also want it to work ideally over WiFi. What I don't want, however, is for it to rely on some random "cloud" service. After all The Cloud Is Just Someone Else's Computer. And that someone else will eventually stop giving you access to their computer. Examples are many: Insteon shut down their service in 2022, Nest dropped support for some of their devices in 2016, and Amazon shut down some Alexa devices in 2022. (That's just a few easy examples.) I want my devices to be network-addressable, not Internet service dependent (or even connected, to be honest).

Pictured above is a Treatlife DS03 combined light dimmer and fan control switch. It is not local only. But depending on the hardware revision, it can be converted to use either Tasmota or OpenBeken — two very similar open source "smart home thing" replacements. This very sketchy and very temporary installation is my very first test device. I have it installed and running: all the buttons do what they should do, but it's also connected to my "infra" WiFi, which is firewalled to have no Internet access. (And the regular switch on the left controls the porch light.)


Installation didn't go perfectly. Behind that switch before I changed anything was one wire running through the dimmer, for the light in the ceiling fan, and a second always-hot wire for the fan with pull-chain control. I got this device and used that second wire for remote control of the fan, and everything seemed to work great. Later I discovered that an unrelated light upstairs stopped working. I've now become confident that this light was fed from the same "always hot" line which also powers the fan. This took me some time to figure out, with a few lucky breaks along the way.

The first diagram I made while figuring out the failed light.

We're talking about the upstairs hallway light. It's on a three way switch: one each at the bottom and top of the stairs. One day I went upstairs, flipped the switch, and got no light. I think this was at least a week since installing the new test smart switch, and for quite some time I didn't make the connection. The first thing I did was take this diagram pictured above. After removing the fixture from the ceiling and both switches, this is what I could see behind them, and it was a big lucky break: Some original-to-the-house style cloth wrapped wires, plus some romex-style wires — some with white and some with black jackets, so I could tell them apart! The fixture had one end and the upstairs switch the other end of the only white jacket, so it was safe to assume those are connected. Then there were three other black sheaths, probably at least one connection. And some cloth, with no immediately clear pattern.

The second wiring diagram I drew, trying to figure out what already exists.

So armed with that information, I started trying to figure out how the wiring was laid out, to aid with diagnosis. The image above has one guess at top, crossed out. The second form at the bottom felt a lot better, and I'm now convinced it's accurate. At its left is the line with "cb" and "cw" (cloth wrapped white and black conductors). That, in the light fixture, goes either through a link or the lamp to the "wpb" and "wpw" (white plastic sheath, black/white conductors), which goes to the upstairs box with the switch, and so on. The pattern makes sense for a three way switch, assuming that the cloth conductors on the left are the line/supply. With nothing hooked to them anymore besides my multimeter probes, I can use the network addressable switch downstairs to watch them go from no power to full line power, as I turn the fan on and off. I also found more of the other wires, visible in the unfinished "attic" space, including where the newer romex style wire joins to the one probably original to the house (and thus, probably already there, perhaps as part of a single leg switch later upgraded to be three way) cloth wire.

The plan for how to revamp the upstairs hall light

So now I've got a plan for what to do! It starts with capping off the old supply line shared with the fan: I'd prefer to keep the new four-speed control of the fan with no pull chain dangling in the middle of the room. Instead I add, in the mentioned attic space (which already has a light and outlet for me to pull the supply from) a new feed. It goes into the upstairs switch box, which backs into this space. The switch loop remains mostly the same, with the supply being injected at the upstairs switch, rather than at the light fixture.

Presto! I actually lucked out quite a bit to have a neutral wire in the switch box, as the smart switch needs it. This house is from the 1940s and apparently this wasn't typical until the 80s or so. I haven't actually checked all the other switch boxes yet: see the sketchy temporary install of this one switch. I've decided I like this line of switches, but I haven't completely planned out how many I want, and of what type: they come in standard on/off switches plus three way compatible variants of that, dimmers and three way compatible dimmers, two different button designs for each kind of dimmer, and the dimmer/fan combo I've got (at least!).