Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
91930d3
feat: Add M5Stack Core2 support, implement a new web dashboard, and i…
OCybress Dec 23, 2025
8e11b6b
feat: Add new dashboard for miner monitoring and corresponding firmwa…
OCybress Dec 23, 2025
14315ce
Change dashboard image link to GitHub URL
WeisTekEng Dec 23, 2025
a543cb8
Update README with Tailscale exposure instructions
WeisTekEng Dec 23, 2025
07f8e8d
Enhance README with features overview
WeisTekEng Dec 23, 2025
9038ccc
Updated dashboard to display bitcoin stats.
OCybress Dec 23, 2025
9ef69ea
Forgot to update the dashboard example image.
OCybress Dec 23, 2025
da1d639
feat(dashboard): add 24h hashrate graph, dynamic formatting, and refa…
OCybress Dec 23, 2025
f04f2b9
Update README for clarity and formatting
WeisTekEng Dec 23, 2025
786cd01
feat: Add NerdMiner dashboard with Docker and Umbrel support.
OCybress Dec 23, 2025
846e21e
Merge pull request #1 from WeisTekEng/umbrel-docker
WeisTekEng Dec 23, 2025
7fcb474
updated readme for umbrel docker instructions
OCybress Dec 23, 2025
f6720cf
Merge pull request #2 from WeisTekEng/umbrel-docker
WeisTekEng Dec 23, 2025
4bb1cf1
Update README.md
WeisTekEng Dec 23, 2025
6c0f529
Merge pull request #3 from WeisTekEng/umbrel-docker
WeisTekEng Dec 23, 2025
07523e8
Fix formatting in README for USDC entry
WeisTekEng Dec 23, 2025
0609c28
updated dashboard with a dust or tips banner with qr code at the bottom.
OCybress Dec 24, 2025
9740c26
Merge branch 'umbrel-docker' of https://github.com/WeisTekEng/NerdMin…
OCybress Dec 24, 2025
4ffa383
Merge pull request #4 from WeisTekEng/umbrel-docker
WeisTekEng Dec 24, 2025
5985770
feat: Add Remote Config, Templates Metric, and Dashboard Improvements
OCybress Dec 24, 2025
9211d20
Update images in dashboard README
WeisTekEng Dec 24, 2025
330cedb
Update README.md
WeisTekEng Dec 24, 2025
28209fd
Fix grammar in firmware update requirement note
WeisTekEng Dec 24, 2025
979ee5d
Refactor README to streamline configuration sections
WeisTekEng Dec 24, 2025
ed94285
Merge branch 'main' into umbrel-docker
WeisTekEng Dec 24, 2025
bab1874
Merge pull request #5 from WeisTekEng/umbrel-docker
WeisTekEng Dec 24, 2025
b1839b2
Update README.md
WeisTekEng Dec 24, 2025
259c2bc
Update Docker image version in README
WeisTekEng Dec 24, 2025
005d9ee
increased the UDP Packet buffer size to 512 bytes
OCybress Dec 24, 2025
d0be0ac
Increased the UDP packet buffer size to 512 bytes
OCybress Dec 24, 2025
2395ffe
Merge branch 'main' of https://github.com/WeisTekEng/NerdMiner_v2
OCybress Dec 24, 2025
186f246
updated the dashboard to properly convert uptime to days if uptime ex…
OCybress Dec 24, 2025
f2e340a
Merge pull request #6 from WeisTekEng/main
WeisTekEng Dec 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
.vs
*.sln
*.vcxproj*
dashboard/node_modules/
**/node_modules/
dashboard/package-lock.json
dashboard/package.json
NerdMinerLog.txt
bin/0x10000_firmware.bin
logs
Expand Down
Binary file added dashboard/Dashboard.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dashboard/Dashboard2.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions dashboard/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM node:18-alpine

# Create app directory
WORKDIR /app

# Install app dependencies
COPY package*.json ./
RUN npm install --only=production

# Bundle app source
COPY . .

# Expose ports
EXPOSE 3000
EXPOSE 33333/udp

CMD [ "node", "server.js" ]
Binary file added dashboard/EditConfig.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
109 changes: 109 additions & 0 deletions dashboard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# NerdMiner Dashboard

This is a local dashboard to monitor and configure your NerdMiner fleet via UDP, and Rest API.

> **Updated Firmware Required**: In order to use the dashboard you must update the firmware on your specific device, The firmware has been updated to broadcast a json payload via UDP including the miner's IP address. Broadcasting the miner's IP resolves connectivity issues when running in Docker/Umbrel where the source IP is masked. Please flash the latest firmware to use Remote Configuration.

## Firmware Configuration

The NerdMiner firmware has been modified to broadcast stats to `255.255.255.255` on port `33333` via UDP.
Ensure your miners and this computer are on the same network/subnet. you can then expose this via Tailscail

## Remote Configuration

To configure a miner remotely:
1. Ensure you are running the **latest firmware** with `api.cpp` enabled.
2. On the dashboard, click the **Gear Icon (⚙️)** on the miner card.
3. A modal will appear showing the current settings.
4. Update your Pool, Wallet, etc., and click **Save Changes**.
5. The miner will save settings to NVS and restart automatically.

**Note:** This uses a secure proxy through the dashboard backend to communicate with the miner's local API.

## Tips / donations.

Found this useful? buy me a beer or send a tip, In no way required what so ever, but much appreciated

**BTC:** bc1qjqhg5c2f6da8y4qr7upegwhkvl2376xzlpwf5p\
**ETH:**
0x1c054d43c8b6452ceb5d9fe773cc7da66764c283\
**SOL:**
GTMphvuZU3QsHbieCwWutf1gRGmLWWEVY5dPq73pkgnz\
**USDC on Ethereum:**
0x1c054d43c8b6452ceb5d9fe773cc7da66764c283

## Features

* **Real-time Monitoring**: Live updates via UDP Broadcast (port 33333).
* **Auto-Discovery**: Miners appear automatically when they start hashing.
* **Detailed Stats**:
* Hashrate (Dynamic units: H/s, KH/s, MH/s)
* Miner Name (extracted from wallet address)
* Pool Address & Port
* Uptime, Temperature, Valid Shares, Templates, Best Difficulty
* **Remote Configuration Rest API**:
* **Settings**: Change Pool, Port, Address, and Password remotely.
* **Persistence**: Settings saved to flash memory (NVS).
* **Auto-Restart**: Miner applies settings automatically.
* **Bitcoin Network Stats**:
* Real-time Price (USD)
* Network Hashrate & Difficulty
* Halving Progress Bar
* Block Height & Fees
* **Fleet Performance**:
* **24-Hour Graph**: Real-time line chart showing total hashrate history.
* **24h Average**: Rolling average calculation.
* **Smart Formatting**: Difficulty (k, M, G, T, P, E) and Hashrate auto-scaling.
* **Zero Configuration**: No IP setup needed on miners; just flash and run.

## Non docker setup

1. **Install Dependencies**:
```bash
npm install
```

2. **Start the Server**:
```bash
node server.js
```

3. **Access Dashboard**:
Open your browser and navigate to `http://localhost:3000`.

## Docker & Umbrel Support

You can run this dashboard as a Docker container.

### Linux / Umbrel (Recommended for Production)
```bash
docker-compose up -d --build
```
*Uses `network_mode: "host"` for proper UDP broadcast reception.*

### Windows (Testing/Development)
```bash
docker-compose -f docker-compose.windows.yml up -d --build
```
*Uses port mapping. Access at `http://localhost:3000`*

**Note:** UDP broadcasts from miners may not reach the container on Windows due to Docker's networking limitations. For full functionality, deploy on Linux/Umbrel.

### Umbrel
This app is ready for Umbrel.
1. install Portainer from the umbrel app store
2. Once in portainer, navigate to the environment you want to add this to, then click on "Add Container"
3. for docker.io image, use `ocybress/nerdminer-dashboard-linux:r0.0.8`
4. for the ports, add `3000` TCP, and `33333` UDP
5. click "diploy the container"
6. wait for the container to start
7. navigate to `http://localhost:3000` to access the dashboard
8. you can expose this via tailscail if you want to access it from other devices

<img width="1903" height="1113" alt="Dashboard" src="https://github.com/user-attachments/assets/6d91323c-5c8c-4ad9-beb9-4f27e5b845e0" />
<img width="1904" height="1111" alt="Dashboard2" src="https://github.com/user-attachments/assets/772245c8-053c-433e-88d7-74bd811a85f6" />
<img width="1905" height="1112" alt="EditConfig" src="https://github.com/user-attachments/assets/67a7864e-7795-4adf-9b11-d412df330058" />




12 changes: 12 additions & 0 deletions dashboard/docker-compose.windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: '3.7'

services:
app:
image: nerdminer-dashboard-windows
build: .
restart: unless-stopped
ports:
- "3000:3000"
- "33333:33333/udp"
volumes:
- ./data:/app/data
10 changes: 10 additions & 0 deletions dashboard/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: '3.7'

services:
app:
image: nerdminer-dashboard-linux
build: .
restart: unless-stopped
network_mode: "host"
volumes:
- ./data:/app/data
Loading