PAUSED — DEVICE OFFLINE Showing the last confirmed sensor reading. Live dashboard animations and live updates are paused. Last data: {{formatDate(reading.timestamp)}} · Offline for {{offlineDuration}}
Fullscreen Exit fullscreen OVERALL RISK: {{reading.risk_level||'WAITING'}}{{overallRiskReason()}}
{{item.label}} {{item.severity}} {{item.value}}{{item.unit}} {{item.severity==='DANGER'?'Danger':'Warning'}} limit: {{item.limit}}{{item.unit==='%'?'%':' '+item.unit}} · {{item.severity==='SAFE'?'below limit':'reached'}}
{{(reading.alert_message||'Waiting For ESP32 Data').replace(/^(DANGER|WARNING|SAFE)\s*[:—-]\s*/i,'')}} Sensor fault detected Fullscreen Exit fullscreen SEWER MONITORING — WATER LEVEL, FLOW, PRESSURE & BLOCKAGE Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Water level: {{reading.water_level_percent==null?'Waiting for sensor data':fmt(bounded(reading.water_level_percent),1)+'%'}} · {{levelDirection}}
⚠ {{bounded(reading.blockage_probability)>=50?'HIGH BLOCKAGE RISK':'CLOG FORMING'}} {{fmt(reading.blockage_probability,0)}}% Sensor-derived blockage probability
{{g.value}}{{g.label}}
{{g.name}}{{g.measure}}
IN {{online?'WATER FLOW':'WATER FLOW PAUSED'}} → Last reading: {{formatDate(reading.timestamp)}}
OUT LVL {{n}}%
{{reading.water_level_percent==null?'—':fmt(bounded(reading.water_level_percent),1)+'%'}}
PRESSURE {{pressurePercent===null?'—':pressurePercent.toFixed(0)+'%'}}
{{n}}%
No pipe data available {{online?'Waiting for a sensor reading':'Offline — connect the ESP32 or check the API'}}
Live sensor readings Exit fullscreen Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Water Level
{{fmt(reading.water_level_percent)}} %
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Flow Rate
{{fmt(reading.flow_rate)}} L/min
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Inlet Pressure
{{fmt(reading.inlet_pressure,2)}} MPa
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Outlet Pressure
{{fmt(reading.outlet_pressure,2)}} MPa
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Pressure Diff {{parameterAlert('pressure_difference')}}
{{fmt(reading.pressure_difference,2)}} MPa
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Blockage Probability
{{fmt(reading.blockage_probability)}} %
Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
Flood Probability
{{fmt(reading.flood_probability)}} %
Sensor charts Fullscreen Exit fullscreen
{{label}} {{parameterAlert(key)}} Offline {{reading.timestamp?'Last reading':'Awaiting data'}} Timestamp {{formatDate(reading.timestamp)}} — No sensor data received
No data available {{online?'Waiting for a sensor reading':'Offline — connect the ESP32 or check the API'}}
Database Restoring your admin session…
ADMINISTRATOR ACCESS
Welcome back Sign in to manage your sensor database.
Use the Hostinger ADMIN_USERNAME and ADMIN_PASSWORD values.
← Back to dashboard
{{adminError}}
Export Excel (.xlsx) PDF (.pdf) XML (.xml) CSV (.csv) JSON (.json) {{exportBusy?'Exporting…':'Download'}} Filtered records · maximum 10,000
Delete selected ({{selectedIds.length}})
{{exportMessage}}
{{total}} matching records · {{selectedIds.length}} selected on this page
LTE firmware uses its compiled thresholds. Saving these settings does not reconfigure the device.
Drag sliders or enter values, then save. DANGER must always be strictly greater than WARNING (> 0).
{{thresholdMessage}}
{{pair.label}} DANGER WARNING
{{pair.dangerMeta.value}}{{pair.dangerMeta.unit==='%'?'%':' '+pair.dangerMeta.unit}}
Danger threshold
{{pair.warningMeta.value}}{{pair.warningMeta.unit==='%'?'%':' '+pair.warningMeta.unit}}
Warning threshold
⚠ {{pair.hint}}
{{resetBusy ? 'Restoring defaults…' : 'Reset Factory Defaults'}} {{resetMessage}}