removeremove

This commit is contained in:
legop3
2026-06-19 17:11:42 -04:00
parent 36ff14824e
commit a5e54bfbf2
3 changed files with 10 additions and 48 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -78,7 +78,7 @@
<script defer src="https://analytics.otter.land/script.js" data-website-id="82dd56a5-db44-4279-bd1e-a4d9fee39af7" data-domains="rover.otter.land"></script>
<script defer src="https://analytics.otter.land/recorder.js" data-website-id="82dd56a5-db44-4279-bd1e-a4d9fee39af7" data-domains="rover.otter.land" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
<title>Roomba Rover</title>
<script type="module" crossorigin src="/assets/index-CNhxRpdM.js"></script>
<script type="module" crossorigin src="/assets/index-D_nIHtoI.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CxLsehkZ.css">
</head>
<body>
+2 -40
View File
@@ -32,10 +32,6 @@ function formatDistance(mm) {
return `${Math.round(value)} mm`;
}
function formatCount(value) {
return Number.isFinite(Number(value)) ? String(Math.round(Number(value))) : '--';
}
function formatAge(timestamp, now) {
const value = Number(timestamp);
if (!Number.isFinite(value)) return '--';
@@ -113,10 +109,6 @@ export default function OdometerPanel() {
) : (
<>
<OdometerSummary odometer={primary} rover={primaryRover} now={now} />
<div className="grid gap-0.5 md:grid-cols-2">
<EncoderDetails odometer={primary} />
<CalibrationDetails odometer={primary} now={now} />
</div>
<RoverOdometerList rows={visibleRows} primaryRoverId={primaryRoverId} />
</>
)}
@@ -126,17 +118,15 @@ export default function OdometerPanel() {
function OdometerSummary({ odometer, rover, now }) {
const status = odometer?.status || 'waiting';
const statusReason = odometer?.statusReason || 'waiting for encoder sample';
const ignoredSamples = Number(odometer?.ignoredSamples) || 0;
return (
<div className="space-y-0.5">
<div className="text-sm font-semibold text-slate-200">{roverLabel(rover)}</div>
<div className="grid grid-cols-2 gap-0.5 md:grid-cols-3">
<Metric label="Total distance" value={formatDistance(odometer?.totalMm)} />
<Metric label="Session distance" value={formatDistance(odometer?.sessionMm)} />
<Metric label="Last update" value={formatAge(odometer?.updatedAt, now)} />
<Metric label="Status" value={status} />
<Metric label="Reason" value={statusReason} />
<Metric label="Calibration" value={`${Number(odometer?.calibrationMultiplier || 1).toFixed(3)}x`} />
{ignoredSamples > 0 ? <Metric label="Ignored samples" value={String(ignoredSamples)} /> : null}
</div>
</div>
);
@@ -151,34 +141,6 @@ function Metric({ label, value }) {
);
}
function EncoderDetails({ odometer }) {
const delta = odometer?.lastDelta || null;
return (
<DetailCard title="Wheel encoders">
<ValueRow label="Left count" value={formatCount(odometer?.lastLeftCount)} />
<ValueRow label="Right count" value={formatCount(odometer?.lastRightCount)} />
<ValueRow label="Left delta" value={formatCount(delta?.leftCounts)} />
<ValueRow label="Right delta" value={formatCount(delta?.rightCounts)} />
<ValueRow label="Center delta" value={formatDistance(delta?.distanceMm)} />
<ValueRow label="Rollover events" value={formatCount(odometer?.rolloverEvents)} />
<ValueRow label="Ignored samples" value={formatCount(odometer?.ignoredSamples)} />
</DetailCard>
);
}
function CalibrationDetails({ odometer, now }) {
return (
<DetailCard title="Conversion">
<ValueRow label="Source" value="wheel encoders" />
<ValueRow label="Wheel diameter" value={`${formatCount(odometer?.wheelDiameterMm)} mm`} />
<ValueRow label="Counts per rev" value={formatCount(odometer?.countsPerRevolution)} />
<ValueRow label="Base mm per count" value={Number(odometer?.rawMmPerCount || 0).toFixed(4)} />
<ValueRow label="Active mm per count" value={Number(odometer?.mmPerCount || 0).toFixed(4)} />
<ValueRow label="Last sample" value={formatAge(odometer?.lastSampleAt, now)} />
</DetailCard>
);
}
function RoverOdometerList({ rows, primaryRoverId }) {
if (!rows.length) return null;
return (