Keychron K4 v2 + what I’ve learned in 9 months

The latest addition to my collection arrived today in the form of a Keychron K4. I got interested in the 96% layout after seeing a few reviews, and was looking for the cheapest way to try one out.

New Keychron K4 V2 with Kailh Box White switches, next to a Leopold FC660C 65% keyboard.

My observations about the Keychron K4:

  • Generally great build quality for the price
  • Hate the gateron reds it came with. I knew I would so ordered a bag of Kailh Box Whites to go with. My first time with a full board of these switches. Definitely on the loud side (they are clicky) but like these much better than Cherry Blue’s. Lighter feel and a quieter click.
  • Keycaps feel like they are ABS and very smooth. Also OEM profile, which is not my favorite. Will likely switch out with PBT cherry profile caps soon.
  • First impression of 96% layout is great. Barely 3 keys wider than my 65% Leopold FC660C. Much smaller than I was expecting. Major question will be how well I will be able to blindly locate the arrow key cluster.
  • Surprisingly nice to have bluetooth on a proper mech board. So far no problems paired up with the iMac.
  • Preinstalled switches were a pretty snug fit. Not sure if the tolerances on the mounting plate cutouts are really tight, but the switches take a lot of force to remove.
  • Adjustable slant makes the board generally more comfortable than the Drop Alt for me. The flattest setting is flatter than the Drop, and it has two sets of kick stands that can add more tilt.

General tips when exploring the keyboard space.. (what I’ve learned over the last 9 months)

  • Go for the cheap stuff first. Figure out what you like. If you’re getting into this you’re likely going to end up with multiple keyboards. Just embrace it.
  • For boards this means plastic chassis and hotswap pcb’s. Plastic models can usually be had for < $100, and hotswap means you don’t have to keep buying new boards to test out different switches
  • For switches this means starting with cheaper brands like Gateron and Kailh. Only step up to more expensive stuff like ZealPC or Holy Pandas once you know what you really like. Costs of these switches really add up fast.
  • For keycaps, this means usually cheaper YMDK or HK gaming stuff you see on amazon. You can test out different profiles here for much less than some of the custom runs you see costing 100$+
  • If you’re in the US always check on Amazon before ordering from keyboard enthusiasts sites. Most of those sites ship from China and have steep shipping fees and long transit times. If Amazon has something in stock, you can often get prime shipping which is a much better experience.
  • Once you know what you want… then go look at the higher quality stuff. Aluminum boards. DIY kits. Soldering equipment. Switches that go for > $1 a piece. Fancy limited run keycaps. It’s easy to end up spending 250$+ on a custom board, so make sure you’re getting something that you really know you want.


Kinesis Freestyle Edge with Everglide Oreo

Why a Freestyle Edge?

One of the first boards I bought when I got back into the mech keyboard scene was the Kinesis Freestyle Edge. It had appeard to me that Kinesis had finally saw the light on their Freestyle line and introduced a variant with real MX switches. It seemed like the perfect marriage between the Advantage line’s good switches and the Freestyle line’s more standard layout.

But because I was coming back from a long absence from mech keyboard world, I somehow convinced myself that I wanted MX Blue switches. While the tactility and sound were a novelty at first, I quickly tired of them, and though I liked the layout and the ergonomic configurability of the board, I soon stopped using since my whole house could hear me typing.

Fast forward two years, and many experiments of different switch types on my Drop hotswap board, I was ready to take the plunge in rewiring this Kinesis with a different switch. I purchased my first soldering setup and went about desoldering the blue switches, and soldering in the Everglide Oreos, which so far are my favorite light spring + tactile switch.

The Process

First step was to remove the case (8 screws) and detach the pcb from the case (another 8 screws).

Case removed, ready to start removing switches.

Next came the most painful part: desoldering. This board unfortunately used older style LEDs that mount _through_ holes on the switches. To remove the switches means that you have to remove the LEDs first. Each LED has two solder joints, but these joints were much smaller than the joints for the switches themselves. So small that it was quite challenging to melt the solder and suck it up with a cheap vacuum pump tool. In many cases I had to add solder to the joint to create a large enough blob that the vacuum would be able to suck the melted solder out.

Desoldering the first switch took me an entire 30 minutes. Through practice, I was able to get the average time for a single switch down to 3-4 minutes. Desoldering ~70 keys took on the order of 4-6 hours.

Thankfully, soldering in new swiches (without LEDs) was much easier. Instead of 6 hours to desolder, soldering took 45 minutes total. I ended up replacing all the keys except the function row and the macro keys.

Put the PCB’s back in the case and reassemble the case parts and all done. Now most of the keys don’t light up, but the LED color on this board was tacky to start with, so no big loss.

Not bad for a first soldering project, and now I have a version of this board with switches that I love, a combo that I can’t find anywhere else.

The Tools

In case anyone is looking to get started with similar mods, here’s all the equipment that I ended up buying for this project:

The Holiest Pandas

Wow these are really nice. After 4 months or so, I finally took delivery of a box of Invyr Holy Panda switches from the Drop group buy.

To me they feel like Topre’s but with a very un-Topre-like mechanical switch bottom out. The sound on them is great, even just plain unlubed on my Drop Alt. I can see why the youtubers rave about this switch. It sounds great and feels great.

Only minor issue is that my “5”-key seems to be flaky when I have a HP switch in there. Possibly a bad switch, as the socket has no issue when I have a gateron red plugged in. Also some possible oddity with the particular socket being loose. The switch housings on the HPs feel like they are made from a softer plastic than the Gaterons, so there could also be some additional flex there that is causing issues. For now, that socket has a Gat Red in it, and I don’t notice because typing a 5 is quite rare.

Holy Pandas finally arrive. Packaging not as bad as what I saw in videos, but these holders were still slightly loose.

Interestingly, my hands also seem to tire less with tactile switches. Not sure if its just a fluke, but possibly the different way in which tactile switches cause your fingers to apply force may actually be good for my hands. With linears, you have to apply force all the way through the travel, whereas with tactiles, my fingers let up as soon as they feel that they’re over the bump. So even if these switches have heavier springs, somehow they feel like they are less work to type on. Very unexpected result, that makes me also want to try other tactile switches like Zealios and Zilents. This is going to get expensive very quickly….

Wrist Rests are Bad?

This random video that I found on an old reddit post has been blowing my mind recently. It talks about RSI and how the common advice of aligning fingers on a the home row actually is really bad and causes unnecessary tension.

Wrist rests are also bad because they cause you to pivot from the wrist rather than moving your arm to get to farther out keys.

So I’ve ditched my wrist rest, pulled my keyboard closer, and have been re-learning how to type. Going down this path because I couldn’t find any wrist rest configuration that led to complete comfort. I was swapping out my Drop Alt HP for my apple keyboard a couple times a day due to fatigue.

So far this approach seems to be working. No more tension in the wrist / hand. But because I have to keep my hands in the air to type, my arms are getting tired. Hopefully this is temporary and just need to build up some endurance here.

A side effect of not resting your wrists though, is that now you have the whole weight of your hand to type, which makes light switches feel way lighter then when you use a wrist rest. This has caused me to revert to using all gateron reds, instead of a mix of reds and clears. I’m also looking to possibly step up a weight class… Gateron yellows and other 50-55g actuation switches might actually very reasonable now. I can see why people who type in this manner prefer heavier springs. They provide a sense of “landing” instead of your fingers just crashing in to the keyboard.

More Switches and Keycaps. A few Learnings

Since my last entry, I’ve managed to go through a bunch of iterations on the Drop Alt HP.

  1. Hands were still feeling uncomfortable after a while with spring swapped Gateron Clears, so tried adding o-rings.
  2. Tried Cherry silent reds. Spec’ed at 45g actuation. Soft landing and reduced sounds
  3. Cherry silent reds felt too heavy so modded them with same Sprit 55s springs with 40g actuation
  4. Mushy landing didn’t help with comfort, so switched out to Gateron Reds.
  5. Got a group by “sumiwatari” mt3 profile keycaps. They look super nice but are too tall, adding to discomfort. Returning.
  6. Got HK Gaming 9009-themed cherry profile keycaps.

Some learnings:

  • Buy key testers. Specs on switches give you some idea of how they feel, but specs across brands cannot be compared. 45g actuation on a Cherry silent red feels significantly heavier than a normal cherry red (also 45g) which also feels slightly heavier than a Gateron red (also 45g).
  • Profile’s really matter for comfort. I could not figure out why my Leopold FC660C always felt more comfortable than this Drop keyboard regardless of the switches I tried. After looking around, I realized that the “OEM” profile of the Drop board’s included keycaps is actually on the taller end of the spectrum as far as keycaps go. Cherry profile caps are much shorter, and reaching the QWERTY row is much easier on the hands (less craning of the wrist).
  • Don’t go for the super high quality first. Whether its key testers or cheap keycap sets, if you’re not sure about what you want, buy the cheap examples, confirm that you want them, then spend the $$$ on the really nice versions. The Drop Sumiwatari MT3 profile set looks super nice, but is basically useless to me because of the cap height. Thankfully Drop has a good return policy but these things were not cheap.
  • Seems like my hands prefer shorter keycaps. I’m still planning to try dsa and xda keycaps to see how they compare to cherry. I can’t imagine the uniformity across rows will feel great though.

40g Modded Gateron Clears

I’m on a mission to find my favorite switch configuration. My journey so far:

  1. Drop Alt High Profile keyboard ordered with Kailh speed silvers. Too heavy.
  2. Spring swap Speed Silvers with Sprit 40s springs (30cn activation). Too light, and high activation point meant many typos.
  3. Swap switches out to Gateron Clears (35cn activation)

The Gateron Clears were way better than the modded Silvers. Far fewer typos but still very light feel. After a few days however, I noticed my hands getting tired. The Clears, while better than the modded silvers, are still easy to accidentally activate if you rest your fingers on them. If you use a wrist wrest, you have tense your fingers enough so that they’re not fully resting on keycaps. This gets tiring if you’re doing it all day.

I really love the light switch feel, but it’s no use if it tires my hands out. The whole point of light switches was to reduce the wear on my fingers. Time to increase the spring weight one more notch.

In terms of pre-built switches, the next step up from Gateron Clears are basically red switches: Gateron Red, Cherry Red, Cherry Silent Red, etc. These are all 45cn activation. However the Cherry Red I have in a tester feels way heavier than a Gateron Clear. 10cn seems like a big difference.

So instead of new switches, I ordered Sprit 55s springs1. According to Sprit’s page, these have a 40cn activation force — exactly between the Clears and the Reds. I swapped out the springs in the Gateron Clears, and verified that they do activate somewhere around 40g (about 8 US nickels of weight). Interestingly, unmodded Gat Clears consistently activate at 6 nickels.. closer to 30g rather than the spec’ed 35g. Not sure what’s going on there, but perhaps that explains the large difference in feel between clears and reds.

I will live with these for several days before I try out heavier switches. Another path may also be to explore modded tactile switches. The initial tactile bump in these switches may be enough to support resting figures, while still allowing the use of super light springs.

1When exploring weights of switches, it’s also a lot cheaper to buy springs than to keep buying new switches. Switches tend to be 0.50-1.00$ a piece, where as a 100 pack of springs is usually $15. It is a bit more work, but for a 65% keyboard it is not too bad.

Drop Alt High Profile Keyboard

After a long hiatus, I’m back in the mechanical keyboard scene. Turns out, I was just a bit too early, hanging out on way back in the mid-aughts.

What’s changed in the last 15 years?

  • Way more switches. Even some 100-key switch testers.
  • Way more community. Geekhack, Reddit, Youtube

Jumping back in with hotswap

15 years ago, the modding scene hadn’t really developed and I wasn’t about to teach myself to solder. This mean that I had to buy fully assembled boards outright.

This meant buying and selling boards on eBay and Craigslist. It was workable if you were patient, but it still was a huge pain in the ass. You really just wanted to try a new board or a new switch for 10 minutes, but you had to commit way too much money and time just to get the chance.

Modern hotswap boards are a game changer. No more trading entire boards. Just get a hotswap board, and if you want to try new switches? just swap them out. New keycaps? swap them out. A $100-200 new keyboard purchase becomes a $30 pack of switches.

If you’re getting into mechanical keyboards for the first time, start with a hotswap board. If you end up exploring many options, the cost savings will pay for itself.

The Drop Alt High Profile

After looking at several options, I went with the Alt High Profile group buy from Drop. The things that were important to me:

  • It’s a 65% layout (no F-keys, no numpad, but with arrow block)
  • Solid aluminum base
  • Hotswap sockets (obviously)
  • Layout programmability (I tweak the standard 65% layout a bit)
  • Drop itself. I’ve had several good experiences with group buys on the site.

I ordered with the Kaihua Speed Silver switch option. My goal is to get a very light touch keyboard — something lighter than the Topre silents on my Leopold FC660C.

Speed Silver’s have conflicting specs online. The manufacturer spec sheet seems to suggest actuation at 27g and bottom out at 50g, but if you feel one of these things, it seems way off. They feel heavier than Cherry blacks.

I tried swapping in Sprit 40s springs which actuate at 30cn. While I succeeded in making the switches super light, other problems emerged. Speed Silvers have a high actuation point — almost 1mm higher than a standard Cherry MX switch. This combined with a super light spring meant that simply touching or grazing the top of a key could lead to an unintentional actuation. Since the spring force increases with the compression, I’d guess the actual actuation force for this combo was somewhere in the 20g to 25g range.

The combination of super light spring and high actuation leads to a bunch of typos even if you’re being careful. Keys like Y and T are most problematic. You are reaching over other keys, and in the process of pressing those keys, you might lightly touch the tops of H or G. This means yhou end up witfh lots of extra characters when you tyhpe tghese letters.

I tried double 2mm O-rings on each keycap which help somewhat. This causes the overall key travel to shorten. Shorter travel means that you’re less likely to press down a neighboring key you had to reach over, because the key doesn’t need to go as far to bottom out. But alas, even with lots of practice I still couldn’t get rid of all the extra typos, and it became stressful to continue to type on these switches.

After re-swapping all the springs back to the original, I was back to the drawing board.

Gateron Clears

Was my 40g spring just too light? Or was this strategy doomed because of the high actuation point? I needed to test both theories.

After a bit more research, I settled on trying Gateron Clears, which are linear switches with a 35g actuation force. These would be more than 30g required by my modded Speed Silvers. The Clears also have a lower actuation point than the silvers (though higher than standard MX)

The clears arrived today, and I have been typing with them for the last 6 hours or so. I am happy to report that:

  • No more typos due to grazing keys. The actuation point is low enough that the problem is avoided.
  • 35g actuation is still plenty light. It feels like almost no resistance at all.
  • I kept reading that Clears are very “smooth” and now I know what they mean. Cherry switches have a bit of extra friction on the downpress if you don’t hit keys exactly in the middle, directly above the stem. The Clears feel the same regardless of where your finger lands. It gives a noticeable consistency and high quality feel to the typing experience.

Ok, so I wasn’t really away from the scene

I wasn’t modding boards, but it’s a lie to say I’ve been ignoring keyboards for the last 10+ years. Some of the boards I’ve tried in the meantime:

  • MS Surface wireless
  • MS Surface Ergonomic
  • Das Keyboard with Cherry MX Brown
  • Kinesis Freestyle Edge
  • Whitefox with Hako True
  • Realforce RGB
  • Leopold FC660C
  • Logitech MX Keys
  • Apple Keyboard
  • Havit Low-profile TKL mechaical board (some variant of Kailh choc switches, I think)

Where to go from here?

I’m really just starting to catch up on all the developments of the modding scene in the last 10 years. Some projects I’m looking forward to:

  • Trying out Holy Pandas, which I managed to get in the Drop group buy for. I’m worried that with a 67g spring, they might be too heavy for my tastes, but I’m curious how they behave with lighter springs.
  • Lubing switches and stabilizers. Everyone says it makes a huge difference.
  • Exploring keycaps. I really like the looks of SA profile, but we’ll see if it’s actually hard to type on.
  • Rebuilding the whitefox. I got the board through the kickstarter, but hate the Hako True switches it came with. (WAY too heavy with a 100g bottom out force). Once I figure out my favorite switches, my plan is to actually learn to desolder and swap the switches out.
  • Building a choc switch board. I still really like low profile switches and laptop-style scissor switches.
  • I’m not done with the Leopold yet! My main annoyance with it is the lack of programmability, but I have a Hasu controller board replacement on order, and excited to give that a go.

Amazon Echo vs Google Home for DIY home automation

If you just want a general comparison of the Echo vs Home, there are plenty of articles out there, and they’re a quick Google search away. I want to focus on one narrow aspect for this comparison.

After looking at a bunch of home automation setups, I decided to go with building my own Z-wave based automation and code my own automation server. I’ll document the justification and the setup more in another post.

For the sake of this post, all you need to know is that to actually integrate an Echo or Home into my home automation, I actually have to write code. For Echo, I have to use the Alexa skills API, and for google the conversation API or ifttt. In this post I’ll compare the two systems and how easy or hard it is to get your own custom commands going.

The incumbent: Amazon Echo

For the Echo, to build your own automation, you need to implement an Alexa “Skill”. While this is not too hard, it does take some doing, and for me it took some time to learn the basics of Amazon Web Services. There are also two kinds of skill APIs you can implement: the “custom” skill api, and the “smart home” skill API.

The custom skill API lets you basically capture any kind of phrase, but the main limitation is that to invoke your phrase, you have to use certain patterns that identify the skill. In my case, I named my skill Jarvis, so I have to say “Alexa, ask Jarvis to …”. This works, but often feels silly. I really wish I could just say “Alexa, ….” and have the phrase parsed by my skill’s language model and handled appropriately.

The smart home skill works differently. You implement an endpoint that can enumerate a list of devices with names, and some description of what those devices can do (for example, can you handle a “turnOn” command?). Once this is implemented, the system defines all the phrases. So if I told the API, there’s a device named “living room” and it can respond to “turnOn” and “turnOff” then I can say “Alexa, turn off living room” and the right thing gets called.

The Smart Home API has some other nice properties, for example, it can handle different kind of sentences and all map them to the same intent. I can say “Alexa, living room off” or “Alexa, turn off the living room”, and it won’t get confused.

The main limitations right now are that the types of verbs that can be used are limited. Basically it only makes sense for on/off switches, dimmers (where you would say “Alexa, set living room to 50”) and temperature controls. I recently installed some z-wave controlled window shades, and have resorted to having to say “Alexa, turn on shades” which still feels silly an non-intuitive.

One of the best things about the Alexa system for DIY folks like me is that skills can be coded up and deployed in “developer” mode. This is really intended for people who want to deploy their skills eventually to the public, but need a way to test. In developer mode, the skill gets only associated with your account, so only your account can look up and use the skill. It ends up being perfect for one-off custom development.

The Challenger: Google Home

I was pretty excited when Google announced their Home product. It offered the promise of better speech recognition (given Google’s history) and potentially a better programming platform.

At release, there was literally zero API support. You could ask it questions and it could hook up with a small set of supported smart devices, but no way to hook in and do custom stuff.

Then a few months in, Google announced the IFTTT integration. This integration is really interesting in that it is able to capture any phrase from the user.. no prefix necessary. So if I want to capture “Hey Google, eat my shorts” I could do that. You can also capture phrases with parameters, so I could specify a wild card like “eat my $” and then hook that up to a “custom web request” action to communicate the parsed result to my automation server.  So far so good. In some ways it offers more flexibility than the Alexa skills. I could implement my dream of being able to say “Hey Google, let there be light!” and have it turn on all the lights.

Awesome, right? Well sort of. As I discovered, there are some key limitations to the IFTTT approach:

  1. While you can use text wildcards to capture parameters, these wildcards can’t come at the beginning of the phrase. So while I can capture “turn off $”, I can’t get “$ off”
  2. The wildcard capture mechanism is very literal.. so if you specify “turn off $” and say “turn off the shades” then the parsed parameter is “the shades”. This means that on my automation side, I have to support many kinds of variants of “shades” to really make it feel natural.
  3. Because the IFTTT applet has no prior sense of what are possible words that fill in the parameter, in my experience, the speech rec is actually a little worse than Alexa’s smart home skill integration. “Turn off shades” is often interpreted as “Turn off shave”. I could map “shave” to “shades” in my code, but something feels really gross about that.
  4. You can’t create a dynamic response. While you can include the parsed wildcard part of your phrase in the response, if your automation fails, for example, there’s no way to communicate that back to the user. This is particularly annoying in combination with #3, where sometimes it mishears what you said, and you can’t really figure out why your command actually producing the desired result.

There’s also just a general clunkiness to the IFTTT UI. It’s great for setting up simple rules, but for complicated setups with lots of variances, the UI becomes cumbersome. I need to copy and paste the same set of URI, post params, etc. between each applet for all the phrases I want to capture, and there’s no way to do it in a programmatic way, which makes maintenance a pain.

Google Actions

As Google promised when they released the Home, they later came out with an “actions” API. I looked through the docs quite a bit, but on initial analysis, it appears to be very similar to the Alexa custom skill API. It inherits the same limitation that your custom ability must be named and invoked by name.. in otherwords “Hey Google, Ask Jarvis to blah blah”.  When I found this out, it was a disappointing step back from the IFTTT model where I could capture any phrase.

Google actually has some nicer UI for actually specifying the language model that your integration understands. They used’s UI and you can create a pretty cool intent parsing system and train it with lots of examples.

But then comes deployment. As of this writing, to test deploy a custom action on google, you use a command line tool, and it can only be deployed for 24 hours. WTF!? That’s right, if you wanted to build a “private” skill like you can in the Amazon system, you’d have to write some script to continually republish your skill in dev mode multiple times a day. Thanks, but no thanks.

(One interesting difference with Google is that users don’t need to “install” your skill to use it. They can just directly start saying “ask ____ ” as if it were pre-installed. Don’t know how they’re going to manage that name space though)

Because of these limitations, I haven’t actually brought myself to try to implement a google action yet.

Google has also announced “direct actions” which sound more like the smart home skill api and support all kinds of specific scenarios. These are only accessible to approved partners currently, ruling out the DIY crowd for now. If they work like Alexa’s smart home skill, then it could be pretty promising.

There’s one potential final approach that could also work. Google has a protocol called Weave, which is a standard way for smart devices to talk to the google cloud and register their presence. It was actually announced several years ago at a GoogleIO but then not much has happend since. I *think* if you actually manage to implement a device that can talk this protocol, then these devices can be controlled by Google Home.

There’s a Weave developer website but the documentation is unfortunately a bit scant. There’s a device library (libiota) which can supposedly run on linux, but its a C library, and I just don’t have the time to try to write little C programs to create a bunch of fake devices. If there was a python wrapper, maybe, but in general it feels like this bit of code has not seen much love.

The Verdict (as of Feb 2017)

For DIY home automation purposes, right now, Amazon Echo is a better choice. For a few reasons

  1. Easier custom skill development and deployment suited for DIY.
  2. Smart Home skill API can get you to a pretty usable end result with pretty good flexibility
  3. Devices are cheaper. Pretty easy to get a few Echo Dot’s and spread them around.

That being said, things are still early. Google will likely open up a lot more stuff going forward, but to catch up they need to:

  1. Fix their deployment situation so that you can permanently deploy “private” integrations
  2. Enhance their API so that it’s easier to register a set of devices that can handle a common set of requests and program their behavior.
  3. Give me some cheaper devices!

Also, note that this whole space is really early. There’s a few things that I would really like both of these platforms to be able to do, and I’m hoping these capabilities are coming.

  1. Be able to capture arbitrary phrases w/o having to inovked the name of the integration.
    1. In Amazon’s world, you could imagine having a “default” skill which would get dibs on all the things that the user is saying and get a chance to handle them before the normal system kicks in. Another option would be to be able to use the Echo as purely a microphone and speaker system and be able to connect it directly to your own engine built using the new Lex and Polly systems.
    2. In Google’s world, I’m not sure what this means. Maybe they can enhance the IFTTT integration to be more capable. I also saw on some community thread the devs mentioned support for “implicit” actions.. one hopes that this means you can be invoked w/o your skill name.
  2. Be able to recognize who is speaking, and pass that in as a parameter. I don’t care if there is a training step required. Being able to respond contextually to me or my wife or my kids would be super powerful.
  3. Getting the ID of the device where the request originates. This seems like a simple thing, but neither Echo or Home API’s give you this when you’re processing requests. Many of the capture devices are in fixed places in the house. It would be really nice to be able to understand that the Echo in the bedroom caught the request and to map something like “turn off the lights” to just the lights in the bedroom. (Currently there is a hack to set up each of your echo’s with a different amazon account, but that is just gross)
  4. More control over audio playback from an API. Right now there is no way to get either system to programmatically play a spotify track, for example. (One really hacky way I thought of is to teach Alexa to ask Google to do something by actually playing back a response with of the form “Ok Google, ….”)

In terms of general, non DIY home automation usage, I actually prefer the Google Home. It’s fun to ask it all kinds of random questions and see it answer them usefully in a surprisingly large number scenarios. The ability to also play music to groups of Google Cast devices is pretty awesome (though, if Sonos gets their shit together, I think both Alexa and Home will be equal in this regard).

Using MoCA instead of pulling CAT


I’ve been living in my current house for a couple of years now. Being our first house, I didn’t exactly have the experience to evaluate all the little details like networkability. I had a vague idea that I could pay someone to pull CAT6 through the walls, but didn’t realize what a disruptive endeavor that would actually end up being.

Shortly after moving in, I decided to upgrade from my Netgear R7000 router to a Unifi-based system. This meant I had to get high-bandwidth wires to key places so that I could hook up my access points. Fortuantely, my house has a centrally located heating duct column that connects the attic to the crawlspace. With help, I was able to fish through some CAT6 and ceiling mount an access point right under the attic. Now I had pretty good WiFi coverage (UniFi stuff being pretty awesome), but the setup wasn’t complete. I wanted to have even better connectivity in the office, where I had my desktop rig. While I could maybe pull 400 Mbps through 5Ghz AC wifi, that was far shy of the gigabit speeds you would easily get with a physical wire.

I ruled out a bunch of potential solutions.. a dedicated wifi extender? Drilling more holes and mounting an AP just in the office room? Running outdoor-rated CAT6 up the wall on the outside and bringing it in to a box in the wall? All these ideas seemed like a lot of trouble, or were still limited in terms of overall bandwidth.

Then I remembered.. I have coax everywhere. I mean, literally everywhere. The previous owner was quite the Cable TV enthusiast, and when he had done is remodel, he made sure to have most rooms have at least two coax jacks. I vividly remember when the Comcast guy came the first time out, we found a 4-way and 8-way amped splitters out at the cable box so that every room (and even the detached garage) could be fed with sweet sweet cable TV. He told me that with so much splitting, he was doubtful he could get a good signal. I told him to unhook all the splitters and just connect the modem directly to the incoming feed.

My first thought was that maybe I could use the existing coax as a sort of fishing line to pull CAT6 through to the same places. I pulled out a few of the wall plates to see how much give there was but unfortunately, the coax was clearly securly attached to the studs.

Defeated, I went looking on the web to see if there was any way to use these coax wires to do IP networking. I mean, they’re getting up to gigabit speeds with Comcast right? If a cable modem can do that over long distances, seems something should exist to do this within the confines of a house.

Which leads me to…

How to use your existing coax to build a MoCA network

MoCA is a standard to enable data networking over residential coax. My understanding is that some cable providers in the US already install MoCA equipment. I’ve only ever used a self-purchased modem with Comcast, so I never encountered this tech. But here is the magical product:

This is the Actiontec Bonded MoCA 2.0 Ethernet to Coax Adapter sold in pairs at Amazon for around $150. These awesome devices let you use your coax to bridge your ethernet over your coax. Using this I was able to use the coax jack in my office to bring near gigabit speeds right to my desktop.


If you look closely, these adapters have a coax in and a coax out. That means they can be hooked in series with other devices that use the coax, and overlay the data network on the same cable.

Turns out this works even for the cable modem itself! These devices supposedly detect the frequency bands used by the cable modem, and use other bands to make sure things don’t conflict.

I use this exact setup. I have my main coax line come into a closet in the middle of the house. Here I have the cable modem, Unifi gateway, and switch. Before the coax hooks into the cable modem though, I have one of these devices in between. I then hook up one of the switch ports to the ethernet jack on the MoCA adapter which then uses the same coax line to spread the network out to other devices connected by coax.

Ok, that’s a mouthful. Here’s a picture instead..

As you can see the two ethernet switches here are connected to each other through the MoCA adapters, but the adapters are using the same coax line which feeds the cable modem! Maybe this is ho hum for people who are familiar with MoCA, but I’m still amazed this works.


From reading reviews, it sounds like your mileage may vary here, but most reports suggest that this works way better than your average WiFi (AC 5ghz) connection or powerline network.

In my case I get a solid 930Mbps between devices connected directly to the two switches in the diagram above (measured with iperf3). Ping time is also a consistent 3ms. I’ve used it for a good year now, and have never noticed any reliability issues.

That being said, I’ve read also that certain things can affect performance:

  • Quality of the coax cable. RG6 is better shielded than RG59, but the latter is used in many earlier coax installs. I’m pretty sure I have some 59 in there as well.
  • Run length and splitter signal loss: the farther the signal has to travel on a long coax run, the more signal you will lose. I currently have 3db loss at the splitter and approx 70-100ft of coax between the two adapters, and it works fine. I’ve read in a spec somewhere that MoCA devices like this should be able to survive at most 15db loss.

Other Notes

A couple more smaller considerations:

  1. Make sure your coax splitters support the full MoCA frequency range. Many old/cheap splitters do not, and can basically filter out the signal required for these devices to work. Basically look for splitters that are compatible with the 500-1650Mhz frequency range.
  2. Because MoCA works by pushing signal back out through coax (much like a cable modem), in theory the signal will also traverse back out the line that comes into your house. Some say the cable companies install filters on their end, but you never know. You can buy a “point of entry MoCA filter” like this to filter out those signals before they go back out to cable provider (and your neighbors).

In the works

As you can see from my diagram, currently I only have a pair of these on my network. But since I have so many coax jacks to play with, I’m planning to get a few more adapters to be able to place more access points.

Separately, the MoCA Alliance has already announced MoCA 2.5, which apparently can support a 2.5Gbps bridge using coax. This is an interesting development, but there no devices you can purchase quite yet. Very few people have 10GigE stuff at their house, and I expect the new 5GigE equipment to take a while to make it out to the market. Without something to actually use the 2.5Gbps supported by this standard, I don’t expect to see an adapter at this speed for quite a while. But when it does arrive, you can bet that I will jump on it immediately (unless I bite the bullet and pull CAT6 by then)

Auto Sonos reboot?

I’d say Sonos over wifi in my house has < 99% uptime reliability. At first, it was because I was using 40mhz channels in the 2.4ghz bands, which meant interference city! As soon as I bumped down to 20mhz channels, things got a lot better.

Still, though, at least one of my sonos devices drops out of the network at least once a month. These devices seem also not to be very good at noticing and re-establishing the group. Usually the solution is to power cycle the device.

All this leading to a thought I had today for a very silly solution: I can uses the SoCo python library on my automation server to find all the local devices. I could do this once in a while to make sure all the Sonos devices are up and running. Should one drop out, I could wire each Sonos to a z-wave switch, and automatically turn the switch off and turn it back on to bring it back.

I believe in the enterprise they call this self-healing.