Miner Dashboard

Temperature page with live chain data from stats.cgi

Stored telemetry with automatic refresh from the database

Dashboard Temps Wallets

Online Miners

[[onlineMiners.length]] / [[miners.length]]

Pool [[poolMiners.length]] · Solo [[soloMiners.length]]

Updated [[formatRelativeTime(lastUpdated)]]

Hashrate

TOTAL [[formatHashrate(totalRateGhs, currentRateUnit)]] [[currentRateUnit]]

POOL [[formatHashrate(poolRateGhs, currentRateUnit)]] [[currentRateUnit]]

SOLO [[formatHashrate(soloRateGhs, currentRateUnit)]] [[currentRateUnit]]

BTC Price i

[[formatCurrency(miningInfo.btc_price_eur, 'EUR')]]

[[formatCurrency(miningInfo.btc_price_usd, 'USD')]]

24h [[formatCurrency(miningInfo.price_24h_eur, 'EUR')]] → [[formatSignedCurrency(miningInfo.price_change_24h_eur, 'EUR')]] ([[formatPercentSigned(miningInfo.price_change_24h_percent)]])

7d [[formatCurrency(miningInfo.price_7d_eur, 'EUR')]] → [[formatSignedCurrency(miningInfo.price_change_7d_eur, 'EUR')]] ([[formatPercentSigned(miningInfo.price_change_7d_percent)]])

1m [[formatCurrency(miningInfo.price_30d_eur, 'EUR')]] → [[formatSignedCurrency(miningInfo.price_change_30d_eur, 'EUR')]] ([[formatPercentSigned(miningInfo.price_change_30d_percent)]])

1y [[formatCurrency(miningInfo.price_1y_eur, 'EUR')]] → [[formatSignedCurrency(miningInfo.price_change_1y_eur, 'EUR')]] ([[formatPercentSigned(miningInfo.price_change_1y_percent)]])

BTC Price

Fetching latest market data…

Network Difficulty

[[formatDifficulty(miningInfo.network_difficulty)]]

[[trendIcon(miningInfo)]] Next: [[formatDifficulty(computeNextDifficulty(miningInfo))]] ( [[formatPercentSigned(miningInfo.difficulty_change_percent)]] )

Progress: [[formatPercent(miningInfo.difficulty_progress_percent)]]

Remaining Time: [[formatDuration(miningInfo.remaining_time_seconds)]]

Last adj: [[formatPercentSigned(miningInfo.previous_adjustment_percent)]] · [[formatDateTime(miningInfo.previous_adjustment_time)]]

Network Difficulty

Waiting for retarget data…

Miners

Last refresh [[formatRelativeTime(lastUpdated)]]
[[minerActionMessage]]

Latest Control Result

[[selectedMiner ? (selectedMiner.name || selectedMiner.ip_address || `Miner ${selectedMiner.id}`) : `Miner ${latestSelectedControlEvent.miner_id}`]]

[[formatEventSeverity(latestSelectedControlEvent.severity)]]

[[latestSelectedControlEvent.message]]

[[formatEventType(latestSelectedControlEvent.event_type)]] [[latestSelectedControlEvent.source || 'system']] [[formatTimestamp(latestSelectedControlEvent.created_at)]]
Loading miners…
[[fetchError]]
No miners configured yet.
Status Name IP Address Hashrate (30m) Chips (OK/Bad) PCB Temp (Min/Max) PIC Max (temp_pic) PCB Max (temp_pcb) Chip Max (temp_chip) Last Update Actions
[[miner.online ? 'Online' : 'Offline']]
[[formatElapsedTime(miner.elapsed)]]
[[miner.name || 'N/A']] [[miner.ip_address]] [[formatHashrate(miner.rate_30m, currentRateUnit)]] [[currentRateUnit]] [[miner.asic_ok || 0]] / [[miner.asic_bad || 0]] [[formatTemperaturePair(miner.temp_pcb)]] [[formatTempValue(miner.max_temp_pic)]] [[formatTempValue(miner.max_temp_pcb)]] [[formatTempValue(miner.max_temp_chip)]] [[formatTimestamp(miner.timestamp)]]

Estimated Rewards

Period BTC EUR
Daily [[rewardEstimates ? formatReward(rewardEstimates.daily.btc, 8) : '-']] [[rewardEstimates ? formatReward(rewardEstimates.daily.eur, 2) : '-']]
Weekly [[rewardEstimates ? formatReward(rewardEstimates.weekly.btc, 8) : '-']] [[rewardEstimates ? formatReward(rewardEstimates.weekly.eur, 2) : '-']]
Monthly [[rewardEstimates ? formatReward(rewardEstimates.monthly.btc, 8) : '-']] [[rewardEstimates ? formatReward(rewardEstimates.monthly.eur, 2) : '-']]

Net rewards after [[formatPercent(clampPercentage(poolFee))]] pool fee.

Solo Probability (1+ block)

Daily
[[formatProbability(soloOdds.daily)]]
Weekly
[[formatProbability(soloOdds.weekly)]]
Monthly
[[formatProbability(soloOdds.monthly)]]
Expected time / block
[[soloOdds.expectedDays.toFixed(1)]] days

Based on current network difficulty and your hashrate.

[[selectedMiner.name || selectedMiner.ip_address]]

[[selectedMiner.online ? 'Online' : 'Offline']]
Miner Type
[[selectedMiner.miner_type || 'N/A']]
Mining Mode
[[selectedMiner.solo_mining ? 'Solo' : 'Pool']]
Hostname
[[selectedMiner.hostname || 'N/A']]
Firmware
[[(selectedSystemInfo && selectedSystemInfo.system_filesystem_version) || 'N/A']]
MAC Address
[[selectedMiner.mac_address || 'N/A']]
Serial Number
[[selectedMiner.serial_number || 'N/A']]
Hashrate (5s)
[[formatHashrate(selectedMiner.rate_5s, currentRateUnit)]] [[currentRateUnit]]
Hashrate (Avg)
[[formatHashrate(selectedMiner.rate_avg, currentRateUnit)]] [[currentRateUnit]]
Ideal Hashrate
[[formatHashrate(selectedMiner.rate_ideal, currentRateUnit)]] [[currentRateUnit]]
ASICs (OK/Bad)
[[(selectedMiner.asic_ok || 0)]] / [[(selectedMiner.asic_bad || 0)]]
Max Chip Temp
[[formatTempValue(selectedMiner.max_temp_chip)]]
Max PCB Temp
[[formatTempValue(selectedMiner.max_temp_pcb)]]

Live Temperature Stats

[[formatTempSourceLabel(tempStatsSource)]] · [[formatTimestamp(tempStatsTimestamp)]]
Loading live temperatures…
[[tempStatsError]]

Chain [[chain.index]]

PIC Temps: [[formatChainTemps(chain.temp_pic)]]

PCB Temps: [[formatChainTemps(chain.temp_pcb)]]

Chip Temps: [[formatChainTemps(chain.temp_chip)]]

Max (PIC / PCB / Chip): [[formatTempValue(chain.max_pic)]] / [[formatTempValue(chain.max_pcb)]] / [[formatTempValue(chain.max_chip)]]

No chain temperature data available.

Board [[chain.index]]

Real Rate: [[formatHashrate(chain.rate_real, currentRateUnit)]] [[currentRateUnit]]

Avg Freq: [[chain.freq_avg || 'N/A']] MHz

Hardware Errors: [[chain.hw || 0]]

PIC Temps: [[formatChainTemps(chain.temp_pic)]]

PCB Temps: [[formatChainTemps(chain.temp_pcb)]]

Chip Temps: [[formatChainTemps(chain.temp_chip)]]

ASICs: [[chainAsicCounts(chain).ok]] / [[chainAsicCounts(chain).bad]]

Miner Events

Compact history for offline, online, restarts, and control errors.

Loading miner events…
[[minerEventsError]]
[[minerEventScope === 'selected' ? 'No events recorded for this miner yet.' : 'No miner events recorded yet.']]
[[formatEventSeverity(event.severity)]] [[formatTimestamp(event.created_at)]]
[[event.message]]
[[event.miner_name || event.ip_address || `Miner ${event.miner_id}`]] [[formatEventType(event.event_type)]] [[event.source || 'system']]

Temperature History

Input Temp = lowest positive endpoint temperature across temp_pic, temp_pcb, and temp_chip. PIC/PCB/Chip lines are maximum values per sample from each respective field.

Latest Input: [[formatTempValue(latestTempSnapshot.min_temp_input)]] PIC Max: [[formatTempValue(latestTempSnapshot.max_temp_pic)]] PCB Max: [[formatTempValue(latestTempSnapshot.max_temp_pcb)]] Chip Max: [[formatTempValue(latestTempSnapshot.max_temp_chip)]]
Loading chart…
[[chartError]]

Temperature Records

Input Min (lowest endpoint) [[formatTempValue(tempRangeSummary.input.min)]] / [[formatTempValue(tempRangeSummary.input.max)]] PIC Max (temp_pic) [[formatTempValue(tempRangeSummary.pic.min)]] / [[formatTempValue(tempRangeSummary.pic.max)]] PCB Max (temp_pcb) [[formatTempValue(tempRangeSummary.pcb.min)]] / [[formatTempValue(tempRangeSummary.pcb.max)]] Chip Max (temp_chip) [[formatTempValue(tempRangeSummary.chip.min)]] / [[formatTempValue(tempRangeSummary.chip.max)]]
[[exportTargetMinerIds.length]] selected
Loading temperature records…
[[tempTableError]]
No numeric temperature records for this filter.
Time Input Min (lowest endpoint) PIC Max (temp_pic) PCB Max (temp_pcb) Chip Max (temp_chip)
[[formatTimestamp(row.timestamp)]] [[formatTempValue(row.min_temp_input)]] [[formatTempValue(row.max_temp_pic)]] [[formatTempValue(row.max_temp_pcb)]] [[formatTempValue(row.max_temp_chip)]]

Performance History

Loading chart…
[[chartError]]

Difficulty & BTC Price History

Loading difficulty history…
[[difficultyHistoryError]]

[[soloStatsMiner.name || soloStatsMiner.ip_address]]

Loading stats…
[[soloStatsError]]
Hashrate 1m
[[formatSoloHashrate(soloStatsData.hashrate1m)]]
Hashrate 5m
[[formatSoloHashrate(soloStatsData.hashrate5m)]]
Hashrate 1h
[[formatSoloHashrate(soloStatsData.hashrate1hr)]]
Hashrate 1d
[[formatSoloHashrate(soloStatsData.hashrate1d)]]
Hashrate 7d
[[formatSoloHashrate(soloStatsData.hashrate7d)]]
Workers
[[formatNumber(soloStatsData.workers, 0)]]
Shares
[[formatNumber(soloStatsData.shares, 0)]]
Best Share
[[formatNumber(soloStatsData.bestshare, 2)]]
Best Ever
[[formatNumber(soloStatsData.bestever, 2)]]
Last Share
[[formatEpochSeconds(soloStatsData.lastshare)]]
Authorised
[[formatEpochSeconds(soloStatsData.authorised)]]

Workers

[[worker.workername]]
1m [[formatSoloHashrate(worker.hashrate1m)]]
5m [[formatSoloHashrate(worker.hashrate5m)]]
1h [[formatSoloHashrate(worker.hashrate1hr)]]
1d [[formatSoloHashrate(worker.hashrate1d)]]
7d [[formatSoloHashrate(worker.hashrate7d)]]
Shares [[formatNumber(worker.shares, 0)]]
Best [[formatNumber(worker.bestshare, 2)]]
Last [[formatEpochSeconds(worker.lastshare)]]