Initial commit.
This commit is contained in:
commit
548f2e701f
7 files changed
+2978
No files matched your search
@@ -0,0 +1,101 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## What this is
|
||||||
|
|
||||||
|
A collection of Matter commissioning QR decoders (the `MT:` URI format used by
|
||||||
|
Matter/CHIP devices). Users either paste an `MT:` URI or scan a QR code; the
|
||||||
|
result shows the decoded payload (version, vendor/product IDs, commissioning
|
||||||
|
flow, discovery capabilities, discriminator, passcode). Three artifacts:
|
||||||
|
|
||||||
|
- `matter-qr-decoder.html` — the single-file browser app (Vue 3 + Bootstrap).
|
||||||
|
- `matter-decode.sh` — a pure-bash CLI port of the same decode logic (no camera
|
||||||
|
scanning; takes a URI as an argument or on stdin).
|
||||||
|
- `manufacturers.tsv` — `vendor ID → name` table (~900 rows), shared by both
|
||||||
|
tools and optional (a missing file only drops the vendor-name lookup).
|
||||||
|
- `gen-manufacturers.py` — Python 3 stdlib script that regenerates
|
||||||
|
`manufacturers.tsv`. Default source is the upstream `manufacturers.xml`
|
||||||
|
**fetched over the network** (via `curl`; a GitHub `blob/` URL is auto-rewritten
|
||||||
|
to its `raw.githubusercontent.com` form). A positional arg overrides with
|
||||||
|
another URL or a local XML file; passing `matter-qr-decoder.html` uses the
|
||||||
|
embedded `<map>` block as an offline fallback. Reproduces the committed TSV
|
||||||
|
byte-for-byte.
|
||||||
|
- `README.md` — user-facing docs; this file documents the internals.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
There is **no build, test, lint, or package step** — this is not a git repo and has no
|
||||||
|
`package.json`. The entire app is one HTML file that runs in the browser:
|
||||||
|
|
||||||
|
- Run/develop: open `matter-qr-decoder.html` in a modern browser and edit it directly.
|
||||||
|
- Camera scanning (`getUserMedia`) requires a **secure context** — serve over HTTPS or
|
||||||
|
`localhost` (e.g. `python3 -m http.server` then open `http://localhost:8000`).
|
||||||
|
- The "Scan QR" feature uses the `BarcodeDetector` API, which is **Chromium-only**
|
||||||
|
(Chrome/Edge). Firefox/Safari fall back to a "not supported" message; paste-input works everywhere.
|
||||||
|
- The page loads Vue 3, Bootstrap 5.3, and Bootstrap Icons from CDNs, so it needs network access.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Everything lives in `matter-qr-decoder.html` (~1500 lines). Two regions matter:
|
||||||
|
|
||||||
|
1. **App logic** (the `<script>` before `#app` is mounted, ~lines 255-559): a single
|
||||||
|
`Vue.createApp({...})` mounted to `#app`, with all state in `setup()` via `ref`/`computed`.
|
||||||
|
The UI template (lines ~26-253) is plain HTML using `v-model`/`v-if`/`v-on` bindings,
|
||||||
|
no SFC or build step.
|
||||||
|
2. **Vendor map** (`<script type="text/xml">`, ~lines 560-1495): a `<map>` of
|
||||||
|
`<mapping code="0xXXXX" translation="Name"/>` entries. This block is the bulk of the
|
||||||
|
file. It is **derived from upstream**
|
||||||
|
`project-chip/connectedhomeip .../zcl/data-model/manufacturers.xml` (Apache-2.0,
|
||||||
|
generated 2022-08-02) and carries an "do not edit manually" note — refresh it from
|
||||||
|
upstream rather than hand-editing individual rows.
|
||||||
|
|
||||||
|
### Decode pipeline (the core)
|
||||||
|
|
||||||
|
`decodeUri()` (triggered live on input) runs, in order:
|
||||||
|
|
||||||
|
1. Validate the `MT:` prefix, then take the base38 payload after it.
|
||||||
|
2. `base38Decode(str)` → `Uint8Array`. Charset is `0-9A-Z-.` (38 chars). Chunking is
|
||||||
|
**greedy**: 5 chars→3 bytes, 4→2, 2→1; a length that doesn't fit those groupings
|
||||||
|
throws `Invalid base38 string length`. Bytes are extracted **little-endian**
|
||||||
|
(`value & 0xFF`, then `>>= 8`).
|
||||||
|
3. `extractBits(bytes, startBit, bitCount)` reads the 84-bit field layout **LSB-first**.
|
||||||
|
Fixed field order/widths (see the in-page "Data Encoding Format" table for the source of truth):
|
||||||
|
version(3), vendor ID(16), product ID(16), custom flow(2), discovery caps(8),
|
||||||
|
discriminator(12), passcode(27).
|
||||||
|
4. Display helpers translate raw numbers: `getCustomFlowName`, `getDiscoveryCapabilities`
|
||||||
|
(bit flags: SoftAP / BLE / On IP Network), `formatVendorId`/`formatProductId`
|
||||||
|
(decimal + `0x`-hex padded to 4).
|
||||||
|
|
||||||
|
### Vendor name lookup
|
||||||
|
|
||||||
|
`getVendorName(id)` → `parseVendorMappings()` **lazily parses the embedded XML once**
|
||||||
|
(cached on `vendorMap`, a `let` inside `setup()`) via `DOMParser`, keyed by
|
||||||
|
`parseInt(code, 16)`. It is exposed reactively through the `vendorName` `computed`, so
|
||||||
|
the lookup re-runs when the decoded vendor ID changes.
|
||||||
|
|
||||||
|
## Gotchas
|
||||||
|
|
||||||
|
- The `BarcodeDetector` scanner polls the camera via `setInterval` every 200ms and
|
||||||
|
auto-stops the first time it sees a QR starting with `MT:`; `stopScanning()` clears
|
||||||
|
the interval **and** stops the media tracks — keep those paired when changing scanning.
|
||||||
|
- `parseVendorMappings` short-circuits on a non-empty `vendorMap`; if you add a mechanism
|
||||||
|
to update the map, clear/reset that cache or new codes won't be seen.
|
||||||
|
- The relative links `/tools/` and `/` (header/footer) imply this page is deployed as part
|
||||||
|
of a larger static site (Tommie Gannert's blog/tools), but that site isn't in this repo.
|
||||||
|
- `matter-decode.sh` is a bash port of the HTML app's decode pipeline, kept in lockstep
|
||||||
|
with it — the base38 charset/chunking, little-endian byte extraction, and the 84-bit
|
||||||
|
LSB-first field layout are identical. When you change the decode logic in the HTML app,
|
||||||
|
mirror it in the script (and vice versa). The script's only extra is a `manufacturers.tsv`
|
||||||
|
lookup for the vendor name; without that file it still decodes everything else.
|
||||||
|
- `manufacturers.tsv` is regenerated with `gen-manufacturers.py` (Python 3
|
||||||
|
stdlib). Default source is the **upstream `manufacturers.xml` fetched over the
|
||||||
|
network** (via `curl`; a GitHub `blob/` URL is auto-rewritten to its
|
||||||
|
`raw.githubusercontent.com` form). A positional arg overrides with another URL
|
||||||
|
or a local XML file, and passing `matter-qr-decoder.html` uses the embedded
|
||||||
|
`<map>` block as an **offline** fallback. The default fetch is pinned to the
|
||||||
|
same commit the HTML block came from, so it reproduces the committed TSV
|
||||||
|
byte-for-byte. Caveat: the script writes **only the TSV** — the embedded
|
||||||
|
`<script type="text/xml">` block in the HTML app has the same upstream
|
||||||
|
provenance and a "do not edit manually" note, so refreshing the TSV from new
|
||||||
|
upstream XML leaves the HTML copy stale. Refresh both from the same source.
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
# Matter QR Code Decoder
|
||||||
|
|
||||||
|
Decode the commissioning QR code that Matter / CHIP devices ship with. A Matter
|
||||||
|
device's setup QR encodes a short `MT:` URI that carries the information a
|
||||||
|
commissioning app (e.g. Apple Home, Google Home, the Matter app) needs to pair
|
||||||
|
with the device for the first time. This tool takes that URI and shows you what
|
||||||
|
is inside.
|
||||||
|
|
||||||
|
No build, no install, no package step. Two ways to use it: a browser app and a
|
||||||
|
command-line script that share the same decode logic.
|
||||||
|
|
||||||
|
## What it decodes
|
||||||
|
|
||||||
|
Given an `MT:` URI, the payload (84 bits, see [Data format](#data-format)) is
|
||||||
|
split into these fields:
|
||||||
|
|
||||||
|
| Field | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| **Version** | Encoding version (3 bits) |
|
||||||
|
| **Vendor ID** | 16-bit manufacturer identifier, shown as decimal + `0x`-hex, with a name looked up from `manufacturers.tsv` when available |
|
||||||
|
| **Product ID** | 16-bit vendor-assigned product identifier, decimal + `0x`-hex |
|
||||||
|
| **Custom Flow** | Commissioning flow type: 0 = Standard, 1 = User Intent, 2 = Custom, 3 = Reserved |
|
||||||
|
| **Discovery** | How the device can be found: **SoftAP** / **BLE** / **On IP Network** (a bitset — a device may show more than one) |
|
||||||
|
| **Discriminator** | 12-bit discriminator |
|
||||||
|
| **Passcode** | 27-bit commissioning passcode |
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
| File | What it is |
|
||||||
|
|---|---|
|
||||||
|
| [`matter-qr-decoder.html`](matter-qr-decoder.html) | The browser app. Single self-contained HTML file (Vue 3 + Bootstrap 5.3, loaded from CDNs). |
|
||||||
|
| [`matter-decode.sh`](matter-decode.sh) | A pure-bash CLI port of the same decode logic. No camera scanning. |
|
||||||
|
| [`manufacturers.tsv`](manufacturers.tsv) | Tab-separated `vendor ID → name` table (~900 rows) used to turn a numeric vendor ID into a name. Shared by both tools; optional. |
|
||||||
|
| [`gen-manufacturers.py`](gen-manufacturers.py) | Python 3 script that regenerates `manufacturers.tsv`; pulls the upstream `manufacturers.xml` over the network by default (or a URL/local file/HTML block you pass in). |
|
||||||
|
|
||||||
|
`CLAUDE.md` documents the internals for anyone (or Claude Code) working on the
|
||||||
|
code.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Browser app
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- A modern browser with network access (the page loads Vue 3, Bootstrap 5.3, and
|
||||||
|
Bootstrap Icons from CDNs).
|
||||||
|
- Camera scanning needs a **secure context** — serve it over `HTTPS` or
|
||||||
|
`localhost`, not `file://`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python3 -m http.server 8000
|
||||||
|
# then open http://localhost:8000/matter-qr-decoder.html
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use it
|
||||||
|
|
||||||
|
1. Paste an `MT:` URI into the **Input** box — decoding happens live as you type.
|
||||||
|
2. Or click **Scan QR** and point your camera at the code. Scanning stops itself
|
||||||
|
the moment it reads an `MT:` QR.
|
||||||
|
|
||||||
|
Two caveats:
|
||||||
|
|
||||||
|
- **Scan QR is Chromium-only** (Chrome / Edge). It uses the `BarcodeDetector`
|
||||||
|
API. Firefox and Safari show a "not supported" message — **pasting a URI works
|
||||||
|
everywhere**, so use that on those browsers.
|
||||||
|
- The **Data Encoding Format** and **Discovery Capabilities Bits** sections at the
|
||||||
|
bottom of the page explain the layout shown in the output.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Command line
|
||||||
|
|
||||||
|
`matter-decode.sh` decodes a URI from an argument or from stdin and prints the
|
||||||
|
same fields as the web UI:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./matter-decode.sh "MT:..."
|
||||||
|
echo "MT:..." | ./matter-decode.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output (run the URI through the script to reproduce):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ echo "MT:O083635783973181337368400343813154179" | ./matter-decode.sh
|
||||||
|
Version: 0
|
||||||
|
Vendor ID: 13012 (0x32D4)
|
||||||
|
Product ID: 50616 (0xC5B8)
|
||||||
|
Custom Flow: User Intent Commissioning Flow
|
||||||
|
Discovery: BLE
|
||||||
|
Discriminator:1723
|
||||||
|
Passcode: 8126392
|
||||||
|
```
|
||||||
|
|
||||||
|
(The vendor ID `0x32D4` isn't in `manufacturers.tsv`, so no name is printed —
|
||||||
|
that's expected, not an error.)
|
||||||
|
|
||||||
|
The script is pure bash (3.x+). It reads `manufacturers.tsv` from its own
|
||||||
|
directory to resolve the vendor name; without that file every field still decodes
|
||||||
|
and only the vendor name is omitted.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data format
|
||||||
|
|
||||||
|
The URI is `MT:` followed by a **base38** payload (charset `0-9 A-Z - .`, 38
|
||||||
|
symbols). The payload decodes to bytes, read **little-endian**, then sliced into
|
||||||
|
the 84-bit field layout **LSB-first**:
|
||||||
|
|
||||||
|
```
|
||||||
|
version(3) | vendor ID(16) | product ID(16) | custom flow(2)
|
||||||
|
| discovery caps(8) | discriminator(12) | passcode(27)
|
||||||
|
```
|
||||||
|
|
||||||
|
Base38 decoding is greedy: 5 chars → 3 bytes, 4 → 2, 2 → 1; a length that fits
|
||||||
|
none of those groupings is an error. Both the HTML app and the shell script use
|
||||||
|
this same scheme, which is why the two stay in lockstep.
|
||||||
|
|
||||||
|
## Vendor name lookup
|
||||||
|
|
||||||
|
Both tools map a numeric **Vendor ID** to a name using
|
||||||
|
`manufacturers.tsv` (`vendor ID` in the first column, name in the second). The
|
||||||
|
table is derived from upstream
|
||||||
|
`project-chip/connectedhomeip .../zcl/data-model/manufacturers.xml`
|
||||||
|
(Apache-2.0, generated 2022-08-02). **Refresh it from upstream rather than
|
||||||
|
hand-editing individual rows.**
|
||||||
|
|
||||||
|
To refresh the table, run **`gen-manufacturers.py`** (Python 3 standard library
|
||||||
|
only). By default it **pulls the upstream `manufacturers.xml` over the network**
|
||||||
|
(via `curl`) and writes the sorted two-column TSV (`decimal id \t name`) to
|
||||||
|
`manufacturers.tsv`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python3 gen-manufacturers.py
|
||||||
|
```
|
||||||
|
|
||||||
|
The source is pinned to the same commit the HTML block was generated from, so a
|
||||||
|
fresh pull reproduces the current `manufacturers.tsv` exactly. To refresh from a
|
||||||
|
different upstream revision, pass a source — a URL (a GitHub `blob/` URL is
|
||||||
|
auto-rewritten to its `raw.githubusercontent.com` form) or a local XML file:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python3 gen-manufacturers.py https://.../manufacturers.xml
|
||||||
|
python3 gen-manufacturers.py ./manufacturers.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
No network? Use the embedded block as the source instead:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python3 gen-manufacturers.py matter-qr-decoder.html
|
||||||
|
```
|
||||||
|
|
||||||
|
The same table is also embedded as a `<map>` XML block near the end of
|
||||||
|
`matter-qr-decoder.html` (marked "do not edit manually"). This script regenerates
|
||||||
|
only the TSV, so if you refresh the TSV from new upstream XML, also paste that XML
|
||||||
|
into the HTML's `<script type="text/xml">` block to keep the two copies in sync.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The vendor mapping is derived from Matter/CHIP's `manufacturers.xml`, which is
|
||||||
|
Apache-2.0. The app itself is a small single-file utility.
|
||||||
Binary file not shown.
Executable
+150
@@ -0,0 +1,150 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Regenerate manufacturers.tsv from the Matter/CHIP manufacturer ID map.
|
||||||
|
#
|
||||||
|
# The TSV has two columns, "<decimal vendor id>\t<name>", sorted by vendor id. It
|
||||||
|
# is consumed by matter-decode.sh and is mirrored by the embedded <map> in
|
||||||
|
# matter-qr-decoder.html. It is derived from upstream project-chip/connectedhomeip's
|
||||||
|
# manufacturers.xml -- refresh from there rather than hand-editing.
|
||||||
|
#
|
||||||
|
# https://raw.githubusercontent.com/project-chip/connectedhomeip/refs/heads/master/src/app/zap-templates/zcl/data-model/manufacturers.xml
|
||||||
|
#
|
||||||
|
# By default the script pulls the upstream file over the network (via curl) and
|
||||||
|
# writes manufacturers.tsv:
|
||||||
|
#
|
||||||
|
# python3 gen-manufacturers.py
|
||||||
|
#
|
||||||
|
# A GitHub blob/ (HTML) URL is auto-rewritten to its raw.githubusercontent.com
|
||||||
|
# form, so the URL from the repo's "From ..." comment works as-is.
|
||||||
|
#
|
||||||
|
# Override the source with a positional argument that is a URL or a local file:
|
||||||
|
#
|
||||||
|
# python3 gen-manufacturers.py <url-or-file>
|
||||||
|
# python3 gen-manufacturers.py matter-qr-decoder.html # offline: embedded block
|
||||||
|
# python3 gen-manufacturers.py -o out.tsv <source>
|
||||||
|
#
|
||||||
|
# The default network fetch uses curl (falling back to urllib if curl is
|
||||||
|
# missing); a .html source and a plain XML file need no network. Requires only
|
||||||
|
# the Python 3 standard library.
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import urllib.request
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
SCRIPT_DIR = Path(__file__).resolve().parent
|
||||||
|
|
||||||
|
# Pinned upstream source -- the same commit the HTML block was generated from, so
|
||||||
|
# a fresh pull reproduces the committed TSV byte-for-byte until upstream moves.
|
||||||
|
UPSTREAM_RAW = ("https://raw.githubusercontent.com/project-chip/connectedhomeip/"
|
||||||
|
"7986ee3d82b26403fc2d0f70bdfbc9e8ff650df1/"
|
||||||
|
"src/app/zap-templates/zcl/data-model/manufacturers.xml")
|
||||||
|
|
||||||
|
|
||||||
|
def by_local_tag(root, local_name):
|
||||||
|
for el in root.iter():
|
||||||
|
tag = el.tag.rsplit("}", 1)[-1] if "}" in el.tag else el.tag
|
||||||
|
if tag == local_name:
|
||||||
|
yield el
|
||||||
|
|
||||||
|
|
||||||
|
def mappings_from_xml_text(xml_text):
|
||||||
|
m = re.search(r"<map\b.*?</map>", xml_text, re.DOTALL | re.IGNORECASE)
|
||||||
|
frag = m.group(0) if m else xml_text
|
||||||
|
root = ET.fromstring(frag)
|
||||||
|
|
||||||
|
rows = []
|
||||||
|
for el in by_local_tag(root, "mapping"):
|
||||||
|
code = el.get("code")
|
||||||
|
name = el.get("translation", "")
|
||||||
|
if code is None:
|
||||||
|
continue
|
||||||
|
# Upstream codes are hex with a 0x prefix ("0x1026"); strip it.
|
||||||
|
hexpart = code[2:] if code[:2].lower() == "0x" else code
|
||||||
|
try:
|
||||||
|
dec = int(hexpart, 16)
|
||||||
|
except ValueError:
|
||||||
|
sys.stderr.write(f"warning: skipping unparseable code {code!r}\n")
|
||||||
|
continue
|
||||||
|
rows.append((dec, name))
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
def to_raw_url(url):
|
||||||
|
m = re.match(r"https://github\.com/([^/]+)/([^/]+)/blob/(.+)", url)
|
||||||
|
if m:
|
||||||
|
owner, repo, path = m.groups()
|
||||||
|
return f"https://raw.githubusercontent.com/{owner}/{repo}/{path}"
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_url(url):
|
||||||
|
url = to_raw_url(url)
|
||||||
|
if shutil.which("curl"):
|
||||||
|
try:
|
||||||
|
out = subprocess.run(["curl", "-fsSL", url],
|
||||||
|
capture_output=True, check=True).stdout
|
||||||
|
return out.decode("utf-8")
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
sys.stderr.write(e.stderr.decode("utf-8", "replace"))
|
||||||
|
sys.exit(f"error: failed to fetch {url}")
|
||||||
|
req = urllib.request.Request(url, headers={"User-Agent": "gen-manufacturers.py"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req) as resp:
|
||||||
|
return resp.read().decode("utf-8")
|
||||||
|
except Exception as e:
|
||||||
|
sys.exit(f"error: failed to fetch {url}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def read_source(source):
|
||||||
|
if source.startswith(("http://", "https://")):
|
||||||
|
return fetch_url(source)
|
||||||
|
path = Path(source)
|
||||||
|
if not path.exists():
|
||||||
|
sys.exit(f"error: no such file: {path}")
|
||||||
|
if path.suffix.lower() == ".html":
|
||||||
|
html = path.read_text(encoding="utf-8")
|
||||||
|
m = re.search(r'<script\s+type="text/xml"[^>]*>(.*?)</script>',
|
||||||
|
html, re.DOTALL | re.IGNORECASE)
|
||||||
|
if not m:
|
||||||
|
sys.exit('error: no <script type="text/xml"> block in ' + str(path))
|
||||||
|
return m.group(1)
|
||||||
|
return path.read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def write_tsv(path, rows):
|
||||||
|
rows.sort(key=lambda r: r[0])
|
||||||
|
with open(path, "w", encoding="utf-8", newline="") as f:
|
||||||
|
for dec, name in rows:
|
||||||
|
f.write(f"{dec}\t{name}\n")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ap = argparse.ArgumentParser(
|
||||||
|
description="Regenerate manufacturers.tsv from the Matter/CHIP "
|
||||||
|
"manufacturer ID map (fetches upstream by default).")
|
||||||
|
ap.add_argument(
|
||||||
|
"source", nargs="?", default=UPSTREAM_RAW,
|
||||||
|
help="a URL or local file (default: pinned upstream manufacturers.xml). "
|
||||||
|
"A GitHub blob/ URL is auto-converted to its raw form; a .html path "
|
||||||
|
'uses its embedded <script type="text/xml"> block.')
|
||||||
|
ap.add_argument(
|
||||||
|
"-o", "--output", default=str(SCRIPT_DIR / "manufacturers.tsv"),
|
||||||
|
help="output path (default: manufacturers.tsv next to this script)")
|
||||||
|
args = ap.parse_args()
|
||||||
|
|
||||||
|
xml_text = read_source(args.source)
|
||||||
|
rows = mappings_from_xml_text(xml_text)
|
||||||
|
if not rows:
|
||||||
|
sys.exit("error: no <mapping> entries found in the source")
|
||||||
|
|
||||||
|
out = Path(args.output)
|
||||||
|
write_tsv(out, rows)
|
||||||
|
sys.stderr.write(f"wrote {len(rows)} mappings to {out} (from {args.source})\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,911 @@
|
|||||||
|
0 [Matter Standard]
|
||||||
|
1 Panasonic
|
||||||
|
2 Sony
|
||||||
|
3 Samsung
|
||||||
|
4 Philips (RF4CE)
|
||||||
|
5 Freescale (RF4CE)
|
||||||
|
6 Oki Semiconductors (RF4CE)
|
||||||
|
7 Texas Instruments
|
||||||
|
4096 Cirronet
|
||||||
|
4097 Chipcon
|
||||||
|
4098 Ember
|
||||||
|
4099 NTS
|
||||||
|
4100 Freescale
|
||||||
|
4101 IP Com
|
||||||
|
4102 San Juan Software
|
||||||
|
4103 TUV
|
||||||
|
4104 Integration
|
||||||
|
4105 BM SpA
|
||||||
|
4106 AwarePoint
|
||||||
|
4107 Signify Netherlands B.V.
|
||||||
|
4108 Luxoft
|
||||||
|
4109 Korwin
|
||||||
|
4110 One RF Technology
|
||||||
|
4111 Software Technologies Group
|
||||||
|
4112 Telegesis
|
||||||
|
4113 Visonic
|
||||||
|
4114 Insta
|
||||||
|
4115 Atalum
|
||||||
|
4116 Atmel
|
||||||
|
4117 Develco
|
||||||
|
4118 Honeywell
|
||||||
|
4119 RadioPulse
|
||||||
|
4120 Renesas
|
||||||
|
4121 Xanadu Wireless
|
||||||
|
4122 NEC Engineering
|
||||||
|
4123 Yamatake Corporation
|
||||||
|
4124 Tendril Networks
|
||||||
|
4125 Assa Abloy
|
||||||
|
4126 MaxStream
|
||||||
|
4127 Neurocom
|
||||||
|
4128 Institute for Information Industry
|
||||||
|
4129 Legrand Group
|
||||||
|
4130 iControl
|
||||||
|
4131 Raymarine
|
||||||
|
4132 LS Research
|
||||||
|
4133 Onity Inc.
|
||||||
|
4134 Mono Products
|
||||||
|
4135 RF Technologies
|
||||||
|
4136 Itron
|
||||||
|
4137 Tritech
|
||||||
|
4138 Embedit A/S
|
||||||
|
4139 S3C
|
||||||
|
4140 Siemens
|
||||||
|
4141 Mindtech
|
||||||
|
4142 LG Electronics
|
||||||
|
4143 Mitsubishi Electric Corp.
|
||||||
|
4144 Johnson Controls
|
||||||
|
4145 Secure Meters (UK) Ltd
|
||||||
|
4146 Knick
|
||||||
|
4147 Viconics
|
||||||
|
4148 Flexipanel
|
||||||
|
4149 Piasim Corporation Pte., Ltd.
|
||||||
|
4150 Trane
|
||||||
|
4151 NXP Semiconductors
|
||||||
|
4152 Living Independently Group
|
||||||
|
4153 AlertMe.com
|
||||||
|
4154 Daintree
|
||||||
|
4155 Aiji System
|
||||||
|
4156 Telecom Italia
|
||||||
|
4157 Mikrokrets AS
|
||||||
|
4158 Oki Semiconductor
|
||||||
|
4159 Newport Electonics
|
||||||
|
4160 Control 4
|
||||||
|
4161 STMicroelectronics
|
||||||
|
4162 Ad-Sol Nissin Corp
|
||||||
|
4163 DCSI
|
||||||
|
4164 France Telecom
|
||||||
|
4165 muNet
|
||||||
|
4166 Autani Corporation
|
||||||
|
4167 Colorado vNet
|
||||||
|
4168 Aerocomm, Inc.
|
||||||
|
4169 Silicon Laboratories
|
||||||
|
4170 Inncom International Inc.
|
||||||
|
4171 Cooper Power Systems
|
||||||
|
4172 Synapse
|
||||||
|
4173 Fisher Pierce/Sunrise
|
||||||
|
4174 CentraLite Systems, Inc.
|
||||||
|
4175 Crane Wireless Monitoring Solutions
|
||||||
|
4176 Mobilarm Limited
|
||||||
|
4177 iMonitor Research Ltd.
|
||||||
|
4178 Bartech
|
||||||
|
4179 MeshNetics
|
||||||
|
4180 LS Industrial Systems Co. Ltd.
|
||||||
|
4181 Cason Engineering plc
|
||||||
|
4182 Wireless Glue Networks Inc.
|
||||||
|
4183 Elster
|
||||||
|
4184 SMS Tecnologia Eletrônica
|
||||||
|
4185 Onset Computer Corporation
|
||||||
|
4186 Riga Development
|
||||||
|
4187 Energate
|
||||||
|
4188 ConMed Linvatec
|
||||||
|
4189 PowerMand
|
||||||
|
4190 Schneider Electric
|
||||||
|
4191 Eaton Corporation
|
||||||
|
4192 Telular Corporation
|
||||||
|
4193 Delphi Medical Systems
|
||||||
|
4194 EpiSensor Limited
|
||||||
|
4195 Landis+Gyr
|
||||||
|
4196 Kaba Group
|
||||||
|
4197 Shure Incorporated
|
||||||
|
4198 Comverge, Inc.
|
||||||
|
4199 DBS Lodging Technologies, LLC.
|
||||||
|
4200 Energy Aware Technology Inc.
|
||||||
|
4201 Hidalgo Limited
|
||||||
|
4202 Air2App
|
||||||
|
4203 AMX
|
||||||
|
4204 EDMI Pty Ltd
|
||||||
|
4205 Cyan Ltd
|
||||||
|
4206 System SPA
|
||||||
|
4207 Telit
|
||||||
|
4208 Kaga Electronics
|
||||||
|
4209 Astrel Group SRL
|
||||||
|
4210 Certicom
|
||||||
|
4211 Gridpoint
|
||||||
|
4212 Profile Systems LLC
|
||||||
|
4213 Compacta International Ltd
|
||||||
|
4214 Freestyle Technology Pty Ltd.
|
||||||
|
4215 Alektrona
|
||||||
|
4216 Computime
|
||||||
|
4217 Remote Technologies, Inc.
|
||||||
|
4218 Wavecom S.A.
|
||||||
|
4219 Energy Optimizers Ltd.
|
||||||
|
4220 GE
|
||||||
|
4221 Jetlun
|
||||||
|
4222 Cipher Systems
|
||||||
|
4223 Corporate Systems Engineering
|
||||||
|
4224 ecobee
|
||||||
|
4225 SMK
|
||||||
|
4226 Meshworks Wireless Oy
|
||||||
|
4227 Ellips B.V.
|
||||||
|
4228 Secure electrans
|
||||||
|
4229 CEDO
|
||||||
|
4230 Toshiba
|
||||||
|
4231 Digi International
|
||||||
|
4232 Ubilogix
|
||||||
|
4233 Echelon
|
||||||
|
4240 Green Energy Options
|
||||||
|
4241 Silver Spring Networks
|
||||||
|
4242 Black & Decker
|
||||||
|
4243 Aztech Associates Inc.
|
||||||
|
4244 A&D Co., Ltd.
|
||||||
|
4245 Rainforest Automation
|
||||||
|
4246 Carrier Electronics
|
||||||
|
4247 SyChip/Murata
|
||||||
|
4248 OpenPeak
|
||||||
|
4249 PassiveSystems
|
||||||
|
4250 MMB Research
|
||||||
|
4251 Leviton Manufacturing Company
|
||||||
|
4252 Korea Electric Power Data Network Co., Ltd.
|
||||||
|
4253 Comcast
|
||||||
|
4254 NEC Electronics
|
||||||
|
4255 Netvox
|
||||||
|
4256 U-Control
|
||||||
|
4257 Embedia Technologies Corp
|
||||||
|
4258 Sensus
|
||||||
|
4259 Sunrise Technologies
|
||||||
|
4260 Memtech Corp
|
||||||
|
4261 Freebox
|
||||||
|
4262 M2 Labs Ltd.
|
||||||
|
4263 British Gas
|
||||||
|
4264 Sentec Ltd.
|
||||||
|
4265 Navetas
|
||||||
|
4266 Lightspeed Technologies
|
||||||
|
4267 Oki Electric Industry Co., Ltd.
|
||||||
|
4268 S I - Sistemas Inteligentes Eletrônicos Ltda
|
||||||
|
4269 Dometic
|
||||||
|
4270 Alps
|
||||||
|
4271 EnergyHub
|
||||||
|
4272 Kamstrup
|
||||||
|
4273 EchoStar
|
||||||
|
4274 EnerNOC
|
||||||
|
4275 Eltav
|
||||||
|
4276 Belkin
|
||||||
|
4277 XStreamHD - Wireless Ventures
|
||||||
|
4278 Saturn South Pty Ltd
|
||||||
|
4279 GreenTrapOnline A/S
|
||||||
|
4280 SmartSynch, Inc.
|
||||||
|
4281 Nyce Control, Inc.
|
||||||
|
4282 ICM Controls Corp
|
||||||
|
4283 Millennium Electronics, PTY Ltd.
|
||||||
|
4284 Motorola, Inc
|
||||||
|
4285 Emerson White-Rodgers
|
||||||
|
4286 Radio Thermostat Company of America
|
||||||
|
4287 OMRON Corporation
|
||||||
|
4288 GiiNii Global Limited
|
||||||
|
4289 Fujitsu General Limited
|
||||||
|
4290 Peel Technologies, Inc.
|
||||||
|
4291 Accent S.p.A.
|
||||||
|
4292 ByteSnap Design Ltd.
|
||||||
|
4293 NEC TOKIN Corporation
|
||||||
|
4294 G4S Justice Services
|
||||||
|
4295 Trilliant Networks, Inc.
|
||||||
|
4296 Electrolux Italia S.p.A
|
||||||
|
4297 Onzo Ltd
|
||||||
|
4298 EnTek Systems
|
||||||
|
4299 Philips
|
||||||
|
4300 Mainstream Engineering
|
||||||
|
4301 Indesit Company
|
||||||
|
4302 THINKECO, INC.
|
||||||
|
4303 2D2C, Inc.
|
||||||
|
4304 Qorvo
|
||||||
|
4305 InterCEL
|
||||||
|
4306 LG Electronics
|
||||||
|
4307 Mitsumi Electric Co.,Ltd.
|
||||||
|
4308 Mitsumi Electric Co.,Ltd.
|
||||||
|
4309 Zentrum Mikroelektronik Dresden AG (ZMDI)
|
||||||
|
4310 Nest Labs, Inc.
|
||||||
|
4311 Exegin Technologies, Ltd.
|
||||||
|
4312 Honeywell
|
||||||
|
4313 Takahata Precision Co. Ltd.
|
||||||
|
4314 SUMITOMO ELECTRIC NETWORKS, INC.
|
||||||
|
4315 GE Energy
|
||||||
|
4316 GE Appliances
|
||||||
|
4317 Radiocrafts AS
|
||||||
|
4318 Ceiva
|
||||||
|
4319 TEC&CO Co., Ltd
|
||||||
|
4320 Chameleon Technology (UK) Ltd
|
||||||
|
4321 Samsung
|
||||||
|
4322 ruwido austria gmbh
|
||||||
|
4323 Huawei Technologies Co., Ltd.
|
||||||
|
4324 Huawei Technologies Co., Ltd.
|
||||||
|
4325 Greenwave Reality
|
||||||
|
4326 BGlobal Metering Ltd
|
||||||
|
4327 Mindteck
|
||||||
|
4328 Ingersoll-Rand
|
||||||
|
4329 Dius Computing Pty Ltd
|
||||||
|
4330 Embedded Automation, Inc.
|
||||||
|
4331 ABB
|
||||||
|
4332 Sony
|
||||||
|
4333 Genus Power Infrastructures Limited
|
||||||
|
4334 Universal Electronics, Inc.
|
||||||
|
4335 Universal Electronics, Inc.
|
||||||
|
4336 Metrum Technologies, LLC
|
||||||
|
4337 Cisco
|
||||||
|
4338 Ubisys technologies GmbH
|
||||||
|
4339 Consert
|
||||||
|
4340 Crestron Electronics
|
||||||
|
4341 Enphase Energy
|
||||||
|
4342 Invensys Controls
|
||||||
|
4343 Mueller Systems, LLC
|
||||||
|
4344 AAC Technologies Holding
|
||||||
|
4345 U-NEXT Co., Ltd
|
||||||
|
4346 Steelcase Inc.
|
||||||
|
4347 Telematics Wireless
|
||||||
|
4348 Samil Power Co., Ltd
|
||||||
|
4349 Pace Plc
|
||||||
|
4350 Osborne Coinage Co.
|
||||||
|
4351 Powerwatch
|
||||||
|
4352 CANDELED GmbH
|
||||||
|
4353 FlexGrid S.R.L
|
||||||
|
4354 Humax
|
||||||
|
4355 Universal Devices
|
||||||
|
4356 Advanced Energy
|
||||||
|
4357 BEGA Gantenbrink-Leuchten
|
||||||
|
4358 Brunel University
|
||||||
|
4359 Panasonic R&D Center Singapore
|
||||||
|
4360 eSystems Research
|
||||||
|
4361 Panamax
|
||||||
|
4362 SmartThings, Inc.
|
||||||
|
4363 EM-Lite Ltd.
|
||||||
|
4364 Osram Sylvania
|
||||||
|
4365 2 Save Energy Ltd.
|
||||||
|
4366 Planet Innovation Products Pty Ltd
|
||||||
|
4367 Ambient Devices, Inc.
|
||||||
|
4368 Profalux
|
||||||
|
4369 Billion Electric Company (BEC)
|
||||||
|
4370 Embertec Pty Ltd
|
||||||
|
4371 IT Watchdogs
|
||||||
|
4372 Reloc
|
||||||
|
4373 Intel Corporation
|
||||||
|
4374 Trend Electronics Limited
|
||||||
|
4375 Moxa
|
||||||
|
4376 QEES
|
||||||
|
4377 SAYME Wireless Sensor Networks
|
||||||
|
4378 Pentair Aquatic Systems
|
||||||
|
4379 Orbit Irrigation
|
||||||
|
4380 California Eastern Laboratories
|
||||||
|
4381 Comcast
|
||||||
|
4382 IDT Technology Limited
|
||||||
|
4383 Pixela Corporation
|
||||||
|
4384 TiVo, Inc.
|
||||||
|
4385 Fidure Corp.
|
||||||
|
4386 Marvell Semiconductor, Inc.
|
||||||
|
4387 Wasion Group Limited
|
||||||
|
4388 Jasco Products Company
|
||||||
|
4389 Shenzhen Kaifa Technology (Chengdu) Co., Ltd.
|
||||||
|
4390 Netcomm Wireless Limited
|
||||||
|
4391 Define Instruments Limited
|
||||||
|
4392 In Home Displays Ltd.
|
||||||
|
4393 Miele & Cie. KG
|
||||||
|
4394 Televes S.A.
|
||||||
|
4395 Labelec
|
||||||
|
4396 China Electronics Standardization Institute
|
||||||
|
4397 Vectorform, LLC
|
||||||
|
4398 Busch-Jaeger Elektro
|
||||||
|
4399 Redpine Signals, Inc.
|
||||||
|
4400 Bridges Electronic Technology Pty Ltd.
|
||||||
|
4401 Sercomm
|
||||||
|
4402 WSH GmbH wirsindheller
|
||||||
|
4403 Bosch Security Systems, Inc.
|
||||||
|
4404 eZEX Corporation
|
||||||
|
4405 Dresden Elektronik Ingenieurtechnik GmbH
|
||||||
|
4406 MEAZON S.A.
|
||||||
|
4407 Crow Electronic Engineering Ltd.
|
||||||
|
4408 Harvard Engineering Plc
|
||||||
|
4409 Andson(Beijing) Technology CO.,Ltd
|
||||||
|
4410 Adhoco AG
|
||||||
|
4411 Waxman Consumer Products Group, Inc.
|
||||||
|
4412 Owon Technology, Inc.
|
||||||
|
4413 Hitron Technologies, Inc.
|
||||||
|
4414 Scemtec Hard - und Software für Mess - und Steuerungstechnik GmbH
|
||||||
|
4415 Webee LLC
|
||||||
|
4416 Grid2Home Inc
|
||||||
|
4417 Telink Micro
|
||||||
|
4418 Jasmine Systems, Inc.
|
||||||
|
4419 Bidgely
|
||||||
|
4420 Lutron
|
||||||
|
4421 IJENKO
|
||||||
|
4422 Starfield Electronic Ltd.
|
||||||
|
4423 TCP, Inc.
|
||||||
|
4424 Rogers Communications Partnership
|
||||||
|
4425 Cree, Inc.
|
||||||
|
4426 Robert Bosch LLC
|
||||||
|
4427 Ibis Networks, Inc.
|
||||||
|
4428 Quirky, Inc.
|
||||||
|
4429 Efergy Technologies Limited
|
||||||
|
4430 SmartLabs, Inc.
|
||||||
|
4431 Everspring Industry Co., Ltd.
|
||||||
|
4432 Swann Communications Ptl Ltd.
|
||||||
|
4433 Soneter
|
||||||
|
4434 Samsung SDS
|
||||||
|
4435 Uniband Electronic Corporation
|
||||||
|
4436 Accton Technology Corporation
|
||||||
|
4437 Bosch Thermotechnik GmbH
|
||||||
|
4438 Wincor Nixdorf Inc.
|
||||||
|
4439 Ohsung Electronics
|
||||||
|
4440 Zen Within, Inc.
|
||||||
|
4441 Tech4home, Lda.
|
||||||
|
4442 Nanoleaf
|
||||||
|
4443 Keen Home, Inc.
|
||||||
|
4444 Poly-Control APS
|
||||||
|
4445 Eastfield Lighting Co., Ltd Shenzhen
|
||||||
|
4446 IP Datatel, Inc.
|
||||||
|
4447 Lumi United Techology, Ltd Shenzhen
|
||||||
|
4448 Sengled Co., Ltd.
|
||||||
|
4449 Remote Solution Co., Ltd.
|
||||||
|
4450 ABB Genway Xiamen Electrical Equipment Co., Ltd.
|
||||||
|
4451 Zhejiang Rexense Tech
|
||||||
|
4452 ForEE Technology
|
||||||
|
4453 Open Access Technology Int’l.
|
||||||
|
4454 INNR Lighting BV
|
||||||
|
4455 Techworld Industries
|
||||||
|
4456 Leedarson Lighting Co., Ltd.
|
||||||
|
4457 Arzel Zoning
|
||||||
|
4458 Holley Technology
|
||||||
|
4459 Beldon Technologies
|
||||||
|
4460 Flextronics
|
||||||
|
4461 Shenzhen Meian
|
||||||
|
4462 Lowe’s
|
||||||
|
4463 Sigma Connectivity
|
||||||
|
4465 Wulian
|
||||||
|
4466 Plugwise B.V.
|
||||||
|
4467 Titan Products
|
||||||
|
4468 Ecospectral
|
||||||
|
4469 D-Link
|
||||||
|
4470 Technicolor Home USA
|
||||||
|
4471 Opple Lighting
|
||||||
|
4472 Wistron NeWeb Corp.
|
||||||
|
4473 QMotion Shades
|
||||||
|
4474 Insta GmbH
|
||||||
|
4475 Shanghai Vancount
|
||||||
|
4476 Ikea of Sweden
|
||||||
|
4477 RT-RK
|
||||||
|
4478 Shenzhen Feibit
|
||||||
|
4479 EuControls
|
||||||
|
4480 Telkonet
|
||||||
|
4481 Thermal Solution Resources
|
||||||
|
4482 PomCube
|
||||||
|
4483 Ei Electronics
|
||||||
|
4484 Optoga
|
||||||
|
4485 Stelpro
|
||||||
|
4486 Lynxus Technologies Corp.
|
||||||
|
4487 Semiconductor Components
|
||||||
|
4488 TP-Link
|
||||||
|
4489 Ledvance GmbH
|
||||||
|
4490 Nortek
|
||||||
|
4491 iRevo/Assa Abbloy Korea
|
||||||
|
4492 Midea
|
||||||
|
4493 ZF Friedrichshafen
|
||||||
|
4494 Checkit
|
||||||
|
4495 Aclara
|
||||||
|
4496 Nokia
|
||||||
|
4497 Goldcard High-tech Co., Ltd.
|
||||||
|
4498 George Wilson Industries Ltd.
|
||||||
|
4499 EASY SAVER CO.,INC
|
||||||
|
4500 ZTE Corporation
|
||||||
|
4501 ARRIS
|
||||||
|
4502 Reliance BIG TV
|
||||||
|
4503 Insight Energy Ventures/Powerley
|
||||||
|
4504 Thomas Research Products (Hubbell Lighting Inc.)
|
||||||
|
4505 Li Seng Technology
|
||||||
|
4506 System Level Solutions Inc.
|
||||||
|
4507 Matrix Labs
|
||||||
|
4508 Sinope Technologies
|
||||||
|
4509 Jiuzhou Greeble
|
||||||
|
4510 Guangzhou Lanvee Tech. Co. Ltd.
|
||||||
|
4511 Venstar
|
||||||
|
4608 SLV
|
||||||
|
4609 Halo Smart Labs
|
||||||
|
4610 Scout Security Inc.
|
||||||
|
4611 Alibaba China Inc.
|
||||||
|
4612 Resolution Products, Inc.
|
||||||
|
4613 Smartlok Inc.
|
||||||
|
4614 Lux Products Corp.
|
||||||
|
4615 Vimar SpA
|
||||||
|
4616 Universal Lighting Technologies
|
||||||
|
4617 Robert Bosch, GmbH
|
||||||
|
4618 Accenture
|
||||||
|
4619 Heiman Technology Co., Ltd.
|
||||||
|
4620 Shenzhen HOMA Technology Co., Ltd.
|
||||||
|
4621 Vision-Electronics Technology
|
||||||
|
4622 Lenovo
|
||||||
|
4623 Presciense R&D
|
||||||
|
4624 Shenzhen Seastar Intelligence Co., Ltd.
|
||||||
|
4625 Sensative AB
|
||||||
|
4626 SolarEdge
|
||||||
|
4627 Zipato
|
||||||
|
4628 China Fire & Security Sensing Manufacturing (iHorn)
|
||||||
|
4629 Quby BV
|
||||||
|
4630 Hangzhou Roombanker Technology Co., Ltd.
|
||||||
|
4631 Amazon Lab126
|
||||||
|
4632 Paulmann Licht GmbH
|
||||||
|
4633 Shenzhen Orvibo Electronics Co. Ltd.
|
||||||
|
4634 TCI Telecommunications
|
||||||
|
4635 Mueller-Licht International Inc.
|
||||||
|
4636 Aurora Limited
|
||||||
|
4637 SmartDCC
|
||||||
|
4638 Shanghai UMEinfo Co. Ltd.
|
||||||
|
4639 carbonTRACK
|
||||||
|
4640 Somfy
|
||||||
|
4641 Viessmann Elektronik GmbH
|
||||||
|
4642 Hildebrand Technology Ltd
|
||||||
|
4643 Onkyo Technology Corporation
|
||||||
|
4644 Shenzhen Sunricher Technology Ltd.
|
||||||
|
4645 Xiu Xiu Technology Co., Ltd
|
||||||
|
4646 Zumtobel Group
|
||||||
|
4647 Shenzhen Kaadas Intelligent Technology Co. Ltd
|
||||||
|
4648 Shanghai Xiaoyan Technology Co. Ltd
|
||||||
|
4649 Cypress Semiconductor
|
||||||
|
4650 XAL GmbH
|
||||||
|
4651 Inergy Systems LLC
|
||||||
|
4652 Alfred Karcher GmbH & Co KG
|
||||||
|
4653 Adurolight Manufacturing
|
||||||
|
4654 Groupe Muller
|
||||||
|
4655 V-Mark Enterprises Inc.
|
||||||
|
4656 Lead Energy AG
|
||||||
|
4657 Ultimate IOT (Henan) Technology Ltd.
|
||||||
|
4658 Axxess Industries Inc.
|
||||||
|
4659 Third Reality Inc.
|
||||||
|
4660 DSR Corporation
|
||||||
|
4661 Guangzhou Vensi Intelligent Technology Co. Ltd.
|
||||||
|
4662 Schlage Lock (Allegion)
|
||||||
|
4663 Net2Grid
|
||||||
|
4664 Airam Electric Oy Ab
|
||||||
|
4665 IMMAX WPB CZ
|
||||||
|
4666 ZIV Automation
|
||||||
|
4667 HangZhou iMagicTechnology Co., Ltd
|
||||||
|
4668 Xiamen Leelen Technology Co. Ltd.
|
||||||
|
4669 Overkiz SAS
|
||||||
|
4670 Flonidan A/S
|
||||||
|
4671 HDL Automation Co., Ltd.
|
||||||
|
4672 Ardomus Networks Corporation
|
||||||
|
4673 Samjin Co., Ltd.
|
||||||
|
4674 FireAngel Safety Technology plc
|
||||||
|
4675 Indra Sistemas, S.A.
|
||||||
|
4676 Shenzhen JBT Smart Lighting Co., Ltd.
|
||||||
|
4677 GE Lighting & Current
|
||||||
|
4678 Danfoss A/S
|
||||||
|
4679 NIVISS PHP Sp. z o.o. Sp.k.
|
||||||
|
4680 Shenzhen Fengliyuan Energy Conservating Technology Co. Ltd
|
||||||
|
4681 NEXELEC
|
||||||
|
4682 Sichuan Behome Prominent Technology Co., Ltd
|
||||||
|
4683 Fujian Star-net Communication Co., Ltd.
|
||||||
|
4684 Toshiba Visual Solutions Corporation
|
||||||
|
4685 Latchable, Inc.
|
||||||
|
4686 L&S Deutschland GmbH
|
||||||
|
4687 Gledopto Co., Ltd.
|
||||||
|
4688 The Home Depot
|
||||||
|
4689 Neonlite Distribution Limited
|
||||||
|
4690 Arlo Technologies, Inc.
|
||||||
|
4691 Xingluo Technology Co., Ltd.
|
||||||
|
4692 Simon Electric (China) Co., Ltd.
|
||||||
|
4693 Hangzhou Greatstar Industrial Co., Ltd.
|
||||||
|
4694 Sequentric Energy Systems, LLC
|
||||||
|
4695 Solum Co., Ltd.
|
||||||
|
4696 Eaglerise Electric & Electronic (China) Co., Ltd.
|
||||||
|
4697 Fantem Technologies (Shenzhen) Co., Ltd.
|
||||||
|
4698 Yunding Network Technology (Beijing) Co., Ltd.
|
||||||
|
4699 Atlantic Group
|
||||||
|
4700 Xiamen Intretech, Inc.
|
||||||
|
4701 Tuya Global Inc.
|
||||||
|
4702 Dnake (Xiamen) Intelligent Technology Co., Ltd.
|
||||||
|
4703 Niko nv
|
||||||
|
4704 Emporia Energy
|
||||||
|
4705 Sikom AS
|
||||||
|
4706 AXIS Labs, Inc.
|
||||||
|
4707 Current Products Corporation
|
||||||
|
4708 MeteRSit SRL
|
||||||
|
4709 HORNBACH Baumarkt AG
|
||||||
|
4710 DiCEworld s.r.l. a socio unico
|
||||||
|
4711 ARC Technology Co., Ltd
|
||||||
|
4712 Hangzhou Konke Information Technology Co., Ltd.
|
||||||
|
4713 SALTO Systems S.L.
|
||||||
|
4714 Shenzhen Shyugj Technology Co., Ltd
|
||||||
|
4715 Brayden Automation Corporation
|
||||||
|
4716 Environexus Pty. Ltd.
|
||||||
|
4717 Eltra nv/sa
|
||||||
|
4718 Xiaomi Communications Co., Ltd.
|
||||||
|
4719 Shanghai Shuncom Electronic Technology Co., Ltd.
|
||||||
|
4720 Voltalis S.A
|
||||||
|
4721 FEELUX Co., Ltd.
|
||||||
|
4722 SmartPlus Inc.
|
||||||
|
4723 Halemeier GmbH
|
||||||
|
4724 Trust International BV
|
||||||
|
4725 Duke Energy Business Services LLC
|
||||||
|
4726 Calix, Inc.
|
||||||
|
4727 ADEO
|
||||||
|
4728 Connected Response Limited
|
||||||
|
4729 StroyEnergoKom, Ltd.
|
||||||
|
4730 Lumitech Lighting Solution GmbH
|
||||||
|
4731 Verdant Environmental Technologies
|
||||||
|
4732 Alfred International Inc.
|
||||||
|
4733 Sansi LED Lighting co., LTD.
|
||||||
|
4734 Mindtree Limited
|
||||||
|
4735 Nordic Semiconductor ASA
|
||||||
|
4736 Siterwell Electronics Co., Limited
|
||||||
|
4737 Briloner Leuchten GmbH & Co. KG
|
||||||
|
4738 Shenzhen SEI Technology Co., Ltd.
|
||||||
|
4739 Copper Labs, Inc.
|
||||||
|
4740 Delta Dore
|
||||||
|
4741 Hager Group
|
||||||
|
4742 Shenzhen CoolKit Technology Co., Ltd
|
||||||
|
4743 Hangzhou Sky-Lighting Co., Ltd.
|
||||||
|
4744 E.ON SE
|
||||||
|
4745 Lidl Stiftung & Co. KG
|
||||||
|
4746 Sichuan Changhong Network Technologies Co., Ltd.
|
||||||
|
4747 NodOn
|
||||||
|
4748 Jiangxi Innotech Technology Co., Ltd.
|
||||||
|
4749 Mercator Pty Ltd
|
||||||
|
4750 Beijing Ruying Tech Limited
|
||||||
|
4751 EGLO Leuchten GmbH
|
||||||
|
4752 Pietro Fiorentini S.p.A
|
||||||
|
4753 Zehnder Group Vaux-Andigny
|
||||||
|
4754 BRK Brands, Inc.
|
||||||
|
4755 Askey Computer Corp.
|
||||||
|
4756 PassiveBolt, Inc.
|
||||||
|
4757 AVM Audiovisuelles Marketing und Computersysteme Berlin
|
||||||
|
4758 Ningbo Suntech Lighting Technology Co., Ltd
|
||||||
|
4759 Société en Commandite Stello
|
||||||
|
4760 Vivint Smart Home
|
||||||
|
4761 Namron AS
|
||||||
|
4762 RADEMACHER Geraete-Elektronik GmbH
|
||||||
|
4763 OMO Systems LTD
|
||||||
|
4764 Siglis AG
|
||||||
|
4765 IMHOTEP CREATION
|
||||||
|
4766 icasa
|
||||||
|
4767 Level Home, Inc.
|
||||||
|
4864 TIS Control Limited
|
||||||
|
4865 Radisys India Pvt. Ltd.
|
||||||
|
4866 Veea Inc.
|
||||||
|
4867 FELL Technology AS
|
||||||
|
4868 Sowilo Design Services, Ltd.
|
||||||
|
4869 Lexi Devices, Inc.
|
||||||
|
4870 Lifi Labs INC. dba LIFX
|
||||||
|
4871 GRUNDFOS Holding A/S
|
||||||
|
4872 SOURCING & CREATION
|
||||||
|
4873 Kraken Technologies Ltd
|
||||||
|
4874 EVE SYSTEMS
|
||||||
|
4875 LITE-ON TECHNOLOGY CORPORATION
|
||||||
|
4876 Focalcrest Limited
|
||||||
|
4877 Bouffalo Lab (Nanjing) Co., Ltd.
|
||||||
|
4878 Wyze Labs, Inc.
|
||||||
|
4879 Z-Wave Europe GmbH
|
||||||
|
4880 AEOTEC LIMITED
|
||||||
|
4881 NGSTB Company Limited
|
||||||
|
4882 Qingdao Yeelink Information Technology Co., Ltd.
|
||||||
|
4883 E-Smart Home Automation Systems Limited
|
||||||
|
4884 Fibar Group S.A.
|
||||||
|
4885 Prolitech GmbH
|
||||||
|
4886 PanKore Integrated Circuit Technology Co. Ltd.
|
||||||
|
4887 Logitech
|
||||||
|
4888 Piaro, Inc.
|
||||||
|
4889 Mitsubishi Electric US, Inc.
|
||||||
|
4890 Resideo Technologies, Inc.
|
||||||
|
4891 Espressif Systems (Shanghai) Co., Ltd.
|
||||||
|
4892 HELLA Sonnen- und Wetterschutztechnik GmbH
|
||||||
|
4893 Geberit International AG
|
||||||
|
4894 CAME S.p.A.
|
||||||
|
4895 Guangzhou Elite Education & Technology Co., Ltd.
|
||||||
|
4896 Phyplus Microelectronics Limited
|
||||||
|
4897 Shenzhen Sonoff Technologies Co., Ltd.
|
||||||
|
4898 Safe4 Security Group
|
||||||
|
4899 Shanghai MXCHIP Information Technology Co., Ltd.
|
||||||
|
4900 HDC I-Controls
|
||||||
|
4901 Zuma Array Limited
|
||||||
|
4902 DECELECT
|
||||||
|
4903 Mill International AS
|
||||||
|
4904 HomeWizard BV
|
||||||
|
4905 Shenzhen Topband Co., Ltd
|
||||||
|
4906 Pressac Communications Ltd
|
||||||
|
4907 Origin Wireless, Inc.
|
||||||
|
4908 Connecte AS
|
||||||
|
4909 YOKIS
|
||||||
|
4910 Xiamen Yankon Energetic Lighting Co., Ltd.
|
||||||
|
4911 Yandex LLC
|
||||||
|
4912 Critical Software S.A.
|
||||||
|
4913 Nortek Control
|
||||||
|
4914 BrightAI
|
||||||
|
4915 Becker-Antriebe GmbH
|
||||||
|
4916 Shenzhen TCL New Technology Company Limited
|
||||||
|
4917 Dexatek Technology Ltd
|
||||||
|
4918 Elelabs International Limited
|
||||||
|
4919 Datek Wireless AS
|
||||||
|
4920 ALDES
|
||||||
|
4921 Savant Company
|
||||||
|
4922 Ariston Thermo Group
|
||||||
|
4923 WAREMA Renkhoff SE
|
||||||
|
4924 VTech Holdings Limited
|
||||||
|
4925 Futurehome AS
|
||||||
|
4926 Cognitive Systems Corp.
|
||||||
|
4927 ASR Microelectronics (Shenzhen) Co., Ltd.
|
||||||
|
4928 Airios
|
||||||
|
4929 Guangdong OPPO Mobile Telecommunications Corp., Ltd.
|
||||||
|
4930 Beken Corporation
|
||||||
|
4931 Corsair
|
||||||
|
4932 Eltako GmbH
|
||||||
|
4933 Chengdu Meross Technology Co., Ltd.
|
||||||
|
4934 Rafael Microelectronics, Inc.
|
||||||
|
4935 Aug. Winkhuas GmbH & Co. KG
|
||||||
|
4936 Qingdao Haier Technology Co., Ltd.
|
||||||
|
4937 Apple Inc.
|
||||||
|
4938 Rollease Acmeda
|
||||||
|
4939 Nabu Casa, Inc.
|
||||||
|
4940 Simon Holding
|
||||||
|
4941 KD Navien
|
||||||
|
4942 tado GmbH
|
||||||
|
4943 Mediola Connected Living AG
|
||||||
|
4944 Polynhome
|
||||||
|
4945 HooRii Technology Co., Ltd.
|
||||||
|
4946 Häfele SE & Co KG
|
||||||
|
4947 KIMIN Electronics Co., Ltd.
|
||||||
|
4948 Zyax AB
|
||||||
|
4949 Baracoda SA
|
||||||
|
4950 Lennox International, Inc
|
||||||
|
4951 Teledatics Incorporated
|
||||||
|
4952 Top Victory Investments Limited
|
||||||
|
4953 GOQUAL Inc.
|
||||||
|
4954 Siegenia Aubi KG
|
||||||
|
4955 Virtual Connected Controlling System (Singapore) Pte. Ltd.
|
||||||
|
4956 Gigaset Communications GmbH
|
||||||
|
4957 Nuki Home Solutions GmbH
|
||||||
|
4958 Devicebook, Inc.
|
||||||
|
4959 Consumer 2.0 Inc. (Rently)
|
||||||
|
4960 Edison Labs, Inc. (dba Orro)
|
||||||
|
4961 Inovelli
|
||||||
|
4962 deveritec GmbH
|
||||||
|
4963 Charter Communications
|
||||||
|
4964 Monolithic Power Systems, Inc.
|
||||||
|
4965 Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
|
||||||
|
4966 Shenzhen SDMC Technology Co., Ltd.
|
||||||
|
4967 HP Inc.
|
||||||
|
4968 mui Lab, Inc.
|
||||||
|
4969 BHtronics S.r.l.
|
||||||
|
4970 Akuvox (Xiamen) Networks Co., Ltd.
|
||||||
|
4971 nami
|
||||||
|
4972 Kee Tat Manufactory Holdings Limited
|
||||||
|
4973 Iton Technology Corp.
|
||||||
|
4974 Ambi Labs Limited
|
||||||
|
4975 Corporación Empresarial Altra S.L.
|
||||||
|
4976 Coway Co., Ltd.
|
||||||
|
4977 Tridonic GmbH & Co KG
|
||||||
|
4978 innovation matters iot GmbH
|
||||||
|
4979 MediaTek Inc.
|
||||||
|
4980 Fresco
|
||||||
|
4981 Hangzhou Yaguan Technology Co., Ltd.
|
||||||
|
4982 Guardian Glass, LLC
|
||||||
|
4983 Night Owl SP, LLC
|
||||||
|
4984 Je Woo Corporation Ltd.
|
||||||
|
4985 Earda Technologies Co., Ltd.
|
||||||
|
4986 Alexa Connect Kit (ACK)
|
||||||
|
4987 Amazon Basics
|
||||||
|
4988 Morse Micro Inc.
|
||||||
|
4989 Shanghai Xiaodu Technology Limited
|
||||||
|
4990 Nubert electronic GmbH
|
||||||
|
4991 Shenzhen NEO Electronics Co. Ltd.
|
||||||
|
4992 Grimsholm Products AB
|
||||||
|
4993 Amazon Prime Video
|
||||||
|
4994 ION INDUSTRIES B.V.
|
||||||
|
4995 Ayla Networks
|
||||||
|
4996 Apple Keychain
|
||||||
|
4997 Lightning Semiconductor
|
||||||
|
4998 Skylux NV
|
||||||
|
4999 Shenzhen Qianyan Technology Ltd.
|
||||||
|
5000 Infineon Technologies AG
|
||||||
|
5001 Shenzhen Jingxun Technology Co., Ltd.
|
||||||
|
5002 Nature Inc.
|
||||||
|
5003 WiFigarden Inc.
|
||||||
|
5004 Hisense Group Co. Ltd., USA
|
||||||
|
5005 Nanjing Easthouse Electrical Co., Ltd.
|
||||||
|
5006 Ledworks SRL
|
||||||
|
5007 Shina System Co., Ltd.
|
||||||
|
5008 Qualcomm Technologies Inc.
|
||||||
|
5009 Kasa (Big Field Global PTE. Ltd.)
|
||||||
|
5010 Tapo (Big Field Global PTE. Ltd.)
|
||||||
|
5011 Shanghai High-Flying Electronics Technology Co., Ltd.
|
||||||
|
5012 SigmaStar Technology Ltd.
|
||||||
|
5013 HOOBS Inc.
|
||||||
|
5014 AiDot Inc.
|
||||||
|
5015 Woan Technology (Shenzhen) Co., Ltd.
|
||||||
|
5016 Meizu Technology Co., Ltd.
|
||||||
|
5017 Yukai Engineering Inc.
|
||||||
|
5018 Qrio, Inc.
|
||||||
|
5019 ITIUS GmbH
|
||||||
|
5020 Zemismart Technology Limited
|
||||||
|
5021 LED Linear GmbH
|
||||||
|
5022 Dyson Technology Limited
|
||||||
|
5023 Razer Inc.
|
||||||
|
5120 Uascent Technology Company Limited
|
||||||
|
5121 Bose Corporation
|
||||||
|
5122 GOLDTek Technology Co., Ltd.
|
||||||
|
5123 Arlec Australia Pty. Ltd.
|
||||||
|
5124 Shenzhen Phaten Technology Co., Ltd.
|
||||||
|
5125 Ecovacs Robotics Co., Ltd.
|
||||||
|
5126 Luxshare-ICT Co., Ltd.
|
||||||
|
5127 Jiangshu Shushi Technology Co., Ltd.
|
||||||
|
5128 Velux A/S
|
||||||
|
5129 Shenzhen Hidin Technology Co., Ltd.
|
||||||
|
5130 Intertech Services AG
|
||||||
|
5131 70mai Co., Ltd.
|
||||||
|
5132 Beijing ESWIN Computing Technology CO.,Ltd.
|
||||||
|
5133 Photon Sail Technologies Pte. Ltd.
|
||||||
|
5134 WiDom SRL
|
||||||
|
5135 Sagemcom SAS
|
||||||
|
5136 Quectel Wireless Solutions Co., Ltd.
|
||||||
|
5137 Freedompro S.r.l.
|
||||||
|
5138 Disign Incorporated
|
||||||
|
5139 1Home Solutions GmbH
|
||||||
|
5140 StreamUnlimited Engineering GmbH
|
||||||
|
5141 Caveman (Nanoleaf)
|
||||||
|
5142 Umbra (Nanoleaf)
|
||||||
|
5143 Konnected Inc.
|
||||||
|
5144 KLite (Signify)
|
||||||
|
5145 Lorex Technology Inc.
|
||||||
|
5146 RATOC Systems, Inc
|
||||||
|
5147 Rang Dong Light Source & VacuumFlask Joint Stock Company
|
||||||
|
5148 Shenzhen Sibo Zhilian Technology Co., Ltd.
|
||||||
|
5149 Secuyou APS
|
||||||
|
5150 TUO Accessories LLC
|
||||||
|
5151 DUCTECH Co., Ltd
|
||||||
|
5152 EcoFlow Inc.
|
||||||
|
5153 Kwikset
|
||||||
|
5154 Zhuhai HiVi Technology Co., Ltd.
|
||||||
|
5155 Feit Electric Company, Inc.
|
||||||
|
5156 Alarm.com Incorporated
|
||||||
|
5157 Hangzhou BroadLink Technology Co., Ltd.
|
||||||
|
5158 ELE (Group) Co., Ltd.
|
||||||
|
5159 Hama GmbH & Co. KG
|
||||||
|
5160 Shenzhen Aimore .Co .,Ltd
|
||||||
|
5161 Albrecht Jung GmbH & Co. KG
|
||||||
|
5162 Hitachi Global Life Solutions, Inc.
|
||||||
|
5163 Beijing Renhejia Technology Co., Ltd
|
||||||
|
5164 vivo Mobile Communication Co., Ltd.
|
||||||
|
5165 Zhongshan QIHANG Electronic Technology Co.
|
||||||
|
5166 Shenzhen Sowye Technology CO.,Ltd
|
||||||
|
5167 Shenzhen QIACHIP Wireless Ecommerce Co.
|
||||||
|
5168 L-TRADE GROUP SP z.o.o.
|
||||||
|
5169 Daikin Industries, Ltd.
|
||||||
|
5170 ELKO EP, s.r.o.
|
||||||
|
5171 MOMAX Technology (Hong Kong) Limited
|
||||||
|
5172 Hangzhou Ezviz Network Co., Ltd.
|
||||||
|
5173 Granite River Labs
|
||||||
|
5174 SinuxSoft Inc.
|
||||||
|
5175 ACCEL LAB Ltd.
|
||||||
|
5176 Xiamen Topstar Lighting Co.,Ltd
|
||||||
|
5177 Vaillant Group
|
||||||
|
5178 YoSmart Inc.
|
||||||
|
5179 Amina Charging AS
|
||||||
|
5180 Athom B.V.
|
||||||
|
5181 Shenzhen Champon Technology Co., Ltd
|
||||||
|
5182 Acer Inc.
|
||||||
|
5183 Vestel Elektronik Sanayi ve Ticaret A.S.
|
||||||
|
5184 VerLuce
|
||||||
|
5185 Shenzhen Snowball Technology Co., Ltd.
|
||||||
|
5186 REHAU Group
|
||||||
|
5187 GoodsiQ
|
||||||
|
5188 Last lock Inc.
|
||||||
|
5189 Finesse Decor
|
||||||
|
5190 Take As Global, SL
|
||||||
|
5191 Honor Device Co., Ltd.
|
||||||
|
5192 LivingStyle Enterprises Limited
|
||||||
|
5193 ZUTTO TECHNOLOGIES
|
||||||
|
5194 Sensibo Ltd.
|
||||||
|
5195 Kohler Company
|
||||||
|
5196 TrustAsia Technologies, Inc.
|
||||||
|
5197 Atios AG
|
||||||
|
5198 Sense Labs, Inc.
|
||||||
|
5199 Assa Abloy AB
|
||||||
|
5200 GM Global Technology Operations LLC
|
||||||
|
5201 JetHome
|
||||||
|
5202 Big Ass Fans
|
||||||
|
5203 Gumax BV
|
||||||
|
5204 Yardi Systems Inc.
|
||||||
|
5205 Deutsche Telekom AG
|
||||||
|
5206 Sensirion AG
|
||||||
|
5207 Hangzhou Wistar Mechanical & Electric Technology Co., Ltd
|
||||||
|
5208 Wilhelm Koch GmbH
|
||||||
|
5209 Shenzhen iComm Semiconductor Co., Ltd.
|
||||||
|
5210 British Telecommunications plc
|
||||||
|
5211 Remotec Technology Ltd.
|
||||||
|
5212 Pin Genie, Inc. DBA Lockly
|
||||||
|
5213 Hosiden Corporation
|
||||||
|
5214 Deako, Inc.
|
||||||
|
5215 Good Way Technology Co., Ltd.
|
||||||
|
5216 Zhuhai Ruran Intelligent Technology Co., LTD (Meizu)
|
||||||
|
5217 Xinda Asset Management (Shenzhen) Co.,Ltd.
|
||||||
|
5218 Chengdu Energy Magic Cube Technology Co., Ltd
|
||||||
|
5219 Eberle Controls GmbH
|
||||||
|
5220 Opulinks Technology
|
||||||
|
5221 Hunter Douglas Group
|
||||||
|
5222 Hangzhou Hemos Lighting Company Limited
|
||||||
|
5223 OTODO SAS
|
||||||
|
5224 Anona Security Technology Limited
|
||||||
|
5225 Loxone Electronics GmbH
|
||||||
|
5226 Intecular LLC
|
||||||
|
5227 Aixlink Ltd.
|
||||||
|
5228 Shenzhen Jinjie Technology Co.,Ltd.
|
||||||
|
5229 Polyaire Pty Ltd
|
||||||
|
5230 Shenzhen PINXUAN Trading Co.
|
||||||
|
5231 SmartWing Home LLC
|
||||||
|
5232 Shenzhen Hope Microelectronics Co., Ltd.
|
||||||
|
5233 Commax
|
||||||
|
5234 Zhejiang Jiecang Linear Motion Technology Co.,Ltd
|
||||||
|
5235 Shenzhen Lelight technology Co.lt
|
||||||
|
5236 Shenzhen Ruomu Zhilian Technology Co., Ltd.
|
||||||
|
5237 Cable Television Laboratories, Inc. dba CableLabs
|
||||||
|
5238 Harman International
|
||||||
|
5239 Shenzhen Multi IR Technology Co.,Ltd
|
||||||
|
5240 APYNOV
|
||||||
|
5241 Browan Communications Inc.
|
||||||
|
5242 Shenzhen Realwe Innovation Technology Co., Ltd.
|
||||||
|
5243 Lumiflow INC
|
||||||
|
5244 SHENZHEN SHENAN YANGGUANG ELECTRONICS CO., LTD.
|
||||||
|
5245 Wenzhou Morning Electronics Co., Ltd.
|
||||||
|
5246 MIWA Lock Co., Ltd.
|
||||||
|
5247 U-tec Group Inc.
|
||||||
|
5248 Beijing Roborock Technology Co., Ltd.
|
||||||
|
5249 Shenzhen Xenon Industrial Ltd
|
||||||
|
5250 Guangzhou Lingqu Electronic Technology Co., Ltd
|
||||||
|
5251 Shenzhen Jijia Intelligent Technology Co., Ltd.
|
||||||
|
5252 CANDY HOUSE, Inc.
|
||||||
|
5253 ELIT Scandinavia ApS
|
||||||
|
5254 Infibrite Inc
|
||||||
|
5255 Whirlpool Corp.
|
||||||
|
5256 Shortcut Labs (Flic)
|
||||||
|
5257 INTEREL BUILDING AUTOMATION
|
||||||
|
5258 Occhio GmbH
|
||||||
|
5259 Samraj Technologies Limited
|
||||||
|
6548 Gewiss S.p.A.
|
||||||
|
10132 Climax Technology Co., Ltd.
|
||||||
|
24582 Google LLC
|
||||||
|
50592 Connectivity Standards Alliance
|
||||||
|
50593 Connectivity Standards Alliance
|
||||||
|
50594 Connectivity Standards Alliance
|
||||||
|
50595 Connectivity Standards Alliance
|
||||||
|
50596 Connectivity Standards Alliance
|
||||||
|
50597 Connectivity Standards Alliance
|
||||||
|
50598 Connectivity Standards Alliance
|
||||||
|
50599 Connectivity Standards Alliance
|
||||||
|
50600 Connectivity Standards Alliance
|
||||||
|
50601 Connectivity Standards Alliance
|
||||||
|
50602 Connectivity Standards Alliance
|
||||||
|
50603 Connectivity Standards Alliance
|
||||||
|
50604 Connectivity Standards Alliance
|
||||||
|
50605 Connectivity Standards Alliance
|
||||||
|
50606 Connectivity Standards Alliance
|
||||||
|
50607 Connectivity Standards Alliance
|
||||||
|
65521 [Test vendor #1]
|
||||||
|
65522 [Test vendor #2]
|
||||||
|
65523 [Test vendor #3]
|
||||||
|
65524 [Test vendor #4]
|
||||||
|
65525 [Reserved]
|
||||||
|
65526 [Reserved]
|
||||||
|
65527 [Reserved]
|
||||||
|
65528 [Reserved]
|
||||||
|
65529 [Reserved]
|
||||||
|
65530 [Reserved]
|
||||||
|
65531 [Reserved]
|
||||||
|
65532 [Reserved]
|
||||||
|
65533 [Reserved]
|
||||||
|
65534 [Reserved]
|
||||||
|
65535 [Reserved]
|
||||||
|
Executable
+158
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# matter-decode.sh — decode a Matter commissioning QR code (MT: URI) from the CLI.
|
||||||
|
#
|
||||||
|
# This is a bash port of the decode logic in matter-qr-decoder.html (the browser
|
||||||
|
# app's camera/QR-scanning feature has no shell equivalent and is intentionally
|
||||||
|
# omitted). It decodes the 84-bit payload and prints the same fields the web UI shows.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./matter-decode.sh "MT:..."
|
||||||
|
# echo "MT:..." | ./matter-decode.sh
|
||||||
|
#
|
||||||
|
# A companion file manufacturers.tsv (same directory) maps vendor IDs to names.
|
||||||
|
# It is derived from project-chip/connectedhomeip's manufacturers.xml and is
|
||||||
|
# optional: without it, all fields still decode — the vendor name line is simply
|
||||||
|
# skipped. Regenerate it with: python3 gen-manufacturers.py (see that file).
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd -P)"
|
||||||
|
|
||||||
|
# Base38 charset, per the Matter spec: 0-9, A-Z, '-', '.' (38 symbols).
|
||||||
|
CHARS=( 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - . )
|
||||||
|
declare -A IDX # char -> position
|
||||||
|
for (( _i=0; _i<${#CHARS[@]}; _i++ )); do IDX["${CHARS[_i]}"]=$_i; done
|
||||||
|
# Powers of 38 for the 5-char (3-byte) chunk; 38^0..38^4.
|
||||||
|
POW38=( 1 38 1444 54872 2085136 )
|
||||||
|
|
||||||
|
BYTES=() # decoded payload as a byte array, little-endian
|
||||||
|
|
||||||
|
# base38_decode STRING -> fills global BYTES.
|
||||||
|
# Greedy chunking: 5 chars -> 3 bytes, 4 -> 2, 2 -> 1, matching the reference.
|
||||||
|
|
||||||
|
base38_decode() {
|
||||||
|
local s=$1
|
||||||
|
local i=0 len=${#s} j value char idx chunkSize byteCount
|
||||||
|
BYTES=()
|
||||||
|
while (( i < len )); do
|
||||||
|
if (( i + 5 <= len )); then chunkSize=5; byteCount=3
|
||||||
|
elif (( i + 4 <= len )); then chunkSize=4; byteCount=2
|
||||||
|
elif (( i + 2 <= len )); then chunkSize=2; byteCount=1
|
||||||
|
else
|
||||||
|
echo "Error: Invalid base38 string length" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
value=0
|
||||||
|
|
||||||
|
for (( j=0; j<chunkSize; j++ ))
|
||||||
|
do
|
||||||
|
char=${s:i+j:1}
|
||||||
|
idx=${IDX[$char]:-_} # resolve in param-expansion context;
|
||||||
|
if [[ $idx == _ ]]; then # avoids an operator-char array key inside $(( ))
|
||||||
|
echo "Error: Invalid character: $char" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
value=$(( value + idx * POW38[j] ))
|
||||||
|
done
|
||||||
|
|
||||||
|
for (( j=0; j<byteCount; j++ ))
|
||||||
|
do
|
||||||
|
BYTES+=( $(( (value >> (8*j)) & 0xFF )) )
|
||||||
|
done
|
||||||
|
|
||||||
|
i=$(( i + chunkSize ))
|
||||||
|
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# extract_bits START COUNT -> prints COUNT bits of BYTES, LSB-first, as a number.
|
||||||
|
|
||||||
|
extract_bits() {
|
||||||
|
local start=$1 count=$2 i result=0 bitIndex byteIndex bitOffset bit
|
||||||
|
for (( i=0; i<count; i++ )); do
|
||||||
|
bitIndex=$(( start + i ))
|
||||||
|
byteIndex=$(( bitIndex / 8 ))
|
||||||
|
bitOffset=$(( bitIndex % 8 ))
|
||||||
|
|
||||||
|
if (( byteIndex < ${#BYTES[@]} ))
|
||||||
|
then
|
||||||
|
bit=$(( (BYTES[byteIndex] >> bitOffset) & 1 ))
|
||||||
|
result=$(( result | (bit << i) ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf '%d' "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
# get_vendor_name DECID -> prints name if in manufacturers.tsv, else nothing.
|
||||||
|
|
||||||
|
get_vendor_name() {
|
||||||
|
local tsv="$SCRIPT_DIR/manufacturers.tsv"
|
||||||
|
[[ -f $tsv ]] || return 0
|
||||||
|
awk -F'\t' -v id="$1" '$1==id { print $2; exit }' "$tsv"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local uri payload
|
||||||
|
|
||||||
|
uri=${1:-}
|
||||||
|
|
||||||
|
[[ -z $uri ]] && uri=$(cat)
|
||||||
|
|
||||||
|
# Trim leading/trailing whitespace
|
||||||
|
|
||||||
|
uri="${uri#"${uri%%[![:space:]]*}"}"
|
||||||
|
uri="${uri%"${uri##*[![:space:]]}"}"
|
||||||
|
|
||||||
|
if [[ $uri != MT:* ]]; then
|
||||||
|
echo 'Error: URI must start with "MT:"' >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
payload=${uri#MT:}
|
||||||
|
|
||||||
|
[[ -n $payload ]] || { echo 'Error: No data found after "MT:"' >&2; return 1; }
|
||||||
|
|
||||||
|
base38_decode "$payload" || return 1
|
||||||
|
|
||||||
|
local version vendor product customFlow discovery discriminator passcode
|
||||||
|
local cf caps="" vname
|
||||||
|
|
||||||
|
version=$(extract_bits 0 3)
|
||||||
|
vendor=$(extract_bits 3 16)
|
||||||
|
product=$(extract_bits 19 16)
|
||||||
|
customFlow=$(extract_bits 35 2)
|
||||||
|
discovery=$(extract_bits 37 8)
|
||||||
|
discriminator=$(extract_bits 45 12)
|
||||||
|
passcode=$(extract_bits 57 27)
|
||||||
|
|
||||||
|
case $customFlow in
|
||||||
|
0) cf="Standard Commissioning Flow" ;;
|
||||||
|
1) cf="User Intent Commissioning Flow" ;;
|
||||||
|
2) cf="Custom Commissioning Flow" ;;
|
||||||
|
3) cf="Reserved" ;;
|
||||||
|
*) cf="Unknown ($customFlow)" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
(( discovery & 0x01 )) && caps="SoftAP"
|
||||||
|
(( discovery & 0x02 )) && caps="${caps:+$caps, }BLE"
|
||||||
|
(( discovery & 0x04 )) && caps="${caps:+$caps, }On IP Network"
|
||||||
|
|
||||||
|
[[ -z $caps ]] && caps="None"
|
||||||
|
|
||||||
|
vname=$(get_vendor_name "$vendor")
|
||||||
|
|
||||||
|
printf 'Version: %s\n' "$version"
|
||||||
|
printf 'Vendor ID: %s (0x%04X)' "$vendor" "$vendor"
|
||||||
|
[[ -n $vname ]] && printf ' %s' "$vname"
|
||||||
|
printf '\n'
|
||||||
|
printf 'Product ID: %s (0x%04X)\n' "$product" "$product"
|
||||||
|
printf 'Custom Flow: %s\n' "$cf"
|
||||||
|
printf 'Discovery: %s\n' "$caps"
|
||||||
|
printf 'Discriminator: %s\n' "$discriminator"
|
||||||
|
printf 'Passcode: %s\n' "$passcode"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user