Upgrading my EleksTube clock

How I turned a sketchy EleksTube clock into a nice one

For Christmas in 2024, I got an EleksTube clock from my dad. I didn't ask where he got it, since it is not an official model but a clone called PunkCyber IPS.

I would have liked to talk about this clock before, but I didn't have a good opportunity to do so. I am doing so now because I needed to update its software and had the chance to take pictures of it while disassembled.

At a glance, a USB-powered device with six small LCD screens and network connectivity seems really cool. However, I immediately noticed some problems: I needed to download a sketchy app to configure it, and all the instructions were in Chinese. The physical buttons could not be used to set the time and so only via Wi-Fi...

Time for investigation

This was not a great start for simply setting the time on a clock. So I immediately searched online to see whether alternative software existed that I could install to run open-source firmware on it. I first looked at the official firmware, but it was impossible to connect the clock to it via Wi-Fi. Since this is a clone version, using the official firmware did not seem like a good idea anyway.

I found EleksTubeHAX, a popular project with cool features: Home Assistant connectivity, synchronisation with the correct time zone via IP, and more. It also contains a wealth of information about all clock versions, including my PunkCyber IPS.

This version has one problem: it has an empty soldering header and is missing a CH340 chip. As you might guess, this chip is necessary to communicate with a PC for downloading and updating the software.

The project's README describes two solutions: use an external UART-to-USB adapter or solder the missing components. I chose the first option because it was easier. I was not very confident in my soldering skills, and I didn't want to break a Christmas gift.

Soldering and connection

I already had a soldering iron, but I still needed a few parts: it was time to place an AliExpress order! I got a FT232RL module with USB-C and some pin headers for a neat setup.

There is not much to explain here: I soldered the pin headers underneath so that they are not visible from the top. They will only be useful when I want to update it, so I will need to disassemble the device to connect the external module.

The pin headers in place, not visible because they are underneath
Don't look at the big pile of tin

Now I can connect the PCB to the UART board. Ensure that you follow the table below carefully.

Pin PCBPin UART
GGND
RRx
TTx

The board needs to be put into download mode. To do that, short and then release the BOOT pin while the device is powered via USB-C. To make this work reliably, I reproduced the setup described in the README with a simple button.

If the clock is in the download mode, screens are not turned on.

Back up and install the new software

I will not go into all the installation details, since they are documented in the project's README. However, I encountered a few problems worth knowing about. I did the installation on Windows, but I expect it can also be done easily on macOS or Linux.

First, download the latest version of the project's source code. It includes scripts to back up the existing firmware, which is important if something goes wrong. Go to the firmware folder and edit the command file corresponding to your model.

FileClock model
_ESP32 save flash 4MB.cmdAll clocks with 4MB flash
_ESP32 save flash 8MB.cmdIPSTube
_ESP32 save flash 16MB.cmdMarvelTubes, MarvelTubes Gen2

Open Device Manager to find the COM port number, then adjust the command file to use the same number.

Now run the command file. If everything goes well, you should see something like this:

Install VS Code with the PlatformIO IDE plugin. Open the project folder and rename the file include/_USER_DEFINES - empty.h to _USER_DEFINES.h. Then adjust the settings to match your needs. I only enabled the Home Assistant feature, using the IP address of my Raspberry Pi (which runs Home Assistant OS) and the MQTT settings from the Home Assistant MQTT integration.

Choose the environment corresponding to your model in VS Code's bottom bar, then build and upload the firmware and data. Finally, reboot it by unplugging and reconnecting it.


This was not a big modification or side project, but I enjoyed turning an imperfect device into something that fits better with my existing setup. I am really happy with the result: a nice clock sitting below my monitor.