Finally, an even better place to work in.
Monday, 2023-05-01
Spring Cleaning (part 3 of n), partially courtesy of another bank holiday.
- Spent a long while faffing about with dust and cleaning rags.
- Checked up on the state of Takahe development. a bit sad to lose a minimal timeline, but that can be worked around fairly easily.
- Dipped into PlatformIO to flash a couple of WeMOS D1s, start soldering stuff and take another go at managing my heat pumps sometime this week.
- Did some 3D modeling to sort out better office furniture arrangements. Looking up sizes in IKEA’s site makes for very quick work indeed.
- Put
borg
back into my server closet, waited until it passedmemtest86
twice and then streamed Horizon Zero Dawn to my living room for over half an hour.CPU
andGPU
temps were both around 52oC, so I’m calling this a first success even without re-enablingXMP
(for which I need to finish myRAM
cooler).
Tuesday, 2023-05-02
Getting a tad annoyed with all the cleaning by now.
- Dismantled and shipped out a (seldom used) exercise bike. Climbing stairs will have to do as exercise, with the side benefit of taking up less precious room in my office.
- Fan cables for my
RAM
cooler arrived, so I leftborg
to its own devices for the afternoon and it managed to to pass a load test inside my closet withXMP
enabled. Will do more load testing during the week.
Wednesday, 2023-05-03
More cleaning. Also attended an all-day remove event, which meant I could spend the time to casually empty out drawers and slowly sort them throughout the day.
- Hacked my ultra lightweight C multicast statistics daemon to have
borg
report internal temperatures so I can keep tabs on how temperature evolves throughout the day. - Since NVIDIA doesn’t expose nice
hwmon
counters (temperature readings are done viaioctl
, and runningstrace
onnvidia-smi
didn’t encourage replicating it), I wrote a (very) minimal Python replacement to reportGPU
temperature and fan speeds as well:
#!/usr/bin/env python3
from time import sleep
from subprocess import run
from json import dumps
from socket import gethostname, socket, AF_INET, SOCK_DGRAM, IPPROTO_IP, IPPROTO_UDP, IP_MULTICAST_TTL
from pynvml import nvmlInit, nvmlShutdown, nvmlDeviceGetFanSpeed, nvmlDeviceGetTemperature, nvmlDeviceGetHandleByIndex
MCAST_GRP = '224.1.1.251'
MCAST_PORT = 6000
MULTICAST_TTL = 2
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
sock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, MULTICAST_TTL)
def get_cpu_temp():
with open("/sys/class/thermal/thermal_zone1/temp", "r") as t:
return float(t.read())/1000
def get_fan_rpm(name="fan1"):
with open(f"/sys/class/hwmon/hwmon4/{name}_input") as rpm:
return float(rpm.read())
def get_gpu_fan_rpm(index=0):
h = nvmlDeviceGetHandleByIndex(index)
# assume this is a 2000rpm fan
return(float(nvmlDeviceGetFanSpeed(h))/100*2000)
def get_gpu_temp(index=0):
h = nvmlDeviceGetHandleByIndex(index)
return(float(nvmlDeviceGetTemperature(h,0)))
def get_loadavg():
with open("/proc/loadavg", "r") as load:
return list(map(float,load.read().split()[:3]))
def get_cpu_usage():
with open("/proc/stat", "r") as counters:
pass # TODO - I don't feel like computing jiffie deltas this late
def get_ram_usage():
with open("/proc/meminfo", "r") as counters:
pass # TODO - ditto for RAM usage
try:
nvmlInit()
while True:
data = {
"hostname": gethostname(),
"cpu_temp": get_cpu_temp(),
"gpu_temp": get_gpu_temp(),
"gpu_fan_rpm": get_gpu_fan_rpm(),
"fan1_rpm": get_fan_rpm("fan1"),
"fan2_rpm": get_fan_rpm("fan2"),
"loadavg": get_loadavg()
}
print(data)
sock.sendto(dumps(data).encode("utf-8"), (MCAST_GRP, MCAST_PORT))
sleep(120)
except KeyboardInterrupt:
nvmlShutdown()
exit()
Thursday, 2023-05-04
Star Wars Day, celebrated by chanting “this is the way” as I cleaned up even more of the office.
- Finally managed (after nearly one year) to plug a Wemos D1 into the
CN105
connector of my Mitsubishi heat pump and control it via Wi-Fi. - Instead of building my own HomeKit shims to control it, I forked this project, which is working OK for me although it lacks a lot of the niceties I’ve grown used to from Tasmota firmware.
- Looked at some nice
borg
temperature charts, decided to do a running comparison withrogueone
.
Friday, 2023-05-05
Moderate feeling of vague accomplishment.
- Assembled some IKEA furniture (I’m finally getting a soldering station, yay!).
- Did a little checkpoint, knocked nearly a dozen items from my to-do lists.
- I think I need to pack in the towel and give up on keeping
borg
shut away in my closet–I now know that the thermals are sort of OK, but theGPU
fan kicks in at 56oC and the machine gets at least that warm on idle during a moderately cool day. There’s a pretty noticeable 10oC upswing when I shut the closet door:
Saturday, 2023-05-06
Coronation day. Celebrated by doing very little whatsoever.
- Printed box labels with my usual stupid trick: Create rectangles in Keynote with the rulers set to centimeters, copy and paste into Preview, print at 100% scale (because Keynote is obtuse about print settings). The wonders of native support for Display Postscript never cease.
- Did some writing.
Sunday, 2023-05-07
- Finished configuring Klipper Adaptive Bed Meshing and set up both SuperSlicer and OrcaSlicer to use it so I can start printing more Gridfinity bins for my new desk drawer.
- Enjoyed my new office, which now has a lot more storage and creature comforts than three years ago, including three distinct desks (one standing):