feat(gemba): live packaging OEE dashboard for the Tizen TV board - #8
Merged
Conversation
Turns the Tizen TV client from a connection-feasibility proof into a real Line-2 packaging OEE dashboard. New experiments/gemba/apps/tv-board (browser-servable + Tizen source): the dallas-line-2-tizen mockup UI + an added OEE strip (OEE / Availability / Performance / Quality), driven live over the gateway app-WebSocket (protocol-v1 hello/subscribe/updates, signals capability). ES5 for the 2019 Tizen runtime; derives the gateway URL from location in a browser or from config.js when packaged. OEE tiles bind the frame's display names (OEE/Availability/Performance/ Quality, id is null). tv/tizen-gemba now packages this dashboard (config.js points at the LAN console; config.xml/build-tizen.ps1 unchanged). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…PalletizerState Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…', value at point.value) + stalled-socket watchdog Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
… nodeId + OEE topic) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
Rewrites the google-tv-gemba proof app into a native OEE dashboard for the filling line (gw-fill-01): large TV-legible tiles (OEE hero + Availability/Performance/Quality + LineSpeed/GoodBottles/FillPressure/FillVolume/BowlLevel/ProductTemp/FillerState/ Rejects), bound to the OkHttp app-WebSocket signal stream. Parses snapshot (type signals, name+latest) and delta (type signal, channel-path normalized) frames, scoped to the filling device; keeps the proven OkHttp transport + reconnect + 15s ping, adds a stalled-socket watchdog. Connects to the tv-board app (Origin google-tv.edgecommons.local). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…e packaging board The mockup's 7-13px mono labels don't read on a 55" TV suspended above a line; raise label/secondary text to a ~19px floor and enlarge secondary values. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…owing step E) The TV-legibility label bump also enlarged the tiny 5-across process-flow cards, pushing the PALLETIZER layer line outside its box. Exclude .machine from the label bump, size its text to fit (16/22px), and raise the card min-height so the layer line stays inside. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…ector caught it) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
Three rounds of on-panel (55" 1080p) tuning of the Dallas packaging OEE board: - Float the 02 (Throughput) and 03 (Jam early warning) section headers ABOVE their cards, matching section 01 — each panel is wrapped in an .op-col so the heading is a sibling above the card rather than inside it. - Give 02/03 a real column gutter and set them apart from 01. The 2019 Tizen web runtime (Chromium ~63) ignores the `gap` shorthand on grid, so the gutter uses the grid-column-gap longhand; `gap` alone rendered zero gutter (the two cards touched). - Force the two content cards to equal height (.op-col fills the stretched grid row, the panel flexes to fill) and share one main-measure font size (48px). - Right-align the motor-current warn label and size it down to a legible-but-unobtrusive 16px (was crowding the reading value on the left, then briefly too large). - Trim the board to fit 1080p with a small overscan cushion — the added OEE band had pushed the footer 138px below the fold. Only paddings/margins/box heights were reclaimed; the legibility font floor is untouched. Verified live over CDP on the Samsung UN55RU8000: board 1080px, footer visible, panels equal, 28px 02/03 gutter, unified main fonts. Mirrored into the tizen-gemba package source and rebuilt/reinstalled the signed .wgt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
The Jam early-warning card bunched its content in the top two-thirds with ~70px of dead space at the bottom, and its landmarks did not line up with the Throughput card beside it. Lay the jam panel out as a flex column so it fills the card and aligns with 02: - the big motor-current reading now sits level with 02's good-case count (same top); - the dotted 9.0 A warn line lands on 02's good/reject bar; - the current-trend chart is taller (118px, was 84px), with less aspect squish; - the Jam switch / Palletizer indicator row is pinned to the bottom of the card; - the warn label is trimmed to 12px so the taller (less-squished) chart doesn't enlarge it. Verified live over CDP on the Samsung UN55RU8000: number tops equal, warn line within 4px of 02's bar, cards equal height, footer still within 1080p. Mirrored into the tizen-gemba package source and rebuilt/reinstalled the signed .wgt; browser copy updated in the console. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…ine 02 UX fixes Reviewing the native Sony/Google-TV filling-line board against the fixes just made to the Line 02 packaging board surfaced the same class of problem: the layout was top-packed WRAP_CONTENT with fixed sp font sizes and no vertical-fill seam, so on a real panel it would either clip the bottom tile row (dense/4K-scaled density) or leave a dead band at the bottom (tvdpi) — the Line 02 bottom-cutoff / wasted-space bugs, latent only because this app had never run on hardware. Apply the Android equivalent of the Line 02 flex-fill: - header stays fixed at the top; the OEE band and the production grid divide ALL remaining height by weight; the two tile rows split the grid evenly — the board fills the panel exactly at any reported density (no clip, no dead band); - the big numbers (OEE hero, the three OEE parts, the eight tile values) autosize uniformly to the largest one-line size that fits their now-bounded cells, so they stay as large as legible without ever overflowing. Equal-height/equal-width tiles and the section gutters were already consistent and are kept. Compiles (assembleDebug). NOT yet verified on the Sony panel — fit, legibility and alignment still need an on-device check once the TV's IP + ADB are available, the same way the Line 02 board was measured live. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…n the Sony panel
On-device verification on the BRAVIA 4K VH2 (1080p override, density 2.0 — the worst-case
density the weighted-fill was built for) exposed two layout bugs and confirmed the fill works:
- OEE band labels ("AVAILABILITY"/"PERFORMANCE") wrapped to two lines — the label now
autosizes to one line.
- Tile values clipped to a sliver: autosizing a value that shares a horizontal row with its
unit doesn't scale cleanly. The value now sits ALONE in its cell (autosize 28–56sp,
guaranteed to fit), with the unit moved up beside the name in the label row; the name
autosizes to one line so it is never truncated.
Result on the panel: the board fills the screen with no clip or dead band, every tile shows a
large legible value with its full name and unit, and live filling data (line speed, good
bottles, fill pressure/volume, bowl level, product temp, filler state, rejects) is flowing.
Known gap (separate, needs a decision): the OEE band stays blank because the filling line
publishes no computed OEE — gemba/oee/* exists only for the packaging device (gw-pack-01);
gw-fill-01 carries only a raw OeeShiftSnapshot array.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…al HMI The board read as a flat grid of undifferentiated dark boxes with no hierarchy or focal point. Rebuild it in the packaging board's visual language so it reads as a designed HMI: - light "paper" theme with a dark ink header + OEE band and safety-yellow accents, instead of a uniform dark grid; - numbered titled sections — 01 FILL LINE (process flow) and 02 FILL QUALITY (bowl-level tank + fill-pressure/volume radial gauges) — that break the screen into clear areas of focus; - a rotary-filler-ring hero anchoring the right column (a valve carousel that rotates with the line speed, hub = live fill rate), the filling analogue of the packaging board's pallet grid; - a shift tally (good bottles / rejects with an overfill-underfill split bar) under the hero, and a safety-striped footer strip of secondary readouts (product temp, CO2, valve, infeed). New custom views: FillerRingView (hero), plus TankGaugeView / ArcGaugeView / BarMeterView recoloured for the light theme; the unused SparklineView was removed (line speed now reads from the ring hub). Verified live on the BRAVIA 4K VH2 (1080p surface, density 2.0): the board fills the panel with no clip, every element is legible at distance, and it tracks the live disturbance scenarios (filler pressure-hold turns the FILLER step amber and the pressure gauge copper). Note the panel renders the Android UI at 1080p and upscales — the TV locks its UI surface to 1080p (wm size 3840x2160 does not take), so 4K is not addressable from the app. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…lity, flow, tally Address the review nits on the filling HMI: - Text cutoffs: the OEE hero and band values, and the flow stage names, were clipping. Root causes were autosize text filling its cell to the edge and long names truncating in narrow horizontal cards. Flow cards are now vertical (badge over a full-width name), section heights were rebalanced, and the autosize floors were lowered so values shrink instead of blanking. - The fill-line strip is no longer decorative: each stage that has sim data shows it live — the depalletizer shows infeed (Feeding/Starved), the filler its state, the capper its cap-reject count. The rinser and labeler read a static "Running" because the sim emits no signals for them (a follow-up could add them). - Bowl-level reading now has an outline (white fill + dark stroke) so it stays legible whether it sits over the blue liquid or the empty white tank below the waterline. - Good/Rejects tally is realigned: the two headers and numbers line up, with a single yield bar spanning both (green good / copper overfill / blue underfill) beneath them. - Conveyor speed replaces the redundant infeed readout in the footer; the filler ring hub is enlarged so the rate reads cleanly. Verified live on the BRAVIA across the running scenarios (infeed starvation drops the ring to "--" and marks the depalletizer/filler Starved; fill-pressure disturbance turns the pressure gauge copper). The rotary-filler ring animates (rotation speed tracks the line rate). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
…e Sony panel Full redesign of the native Android TV filling-line OEE board, driven by two adversarial design reviews against the higher-quality packaging board. - Flat, square-cornered full-width bands (no rounded cards); denser, calmer grid. - Colour carries meaning only: OEE and ACTUAL RATE are neutral, the footer health stripe and OEE accent are threshold-driven, and amber appears solely on real cautions (below-target rate, low bowl level, disrupted stage). - Instrumented INFEED > FILLER > CAPPER flow strip; each stage shares one anatomy (value + unit, state word, state bar) and bold amber chevrons read as one process. - Fill-quality panel: full-height tank gauge plus four consistent bullet bars (pressure/volume/temp/CO2), each with a tolerance band and a target tick. - RATE vs TARGET gauge in proper bullet-chart grammar: value fill + target marker. - Rejects panel: hero total, proportional split bar, per-category breakdown. - Header: brand mark + name, centred LINE/FILLING 01 identity, single device id. - New BulletBarView (target marker + configurable below-band colour); TankGauge/ BarMeterView reworked flat; ArcGaugeView/FillerRingView removed. - .gitignore added for local.properties and Android build output. Verified live on the Sony BRAVIA 4K (1920x1080), running and starved scenarios. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxV5wFi7LCratBERVT6aiL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Turns the Tizen TV client from a connection-feasibility proof into a real Line-2 packaging OEE dashboard, fed live over the existing multi-app gateway.
What
experiments/gemba/apps/tv-board/— thedallas-line-2-tizenmockup UI + an added OEE strip (OEE / Availability / Performance / Quality), driven live over the gateway app-WebSocket (protocol-v1hello/subscribe/updates,signalscapability). ES5 for the 2019 Tizen runtime; derives the gateway URL fromlocationin a browser or fromconfig.jswhen packaged. OEE tiles bind the frame's display names (OEE/Availability/Performance/Quality—idis null in the projection).tv/tizen-gemba/now packages this dashboard (itsconfig.jspoints at the LAN consolews://192.168.1.224:8080/apps/tv-board/ws);config.xml+build-tizen.ps1unchanged.Verified
Served at
/apps/tv-board/(browser) and rendered live end-to-end: OEE 90.3 / Avail 94.5 / Perf 100 / Qual 95.5, plus GoodCaseCount, CaseRateCpm, motor-current trend, pallet build, quality tiles, coordinated LabelCode. App WS accepts theoperatorrole + origin. (Harness registration + LAN exposure are in bottling-company-test#3.)🤖 Generated with Claude Code