M.2 UPS PMH — official Customer package V8B5
25 October 2026

APPLICATION V8B5 / 0x08B5. MANUAL V98.
Protected bootloader V88, unchanged, 38400 bit/s.
Daemon 1.6; installer V08; configurator 06; monitor 0B v2.7; updater 01D.

START HERE
Keep stable cable power connected. Copy M2_UPS_PMH_Customer_V8B5.zip to the Pi home directory.
cd ~
unzip -o M2_UPS_PMH_Customer_V8B5.zip
cd ~/M2_UPS_PMH_Customer_V8B5/installer
sudo python3 install_M2_UPS_PMH.py --upgrade
# For a new card, omit --upgrade. Follow any reboot instruction, reconnect:
sudo python3 install_M2_UPS_PMH.py --check

The installer configures Linux and installs tools. It does not flash the MCU,
change battery chemistry or program Pi EEPROM. It supports recognized older
installations with backups; unknown custom services require review.
See Manual V98 for step-by-step assembly, installation, verification and recovery.

DAILY TOOLS
sudo python3 /opt/M2_UPS_PMH/M2_PMH_status.py
sudo python3 /opt/M2_UPS_PMH/M2_PMH_config.py
sudo journalctl -u M2_PMH_i2c.service -b -n 12 --no-pager

ADC ON THE ADVANCED MODEL
Inputs are on application header P2: EXT0 pin 11, EXT1 pin 12; GND 1/6/14.
Use only ONE input at a time; leave the other open. Required R75=1.00 kohm.
EXT0 range 0..5.2 V, gain2.4; EXT1 0..32 V, gain20.6.
Saved range: command 0x6B:0x08. Voltage: status 0x69:0x12 word, BCD 0.01 V.
Configurator menu 10 chooses the range. Monitor section ADC and external inputs
shows the range and voltage. Standard has no fitted external ADC input.

1-WIRE DS18B20
Use the ESD-protected M.2 Advanced 1-Wire connector, linked to GPIO4,
instead of wiring the sensor data lead directly to bare Raspberry Pi GPIO.
Enable it with sudo raspi-config > Interface Options > 1-Wire > Yes; reboot.
The installer supplies the reader but does not enable optional GPIO4 automatically.
python3 /opt/M2_UPS_PMH/M2_PMH_1wire.py
python3 /opt/M2_UPS_PMH/M2_PMH_1wire.py --watch 5
The status monitor also lists DS18B20 identifiers, temperatures and CRC status.
All script messages are in English. See Manual V98 for wiring and installation.

PERSISTENT ULED
Manual 0x6B:0x09; saved mapping 0x6B:0x0D: 0 Manual,1 SYS,2 BAT,3 TMR,4 FAN,5 TMP.
External ULED: P2 pin5; GND 1/6/14. On-board R7=3.6 kohm limits current.
The source LED continues operating. System sequences retain priority.

FIRMWARE UPDATE
Use firmware/M2_PMH.hex from THIS package, not an older home-directory file.
Expected SHA256: 13b6f14d8ee558fab262ae981f36975b7daf4f0e3a31c4ad253758692a77f3da
After entering BL, or during incomplete-write recovery:
sudo python3 /opt/M2_UPS_PMH/M2_PM_UPS_BL01D.py -v -i -j -k -p /dev/ttyAMA0 -b 38400 -f ~/M2_UPS_PMH_Customer_V8B5/firmware/M2_PMH.hex
-j is only for a board already in BL. Automatic software entry omits -j.
Always keep -i for the current register map. See the manual for the complete sequence.
Do not rebuild or replace the unchanged protected loader for a routine update.

PACKAGE CONTENTS
Manual PDF and editable DOCX, installer with all required payload files,
configuration and monitor tools, systemd service, updater, compiled application
and protected-loader image, register CSV, ADC notes and supplied product images.
Customer contains no MCU C sources, compiler projects or developer build products. Python files are included because they are the user tools.

Supercapacitor specification: 4000 F / 4.2 V.
Pi RTC backup cable: Pi RTC charging disabled (rtc_bbat_vchg=0).

WEB PANEL V02 — OPTIONAL
Local browser dashboard, role-based supported settings, compact phone/desktop
layout and optional private Internet access with Tailscale. Existing panel
accounts/passwords are retained. Firmware, loader and UPS daemon are unchanged.
Main Linux installation above is required first. Then:
cd ../web_panel
sudo python3 install_webpanel.py
# Or install/upgrade the panel with optional private Internet access:
sudo python3 install_webpanel.py --with-tailscale
# Existing installed panel; configure only remote access:
sudo python3 install_webpanel.py --tailscale-only
Authorize using the official Tailscale link printed in SSH. Install Tailscale
on the phone/computer, connect to the same Tailscale network and open the Pi's
printed private URL on port 8080. Use the existing panel account/password.
See Manual V98 and web_panel/REMOTE_ACCESS.txt for full steps, authorization
timeouts, policy/firewall checks and an external mobile-data test.
Standalone ZIP: installation/M2_UPS_PMH_WebPanel_V02.zip.
V02: 41 automated host tests passed; live remote phone pairing remains to test.
Manual V98 includes two connection illustrations; no target VPN test is claimed.

MANUAL V98 UPDATE — 25 OCTOBER 2026
Real Web Panel V02 Overview and Configuration screenshots supplied by the user;
updated P2 connector and LED circuit images, including R7=3.6 kohm.
Expanded Windows/Android/iOS Tailscale installation and simultaneous local/private
remote access instructions. Both paths retain TCP port 8080 and panel accounts.
Tailscale screenshots will be supplied separately. Firmware and all runtime
scripts, bootloader and web installer remain byte-for-byte unchanged.

MANUAL V98 UPDATE — 25 OCTOBER 2026
Complete first-time Tailscale setup: SSO account, Pi authorization, Windows and
phone clients; private and LAN access on port 8080; VPN conflict troubleshooting.
Supplied remote-panel capture and privacy-redacted console illustration added.
Phone instructions included; desktop access confirmed, cellular test not claimed. Firmware and all runtime
scripts, bootloader and web installer remain byte-for-byte unchanged.
