Category: Infrastructure

  • Mach-E Monitor 12v Notification with Home Assistant

    While there is an official fix for Mach-E’s 12v issues there is a Ford Pass app (unofficial of course) for Home Assistant that allows you to track and set a notification for the 12v battery. (Along with a host of other things.)

    The login process is not super easy but once added the level of integration is excellent and, best of all, includes a readout of the 12v status. From there, setting up a automation triggered by the battery level is fairly straightforward. At the moment, I have it set to notify if the level drops below 40%. Usually the battery cycles around the %60 level, not usually dropping much below there so %40 seems like a good buffer.

  • An F3800 API via MQTT

    First massive massive kudos to https://github.com/thomluther and all the folks working on the https://github.com/thomluther/anker-solix-api/ Anker Solix API. I cannot believe how far they have come in such a short period of time. There is now a usable Sensor API for the F3800 without the need for the power panels or other connections, all that is needed is the base unit.

    At the moment, the MQTT decoding expects a base unit without add-on (official) batteries. (As far as I can read.) The install steps are fairly easy:

    1. Install the HA version of the API via the HACS link.
    2. Log-in using your Anker account.
    3. Enable MQTT via the overall (gear) options.

    And after MQTT runs for the first time the sensor stats will populate. At the moment there aren’t options to edit options on the unit, turning off and on outlets or other options but that isn’t super important in my current use of just powering the mini-servers, networking gear, and chest freezer. It isn’t turning services off and on or trying to load shift in any complicated way.

    This is so useful for finally seeing just how much each server is using, how much solar it brings in, or just how depleted the battery is. The off-grid solar isn’t bringing in enough power during the winter to allow charging the car or dumping extra load anywhere but in the spring and summer this will be hugely useful.

    (Also, note, do not know if this works with the F3800 Plus.)

    Updated and Retried on Home Assistant 2025.11.3 12/03/25

  • Battery Status Aggregation in Home Assistant

    Smart Batteries have their issues but being able to monitor them in Home Assistant is convenient and mostly works well. (Yes, another option is a smart shunt.)

    Fortunately, as usual with Home Assistant, there is an awesome plug-in via HACS, the Home Assistant Community Store, for all these bluetooth BMSes via BMS_BLE-HA.

    Once the batteries are showing in the BLE Management, you can then create a helper to combine the status of these. Now, granted, if these batteries are series and paralleled correctly their charge states should stay very close but this is helpful for a quick look. Also this could be set up to notify you if the voltages or charge states do drift.

    Updated and Retried on Home Assistant 2025.11.3 12/03/25

  • Separate Docker Compose containers as an alternative to TrueNAS

    TrueNAS has running been excellently on a random collection of HDDs, 9th Gen Intel, and older NVidia GPU parts but it can be a lot to manage. Enabling and discovering apps on TrueNAS is easy but, in my experience, fully configuring the apps can be more difficult than than editing Docker Compose files. So when it came time to replace as many cloud services as possible with 1 N150 Mini PC, I decided to use Docker Compose instead of TrueNAS or another more managed solution. Currently the system is running:

    1. Samba file sharing, general file management.
    2. Anytype noting Server.
    3. LEMP Server.
    4. Kimai Time Tracking.
    5. NextCloud Contacts and Calendar Server.
    6. Plex Video Server.
    7. JellyFin Music Server.

    Everything works a treat. Need to implement backups to TrueNAS (which it excels at) but otherwise I find it much easier to manage and add services with single docker-compose.yml files rather than going through a UI. The real test is when I start to try out Kubernetes.

    Updated and Retried on Ubuntu 25.04 12/01/25

  • Ubuntu 25.10 Remote Desktop with Fixed Password and Full Screen Window (VNC alternative)

    Stop: This doesn’t work. Unfortunately on further testing, the keyring doesn’t unlock without interacting via monitor/keyboard.


    This feels unnecessarily difficult. While ideally you interact most servers via CLI the reality is there will be some visual interaction needed for some systms and currently Ubuntu 25.10 does not seem to have easy headless management with x11 gone. Sure you might be able to rip out the keyring but that doesn’t feel good. Annoying. Will keep testing and following up.


    Starting from a reinstall of Ubuntu 25.10 on the N100 Mini PC, more on this interesting little PC later, the script that resets the password works a treat though I don’t have it running automatically.

    There are 2 options in 25.10 Remote Desktop and Remote Login. Now it seems like Remote Login should be what we need, it’s password does not change, but as of this post that login is not working for me whether I have it enabled with Remote Desktop or not. Will dig into that and see if there’s a bug report already.

    Remote Desktop Password Reset Script

    Again credit to LarkinZero for the password updating script. For now, running this on connect. This system will be mobile so having a secure password is a good idea. Just running this via SSH works well.

    #!/bin/bash
    
    SCHEMA="org.gnome.RemoteDesktop.RdpCredentials"
    LABEL="GNOME Remote Desktop RDP credentials"
    USERNAME="abc"
    PASSWORD="123456"
    EXPECTED_VALUE="{'username': <'$USERNAME'>, 'password': <'$PASSWORD'>}"
    
    echo "Step 1: Clearing old credentials..."
    secret-tool clear xdg:schema "$SCHEMA"
    
    echo "Step 2: Storing new credentials..."
    echo -n "$EXPECTED_VALUE" | secret-tool store --label="$LABEL" xdg:schema "$SCHEMA"
    
    echo "Step 3: Verifying stored credentials..."
    RESULT=$(secret-tool lookup xdg:schema "$SCHEMA")
    
    if [ "$RESULT" == "$EXPECTED_VALUE" ]; then
        echo "Success: Stored credentials match the expected value."
        exit 0
    else
        echo "Error: Stored credentials do not match the expected value."
        exit 1
    fi

    Full Screen

    At first, I over-complicated this thinking there needed to be virtual monitor or a dummy plug but really, one setting.

    gsettings set org.gnome.desktop.remote-desktop.rdp screen-share-mode extend

    Not sure why that’s not set out-of-the-box. Without that setting, the RDP connects, is blank, and disconnects. With that setting, all works as expected.

    Updated and Retried on 25.10 11/21/25

  • Hide the TimeMachine SMB to avoid more permissions issues

    Pointing out a key element in the SMB code posted before.

    [smb-name-for-timemachine]
      ...
      valid users = timemachinename00, timemachinename01
      ...

    For the valid users, be sure to:

    1. Create SMB users for each separate system.
    2. Don’t include wider SMB users. If you accidentally click into that share in Finder on OSX, you’ll end up messing up the permissions for any other SMB you have loaded.
    3. If you change users or shares you’ll probably have to delete the old timemachine file and start again. You might be able to fix permissions but probably not worth going down that path.

    So far the setup is working (along with so many other services from the same N150 powered Ubuntu) really well and well worth the 2-3 hours of setup and refining times.

    Updated and Retried with Ubuntu 25.04 and MacOS Tahoe 26.0.1: 11/19/25