The Outer Worlds 2 – review

I finished the Outer Worlds 2 on Very Hard.

I like Obsidian games due to just enjoying RPG’s in general. The studio itself puts in consistently high quality dialogue and multiple paths, so that ups the appeal for me. The Outer Worlds 2 is another first person RPG from Obsidian that can be characterized as their own version of Fallout, but in a darkly comedic tongue-in-cheek future ruled by naked capitalism.

This particular game has some notable changes over the first entry in the series. First of all, there is no longer any weight or inventory management. Probably a win. Second, healing is really weird. You heal quickly by consuming food out of combat. In combat, you have to use an inhaler, which has toxicity, consumable charges that must be bought or looted, and requires you to wait it out before using it again. This to me is a pretty odd change as you seem to be constantly fishing for healing in this game … although it is generally possible to end up with extra healing if you bring along a companion with their own healing abilities.

Flaws are an interesting idea carried over as well. The game catches you doing a certain thing enough times and offers to buff that thing in exchange for some other downside. In practice that’s pretty cool, but in actuality I found the tradeoffs rarely seemed worth it. I suppose it could be fun to do if one was really trying to explore the space of the game on replays, but in a first run they mostly seem pointless, and I’m not convinced the game is interesting enough to warrant multiple playthroughs.

Graphics are nice, although perhaps heavy on system requirements given what you get. On PC, Ray Tracing is a nice option to have, and Frame Generation is a reasonable option for single player games like this. I’m a bit of a sucker for the Art Deco / Gilded Age aesthetic, so I’m rating this pretty highly.

Character animations in this game are OK, but limited largely to characters standing around and doing the talking head thing. It does feel like in this day and age we could do better in terms of more animated or mo-capped dialogues.

Very Hard difficulty can be quite punishing. I found myself frequently being one or two shotted, requiring me to play very conservatively around it given the limited healing. I’m not sure I would necessarily recommend playing on this difficulty, but I did manage to get through it with a lot of reloading and careful management. As a whole though, I did find combat to be a tad generic.

Obsidian seems to have settled into a “AA” game routine where they have:

  1. Some relatively squarish maps that are a bit too small to give a feeling of wonder or exploration
  2. 6’ish obligatory companions with their own personal side quests.
  3. Progression from area to area with a small amount of backtracking.

Unfortunately, I think this formula has become a bit tired and taken the charm out of their games in the wrong ways. Even aside from this, I probably would not criticize too much if not for the other problem. That problem is that Obsidian keeps experimenting with leveling systems and gear enhancement in each game … but recently none of it ever feels that meaningful, which removes a great deal of the joy of an RPG … loot and building your character.

I do enjoy the RPG genre as a whole and this one was no exception … although its flaws are clearly visible. The overall plots and on the ground dialogue in Obsidian games continue to be a strength. Where this game fell apart for me were the sort of unengaging RPG mechanics that have been problematic in the Outer Worlds, Avowed, and now the Outer Worlds 2.

Even so, it’s still fun enough to blow through the various areas and you’ll spend about 50+ hours doing so. Seeing new areas and punching through the dialogue is still very enjoyable, even if the mechanics I mentioned feel under-designed. The overall game feels AA with a sprinkle of AAA in the graphics and game length, but the classic Obsidian strengths are there and the weaknesses aren’t bad enough to prevent an enjoyable playthrough. Worth a run if you like RPG’s.

Posted in Video Games | Tagged , , , , | Leave a comment

Ninja Gaiden 4 – review

I finished this game recently on Hard difficulty. For reference, Hard is the hardest available setting on the first playthrough. Master Ninja is the hardest difficulty … only unlocked after an initial playthrough.

As a mega fan of Ninja Gaiden Black and a really not so much fan of the subsequent games (they felt like failed attempts to recapture the magic of that first Xbox outing) … I actually reasonably enjoyed this latest entry, although it has its failings.

The game focuses on a new ninja named Yakumo … whose design is rather blandly generic … perhaps designed to be more like an slightly angry mission focused teenager. I don’t much mind this, but Ryu Hayabusa’s design definitely feels more purposeful. Could be just nostalgia. Anyway, some will mind this … I don’t, I care more about the game overall. And they do bring Ryu back, so you get in some missions with him as well as subsequent trials and new game plus runs.

The combat itself didn’t feel quite like Ninja Gaiden Black … in particular, the dash/roll and jump movement is extremely clunky and not quite as bufferable or smooth as the original game. But maybe I’m just carrying over too much baggage and that’s how it’s supposed to be? It does keep most of the essence absorption system from the previous games, however, allowing you to chain Ultimate Techniques with a bit of skill.

The combat also has some odd mechanics where you can perfect guard or clash and counter attack … but I rarely actually did this on purpose, and the reactability window is so small that I couldn’t counter unless I was already fishing for the perfect guard to begin with.

Enemies also go into an armored power up mode which you can punish them out of. But the punish consists of using mode shifting into “bloodraven” form, which costs you from an energy meter that regens over time or with successful hits. Crucially, doing these bloodraven moves is quite slow, and you can’t cancel into bloodraven form as far as I can tell, so “reacting” to these power moves is again sort of impossible unless you wait for them deliberately. It’s probably OK if one is willing to spend more time with the game, but it feels unintuitive to be told you can punish moves and then have them mostly not be punishable.

The camera system feels like it fails you quite a bit in this game. Enemies can target you from pretty far away, and your moves can also go pretty far. It’s pretty common to say, do an on landing charge for your UT, and be trying to clunkily swivel the camera to figure out if something is going to hit you while charging, or if your UT will reach anything useful. There’s a good deal of just throwing up your hands and hoping for the best.

There are some traversal sections to the game that end up being QTE challenges for you to swing between points, jump into wind tunnels, dodge trains on rails, etc. These sections feel like filler, really make no sense and don’t feel grounded in the overall world, and are overall just a waste of time. To the extent you lose these, it’s often because the camera doesn’t even bother to point you near the next direction, so you just lose track of what the hell the game is asking you to do.

Speaking of which, the art style is quite sub par. The levels consist of basically three biomes … forest temples, neo-futuristic corridors and buildings, or underground sewers. This goes on for 19 levels. The level design has no real character either … it’s just area after area of enemies, boxes, and crates. So some of the levels really drag on, and the world feels completely ungrounded. This is a action game at its core, so not the end of the world, but it certainly doesn’t have the magic or character of previous entries, and overall is a real weakness.

The UI aesthetic has a digital feel to it, as if the game is trying to imply you’re actually in cyberspace. Your checkpoints are often with a monitor that pops up in various locations where you talk to the disembodied voice of a friend of yours. All of this digital focus feels oddly inconsistent with a ninja game.

And with regards to checkpoints … they don’t really work well at all. You can reach what looks like a checkpoint with training, health restoration and item purchase … these are regularly scattered through the game. But you don’t actually save there! So you’ll buy a bunch of stuff, take missions, organize things, die in the next fight, and realize you have to do all of that housekeeping again. Makes no sense at all. What does seem to help is going into the training room with Tyran and exiting it immediately. Dumb way to force a checkpoint, but at least it works.

Overall, I did enjoy the game. It’s not bad, but not really a must play either. I think clicking with the combat mechanics would take a lot more time than I have, and I suspect engaging with them more is a “me” issue needing both time and the ability to let go of previous Ninja Gaiden games. I found myself enjoying some of the boss fights more in retrospect, but at the time they often felt kind of spammy and high damage. There’s also replayability in the form of Boss Trials, new game plus, challenges, and Ryu as a playable character that can extend the length of the gameplay for those interested.

While the game never rises to the heights of Ninja Gaiden Black, there is substance to the game that gives it a lot of replayability when you go back for Master Ninja difficulty, Trials, etc. Worth a look.

Posted in Video Games | Tagged , , , , | Leave a comment

Further Tesla Full Self Driving thoughts

Just writing these down for posterity:

Changes lanes without real purpose. The car may not see far enough ahead to understand that changing lanes won’t allow it to make much real progress.

Needs to identify bad drivers and stay out of their way. Erratic drivers who can’t stay within their lane and cars driving too aggressively qualify.

Needs to avoid the trajectory of other cars changing lanes. The Tesla treats other cars as if they will do the “right” thing, so it likes to just zip on by other cars merging into the adjacent lane. In the real world, drivers are dumb and will sometimes keep changing right into your lane. There’s very little to be gained by assuming the other car is a reasonable driver … it makes way more sense to just slow down or speed up a little to allow the other car to do something stupid with no side effects.

Lane centering behavior needs improvement. Should stay more to the right on two lane highways. Should take into account like shoulder width when determining position within a lane … if you have more shoulder width, use that side of the lane more.

Posted in Cars, Tesla | Leave a comment

Thoughts on Tesla’s Full Self Driving 12.3.3

Elon has done us Tesla owners a solid and given us a free full month of self driving. To me, the current 12k price is pretty outrageous and the 199 monthly subscription is a bit more interesting … but free is a good price. 🙂

So how well does it work? Well, I found myself pleasantly surprised. I was not expecting a hands off experience and certainly did not get it. But I did think it made my driving experience easier.

My initial experience was with engaging it on the highway. At the default setting of Average (Chill/Average/Aggressive) I still found it passing too aggressively for my taste, so I ended up turning on a “minimize lane changes for this drive” setting. That was much less aggressive … almost equivalent to autopilot. Later in the day, I would discover that using the turn stalks directs the FSD to perform a lane change. So, in summary, I settled on FSD’s chill mode and without the “minimize lane changes” setting as my sweet spot. If I want a lane change, the turn stalk does that for me and I don’t find that burdensome.

We passed through a couple of tollways … but I was not brave enough to keep FSD engaged to see what it would do.

Later in the day, I found myself on some rural highways. FSD was not good about going with the flow of traffic or hovering around the speed limit + the specified offset. For some reason, it would constantly go about 10 mph slower than I wanted it to and there seemed to be no way to get past this short of constantly depressing the accelerator to encourage it to go faster. It also constantly reset its speed, requiring me to constantly fiddle with the scroll wheel or accelerator.

For two short trips, FSD did quite well navigating to the destination, but, at the final turn-in, it would turn in early, missing the destination completely and requiring me to correct it. This even contradicted the nav system guidance, which seems odd.

The behavior at stop lights was rather strange. It would both launch too aggressively and brake too aggressively at these rural highway traffic lights. I suspect the combination of highway speed limits (50 to 60 mph) interspersed with traffic lights is causing it to accelerate and decelerate too quickly … as, by way of comparison, I didn’t see such behavior in the Bay Area. This seems like something that shouldn’t be an issue in 2024, but it also seems easily solvable? In general, I think there needs to be some negative reinforcement in the training around excessive G forces. This type of issue seems so unnecessary.

Finally, along with FSD came Autopark. This was a big favorite with the wife, even though I am the one mostly driving. Once you slow to a crawl in a parking lot, an external visualization comes up with parking spots that you can tap on to select them. Then, you can press a button to park. The car will set itself up and then back in slowly.

I found this to be quite fun and convenient. It can even parallel park. However, I did not stress test its behavior with cars on both sides or spots that were too small, so someone else will have to give you that info. My only criticism of this feature is that while it parked well, it sometimes didn’t center itself perfectly within the lines. I found this odd as one imagines a computer should be able to do this perfectly every time.

Overall, irrespective of price, I found FSD to be useful, but still requiring some obvious tweaks, and Autopark to be quite useful. I do not know how much I would pay for these features and suspect I might not ever know unless the price comes down to something that would make it an actual decision. Tesla’s default autopilot is quite good and takes a lot of the pain out of long highway stretches, and I generally don’t find it that hard to park. I’m comfortable with my own driving style, but, in the future, could see myself shelling out for these features to keep my kid, wife, or parents safer.

Posted in Cars, Technology, Tesla | Leave a comment

Tesla Model Y – Best charging practices

Earlier this year, I joined a fairly large segment of the population in purchasing a Tesla Model Y. It’s currently the best selling car in the world by some accounts … so it’s certainly not unique. But it’s new to me.

I have a lot of thoughts about this car. Spoiler alert: I’m thoroughly enjoying it. But we’ll focus on one question for now … and it’s an obvious one. When you get the car, you want to know “What’s the best way to charge this thing?”

Tesla’s answer (dumbed down for consumers)

Tesla guides you to their answer in a couple of ways.

First, in most Tesla’s, the car displays some indicators on the charging screen about Daily vs Trip charging limits. The implication is that you should keep the charge limit somewhere in the Daily charging limit range most of the time. which is usually anywhere from 50% to 90% battery state of charge. The Trip charging limit range goes from 90% to 100% (and sometimes 80% to 100%). The implication of that one is that you should only charge that much when you really expect to need the extra miles of range … such as a long trip.

Second, in certain Tesla’s with LFP batteries, they avoid displaying the “Daily” vs “Trip” charging range indicator, and instead simply show a 50% to 100% charging limit range. With this different charging screen, they’re giving people the OK to charge to 100% most of the time.

The real answer (for nerds)

OK, sounds good. But is what Tesla guides the average customer to do really the best way to charge?

The answer to that depends on a few factors. As with many things, the binary fallacy is something to avoid here … there is no exact single good way to charge your car. Charging best practices vary on your particular situation … and mostly on your driving patterns.

Calendar Aging

One main takeaway you should have is that for most drivers, the amount of miles you drive is not the dominant factor in battery capacity loss over time. Instead, it’s calendar aging … aka, the inevitable passage of time.

And, as far as calendar aging goes, it turns out that is that charging to and letting your car sit at around 50% is significantly better for battery health. This is true even of LFP batteries.

The following graphic illustrates this quite clearly.

Ref: Calendar Aging of Lithium-Ion Batteries

But if this is true for LFP battery cars, why does Tesla have a different charging screen for those cars? The answer is most likely because hiding the distinction from consumers encourages simple and mostly acceptable charging behavior.

Tesla doesn’t want customers to get scared off by the idea of having to micromanage their battery health. The truth is that there are all kinds of vectors along which you can keep your Tesla’s battery healthy. LFP batteries behave differently in three major ways from other Li-Ion batteries.

  • LFP are less energy dense. That’s not great.
  • LFP batteries age about half as quickly. This is good!
  • LFP batteries have a particularly flat voltage curve. This makes calibrating them more difficult than other Li-Ion chemistries.

So given all of the above, the reason Tesla took away the daily/trip indicators is that:

  1. They need you to charge the car to 100% every so often to calibrate battery level estimates (due to the flat voltage curve)
  2. They decided that the improved durability of the LFP battery chemistry can handle the additional stress on the battery well enough.

But make no mistake … you can still extend the lifetime of your LFP battery quite a bit by leaving it at 50% or lower as much as possible while parked.

Depth of discharge

The other dominant factor is referred to as depth of discharge (DoD). It turns out that the battery literally physically expands and contracts when charged to full and discharged to empty. This expansion causes microscopic cracking and degradation within the battery.

Basically, charging to 100% greatly decreases the battery lifetime. If you do it repeatedly, it will become the dominant aging factor above and beyond standard calendar aging.

Summary

All in all, a better way to charge a Tesla for extended capacity over time is as follows.

General best practices for maintaining maximum battery capacity

  • Always plug the car in at your home location(s)
  • Use scheduled charging to reach your desired state of charge right when you expect to leave. This keeps the battery at a lower state of charge overall.
  • Set the charge limit to the lowest amount possible that meets your daily commuting needs and whatever buffer you deem psychologically necessary to feel comfortable. In Tesla’s, this can be as low as 50%.
  • If you have a longer day trip planned, raise the charge limit so that you’ll have whatever range you need by the time you leave.
  • Level 2 charging is better than Level 3 “supercharging” for your battery. So keep your supercharging stops to a minimum … use them when you need to top off right away, or when you are road tripping.
  • Keep your car parked in shaded or cool areas whenever possible. Heat ages the battery faster. If you park in a hotbox garage, consider installing a fan to vent the trapped heat.
  • Avoid charging above 80% unless absolutely necessary. I wouldn’t even do it on trips since most of the time you can operate in the 80 to 20 percent range to get to the next supercharger. But if you need to go to 100% to get somewhere with a margin of safety, do it.
  • When letting your car sit overnight or for longer periods of time, try to do it at an SoC of 55% or lower.
  • Unfortunately, I have to recommend avoiding the Scheduled Departure feature as I’ve found it to be unreliable. Use Scheduled Charging instead. Hopefully this gets fixed.
  • I don’t recommend buying any particular model of Tesla if you regularly need to charge above 80%. You’ll find yourself aging the battery, which will require you to charge the battery even more, and so on … which will accelerate a kind of “doom loop” in the aging process.

Personal interpretation

If you want to know what this looks like for me …

I do keep the car plugged in every time I park at home.

I’ve simply gotten used to leaving the charge limit at 50% and setting a scheduled daily departure time of around 8 AM. This usually means the car will start to top off around 2AM to 4AM. I’ve found that for most of our weekend errands, we can be out for most of the day in a 30-45 mile radius around us, and I’ll still get back with 20% battery.

For longer day trips, I will set the charge limit higher … typically enough to reach the destination at 50% SoC … and then draining below that to make our way back.

For long distance trips, I just charge to around 70 to 80 percent. In our experience so far, charging to 100% hasn’t ever actually removed any stops for us on our road trips. Someone needs to take a bio break anyway, or things are just spaced in a way where the extra charge never really helps us.

So this works plenty well for us. We only drive on the weekends right now, so calendar aging will definitely be the dominant factor in our Tesla’s battery capacity loss.

So far, I can’t see any range loss at all on the car after 6 months, so that’s nice. Over time, I hope to see the benefits of this approach with a still relatively high range after a few years!

Posted in Cars, Technology | Tagged , | Leave a comment

How to fix Ubuntu 20.04 on the Lenovo ThinkCentre M920q / ThinkStation P330

I mentioned a few months ago that Ubuntu 20.04 was unstable on my Lenovo ThinkCentre M920q. 18.04 worked fine, so I kept it on there until development circumstances forced me to upgrade.

I took a gamble that the issue might have been fixed in a point release … but no such luck. Luckily, I came across a thread at Lenovo’s forums where a user discovered that disabling the audio in the BIOS appeared to prevent the random hangs after install. This so far has done the trick for a day or two, although I can’t guarantee it completely. But looks promising!

So now I’m back to working off a nice 8 core ultra SFF PC instead of the older 4 core I was about to switch to. Hooray!

Posted in Technology | Leave a comment

How to REALLY fix Chrome Remote Desktop on Ubuntu 18.04

So, as I hinted in my last post, I’ve been fixing up an Ubuntu machine to do some development on.  This machine needs to be headless because it isn’t my primary development machine, and running a VM everywhere I have a Mac has become incredibly painful and slow … especially with having to keep them all up to date.

The first problem here is that basically every free remote desktop solution I’ve tried is ALSO incredibly slow and painful.  Except for Chrome Remote Desktop, which is doing something reasonably smart and encoding the screen with VP8 to send to the remote client.

However, the problem with Chrome Remote Desktop is that it’s configured by default to login on a completely separate X desktop from the logged in user.  Which … I don’t know, maybe I could get that to work, but also it makes it really weird when I’m trying to troubleshoot back and forth on the computer directly vs a headless login.

I found a post titled “How to Install Chrome Remote Desktop on Ubuntu 18.04” and it really seemed like it was going to fix all of the above by modifying the startup script to point at the logged in display number.  Sadly, it really didn’t end up doing that at all.  But at least pointed me in the right direction!

What the aforementioned script does is tell you to look at your current X display number and just hardcode that into the script.  This ends up not working at all, because in my experience, the logged in display number isn’t a constant thing, even if you enable auto login.  So the script just ends up failing with nonsense that you have to dig out of the logs.  In fact, it’s sort of worse that not working because it appears to work at first when you try it out for the first time, but as soon as you reboot you might just lose access to your machine completely when you need it the most.

The solution to this I came up with was to A. auto login my user and B. modify the script to wait for the logged in user and retrieve the actual display number before continuing.

There are, of course, caveats with this whole approach that could use additional hardening, but it’s “good enough” for what I need to do, so I’ll just leave it at that.

So, in addition to the script modifications in the above linked post, look for where FIRST_X_DISPLAY_NUMBER is hardcoded in the script. Instead of replacing it with a hardcoded number, use the following code:

FIRST_X_DISPLAY_NUMBER = None
for x in range(0,10):
    if x > 0:
        time.sleep(10)
    W_OUTPUT = subprocess.check_output("w")
    print("W_OUTPUT: {0}".format(W_OUTPUT))
    W_OUTPUT_LINES = W_OUTPUT.splitlines()
    if len(W_OUTPUT_LINES) < 3:
        continue

    FIRST_USER = W_OUTPUT_LINES[2]
    print("FIRST_USER: {0}".format(FIRST_USER))
    FIRST_X_DISPLAY_NUMBER = FIRST_USER.split()[2]
    print("FIRST 1: {0}".format(FIRST_X_DISPLAY_NUMBER))
    if FIRST_X_DISPLAY_NUMBER is None:
        continue

    FIRST_X_DISPLAY_NUMBER = FIRST_X_DISPLAY_NUMBER.strip(":")
    print("FIRST 2: {0}".format(FIRST_X_DISPLAY_NUMBER))
    FIRST_X_DISPLAY_NUMBER = int(FIRST_X_DISPLAY_NUMBER)
    print("FIRST 3: {0}".format(FIRST_X_DISPLAY_NUMBER))
    break

And voila!  Chrome Remote Desktop will start on whatever X display the logged in user is on.

Posted in Uncategorized | Leave a comment

Ubuntu 18.04 – how to fix auto login

I always joke that when a new release of Ubuntu comes out, it’s time to f*** up all my computers. It’s funny only because it’s true.

The plan had been to use 20.04 when it came out last week, but as it turns out, it’s completely unstable on the target hardware I had in mind, but 18.04 luckily doesn’t seem to have the same problem. That’s a discussion for later.

Today’s post is a quick note on fixing auto login in Ubuntu 18.04 (although there’s a good chance this is still an issue in 20.04).

It seems that simply going to Settings/Details/Users and checking auto-login doesn’t really do the trick. Subsequent reboots would leave the computer at the login screen randomly … seemingly triggering the bug often after issuing a manual reboot command, but sometimes working properly if rebooting via the GUI (gnome desktop manager, the default for 18.04).

Anyway, what fixed it for me was this link. The auto-login switch sets the AutomaticLoginEnable and AutomaticLogin entries, but enabling the TimedLogin variables is what made things start working.

Posted in Uncategorized | Leave a comment

Working around pfSense Unbound DNS race condition on startup

I previously wrote an article on how well pfSense has worked for me.  I’ve so far managed to get it to do everything I have thrown at it, short of integrating fully with my UniFi based network.

There is one very annoying problem I ran into over the past year.  pfSense frequently fails to start now with a race condition related to the DNS server it runs (unbound).  the error is something like the following.

rc.bootup: The command ‘/usr/local/sbin/unbound -c /var/unbound/unbound.conf’ returned exit code ‘1’, the output was ‘[1564567621] unbound[28399:0] error: can’t bind socket: Can’t assign requested address for <ipv6 redacted> port 53 [1564567621] unbound[28399:0] fatal error: could not open ports’

I suspect this is a race condition related to bringing up various VPN or VLAN interfaces.  Fortunately, because pfSense has been so stable, I haven’t ever run into this problem outside of a attended restart.  However, I would have to connect to the server and start the unbound DNS service by hand.

Anyhow, for whatever reason, this hasn’t come on up on the radar of the pfSense developers to fix.  So what else could we do?

It turns out a pfSense package exists called Service Watchdog.  It monitors selected services and restarts them if they aren’t running.  So the workaround is simple.  Install Service Watchdog, monitor the DNS service, and it will keep kicking unbound until everything is up and running.  Usually just on the first retry.

And with that pfSense is back to being the appliance I need it to be.  Hooray!

Posted in Networking, Technology | Leave a comment

Adventures in cooling the UniFi US-8-150W

After hearing about Apple discontinuing further development of the Airport Extreme, I decided to switch to Ubiquiti’s UniFi line of wireless gear about a year and a half ago.  The internet is full of great reviews, so I didn’t need much prodding.

Well, suffice it to say that I’m a fan.  I can get into the details later, but, for now, this post is about one very specific problem and how I fixed it to my satisfaction.

The problem

I am in the fortunate/unfortunate position of having all my cabling home run back into an On-Q structured enclosure.  This enclosure has very little room for extra cooling or power.

IMG_5422

My On-Q enclosure

These enclosures are only a few inches deep and a bit hard to work in.  Not anywhere near as nice as having a whole room or a closet dedicated to a rack mount.  But, on the other hand, there’s a small ecosystem of On-Q stuff that makes them still much better than nothing at all … provided you are willing to pay extra for everything.

us-8-150w-1_1024x1024

UniFi Switch 8 (150W)

The switch I have in there now is Ubiquiti’s US-8-150W.  It provides 802.3at Power over Ethernet to all of the ports in my condo.  I’m lucky this product exists, because the next step up is rack mount sized and wouldn’t fit very well in the enclosure.

Anyway, a lot of people have noticed how hot the US-8-150W gets … myself included. At times, I would notice the switch getting up to 73C in the controller software when I was out for the day and the AC wasn’t running.  Locating the switch in an enclosure like this is basically the exact opposite of what the documentation tells you to do.

Now … 73C isn’t that bad, but I know most parts are rated around 70C and my OCD was kicking in.  So I set out to figure out how to get this thing cooler.

Research
I found the following threads (and a few others):

US-8-150W Fan Mod

Is there a problem with US-8-150W switches?

US-8-150W Temperature Range – Is the datasheet wrong?

From these threads, I found a few creative approaches … several folks who simply pointed various fans in different ways at the switch, some who attached cpu heatsinks to the top case (both active and passive), and even some who bothered to open up the case and try adding an active fan.

In any case, it was nice to see the concern about heat was shared by quite a few people and not just myself.  The US-8-150W, if you didn’t know, is passively cooled.  This is one of its great assets, since it runs silent, but also contributes to a high operating temperature.

Potential solutions

With some extra information under my belt, I considered the following options.

  1. Attach passive heatsinks: An appealing option due to the somewhat lower invasiveness and not requiring any moving parts or power.  However, removing the adhesive could be a bit of a pain if I ever needed to use this switch in a different environment or resell it.
  2. Attach a low profile blower fan to the top case: A very appealing option once I discovered the right fan – the AC Infinity MultiFan S2.  It has rubber feet and adjustable speeds, plus the profile was about an inch.  Perfect fit!
  3. Attach a regular fan to the top case: The AC Infinity MultiFan S3 is basically just like the S2, but with a regular fan.  While it would be a better option in an open air environment (larger fans produce more airflow with less noise, especially compared to blowers), it just wasn’t a very practical option due to the low profile of the enclosure.  I ruled this out pretty quickly once I found the blower fan existed.
  4. Attach some small fans to the side vents: I ruled this out because, while it would be effective blowing into the case, trying to mount them for effective airflow and still support the switch on its side in the enclosure would be very awkward.  Also, I wanted to avoid any potential dust buildup inside the switch if it wasn’t necessary for my target temperature.
  5. Attach some small fans to the unused enclosure cabling holes to vent air: In an enclosure like this, it seemed like a good idea to try actually moving air through the enclosure instead of just blowing hot air around inside.  While I didn’t decide against this, I figured I could try other easier approaches first before going down this path.

In the end, I decided to order the passive heatsinks (along with various thermal pads and adhesives) and the blower fan and experiment with the results.

Initial testing

The first thing I did was establish a baseline of 69C.  This was at night with the enclosure closed so that heat would build up to a steady state inside.  All further tests were run by allowing the switch inside to reach a steady state temperature.

First, I tested the fan on the top case, as seen in my enclosure photo above.  I was able to strap it on pretty easily.  With the fan speed set to low, this lowered the temperature to 65C.  Not quite as good as I had hoped.

Next, I raised the fan speed to medium.  This lowered the temperature to a mere 64C.  Since I didn’t want a noisy fan to begin with, and raising the fan speed wasn’t scaling very well, I didn’t bother raising the speed to the high setting.

At this point, I was poking around the switch and noticed that the bottom was unusually hot … hotter than the top had ever felt!  So I tried something different and placed the fan UNDER the switch’s bottom.  This was somewhat awkward to pull off in the enclosure, but certainly doable.  To my surprise, this dropped the temperature to 60C!

Now that piqued my curiosity.  It seemed pretty clear that the CPU was thermally interfaced to the bottom of the switch.  It was time to open the thing up anyway.

Opening the US-8-150W

Opening the US-8-150W is pretty easy.  Simply unscrew the two screws on the back, and slide the top case forward a bit to unlatch.  Then lift the top off, being sure to disconnect the header for the front panel as you do so.  There’s some resistance sliding the top forward that may require a bit of prying, but that’s really all you need to do.

IMG_5425

The CPU is thermally interfaced to the bottom of the switch

Voila! Confirmation, as you can see on the middle left beneath the CPU.  Funny because basically every attempt I’d seen at cooling the US-8-150W involved cooling the top case.

This brought me to my final step.  I didn’t really want to flip the switch over to cool it … and, besides, was there any reason I couldn’t just interface the passive heatsink inside to the top case?  I had several 100mm x 100mm x 1mm thick thermal pads that I had intended to use with the passive heatsinks, so I decided to see what I could do with them.

IMG_5428

Thermal pads applied

The passive heatsink is about 60mm x 60mm.  Simply cutting a single 100mm x 100mm pad into 4 pieces and stacking them up wasn’t perfect, but it would be enough for my testing.

After laying down the pads one at a time and gingerly sliding the case off and on, I determined a 4 mm thickness seemed adequate.  Also, because the top case doesn’t go straight down onto the bottom case, I found that placing the pads offset about 10mm to the front was a good idea.  By doing this, putting the top case back on and sliding the case back to latch it would “smush” the pad into approximately the right position.  (P.S. If I did this again, I’d just use a 4mm thick pad)

Finally, the moment of truth.  After putting everything back together, the CPU temp was a mere 62C without any fan attached!  The top case also had a much hotter area above the CPU as you would expect.  Simply adding the thermal pad had dropped the temperature 7 degrees!

Frankly, that level of temperature drop was good enough for me.  But since I still had the fan around, I placed it directly over the top case hotspot on low speed.  This reduced the CPU temp to 59C.

At this point, I didn’t feel like I needed any more improvements, and closed everything up for good.

Conclusion

First, the thermal interface to the bottom of the switch is important.  It means that if you want a zero effort way to improve cooling, you should try to cool the bottom of the case first and not the top (although blowing air through the side vents should still be quite effective).  Most of the ad-hoc approaches I saw were probably unaware of this fact.

Second, it turns out that simply interfacing the passive heatsink to the top case via a 4mm thermal pad is a shockingly effective way to lower CPU temperatures inside the US-8-150W.  Now you’re utilizing both the bottom and the top surface area to dissipate heat, plus exposure to free air flow is greater as well.  This all has the bonus of requiring no moving parts or extra power and is basically a “strictly better” kind of fix.

Third, I am quite sure that this mod could be performed on other UniFi products as well, especially the US-8, US-8-60W and USG-3P.  I don’t know if my cooling requirements for those products and others require me to go perform a mod on those just yet, but you may find it useful.

Posted in Networking, Technology | Leave a comment