Finding Capacitors for PlayStation 1 Power Supply

I recently decided to replace the electrolytic capacitors in the power supply of my original PlayStation. This is preventative maintenance because over time the fluid from the capacitors can leak out and cause corrosion to solder pads and traces on PCBs. My Life in Gaming’s “Analog Frontiers Part 2” video details of the risk and challenges around keeping older hardware from destroying itself.

Where is a good place to find capacitors? Amazon, eBay, Mouser, Digikey, and Newark are all common places to purchase electronic components. But Console5.com has made a name for itself by selling complete capacitor kits for hundreds of consoles, computers, arcade boards, and more. They have become the first place to stop when looking for capacitors for older consoles.

In my case, I needed a kit for a ETXNY209A1B power supply from an SCPH-7501 model PlayStation. This PSU had the following electrolytic capacitors:

IdentificationCapacitanceVoltage
C003120 μF200V
C102560 μF25V
C103560 μF25V
C104220 μF25V
C105220 μF25V

Console5 did not have a specific kit for my power supply, but the detailed information in their wiki allowed me to find a kit that would work. The ETXNY169A1B PSU kit had the same capacitors plus an extra 1 μF capacitor my PSU did not need. With capacitors in hand, the next step was to heat the soldering iron and remove the old caps. More on that later.

Have Fun.
-Tony

Thrustmaster T300 workaround for GT Sport

If you are wanting to get into racing on Gran Turismo Sport using a wheel, there is one important thing you need to know. GT Sport does not allow the player to adjust the wheels’ maximum rotation range like many other games. This isn’t a big issue in earlier versions of Gran Turismo if you use the popular Logitech G25 and G27 Driving Force™️ wheels. They have undocumented button combinations to manually set the maximum rotation. 

Gran Turismo Sport is different. The game is on PlayStation 4 and doesn’t support Logitech’s older wheels. The G29 Driving Force™️ is Logitech’s replacement and, sadly, doesn’t have the button combinations its older siblings have. If you use the G29 to place GT Sport you will be stuck using 900 degrees of rotation in many of the cars. 

Thankfully, there is another wheel that solves this problem. Thrustmaster, the company behind detailed flight simulator controls, sells the T300 RS race wheel for PS4 owners. While the wheel features 1080 degrees of rotation, it also has a MODE button. Holding the button and pressing left or right on the D-pad allows you to change the max rotation from 1080 degrees down to 270 degrees. Thrustmaster even documents this feature on the support site http://ts.thrustmaster.com/faqs/eng/thr_eng_00155.pdf. This effectively recreates the features racers of the G25 and G27 used in Gran Turismo 5 & 6 for the PlayStation 3. 

There was an important note in that support document, “This tip will not function properly in some games (such as GRAN TURISMO®) which adjust or modify the angle of rotation at startup or the restart of each race, according to the type of car being used.” That statement is true with GT Sport. Every time the game is in control of your car (auto-drive in the pits, rolling starts, pausing/unpausing the game, etc.) Gran Turismo Sport will reset the T300 RS’s max rotation back to 900 degrees in most cases. Once you are in control of the car you can use the button combinations to reset the rotation setting.

That is the important tip to remember. When you are in control the of the car you can change the T300 TS max rotation using the MODE button combinations and it will not change until the next time the game take control.

I hope you found this post interesting. 

Have fun. 
-Tony 

Updating Ruckus AP DNS Settings

I ran into an issue recently while trying to do some cleanup on a Ruckus SmartZone wireless controller. We migrated to new AD servers, which also doubled as DNS servers and included assigning new IP addresses to our controllers. All devices on our network with static IP settings needed to be updated. Servers and switching hardware weren’t difficult because we could script the change. Our Ruckus APs were more challenging. With 400+ APs to touch, making the change by hand wasn’t practical. There had to be a way to script the change. No problem. The Ruckus SmartZone controller had an SSH interface. It was pretty easy to get into settings of an AP config, so I could just change the DNS settings, right?

Or Not. It turns out you can’t just change the IP settings of an AP on the SmartZone controller. You can swap from static to DHCP and back, but that results in two reboots of the AP as it reads the config changes. There had to be another way.

I opened a ticket with Ruckus support to see if they had any suggestions. One option proposed was to use the “remote ap-cli” command to set the DNS settings directly on the APs themselves rather than in the config on the controller. Was that a solution? Yes, but if that APs were ever to reset, they would get the old settings from the controller. There had to be another way.

I then talked to our Ruckus Systems Engineer about the problem. He suggested I look at the SmartZone API. The API did have a command to change the IP settings, so I set out figuring out how to use it.

NOTE: Today, you can read through the SmartZone API documentation without a Ruckus support account, but I’ve been told that may change in the future. http://docs.ruckuswireless.com/smartzone/5.1.1/vszh-public-api-reference-guide-511.html

Now, I am not a developer or programmer. My official code learning stopped at VB.Net in 2005, but I’ve been using PowerShell for years to perform Windows and Active Directory management. From a talk I watched by Jeffery Snover (father of PowerShell), I know there are two useful functions I can use to talk with web-based APIs: Invoke-WebRequest & Invoke-RestMethod. Invoke-WebRequest can be used to get a session cookie needed to execute other API commands. Invoke-RestMethod is very similar to Invoke-WebRequest but can automatically parse JSON or XML data and turn them into PSObjects. With that knowledge in hand, I got started.

First, I had to get a web session.

$uri = "https://:8443/wsg/api/public"
$logonuri = $uri+"/v8_1/session"

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json;charset=UTF-8")

#logon
$body = @{"username"="admin";
    "password"="";
    "timeZoneUtcOffset"="-05:00"
    }

$json = $body | ConvertTo-Json


###Requesting a web sessions and adding the cookie to the header file doesn't work in Windows PowerShell 5.1
###Instead HTTPWebRequest from .NET has to be used and pass that session to all the subsequent PowerShell commands.
$webrequest = Invoke-WebRequest -Uri $logonuri -Headers $headers -Body $json -Method Post -SessionVariable websession

Next, I retrieved a list of all the APs managed by the controller. By default, the command paged the result to 100 items at a time, but I could easily loop to capture all the APs.

###Get all the APs on the controller###
$index = 0
$aps = @()
$apsuri = $uri+"/v8_1/aps?index=$index"

do {
    $response = Invoke-RestMethod -Method Get -Uri $apsuri -WebSession
    $websession -Headers $headers
    $aps += $response.list
    $index += 100
    $apsuri = $uri+"/v8_1/aps?index=$index"
} while ($response.hasMore)

Now all I had to do was retrieve the IP settings of each AP, create a JSON object with the new IP settings, and PATCH is back to the controller

#Example DNS addresses
$DNS1 = "1.1.1.1"
$DNS2 = "1.0.0.1"

foreach ($ap in $aps){
    $apuri = $uri+"/v8_1/aps/"+$ap.mac
    $ap = Invoke-RestMethod -Method Get -Uri $apuri -WebSession $websession -Headers $headers
    $oldnetwork = $ap.network

    if ($oldnetwork.ipType -eq "Static") {
        $newnetwork = @{
            "ipType"="Static"; "ip"=$oldnetwork.ip;
            "netmask"=$oldnetwork.netmask;
            "gateway"=$oldnetwork.gateway;
            "primaryDns"=$DNS1;
            "secondaryDns"=$DNS2;
        }
        $networkjson = $newnetwork | ConvertTo-Json

        $networkuri = $apuri+"/network"
        Write-Host "Updating $($ap.name)"
        Invoke-RestMethod -Method Patch -Uri $networkuri -WebSession $websession -Headers $headers -Body $networkjson 

        Remove-Variable networkjson
    } else {
        Write-Host "$($ap.name) is not using static IP settings"
        $notstatic += $ap
    }
}

That’s it. In a matter of fewer than 60 seconds, I was able to update the DNS settings on all the APs managed by our Ruckus Smartzone controller. This was just the start of what is possible through the Smartzone API. If I only wanted to modify APs in a specific zone, I could narrow the AP retrieval down by performing something like this.

###Get all the APs of a zone###
...
$apsuri = $uri+"/v8_1/aps?index=$index&zoneId=<INSERT ZONE ID HERE>"
...

I hope you found this interesting. If you want a complete PowerShell file to play around with, check out my GitHub repository found at https://github.com/agizmo/SmartZone-AP-DNS-Update

Have Fun.
-Tony