This release is a pre-release and may not be stable for production use.
tuya-interpreter
A universal Tuya interpreter. Raw data points in, human-friendly device semantics out.
Turn Tuya DP–value pairs into meaningful device properties, values, events and commands. Give the interpreter a device schema and rule pack, then feed it DPS from your preferred transport. It handles DP mappings, value decoding, scales, units and device-specific behavior, and converts common device commands back into the DPS the device expects.
Device A: {"1": true, "2": 235} ─┐
├─ schema + rules → switch_1: on
Device B: {"101": true, "102": 2350} ─┘ temp_current: 23.5 °C
Common command: switch_1 = true → interpreter → device-specific Tuya DPS
The result is ildevice: a human-readable, developer-friendly intermediate device model. Its descriptor tells your application what properties a device exposes, their types and units, and which commands are available. Use that common model in dashboards, automation systems, gateways or your own tools, with Tuya interpretation shared across applications.
Interpret once. Integrate anywhere. The same Rust engine powers the native Rust API, Python wrapper and JavaScript/WebAssembly binding, with a JSON C ABI for other languages. Use Tuya DP–value pairs from rustuya, TinyTuya or another transport implementation; the interpretation stays independent of how the data arrives.
The engine is Sans-IO: your host owns connections, supplies time and executes returned effects. Device schemas and rules provide the meaning of raw DPs; the interpreter handles the conversion and state. See the two-device example for the same UI operating different DP layouts and temperature scales.
Device JSON: what the converter uses
Use a JSON-safe export of a device populated by
tuya-device-sharing-sdk, or a device entry from
tuyawizard's tuyadevices.json.
The input is one decoded device object, rather than the entire device list or an SDK object.
Device metadata supplies the schema; live input uses Tuya's standard DP ID–value pairs,
such as {"1": true, "2": 235}. Hosts can obtain these pairs through
rustuya,
TinyTuya, or any other Tuya transport implementation.
The host unwraps the transport response and passes the flat DP map to the interpreter;
the transport library does not need to supply the device schema.
There is no separate schema field. Here, device schema means the definitions in
function and status_range, with local_strategy connecting local DP IDs to those definitions.
| JSON field | Contents | How it is used |
|---|---|---|
id |
Device ID, as a string | Required for driver construction; device identity and device-specific overrides. |
name |
Device name | Descriptor label. |
category |
Tuya category such as cz, dj or cl |
Selects the category's classification rules. |
product_id |
Product ID | Selects product-specific quirks and overrides; supplies model identity. |
product_name |
Product name | Default model name, unless a quirk or override supplies it. |
function |
Object keyed by DP code, containing writable feature definitions | Resolves command sources and writable properties, including types and allowed values. |
status_range |
Object keyed by DP code, containing reported feature definitions | Resolves state sources, types, ranges, scales, units and report behavior. |
local_strategy |
Object keyed by local DP ID | Maps raw DPS to codes and applies the named value conversion with its configuration. |
status |
Initial values keyed by DP code | Used by classification probes and initial device interpretation; live packets are supplied separately. |
Other connection fields, such as local_key, IP address, protocol version and parent-device routing,
belong to the host. Link availability is supplied through Connected and Disconnected inputs.
Inside the schema fields
A function or status_range entry provides code, type and values.
status_range may also provide report_type, including sum for increments that need accumulation.
values can be a decoded object or a JSON string; both forms are accepted.
Supported DP types are Boolean, Integer, Enum, Bitmap, String, Raw and Json.
Integer definitions describe min, max, scale, step and an optional unit;
Enum definitions contain range, and Bitmap definitions can contain label.
The actual interpretation of Raw and Json values depends on the relevant codec and rules.
A local_strategy entry provides:
| Nested field | Purpose |
|---|---|
status_code or a code in config_item.statusFormat |
Connects the DP ID to a semantic code. |
value_convert |
Names the raw-to-code value conversion, such as default or enum. |
config_item |
Conversion configuration, including valueType, valueDesc and enumMappingMap where applicable. |
The host can also supply TuyaDriver(..., dpmap={"1": "switch_1"}) when it already knows
an ID-to-code mapping. A mapping identifies a DP; its feature definitions still come from
schema metadata or rules/overrides.
Example device entry
This illustrative plug record has one writable Boolean feature:
{
"id": "example-device",
"name": "Desk plug",
"category": "cz",
"product_id": "example-product",
"product_name": "Smart plug",
"function": {
"switch_1": {"code": "switch_1", "type": "Boolean", "values": {}}
},
"status_range": {
"switch_1": {"code": "switch_1", "type": "Boolean", "values": {}}
},
"local_strategy": {
"1": {
"status_code": "switch_1",
"value_convert": "default",
"config_item": {"valueType": "Boolean", "valueDesc": {}}
}
},
"status": {"switch_1": true}
}
status["switch_1"] is a code-keyed initial value. A local packet such as {"1": true}
is DP-ID-keyed and goes through the adapter. Do not feed a code-keyed SDK status map directly
as a DPS message. The host must adapt cloud updates to the driver's DP-ID input contract.
SDK exports and tuyawizard exports
The Sharing SDK populates device.function and device.status_range with definition objects,
device.local_strategy with DP mappings, and device.status with code-keyed values.
To export an SDK device, recursively convert its objects into dictionaries and serialize DP ID
keys as strings. Passing the SDK's Python objects directly to TuyaDriver is not supported.
tuyawizard's exporter already recursively converts SDK device objects and parses JSON object strings. Its saved device list can therefore be decoded and individual entries passed to the driver.
A raw cloud API response is a different shape: specification responses contain functions and
status arrays, which the SDK turns into the code-keyed function and status_range objects.
Use the populated device export, or normalize the raw response to the structure above.
Missing schema and unclassified DPs
Normal automatic classification needs feature definitions in function / status_range.
The engine does not infer a device's function from a DP number and current value alone.
Product quirks and dp overrides can supply missing definitions before classification.
expose_unused=True exposes DPs that the normal rules did not claim as generic properties.
It can use type/range metadata from local_strategy.config_item when feature definitions are missing.
Integer, Enum and Boolean properties are writable only when defined in function;
String, Raw, Json and Bitmap properties are read-only. This fallback does not invent semantic roles.
Python quick start
pip install tuya-interpreter
Supported wheels include the native engine and official rule files. Runtime dependencies do not include the Sharing SDK or tuyawizard: those are ways to obtain device metadata. Building from source requires Cargo and Rust 1.88 or newer.
Official rules are bundled with the package. load_builtin_rules() reads the official layers
in filename order and returns a merged, validated pack. It also works in editable source checkouts.
The driver still takes rules explicitly and performs no rule-file I/O itself.
from tuya_interpreter import Command, Connected, Message, TuyaDriver, load_builtin_rules
# device is a decoded device entry from the Sharing SDK or tuyawizard.
driver = TuyaDriver(device, rules=load_builtin_rules())
print(driver.descriptor)
# For the example plug above; the host supplies actual time and packets.
driver.handle(0.0, Connected())
values = driver.handle(1.0, Message("active", {"1": True}))
commands = driver.handle(2.0, Command("switch_1", "off"))
# commands contains SendMessage("set", {"dps": {"1": False}}).
# The host sends that payload to the device.
To load a saved tuyawizard device list:
import json
from pathlib import Path
from tuya_interpreter import TuyaDriver, load_builtin_rules
devices = json.loads(Path("tuyadevices.json").read_text(encoding="utf-8"))
driver = TuyaDriver(devices[0], rules=load_builtin_rules())
Use descriptor_of(device, rules=rules) when only a descriptor is needed.
Keep one driver per device for live conversion, events, accumulated values and timers.
Interactive examples: one UI, different Tuya devices
Two virtual devices expose the same switch and temperature properties through different DP IDs and scales. The CLI builds its controls from the ildevice descriptor; it has no hardcoded DP mapping, feature names or temperature conversion.
pip install tinytuya tuyamock
python examples/python/device_cli.py --device a
# After quitting, try the same UI with the other device:
python examples/python/device_cli.py --device b
Both accept set switch_1 true and report temp_current = 23.5 °C. Device A sends DP 1
and reports temperature as 235; device B sends DP 101 and reports temperature as 2350.
The interpreter applies each schema's mapping and scale and rejects writes to the read-only sensor.
Run from a source checkout with the interpreter installed. Use --memory for a demo without
network dependencies. See the example guide
for the profiles and Rust/rustuya version.
The original minimal toggle CLI remains available for connection checks
and real-device use with private metadata.
Rules and supported device functions
The official rule pack contains category tables, entity specifications, units, mappings, feature definitions, codecs' configuration and product-specific quirks. The Rust engine supplies the interpreter and Tuya primitives. Changes expressible in the rule language, including new platforms, do not require rebuilding the engine.
The converter assembles switch, button, select, number, sensor, binary sensor, event, light,
cover, fan, siren, valve, humidifier, climate, alarm and vacuum functions into ildevice.
Camera classification exists, but camera streams are outside the current IL assembly;
driver.state["assembly"]["unsupported"] records unsupported plans. Doorbell events carry a kind without
message text because the intermediate event contract has no text payload.
Support is determined by category, available feature definitions and rules; there is no requirement to register every product separately. A matching category alone does not guarantee that every feature of a product can be interpreted.
User rule layers merge recursively: arrays and scalars replace earlier values, {"$delete": true}
removes a member, {"$append": [...]} extends an array, and null is literal.
Load official layers in filename order, then user layers. Invalid final packs are rejected.
See rule composition and the official manifest.
from tuya_interpreter import load_builtin_rules, merge_rules
custom_rules = merge_rules(user_layers, base=load_builtin_rules())["rules"]
driver = TuyaDriver(device, rules=custom_rules)
Overrides can correct DP definitions and codes, aliases, categories, descriptor metadata and cover direction. Declarative converters add computed properties, commands, state and timers. See device customization for examples and all cover/delta settings, and the engine documentation for JSON programs.
Runtime and host responsibilities
| Direction | Data |
|---|---|
| Host → driver | Connected, Disconnected, Message(channel, flat_dps), Timer(name) |
| Driver → ildevice consumer | Descriptor, Value, Absent, Event, Reject |
| ildevice consumer → driver | Command(prop, value) |
| Driver → Tuya transport | SendMessage("set", {"dps": ...}) |
| Driver → host | SetTimer, CancelTimer, SettingsChanged |
The host unwraps transport envelopes into flat DP-ID maps, manages authentication, connections,
subscriptions, retained-message policy and device routing, and sends returned commands.
It supplies now, executes timer requests and persists settings, and initiates device reads when needed.
Message channels have distinct semantics:
active: device push; updates values, fires events and accumulates increments.passive: readback or live report; changed values are treated as live by converters, but events do not fire. Delta accumulation requiresdelta.accept_passive.state: snapshot; seeds values without treating retained commands as new movement or events.
Numeric values use their published native units. For example, 500 mA stays 500 with unit mA;
a suggested display unit does not rescale the wire value. Commands are checked against the ildevice
contract before conversion and rejected with Reject when invalid. Brightness conversions can
introduce quantization. Covers use the device's position direction, configurable through cover settings;
garage/gate controls are read-only unless allow_hazardous=True.
Changing rules or overrides requires a replacement driver. new.carry(old) preserves compatible
delta totals; the host then seeds its current snapshot and replaces the descriptor.
With device_settings=True, setting writes return SettingsChanged for the host to save and reload.
Rust, C ABI and WebAssembly
Rust hosts use RulePack, Driver, DriverOptions, Input and Output directly with driver
state retained in memory. Python uses the JSON C ABI; TUYA_ENGINE_LIBRARY selects an alternative
native library. JavaScript uses the same request protocol through WebAssembly.
All bindings share the rule interpreter and Tuya semantics.
See native Rust API, C ABI, other languages and local performance measurements.
Development and validation
cargo test --manifest-path rust/Cargo.toml
pip install -e ".[test]"
python -m pytest
Classification, values, commands and quirks are checked against fixtures and golden data derived from Home Assistant's Tuya integration and the Sharing SDK. The pinned reference behavior and intentional differences are described in the engine specification. Tuya's standard category assignments take precedence over differing HA category assignments; cover positions keep the device's direction rather than HA's mirrored representation.
SDK adapter comparisons require tuya-device-sharing-sdk==0.2.15 from the test extras.
IL conformance tests use the specification checkout at ../ildevice or $ILDEVICE and are skipped
when absent. Chain tests require the IL host's ildevice.core planner and are not collected without it.
| Path | Contents |
|---|---|
rust/engine/ |
Interpreter, driver, Tuya primitives, C ABI and rule-pack JSON Schema |
src/tuya_interpreter/ |
Python binding, inputs and outputs |
bindings/js/ |
JavaScript/WASM binding and smoke test |
rules/builtin/ |
Official rule layers and manifest |
scripts/ |
Rule generators, golden-data tooling and benchmarks |
tests/ |
Conversion, boundary, rule and conformance tests |
rust/engine/schema.json validates the rule-pack format; it is separate from the Tuya device
schema in function and status_range.
Releases
The release workflow builds and tests 13 platform wheels:
| Platform | Architectures |
|---|---|
| Linux manylinux (glibc) | ARMv7, ARM64, x86, x64 |
| Linux musllinux (musl) | ARMv7, ARM64, x86, x64 |
| macOS | ARM64, x64 |
| Windows | ARM64, x86, x64 |
The planned first release uses tag v0.1.0-alpha.1: crate version 0.1.0-alpha.1 and
PyPI version 0.1.0a1, both named tuya-interpreter. The workflow checks that the tag matches
Cargo and builds Python distributions with the corresponding version.
A pushed version tag publishes to crates.io and PyPI after tests, all wheels, the source archive and crate packaging pass. PR/manual runs build artifacts without publishing. See release setup for PyPI Trusted Publishing, the crates.io first-registration token, subsequent OIDC publishing and release commands.
Metadata
Release files for tuya-interpreter 0.1.0a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tuya_interpreter-0.1.0a1.tar.gz | 479.4 kB | Details |
Built distributions (wheels)
Total release size: 12.0 MB
Release files / tuya_interpreter-0.1.0a1.tar.gz
| Download URL | tuya_interpreter-0.1.0a1.tar.gz |
|---|---|
| Size | 479.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
df59864881b64bcaf958134f11dde77f233ae8dfafe35cb6bce5a9bc8d2f8b72
|
|
BLAKE2b-256 checksum How to use checksums |
e8a3ce86dbd9de1d102d70c9cd6dc4add0d192e35bd658f9faf700540e642451
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-win_arm64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-win_arm64.whl |
|---|---|
| Size | 658.9 kB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
c74285da9bd3a0b45959bb16fb5bfe61de21252fa28772754b9f9c10a1f235c6
|
|
BLAKE2b-256 checksum How to use checksums |
de17a78855ae80acd2bf3adbdfd94e7004f9b6ce3bc4eb5e0216e4fa9ca5378e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-win_amd64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-win_amd64.whl |
|---|---|
| Size | 720.0 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9c67237bf6286718f0cc3dc84a165e7299b7b351430c2141ff1801d7bab5bd33
|
|
BLAKE2b-256 checksum How to use checksums |
eefd79837609d6ed087b6f638a909fd7806b3499b58e0d8353c8a0466d54b847
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-win32.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-win32.whl |
|---|---|
| Size | 675.0 kB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
3760df9b97d86b37351df03cbe405d1c5233935ec0912d7a63eb57c0963bca3a
|
|
BLAKE2b-256 checksum How to use checksums |
eb173aaca03cd1f5235018c13ac9e4e9e3e7a3fe1220c56adaef7f6046508572
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_x86_64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
48d6cca6531771041a1d4b0648bd750a8c7e2225c70dbe2cd5162890118e2b71
|
|
BLAKE2b-256 checksum How to use checksums |
dd2ea7f30dae7b125e4ad5a6e3560281f9d0efa3735c50d4de346e12f85617d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_i686.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_i686.whl |
|---|---|
| Size | 1.3 MB |
| Tags | Linux musl 1.2+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
03a35491f04b5a3e9932b5276bf0ca654fff8bfd59473d7dd2c50874285f5599
|
|
BLAKE2b-256 checksum How to use checksums |
8a31d3f097dad32412d74adb75193c4bb9d4aca3614248681ec51b14244ab04a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_armv7l.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_armv7l.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Linux musl 1.2+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
dbf8eaad97e12a516059f9bfb9660b37246c19fcdadcc2e837fdb9bcd82fe0ff
|
|
BLAKE2b-256 checksum How to use checksums |
6dae3e246b68d29508a60a8293bdbe7f606aa70d343d17a09b49998b507cd544
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_aarch64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
774ec38758f3519df6b572e3770ac0837793b0e5dce999e6d77317ffbda9a91a
|
|
BLAKE2b-256 checksum How to use checksums |
fc9f5ba79c4aa8f765d404d4e1f3ebf40b8399bfff5bcd1b11ad516a20cacd06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_x86_64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 809.6 kB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b9fcb97cccd2ba250b118676f55a11cb6feff27c68d3d3915bf872d7f839fa28
|
|
BLAKE2b-256 checksum How to use checksums |
5e901c598280ff0e27b8c3de42a55457bdc7f21dd4e88a06ebc8a2f85e4544e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_i686.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_i686.whl |
|---|---|
| Size | 880.6 kB |
| Tags | Linux glibc 2.28+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
cf36ef8516e03ce46da044eadbc26ffb27a4e9be6110365b54316e7e68e0f497
|
|
BLAKE2b-256 checksum How to use checksums |
849179b8421299889adf8992d948416bd66b6c74fc13f84f8189a9e58f5dc91a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl |
|---|---|
| Size | 744.3 kB |
| Tags | Linux glibc 2.28+ ARMv7l Linux glibc 2.31+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
a28604f3fe6d3357a55c321e89bf5ef9e5bb81c47157986aaecd47e112764330
|
|
BLAKE2b-256 checksum How to use checksums |
7b1cb60141e6a1d765e672ded175fcaa6e87730346201b1aabfa5db9ec47c503
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_aarch64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 743.8 kB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
c4090d56f21fce1c89347dac8c5b1468a2282d7eaa63498a39df20009ffd7e53
|
|
BLAKE2b-256 checksum How to use checksums |
d5e37c1dfa0d8a08fbadc6c95feb363a899977988697f04329b343b8977c39d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-macosx_11_0_x86_64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-macosx_11_0_x86_64.whl |
|---|---|
| Size | 790.7 kB |
| Tags | Python 3 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
b706a79a58ee8937cfb087a5d22f38cf5ca723773fafc8dd255f0969d496b33c
|
|
BLAKE2b-256 checksum How to use checksums |
e54432f82b06ba51bc142fab0ca415af8eed6ea1db749fe51f107f444bc67eb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / tuya_interpreter-0.1.0a1-py3-none-macosx_11_0_arm64.whl
| Download URL | tuya_interpreter-0.1.0a1-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 749.6 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
35d75c80282d93e0f71c6f2d86f02bedcbcc61c27ef5ff600bb98ff5f31c69c0
|
|
BLAKE2b-256 checksum How to use checksums |
6ca8ee8cb23985d0fbd8c94643f8f39c77315b6b376e195567009a48c05f0a24
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log