Philips PerfectCare Aqua does not pump [SOLVED]

The PerfectCare Aqua is a steam generator iron made by Philips. My model GC8620 had a strange problem: it would heat up the iron and I could hear the steam chamber heating up also, but when I pressed the trigger on the iron (after the steam chamber made no more noise and it was at the right temperature), the pump would not work. No water being pumped to the steam chamber meant no steam 🙁

The printed circuit board looked very clean, no discolorations or defective looking components. The solder side (underside) is coated with conformal coating, not a stupid idea, water and electricity are not friends.

When I bridged the blue wire coming from the pump (point 9008 Blue Wire Pump Ctrl) to neutral (point 9003 Flex Neutral), the pump worked, so I suspected it had to be the board.

The Service Manual is not very helpful, it only indicates part 39 as the Power board PCB-Pump service kit with service code 4239 022 67101. The PCB has marking FLORIDA CONTROL BOARD V3). The power board is sold together with the pump for about €80. You can also get the board alone (423902267101) for about €65, but still a bit pricey if probably only one simple component on the board is defective!

When I measured the DC voltages on the board I noticed the 5V rail sagging frequently to about 3,5V and the 54V rail sagged to about 21V. Before going down the rabbit hole and looking for a defective component suspect of pulling the voltage supply down, I decided to take a closer look to at the power supply circuitry.

The DC power supply is made up of a simple capacitive dropper: Resistor 3001 (56R) in series with capacitor 2002 (0,47µF) is being rectified  via diode 8001 to buffer capacitor 2003 (100µF). I desoldered capacitor 2002 and bingo: I measured only about 100nF and that is not OK.

MPX ETC X2 0.47µF 275V

After replacing capacitor 2002 with a new one, the pump worked again! I decided to go for a Würth Elektronik 890334025039CS: 0,47µF X2 310V (in stead of the 275V original). Make sure you get an X2 MKP (Metallized Polypropylene Film).

This solution should also apply to other Philips PerfectCare Aqua models:

  • GC8615/02
  • GC8630/02
  • GC8635/02
  • GC8620/02
  • GC8622/20
  • GC8636/02
  • GC8640/02

Throwaway MySQL Server in Docker

I had a MySQL database backup that I wanted to restore to a temporary MySQL Server instance so I could browse through the tables and perform some small queries. For this I needed a “throwaway MySQL Server”.

The following steps enable you to install a temporary MySQL Server in a Docker container, import the SQL dump, poke around in the DB and finally throw it all away cleanly. I used Debian 8, but I guess any Unix will do just fine.

  1. Install docker with this easy script:
    $ wget -qO- | sh
  2. Add yourself to the docker user group, then log out and log in again.
    $ sudo usermod -aG docker myusername
  3. Start the MySQL Server 5.5 instance:
    $ docker run --name temp-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.5
  4. Check the instance is running:
    $ docker ps
    CONTAINER ID  IMAGE     COMMAND                 CREATED         STATUS        PORTS     NAMES
    791ae858ac8f  mysql:5.5 "/ mysql"  19 seconds ago  Up 18 seconds 3306/tcp  temp-mysql
  5. Start the MySQL command line client, connect it to the docker instance running the MySQL Server (–link) and mount the SQL dump file from your home directory in the container (-v):
    $ docker run -it --link temp-mysql:mysql -v ~/my_db_dump.sql:/root/my_db_dump.sql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

    …and you get a MySQL prompt:

    Server version: 5.5.47 MySQL Community Server (GPL)
    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  6. Create the new database, load the SQL dump file and query away:
    mysql> create database tempdb;
    mysql> use tempdb;
    mysql> source /root/my_db_dump.sql;
    mysql> show tables;
    mysql> ....
    mysql> quit;
  7. When you are done, you can stop and remove the docker container:
    $ docker stop 791ae858ac8f
    $ docker remove 791ae858ac8f

For inspiration I used Getting Started with Docker and mysql from the Docker Hub.

A20-OLinuXino-MICRO 5V SATA MOSFET repair

I have an Olimex A20-OLinuXino-MICRO board that I use for running embedded Linux (Debian). It is a very nice board with an Allwinner A20 dual core ARM processor, 1GB RAM and a lot of connections. The features I like the most are the SATA connection and the integrated LiPo battery charger. It is like a uninterruptible power supply on board!

Unfortunately both the 5V connection for the SATA drive and the LiPo battery connection are close to each other and they have exactly the same female JST connector. You  can probably guess what went wrong: I connected the LiPo battery to the 5V SATA connector and I plugged the 5V cable from the SATA drive into the LiPo connection on the PCB 😮

Luckily, plugging in the 5V for the SATA drive into the LiPo battery connection did not damage the drive, nor did it damage the pretty complicated AXP209 power management chip on the Olimex board. Alas, the 5V SATA power connection was dead, it did not provide the 5V for the drive 🙁

Luckily all Olimex hardware is open source and that is yet another reason I love this Bulgarian company! On the A20-OLinuXino-MICRO wiki page you can find a lot of information, including a link to their github repository that also includes the full schematic!

The schematic for my Rev.E board show that the SATA 5V is switched by an MOSFET with part number FET4.


I was able to temporary restore the 5V by bridging jumper 5V_E_SATA with a bit of solder:

FET4 on the A20-OLinuXino-MICRO

It was pretty clear that FET4 (the IRLML6402) was defective, and to fix that permanently, it needed replacing. After a few days, I received ten replacement FETs from eBay (US $2) and it was time for my first SMD repair job:

IRLML6402TRPBFRemoving FET4 was pretty easy. I then cleaned up the solder pads with solder wick and flux.

FET4 and 5V_E_SATA pads cleaned up on the A20-OLinuXino-MICRO

It was not perfect, but the pads were flat enough to receive the new FET.

FET4 replaced on the A20-OLinuXino-MICRO

After that, the A20-OLinuXino-MICRO worked perfectly like before.

Enabling HSTS in Apache 2.4

After securing one of my servers with Let’s Encrypt, I was a bit disappointed that my website only got an A result on the Qualys SSL Server Test. Why did I not get the much sought-after A+?

Browsing the Protocol Details of the report, I discovered that my website was lacking Strict Transport Security (HSTS) support. This is how I enabled it on my Apache 2.4 web server running on Debian 8:

First, enable the Strict Transport Security in your SSL VirtualHost file (mine was /etc/apache2/sites-enabled/000-default-le-ssl.conf):

<VirtualHost *:443>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

Then, enable the Headers module on the command line and restart apache:

# a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
service apache2 restart
# service apache2 restart

After that, congratulate yourself on that well-earned A+ score!

Moving files to subdirectories based on date in the filename

My camera produces JPG files that have date and time information in the file name. I want to  move the files to new subdirectories per year, month and day.
IMG_20150723_233831.jpg -> 2015/07/23/IMG_20150723_233831.jpg
IMG_20151001_174215.jpg -> 2015/10/01/IMG_20151001_174215.jpg

I wrote this small perl script to perform this task:

# Move files to new subdirectories based on file name.
# CC BY SA 2015, Lieven Blancke
# my camera produces JPG files named IMG_yyyymmdd_nnnnnn.jpg
# I want to move these files to subdirectory per year, month and day
# IMG_20150723_233831.jpg -> 2015/07/23/IMG_20150723_233831.jpg
# IMG_20151001_174215.jpg -> 2015/10/01/IMG_20151001_174215.jpg
use strict;
use warnings;
use File::Copy;
use File::Path 'make_path';

my $directory = './';

opendir (DIR, $directory) or die $!;

while(my $file = readdir (DIR)) {
	# ignore files beginning with a period
        next if ($file =~ m/^\./);
	# only files, no directories
	next unless (-f "$file");
	# only process files like IMG_yyyymmdd_nnnnnn.jpg
	if ($file =~ /^IMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]{6})\.jpg$/) {
		print "$file -> $1/$2/$3/$file\n";
		# create the directory $1, $1/$2 and $1/$2/$3 in one go
		# move the file to the directory
		move($file,"$1/$2/$3/$file") or die "Could not move file $1 to directory /$2/$3: $!";


D-Link DGS-1500-20 DHCP problem fixed

I had a very strange problem in my home network: some wired hosts did not get an IP address from my wireless router. After some sniffing with Wireshark, I concluded that this problem only occurred with hosts that were connected to my D-Link DGS-1500-20 gigabit Ethernet switch. Hosts that were connected to my wireless router received an IP address via DHCP without any problem.

I did not find any settings in the DGS-1500 that could fix this problem and even a factory reset (pushing the reset button) did not fix it. Eventually I was able to fix this problem by updating the stock firmware 1.00.013 to version 2.51.005!

Configuring the Cisco SPA112 2-Port Phone Adapter for 3starsnet VoIP

The Cisco SPA112 is an Analogue Telephone Adapter, you can configure this device to enable internet telephony (VoIP) for up to two analogue telephones.


After plugging in the power, ethernet cable and analogue telephone, you can check the DHCP status of your internet (Wi-Fi) router for the IP-adres of the SPA112. I actually used the Network Discovery Android app to discover the device on my home network.

Administration Setup

The default login and password are admin and admin. Skip the Quick Setup and change the password via Administration > Management > User List. Change the password for the cisco user as well.

I downloaded the latest firmware from Make sure you read the Release Notes included in the downloaded ZIP file before flashing the device via Administration > Firmware Upgrade. My version is 1.3.5 (004p_XU001).

Via Administration > Management > Web Access Management, I changed the Web Utility Access from HTTP to HTTPS. This made the web interface inaccessible and I had to perform a factory reset. As I only will be accessing the SPA112 via the LAN, I guess it is better to leave this setting on HTTP.

Network Setup

Via Network > Basic Setup > Internet Settings I changed the Connection Type from DHCP to Static IP. I set the right time settings Network > Basic Setup > Time Settings. I did not change any of the Advanced Settings.


Go to Voice > Line 1.

f you are behind a NAT Router (you probably are) then it is recommended to enable NAT under NAT Settings:
  • NAT Mapping Enable:        Yes
  • NAT Keep Alive Enable:     Yes

Proxy and Registration

  • Proxy:

Subscriber Information

  • Display Name: 3starsnet
  • User ID: <your 3starsnet telephone number>
  • Password: <your 3starsnet password>

Backup Configuration

Go to Administration > Config Management >  Backup Configuration and save a backup on your PC.

Extracting audio from a YouTube video using avconv

You can download YouTube videos with the NetVideoHunter Firefox add-on. After installing the add-on, you can download a YouTube video by clicking the icon.


By default the add-on downloads the best available quality from YouTube, that is very convenient.

The downloaded file has an mp4 extension.  Using the libav command line tool avconv, you can extract the audio without transcoding. This way the process is very fast and the audio quality remains the same:

avconv -i testvideo.mp4 -codec copy -vn testaudio.m4a

The -codec copy option makes sure the audio is extracted without conversion an the -vn option excludes the video being written to the output file.

To install avconv on Debian:

sudo apt-get install libav-tools

Fix fraying shoelaces with heat shrink tubing

Normally the ends of shoelaces are protected with plastic caps to prevent them from fraying, but they sometimes break and get loose. Once the ends of shoelaces start fraying, it is very hard to put them through the tiny holes of your shoes.  This is an easy fix:

  1. Get some glue, the right size of heat shrink tubing and a heat gun (or a lighter)
  2. Put a little amount of glue on your finger and wet the ends of the fraying shoelaces with it.
  3. Cut a suitable length of heat shrink tubing and shove it over the end of the fraying shoelace.
  4. Apply heat with a heat gun and you are done!

Booting the Asus R556LA laptop from USB

UEFI makes it harder, but not impossible to boot your PC or laptop from USB:

  • Shut down Windows and wait until all status lights on the laptop are out.
  • Press the power button and press f2 (without the fn button depressed) to get into the BIOS (Aptio Setup Utility)
  • If the laptop keeps on booting Windows and does not want to go into BIOS, try shutting it down with a long press (5 seconds) on the power button to shut it down and then power it up and press f2
  • Boot > Fast Boot: Disabled
  • Boot > Lauch CSM: Enabled
  • Security: Secure Boot menu > Secure Boot Control: Disabled
  • Save & Exit > Save Changes and Exit
  • Press f2 again
  • Boot > Boot Option Priorities > Boot Option #1: Generic Flash Disk
  • optional: Boot > Boot Option Priorities > Boot Option #2: Disabled
  • Save & Exit > Save Changes and Exit
  • The laptop should now boot from USB