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