Add lamp_station.py: barcode-driven measurement workflow
Interactive loop around lamp_export.py: scan an EAN (checksum validated, optional for barcode-less lamps), resolve it against previous lamps / a local cache / upcitemdb.com, confirm identification, record the packaging's advertised values, measure per the published procedure, and commit the bundle to the comparison-data repo with a device page stub for the web repo. Every lamp is keyed by an internal ID (L0001, L0002, ...) so one EAN can cover several versions (daylight/warm white variants) and unbranded lamps work. lamp_export.py passes optional ean, variant, and rated (advertised values) fields through into metrics.json.
This commit is contained in:
@@ -90,6 +90,36 @@ relative, which TM-30 is invariant to. Sanity check of the implementation:
|
||||
`uv run tm30.py` reproduces the published values for the CIE FL2 illuminant
|
||||
(Rf 70, Rg 86).
|
||||
|
||||
## Lamp Station (barcode workflow)
|
||||
|
||||
Interactive loop around `lamp_export.py` for building the comparison database
|
||||
end to end. Every lamp gets an internal ID (L0001, L0002, ...) as primary key;
|
||||
the EAN barcode is optional metadata, so one barcode can cover daylight/warm
|
||||
white variants (distinct IDs + variant field) and unbranded lamps work too.
|
||||
|
||||
Per lamp: scan the box (or 'n' for no barcode), the EAN is checksum-validated
|
||||
and resolved to manufacturer/model (previously measured lamps, local cache,
|
||||
then upcitemdb.com; GS1-restricted 20-29 barcodes are flagged as
|
||||
retailer-internal), lamps already measured under the same EAN are offered for
|
||||
re-measurement, you confirm the identification and type the ADVERTISED values
|
||||
from the packaging (flux, CCT, power, CRI, lifetime, equivalent W -> stored
|
||||
under "rated" in metrics.json for claimed-vs-measured comparison), insert the
|
||||
lamp, and the tool measures per the published procedure (230 V / 50 Hz, 60 s
|
||||
settle, 5 readings averaged), writes lamps/<ID>/ into the comparison-data
|
||||
checkout, commits, and pushes. If the web repo is present it also scaffolds
|
||||
the device page stub with the rated specs pre-filled (review and commit that
|
||||
one manually).
|
||||
|
||||
```bash
|
||||
uv run lamp_station.py # scan -> measure -> commit -> push
|
||||
uv run lamp_station.py --no-push # commit locally only
|
||||
uv run lamp_station.py --no-commit # just write the bundle
|
||||
uv run lamp_station.py --settle 0 --readings 1 # quick smoke test
|
||||
```
|
||||
|
||||
Defaults assume `C:/dev/buildfor_life_web` with the comparison-data submodule
|
||||
initialized; override with --data-repo / --web-repo.
|
||||
|
||||
## Offline Parsing
|
||||
|
||||
Parse previously captured USB traffic (pcap files from USBPcap):
|
||||
|
||||
Reference in New Issue
Block a user