---
title: "RF-UPS-Monitor: Mains Power Monitoring with RP2040 and W5500"
url: "https://maker.wiznet.io/Lihan__/projects/rf-ups-monitor-mains-power-monitoring-with-rp2040-and-w5500/"
markdown_url: "https://maker.wiznet.io/Lihan__/projects/rf-ups-monitor-mains-power-monitoring-with-rp2040-and-w5500/md"
type: "UCC: User Created Content"
author: "TheKingOfChaos (GitHub)"
author_url: "https://github.com/TheKingOfChaos/RF-UPS-Monitor"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "TheKingOfChaos (GitHub)"
original_url: "https://github.com/TheKingOfChaos/RF-UPS-Monitor"
license: "MIT license (MIT)"
published: "2026-10-25"
updated: "2026-10-27"
language: "en"
tags: ["W5500", "RP2040", "PoE", "SNMP", "LibreNMS"]
hardware: ["WIZnet W5500-EVB-Pico-PoE"]
likes: 0
views: 101
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# RF-UPS-Monitor: Mains Power Monitoring with RP2040 and W5500

> A Raspberry Pi Pico and W5500 monitor mains presence over SNMP, with loss/restore traps, LibreNMS integration and a PoE carrier design.

Original author: TheKingOfChaos (GitHub) (source: https://github.com/TheKingOfChaos/RF-UPS-Monitor)

## Components

- **WIZnet W5500-EVB-Pico-PoE** x 1: Supported integrated RP2040 + W5500 PoE board; alternative to a Pico with an external W5500 module. ([docs](https://docs.wiznet.io/Product/Chip/Ethernet/W5500/W5500-EVB-Pico-PoE))

## Documents and links

- [RF-UPS-Monitor firmware and monitoring definitions](https://github.com/TheKingOfChaos/RF-UPS-Monitor) (code): Original source by TheKingOfChaos. README declares MIT.
- [W5500-EVB-Pico-PoE carrier design](https://github.com/TheKingOfChaos/RF-UPS-Monitor/tree/main/hardware/pico-poe-mains-carrier) (schematics): Original KiCad files, fab outputs and PCB renders; not independently safety certified.
- [Testing guide and hardware-in-the-loop coverage](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/docs/TESTING.md): Author-provided test procedures and code; tests were not rerun for this curation.

## Article

## RF-UPS-Monitor — Mains Presence Monitoring over W5500 Ethernet

**Project curation | Original repository: TheKingOfChaos/RF-UPS-Monitor**

The cover is an AI-generated conceptual illustration. The PCB images below are original design renders; the system diagram simplifies the source architecture.

### English

#### 01 — Project Overview

A network can still be reachable while a particular mains circuit has failed. RF-UPS-Monitor turns that local power-presence signal into something a network management system can poll and receive alerts about. The project combines a Raspberry Pi Pico / RP2040, WIZnet W5500 Ethernet, an isolated detector input, and an SNMP agent with LibreNMS integration.

Despite the name, this is a mains-presence monitor. It does not implement a UPS, measure battery capacity, or report the full telemetry of a commercial UPS. Its useful question is simpler: is the monitored mains supply present, and when did that state change?

![Original 3D render of the W5500-EVB-Pico-PoE mounted on the RF-UPS-Monitor carrier](https://maker.wiznet.io/upload/ckeditor5/55e17bf7d43e408cbb9b6a2d9da24424.jpg)

*Original PCB render of W5500-EVB-Pico-PoE mounted on the carrier. This is a design render, not a photograph of a manufactured board.*

[Original image — assembled carrier render](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/images/iso.png)

#### 02 — What the Monitor Provides

- Mains-presence state, transition count and last-change time.

- Read-only SNMP v1/v2c polling and mains-loss/restoration traps.

- Custom MIB and LibreNMS discovery definitions.

- Web and USB serial configuration, plus an optional PoE carrier design.

Project scope and supported hardware: [README](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/README.md).

#### 03 — System Architecture

The isolated detector reports mains presence on GPIO27. RP2040 core 1 samples and debounces this input, then shares the state, change count and event time with core 0. Core 0 runs lwIP and the SNMP/web services; the W5500 moves Ethernet frames in MACRAW mode. The manager polls status and receives loss/restore traps, while USB serial or the web interface provides configuration.

![RF-UPS-Monitor system architecture with RP2040 core roles, W5500 MACRAW Ethernet and SNMP monitoring](https://maker.wiznet.io/upload/ckeditor5/3fbd832765ec4118aa125d65a8d7b4d3.jpg)

*Simplified architecture based on the source. Power is separate from the monitored mains input; outage reporting needs the monitor and network to remain powered.*

**Event path:** isolated detector → GPIO27 → RP2040 core 1 → shared snapshot → core 0 network services → W5500 Ethernet → monitoring system.

Core roles and pin definitions: [src/main.cpp](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/main.cpp) · [include/pins.h](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/include/pins.h).

#### 04 — How W5500 Is Used — and Whether TOE Is Used

The README lists a Pico with a W5500 SPI module and also supports the integrated WIZnet W5500-EVB-Pico-PoE board. src/main.cpp includes W5500lwIP.h, creates a CountingW5500lwIP interface, configures SPI pins, resets the controller, and calls eth.begin(). include/pins.h defines MISO GP16, CS GP17, SCK GP18, MOSI GP19, reset GP20, and interrupt GP21. src/net_stats.cpp also reads the W5500 PHYCFGR register to obtain link information. These are specific implementation references, not just a product tag.

**An interesting architectural choice:** this project uses the W5500 in MACRAW mode with the RP2040's lwIP software stack. Its IPv4/IPv6 support should therefore not be described as IPv6 being handled by the W5500's hardwired TCP/IP engine. Interface traffic counters are maintained by the firmware; link state and speed come from the W5500 PHY.

**Hardware TCP/IP offload: no in this implementation.** The W5500 is used as an Ethernet interface in MACRAW mode, with TCP/IP handled by lwIP on the RP2040. The chip’s presence therefore does not mean this project uses its hardwired TCP/IP sockets.

Implementation evidence: [W5500lwIP initialization](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/main.cpp) · [frame counters and PHY register access](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/net_stats.cpp).

#### 05 — Hardware Design and the PoE Option

The carrier design accepts a W5500-EVB-Pico-PoE module and adds an isolated mains detector, status LEDs, a reset button, and a TMP1075 temperature sensor. PoE can let the monitor remain powered separately from the circuit it observes. Reporting an outage still requires the monitor, PoE source, network path, and receiving system to remain powered and reachable. PoE by itself is not backup power.

![Original top-view render of the RF-UPS-Monitor carrier without the PoE module](https://maker.wiznet.io/upload/ckeditor5/c14d7781379e43f5b8cfb24d19eec4a9.jpg)

*Original carrier-only PCB render. The mains detector area is at right; the low-voltage circuitry is at left. This is a design illustration, not a wiring guide.*

[Image source: TheKingOfChaos / RF-UPS-Monitor — top-carrier-only.png](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/images/top-carrier-only.png)

| Part | Role |
| --- | --- |
| RP2040 / Raspberry Pi Pico | Input processing and network services on separate cores. |
| W5500 or W5500-EVB-Pico-PoE | SPI Ethernet connection; PoE board is an integrated option. |
| Isolated mains detector | Converts mains presence into a low-voltage GPIO signal. |
| Carrier TMP1075 | Present in the design; not currently read by the firmware. |

Design details and limitations: [carrier README](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/README.md).

#### 06 — SNMP, Web Configuration and LibreNMS

The SNMP agent answers read-only v1/v2c requests on UDP 161. It exposes mains state, transitions, time of last change, board temperature, and IF-MIB interface statistics. Configured traps go to UDP 162 and include mainsPowerLost and mainsPowerRestored. Polling gives periodic visibility; traps provide event notifications. LibreNMS discovery definitions and a custom MIB are included in the repository. The SNMP and web services support dual-stack addressing, while the implemented trap destination is IPv4.

| Interface | Purpose |
| --- | --- |
| SNMP / UDP 161 | Read-only status polling; v1/v2c. |
| Traps / UDP 162 | Notifications including mainsPowerLost and mainsPowerRestored; IPv4 destination. |
| HTTP / TCP 80 | Web status and configuration. |
| USB serial / 115200 baud | Local configuration menu. |

The web interface uses plain HTTP and SNMPv1/v2c communities are unencrypted; SNMPv3 is unsupported. The documented operating context is a trusted management network.

Agent and trap implementation: [src/snmp_service.cpp](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/snmp_service.cpp).

#### 07 — Verification and Reproducibility Limits

The README reports successful real mains loss/restore and SNMP trap tests. The repository provides on-device Ethernet tests and hardware-in-the-loop code that switches mains and checks loss/restoration traps in both SNMP versions. This curation reviewed the documents and source; it did not rerun those hardware tests or independently certify the hardware. PCB images in the hardware folder are renders, not evidence that the carrier was manufactured.

Several distinctions matter when reproducing the design. The carrier's RC filtering adds about 30–50 ms before a mains-loss signal reaches the firmware, so a software debounce target is not an end-to-end detection-time guarantee. Firmware boardTemperature currently comes from the RP2040 internal sensor; the carrier's TMP1075 is not read yet. The web interface uses plain HTTP, SNMPv1/v2c community strings are unencrypted, and SNMPv3 is unsupported; the repository positions operation on a trusted management network.

For a low-voltage review, start with include/pins.h, src/main.cpp, src/snmp_service.cpp, and the test guide. Mains detector construction is a separate electrical-safety task: the original documentation calls for galvanic isolation, a closed enclosure, upstream protection, and qualified installation. This article is an architecture overview, not a mains-wiring tutorial or safety certification.

Author-provided verification: [HIL trap tests](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/test/hil/test_snmp_traps.py) · [testing guide](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/docs/TESTING.md).

#### 08 — Why This Is an Interesting WIZnet Use Case

**Curator's take:** the project is compelling because it follows a physical state change all the way into standard network monitoring. W5500 integration, multicore separation, SNMP polling and traps, and hardware-facing tests make it a useful reference for Ethernet-connected monitoring devices.

The reusable idea is an Ethernet-connected event sensor that integrates with existing management systems. It demonstrates a W5500 MACRAW/lwIP path, rather than a hardware TCP/IP socket example.

#### Q&A

**Is this a UPS or a battery-capacity monitor?**
No. It reports whether the monitored mains supply is present and when that state changes.

**Does PoE guarantee outage alerts?**
No. The monitor, PoE source, network path and receiving system must all remain powered and reachable.

**Is the reported temperature from the carrier TMP1075?**
No. The current boardTemperature value comes from the RP2040 internal sensor.

---

## RF-UPS-Monitor — W5500 Ethernet 기반 전원 상태 모니터

**프로젝트 큐레이션 | 원작 저장소: TheKingOfChaos/RF-UPS-Monitor**

표지는 AI로 제작한 개념 이미지입니다. 본문의 PCB 이미지는 원본 설계 렌더이며, 시스템 구성도는 소스 구조를 단순화해 표현했습니다.

### 한국어

#### 01 — 프로젝트 개요

네트워크는 살아 있는데 특정 전원 회로만 끊겼다면, 그 상태를 어떻게 원격으로 알 수 있을까요? RF-UPS-Monitor는 절연된 전원 감지 입력을 Raspberry Pi Pico / RP2040에서 읽고 W5500 Ethernet을 통해 SNMP로 제공합니다. LibreNMS 같은 기존 네트워크 관리 도구에 전원 상태를 연결한다는 점이 흥미롭습니다.

이름에 UPS가 들어가지만 UPS 자체를 구현하거나 배터리 잔량을 측정하는 프로젝트는 아닙니다. 핵심은 감시 대상 상용 전원의 존재 여부와 상태 변화 이력을 알리는 것입니다.

![캐리어 위에 장착된 W5500-EVB-Pico-PoE의 원본 PCB 렌더](https://maker.wiznet.io/upload/ckeditor5/55e17bf7d43e408cbb9b6a2d9da24424.jpg)

*전체 구성: 위쪽의 W5500-EVB-Pico가 Ethernet 통신을 담당하고 아래 캐리어가 전원 상태를 감지합니다. 왼쪽은 RJ45 포트, 오른쪽은 전원 감지 영역입니다. 실물 사진이 아닌 원본 설계 렌더입니다.*

[원본 이미지 — 모듈을 장착한 캐리어 렌더](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/images/iso.png)에서 확인할 수 있습니다.

#### 02 — 주요 기능

- 감시 전원의 존재 여부, 변화 횟수와 마지막 변화 시점을 제공합니다.

- SNMP v1/v2c 읽기 요청과 전원 상실·복구 트랩을 지원합니다.

- SNMP Agent: IPv4 / IPv6 지원

- 사용자 MIB와 LibreNMS 탐지 정의를 포함합니다.

- 웹·USB 시리얼 설정과 선택적 PoE 캐리어 설계를 제공합니다.

프로젝트 범위와 지원 하드웨어: [README](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/README.md)에서 확인할 수 있습니다.

#### 03 — 시스템 아키텍처

절연 감지부가 전원 존재 여부를 GPIO27로 전달합니다. RP2040의 코어 1이 입력을 샘플링·디바운스하고, 현재 상태·변화 횟수·발생 시점을 코어 0과 공유합니다. 코어 0은 lwIP와 SNMP·웹 서비스를 실행하며 W5500은 MACRAW 모드로 Ethernet 프레임을 전달합니다. 관리 서버는 상태를 주기적으로 조회하고 상실·복구 트랩을 받으며, 설정은 USB 시리얼 또는 웹 화면에서 수행합니다.

![RP2040 두 코어와 W5500 및 SNMP 관리 서버의 역할을 나타낸 RF-UPS-Monitor 시스템 아키텍처](https://maker.wiznet.io/upload/ckeditor5/3fbd832765ec4118aa125d65a8d7b4d3.jpg)

*원본 코드를 바탕으로 단순화한 구성도입니다. 감시 전원 입력과 모니터 구동 전원은 구분되며, 정전 알림에는 모니터와 네트워크의 전원 유지가 필요합니다.*

**이벤트 경로:** 절연 감지부 → GPIO27 → RP2040 코어 1 → 공유 스냅샷 → 코어 0 네트워크 서비스 → W5500 Ethernet → 관리 시스템 순서입니다.

코어 역할과 핀 정의: [src/main.cpp](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/main.cpp) · [include/pins.h](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/include/pins.h)에서 확인할 수 있습니다.

#### 04 — W5500 활용 방식과 TOE 사용 여부

README는 Pico와 W5500 SPI 모듈 조합, 그리고 WIZnet W5500-EVB-Pico-PoE 보드를 지원 대상으로 명시합니다. src/main.cpp에는 W5500lwIP.h, CountingW5500lwIP 객체, 리셋·SPI 설정과 eth.begin() 호출이 있습니다. include/pins.h는 GP16~GP21의 W5500 연결을 정의하고, src/net_stats.cpp는 PHYCFGR 레지스터에서 링크 정보를 읽습니다.

이 프로젝트는 W5500을 MACRAW 모드로 사용하고 RP2040의 lwIP 소프트웨어 스택에서 네트워크를 처리합니다. 따라서 IPv6 지원을 W5500 하드웨어 TCP/IP 엔진이 직접 수행한다고 소개하면 부정확합니다. 트래픽 통계도 펌웨어가 집계하며 링크 상태와 속도는 W5500 PHY에서 얻습니다.

**이 구현에서는 하드웨어 TCP/IP 오프로딩을 사용하지 않습니다.** W5500은 MACRAW 모드의 Ethernet 인터페이스로 동작하고 TCP/IP 처리는 RP2040의 lwIP가 담당합니다. 칩의 탑재 여부와 하드웨어 소켓 사용 여부를 구분해야 합니다.

구현 근거: [W5500lwIP 초기화](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/main.cpp) · [프레임 통계와 PHY 레지스터 접근](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/net_stats.cpp)에서 확인할 수 있습니다.

#### 05 — 하드웨어 설계와 PoE의 역할

캐리어 PCB 설계는 W5500-EVB-Pico-PoE에 절연 전원 감지부, 상태 LED, 리셋 버튼, TMP1075 센서를 더합니다. 감시 회로와 별도의 PoE 전원으로 모니터를 유지할 수 있다는 장점이 있습니다. 다만 정전 중 알림을 받으려면 모니터뿐 아니라 PoE 공급 장치, 네트워크 경로와 수신 시스템도 계속 동작해야 합니다. PoE 자체가 백업 전원을 의미하지는 않습니다.

![PoE 모듈을 제거한 RF-UPS-Monitor 캐리어의 원본 평면 렌더](https://maker.wiznet.io/upload/ckeditor5/c14d7781379e43f5b8cfb24d19eec4a9.jpg)

*캐리어만 본 모습: 오른쪽은 상용 전원 감지 영역, 중앙 경계는 절연 소자, 왼쪽은 상태 LED와 온도 센서입니다. TMP1075는 보드에 있지만 현재 펌웨어의 온도값은 RP2040 내부 센서에서 읽습니다. 설계 렌더이며 배선 안내도가 아닙니다.*

[이미지 출처: TheKingOfChaos / RF-UPS-Monitor — top-carrier-only.png](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/images/top-carrier-only.png)

| 구성 요소 | 역할 |
| --- | --- |
| RP2040 / Raspberry Pi Pico | 입력 처리와 네트워크 서비스를 두 코어에서 나누어 수행합니다. |
| W5500 또는 W5500-EVB-Pico-PoE | SPI Ethernet 연결을 제공하며 PoE 보드는 통합 구성 옵션입니다. |
| 절연 전원 감지부 | 상용 전원 존재 여부를 저전압 GPIO 신호로 전달합니다. |
| 캐리어 TMP1075 | 설계에 포함되지만 현재 펌웨어는 이 센서를 읽지 않습니다. |

설계 세부 사항과 구현 범위: [캐리어 README](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/README.md)에서 확인할 수 있습니다.

#### 06 — SNMP·웹 설정과 LibreNMS 연동

SNMP v1/v2c 읽기 요청은 UDP 161에서 처리하고, 설정된 대상의 UDP 162로 전원 상실·복구 트랩을 보냅니다. 전원 상태 외에 변화 횟수, 시점, 보드 온도와 IF-MIB 통계도 제공합니다. 저장소에는 사용자 MIB와 LibreNMS 탐지·센서 정의가 들어 있습니다. SNMP·웹 서비스는 IPv4/IPv6를 지원하지만 구현된 트랩 목적지는 IPv4입니다.

| 인터페이스 | 용도 |
| --- | --- |
| SNMP / UDP 161 | v1/v2c 읽기 전용 상태 조회를 처리합니다. |
| 트랩 / UDP 162 | 전원 상실·복구 등의 알림을 IPv4 목적지로 전송합니다. |
| HTTP / TCP 80 | 웹 상태 확인과 설정을 제공합니다. |
| USB 시리얼 / 115200 baud | 로컬 설정 메뉴를 제공합니다. |

웹은 평문 HTTP이며 SNMP v1/v2c 커뮤니티 문자열도 암호화되지 않습니다. SNMPv3는 지원하지 않으며 원본은 신뢰할 수 있는 관리망 운용을 전제로 설명합니다.

에이전트와 트랩 구현: [src/snmp_service.cpp](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/snmp_service.cpp)에서 확인할 수 있습니다.

#### 07 — 검증 범위와 재현 시 확인할 점

README는 실제 전원 차단·복구 및 트랩 시험 성공을 보고합니다. 저장소에는 보드에서 W5500과 DHCP를 확인하는 테스트, 실제 전원을 스위칭하고 v1/v2c 트랩을 검사하는 HIL 테스트가 있습니다. 이 글은 해당 문서와 코드를 검토한 큐레이션이며 하드웨어 시험을 직접 재실행한 결과는 아닙니다. 캐리어 폴더의 PCB 이미지는 렌더이므로 제작 실물 사진으로 소개하지 않습니다.

캐리어 RC 필터는 전원 상실 전달에 약 30~50 ms를 추가하므로 소프트웨어 디바운스 목표를 전체 감지 지연으로 해석하면 안 됩니다. 현재 펌웨어의 boardTemperature는 RP2040 내부 온도이며 TMP1075는 아직 읽지 않습니다. 웹은 평문 HTTP, SNMP v1/v2c는 암호화되지 않은 커뮤니티 문자열을 사용하고 SNMPv3는 지원하지 않으므로 원본 문서가 안내하는 신뢰할 수 있는 관리망 운용을 전제로 봐야 합니다.

설계 흐름은 핀 정의, main.cpp, snmp_service.cpp와 테스트 가이드에서 살펴볼 수 있습니다. 상용 전원 감지 회로 제작은 별도의 전기 안전 검토가 필요하며, 원본은 절연·폐쇄형 케이스·상위 보호 장치와 자격을 갖춘 작업자를 요구합니다. 이 글은 구조 소개이며 고전압 배선 설명서나 안전 인증을 대신하지 않습니다.

원작자의 검증 자료: [HIL 트랩 테스트](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/test/hil/test_snmp_traps.py) · [테스트 가이드](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/docs/TESTING.md)에서 확인할 수 있습니다.

#### 08 — WIZnet 활용 사례로서의 가치

**큐레이터 관점:** 물리적인 상태 변화를 표준 네트워크 모니터링까지 연결하는 흐름이 잘 드러납니다. W5500 연동, 멀티코어 역할 분리, SNMP 폴링·트랩과 하드웨어 테스트를 함께 공부할 수 있는 사례입니다.

기존 네트워크 관리 시스템에 물리적 이벤트 센서를 연결하는 설계를 살펴볼 수 있습니다. 특히 W5500의 MACRAW 모드와 lwIP를 결합한 구현을 학습하는 데 유용합니다.

#### Q&A

**UPS나 배터리 잔량 측정기인가요?**
아닙니다. 감시 전원의 존재 여부와 상태 변화 시점을 알리는 모니터입니다.

**PoE를 사용하면 정전 알림이 보장되나요?**
모니터, PoE 공급 장치, 네트워크 경로와 수신 시스템이 모두 전원을 유지하고 통신할 수 있어야 합니다.

**표시되는 온도는 캐리어의 TMP1075 측정값인가요?**
현재 boardTemperature는 RP2040 내부 센서의 온도이며 TMP1075 값은 읽지 않습니다.

#### Sources / 출처

[Original repository](https://github.com/TheKingOfChaos/RF-UPS-Monitor)

[README: hardware, status and license](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/README.md)

[W5500 initialization and multicore flow](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/main.cpp)

[W5500 and mains-input pins](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/include/pins.h)

[MACRAW/lwIP statistics and PHY access](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/net_stats.cpp)

[SNMP service and trap destination](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/src/snmp_service.cpp)

[Hardware-in-the-loop trap tests](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/test/hil/test_snmp_traps.py)

[Carrier design and implementation limits](https://github.com/TheKingOfChaos/RF-UPS-Monitor/blob/main/hardware/pico-poe-mains-carrier/README.md)

Reviewed on 2026-10-25 against firmware version 2.4.2. The README declares MIT; no standalone top-level LICENSE file was present in the reviewed tree. Third-party assets may have their own notices. Original project credit remains with TheKingOfChaos. The cover is an AI-generated conceptual illustration. Body PCB images are original design renders, not photographs.

---

Source: https://maker.wiznet.io/Lihan__/projects/rf-ups-monitor-mains-power-monitoring-with-rp2040-and-w5500/
