Monday, December 30, 2024

Getting Hosed

As I mentioned in a previous blog post. through the process of elimination I determined that the sprayer hose on my kitchen faucet needed replacing. Good news: the hose is here.

Curiously there seemed to be a product revision between when my faucet was made and when, subsequently, this replacement hose came into being. The faucet end was slightly different, mostly in that the compression nut had 4 flats rather than two. Functionally that end was the same, though.

On the other end, though, the nut that screws onto the sprayer had changed a bit more. It was ever so slightly smaller on the OD, which actually made it seat better into the bushing that I had replaced last time. On the inside, though, the threads bottomed out well before the rubber washer was compressed, which lead to quite a lot of water spraying out around the nut when I turned the faucet on.

Luckily the rubber washer on the old hose was still in good shape, and just happened to be about the right thickness to compensate for the discrepancy. So, it's in a bit of an odd state, but it's together, working, and not leaking so I'll take it.

I did keep the nut from the old hose, though, just in case. I'll hopefully never need it, but if I do, I'm sure I'll be glad to have it.

Friday, December 27, 2024

The Great Moistening

So my front yard is xeriscaped. In theory this means that I have a low water yard, but in practice "low water" and "no water" are not even remotely the same thing, and so in the summer months (and there are a lot of summer months here) I find myself standing around with a hose twice a week watering my plants.

Interestingly, there is some irrigation plumbing roughed in at the front of my house, left over from the previous owner, which seems to never have actually been hooked up. At least not since the xeriscaping was done.

The plumbing starts here by the main water service for the house. I think at one time the gate valve in the back there was connected to the half-a-union below the hosebib, and the manual valve would allow the irrigation to be turned on and off more conveniently than trying to operate a gate valve. The other side of this plumbing is just a pair of risers next to the fence though, so we'll need to do some work before we can put this into service.

This will be a long post, so keep reading after the break.

Sunday, December 22, 2024

Drip Drip Drip

Despite decades of progress in faucet technology, eventually everyone will be faced with a leak to deal with. Today is that day, for me.

Well, more like one day of many.

You might remember this faucet from a previous blog entry, where I replaced the cartridge on the pot filler spigot. that repair is still holding tight; today we're dealing with some other issues.

Specifically, this joint right here where the sprayer hose joins to the main body of the faucet.

It's suffering from an occasional slow leak, and I don't intend to allow it to continue to worsen.

After a bit of back-and-forth with the customer service agent we were able to identify the correct washer to replace. So let's dig in.

There isn't quite enough room here to fit a regular wrench, but luckily I have some low profile crowfoot sockets that will do the job. The nut isn't in there so tight that using the socket holder like this is an issue, so that saves me dealing with sticking this on a ratchet. I really should get myself a breaker bar for situations like this.

With the hose off, we can now replace the washer.

Which is actually in here.

Which means digging out the old one.

As we can see, it was definitely time for a replacement.

And the other side doesn't look any better.

Thankfully the fitting itself is in good shape.

And the new washer just drops right in.

Then I put the hose back on and discovered that the source of the leak was actually where the brass barb fits into the base of the hose.

This isn't really something that's repairable, but thankfully a whole new hose is only $10. I'll just have to wait a little while longer for it to get here.

In the meantime though, let's take care of one other item: the plastic bushing that holds the sprayer head.

It actually wasn't too long after I moved in that the one end just decided to break off, which was certainly an annoyance.

Luckily it pops out pretty easily.

And the new one just snaps into place.

So that's one success and one, let's say, half success. That washer definitely needed replacing, but the leak wasn't fixed, so I guess we'll be seeing another post about this faucet in the not too distant future.

Saturday, December 21, 2024

A Wee Bit of Weather

So a while back I got a hand-me-down weather station from Tyler.

It's been dutifully recording the temperature, observing the lack of wind, and overcounting the rainfall for a few years up here now. But it was also never really great.

There was a fan inside it that buzzed and rattled, the rain gauge, as it turned out, was 150% inaccurate, and finally the straw that broke the camel's back was when the temperature sensor started reporting completely absurd readings. It was time to fix it.

And by fix it I mean replace it.

This cheerful little box arrived at my door straight from China, via a quick detour through the House of Bezos. It does the usual temperature, humidity, wind and rain sensing, as well as measuring total insolation and also UV, which is pretty keen.

It comes with all the bits and bobs needed to set it up, except of course for the pole to stick it onto. Luckily I had a scrap of redwood kicking around that I could use.

It's technically supposed to be round but whatever, square will do fine too.

Back up on the roof I clamped it temporarily to the piece of cedar fence board that I had used to mount the old weather station. Conveniently it's aligned north-south, so I didn't have to worry about rotating the weather station on the square pole to get the wind direction readings to be correct.

And a few screws will hold it in place just fine.

And you know, while I'm up here I should probably fix this section of gutter.

Every time the downspout gets plugged, this section collapses and I get a waterfall pouring off the roof, thanks to this hanger here being shittily installed.

Not only is it way at the end, leaving a huge gap to the next hanger, but it's also bent out of the way and not actually catching the lip of the gutter at all.

But thankfully both those problems have a solution.

Anyway, where was I? Oh yes, the weather station.

Getting the display hooked up and running was pretty straightforward. A touch screen might have been nice, but the buttons along the bottom worked well enough.

But only having the weather report in this one specific spot isn't especially convenient, when I might be yards away from it. I clearly needed to take advantage of the wifi features to upload the weather data into my own little local cloud.

To collect and process the data, I decided to use WeeWX in a Docker container, using this project.

First things first, I'd need a user for the container to run under, because running containers as root is so 2023. Thankfully this is as simple as running adduser --system weewx. Of course I'd need to make sure to add the appropriate entries to /etc/subuid and /etc/subgid so that the container could allocate UIDs and GIDs inside its namespace.

Then I needed a Docker compose file which specified the correct image to use, along with opening a port for the base station to send its readings to:

name: "weewx"


volumes:

  data:


services:

  weewx:

    image: felddy/weewx:release-5.0.2

    # devices:

    #   - "/dev/ttyUSB0:/dev/ttyUSB0"

    volumes:

      - type: bind

        source: ./data

        target: /data

    ports:

      - "8383:8383/tcp"

    environment:

      - TZ=PST8PDT

I prepared a directory at /var/local/weewx to hold this container's files, adding a data subdirectory, and set that as the home directory for the user. About the only special step I needed to take at this point was making sure that the data subdirectory was temporarily world-writeable until I figured out what UID and GID the container user would get assigned, after which I removed the world-write permission and chowned the directory.

Running the container for the first time is what populates the directory, and doing so is as simple as calling sudo -u weewx podman compose run weewx as root.

I next needed to install the WeeWX Interceptor plugin, which is what would actually be listening for the weather data being sent by the base station. With the WeeWX 5.1 container this is one simple line, just sudo -u weewx podman compose run --rm weewx extension install --yes https://github.com/matthewwall/weewx-interceptor/archive/master.zip. Then I followed that up with sudo -u weewx podman compose run --rm weewx station reconfigure --driver=user.interceptor --no-prompt to update the configuration file.

After a bit of tweaking, the file now had a section like this:

[Interceptor]

    # This section is for the network traffic interceptor driver.

    

    # The driver to use:

    driver = user.interceptor

    

    # Specify the hardware device to capture. Options include:

    #   acurite-bridge - acurite internet bridge, smarthub, or access

    #   observer - fine offset WH2600/HP1000/HP1003, ambient WS2902

    #   lw30x - oregon scientific LW301/LW302

    #   lacrosse-bridge - lacrosse GW1000U/C84612 internet bridge

    #   ecowitt-client - any hardware that uses the ecowitt protocol

    #   wu-client - any hardware that uses the weather underground protocol

    device_type = observer

    port = 8383

And of course in the Station section the type was set via the line station_type = Interceptor.

To start the container for real this time, we use sudo -u weewx podman compose up --detach. However, we're not done yet, as there's still some configuration to do on the base station.

Now obviously some of these values will depend on your network set up, but the values you'll need to substitute should be fairly obvious. Here's what mine looks like:

One important thing to pay attention to here is the Path line. By default it's set to /data/report/ and the WeeWX interceptor largely ignores it, only looking for the query portion of the URL after the question mark. Except that the HTTP request it actually assembles looks like this: GET /data/report/&PASSKEY=DA76...

There's two things wrong with this. First, there's no question mark before the query parameters, which trips up the interceptor plugin. It tries to parse the URL by grabbing everything after the question mark, so having it missing means that nothing is grabbed. Second, the parameters start with an ampersand, meaning that there's effectively an empty parameter at the start of the string, which also confuses the interceptor plugin.

Thankfully since we can modify the path, we can splice in a value that will fix both of these issues, changing it to /data/report/?ID=id. The ID=id part is arbitrary, I just chose it because the interceptor plugin is coded specifically to ignore that parameter (amongst a few others). It just needs to be there so that the query string doesn't start with ?&.

And with all that done, I finally have the weather station reporting correctly into WeeWX, and all that's left to do is to write a systemd script to make the container start on boot, and then tweak the configuration for WeeWX to fix the units to be more metric.

It was quite an adventure, but it worked out in the end.

Wednesday, November 27, 2024

Raising The Bar

A little while back, you might recall that I had an issue swapping out the presser feet and feed dogs on my Consew 18 sewing machine. I had remarked that the part I needed was apparently available, but that turned out not to be the case; I had merely stumbled across an obsolete listing for an out-of-production part.

As such, I was stuck with no way to correctly mount the new, shorter outer presser foot to the machine.

And the issue was none other than this outer presser foot bar here.

Well, as it happens I managed to find a different source for this part.

It just comes in a bit of extra packaging.

But once we pull off the outer layer of mill scale and excess steel, I have been assured that I will, indeed, find the part hiding inside.

First step: get the mill scale off.

This 3M stripping disc effortlessly melts through mill scale thanks to the silicon carbide abrasive and open matrix structure that prevents the disc from clogging up. It's really the perfect tool for peeling the bark off of hot rolled steel.

Hot rolled gives us two advantages. The first is that it's cheap: these two sticks cost me under $5 combined (and I'm really hoping that I don't screw up the first one and end up needing the second, but for the price it pays to be prepared). The second is that it's naturally stress relieved: if you try to mill a piece of cold rolled steel, you'll often find it curling up into a banana shape as the internal stresses get released unevenly due to the material removal. You can normalize the steel to get around this, but it's easier to just go with the cheaper option and deal with the mill scale.

Anyway, let's start getting rid of some of that excess steel. Now that we have a nice shiny surface, the Dykem layout fluid will show layout lines very nicely.

A utility knife makes for a decent scribe for these sorts of situations. The blades are very hard and very disposable, so they'll make a nice sharp line in the layout fluid.

Which even shows up in photos pretty nicely.

Now while I don't have a milling machine to do all the hard work for me, I do have some power tools that I intend to put to work for this job. The first of these is this 4x36 belt sander.

It comes with an 80 grit aluminum oxide belt, and I spent about 13 seconds using it before switching it out for something with a bit more tooth to it.

A 24 grit zirconia belt should eat through this steel a bit quicker, I think.

And eat through it, it did. Of course, it leaves a bit of a rough finish, so I'm following it up with some draw filing to smooth out the surface and bring it down to final dimension in a bit more of a controlled manner.

A bit of blue sharpie (it dries quicker than layout fluid, though is much less durable) makes it easy to see where the file is taking off material.

And once both sides are trimmed up, we're at the final width of the part.

But notably, not the final thickness.

This was actually supposed to be 3/16" thick material, but either some wires got crossed at the metal supply shop or they decided to give me a free bonus upgrade, and what I ended up with was 1/4" thick instead.

I would have had to remove a bit of thickness either way, but now I have to remove a bit more than I was planning on.

But nothin' to it but to do it.

Half way done on one side. Fun fact: while Dykem is much more heat resistant than sharpie, it will fade out to nothing if you get it really hot. I decided to start dipping the part in a water bucket between grinds at this point, both to save the layout lines and to save my fingers, which were getting a little toasty even through the gloves.

Then we're back at it with the draw filing to pretty up the faces and get things to final thickness.

And for all that work we have a piece of raw stock that still looks nothing like the presser foot bar. But it's at least getting closer.

But now's the fun bit where we start actually giving this part shape, starting at the top end.

Once again, sanding and filing is the name of the game.

Then we do a bit of layout and it's time to poke some holes.

I used a carbide spotting drill (which is not the same thing as a center drill) to start the hole, in order to reduce wandering as much as possible. The spotting drill has a very sharp tip angle compared with regular twist drills, and is specifically designed to be able to start holes with as little wandering as possible.

This small divot ensures that the web of the twist drill doesn't end up walking all over the place while it tries to get started, instead engaging the cutting flutes on the edge of the spotted hole.

And it worked decently well. This drill bit is 1/64" undersized from the target hole size of 7/32 for two reasons. The first reason is that I need to run a counterbore bit on this hole to recess the are where the head of the screw will sit.

And it just so happens that a metric M5 counterbore bit is both incredibly cheap and easily available, and the 5.2mm pilot tip is just the right size to run in a 13/64" hole, which is the first reason I drilled it undersize.

The second reason is that this hole needs to be a snug running fit on a 7/32 boss on the mating part, and regular twist drills tend to drill oversized by often tragic amounts. However, reamers will clean out a hole on-size when you run them in a pilot hole 1/64" undersized, which is exactly what I used.

And the result is a beautiful fit.

But there's still more work to do, and to get there we need to get all bent out of shape.

Lining things up on the features we've machined, it's easy enough to transfer the position of the first bend across, and then it's just a simple matter of bending it.

This then allows us to transfer the position of the second bend and repeat the procedure.

This step is honestly the part that I had been the most unsure about. It's all well and good to remove bits of metal little by little, but when it comes to just wholesale bending an entire workpiece, things can go wrong a lot quicker, in ways that can be difficult to recover from.

But thankfully things did not go wrong, and we're right into the home stretch.

Once again, we transfer some measurements from the original part.

The screw hole for the linkage is remaining in the same spot relative to the upper mounting hole, but the screw hole for the foot itself needs to move down a half inch. It would be a bit silly to do all this work and leave it in the same place as the original, since the whole point of this project is to lengthen this exact section.

Now the curious thing about sewing machines is that they were originally engineered prior to the standardization of UNF and UNC systems, and so you find a lot of thread sizes that are almost, but not quite, what you expect.

For example, the upper hole here, which holds a screw that connects the linkage for the front-back motion, is a 3/16-32 thread. You might think that this is a 10-32 thread, because 10-32 has a 3/16" major diameter, right? Wrong, actually: 10-32 has a major diameter of 0.190", whereas 3/16-32 has a major diameter of 0.1875". This is close enough that a 3/16-32 screw will thread securely into a 10-32 hole, but a 10-32 screw will not fit into a 3/16-32 hole.

The good news here is that I'm making the hole side of this system, so a common 10-32 tap will, in fact, suffice.

But the lower hole, the one that secures the foot to the presser foot bar that we're making, is a 9/64-40 thread. Again, you might assume that this is a 6-40 thread, but the situation here is reversed: a 6-40 thread has a major diameter of 0.138", and 9/64-40 has a major diameter of 0.140. So a 9/64-40 screw will not thread into a 6-40 threaded hole.

So what you see in the above photo is actually a genuine 9/64-40 tap, which is a bit tricky to find but not completely impossible to obtain.

Anyway, with the holes drilled and tapped, all that's left to do is to cut the part to final length and do a bit of shaping on the end.

And then we're ready for a final test fit.

And we are victorious, at least mechanically speaking.

But we still need to make things look nice, first with a bit of final filing and sanding.

And then with a chemical bluing treatment, which adds an oxide layer to the outer surface of the metal. This both looks really neat, and also helps prevent rusting to some extent.

And now I can install it, along with the new presser foot, needle plate and feed dogs, and the machine is finally configured how I wanted it.

Fun fact: the needle plate is actually coated with a green teflon coating, which makes it much easier to feed sticky materials like vinyl through the machine. I'm not sure how much of a difference it'll really make, but it was only a few bucks more so I figured why not give it a shot.

Anyway, this was the last upgrade I needed to make to the machine, so at this point it's good to go. Or at least it would be good to go if I had a table to drop it into, but that's a problem that will find a solution in due time. Stay tuned for that.