Skip to main content

Manage and convert many IR / RF remote protocols

Project description

remoteprotocols

remoteprotocols is a command line utility and a Python's library to convert between more than 20 encoded IR and 5 RF remote protocols (nec, jvc, RC switch, see full protocol list) and 4 raw formats (pronto, Broadlink, Xiaomi miio, raw durations) and between those. The goal is to be able to use any existing code listing with any transmitter, and to be able to decode raw signal received by any device into the proper encoded format.

Remote command strings

To interact with remoteprotocols you'll be using remote commands to encode/decode/convert using the following syntax:

protocol:<arg 1>:<arg 2>: ... :<arg n>

# Example signatures
sony:<data>:<nbits?=12>
toshiba_ac:<rc_code_1>:<rc_code_2?=0>

# Example usage
nec16:0x7A:0x57

You can get a list of all supported protocols and their command signatures here, and from the command line.

Optional arguments can be omitted, with empty :: in the middle or completely omitting the colon at the end.

Command line

You can use remoteprotocols from the command line:

usage: remoteprotocols [-h] [-v] command ...

remoteprotocols v0.0.1

positional arguments:
  command            Command to run:
    validate-protocol
                     Validate a protocol definition file.
    validate-command
                     Validate a send command string(s).
    encode           Encodes command string(s) into raw signal (durations).
    convert          Converts command string(s) to other protocols.
    list             List supported protocols.

optional arguments:
  -h, --help         show this help message and exit
  -v, --version      Show version information.

API usage

To interact with remoteprotocols from your own program you import it and interact with it thru the registry, which has all built-in protocol definitions

from remoteprotocols import ProtocolRegistry


protocols = ProtocolRegistry()

matches = protocols.convert("nec:0x7A:0x57", 0.2, ["durations", "broadlink"])

Main ProtocolRegistry methods:

  • convert(command:str, tolerance: float, codec_filter:list[str]) -> list[DecodeMatch] Converts a given command into other protocols (all or filtered). Returns a list of DecodeMatch objects with the successful conversions, or an empty list if it couldn't convert. The match has the following attributes:

    • protocol: the matched protocol as a ProtocolDef object
    • args: an array of parsed arguments (including default ones)
    • tolerance: the tolerance needed to match this protocol (lower better match)
    • uniquematch: boolean indicating if the match is unique for this protocol. It should always be true for well defined protocols. When false, it means that the returned match is one out of multiple results that would encode in the same signal
    • missing_bits: array of bitmasks of bits for each argument, that could not be decoded, and thus any value in those bits would be a valid result. If any mask is non zero, then the match is not unique for the protocol
    • toggle_bit: state of the toggle bit (internal argument). Only relevant for protocols that use it (like RC5)
  • decode(signal: SignalData, tolerance: float, protocol: Optional[list[str]])-> list[DecodeMatch]

    Decodes a signal (optional frequency & array of durations) and returns a list of all matching protocols and corresponding decoded arguments. It decodes into all known protocols or a filtered subset.

  • parse_command(command: str)-> RemoteCommand

    Parses and validates a command string into a RemoteCommand object. It raises voluptuous.Invalid exception if there is any parsing problem.

Example Protocol Definition

Encoded protocols are easily defined using an intuitive declarative syntax in the definitions yaml file, which is then used to both encode and decode.

nec:
  desc: NEC IR code (in LSB form)
  type: IR
  args:
    - name: address
      max: 16bits
      desc: Address to send
      print: 04X
    - name: command
      max: 16bits
      desc: NEC command to send
      print: 04X
  timings:
    frequency: 38000
    unit: 1
    one: [560, -1690]
    zero: [560, -560]
    header: [9000, -4500]
    footer: [560]

  pattern: header {address LSB 16} {command LSB 16} footer

Acknowledgments

Thanks to all of the following sites and projects from where I obtained information about different codec definitions:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

remoteprotocols-0.0.5.tar.gz (28.5 kB view details)

Uploaded Source

Built Distribution

remoteprotocols-0.0.5-py2.py3-none-any.whl (32.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file remoteprotocols-0.0.5.tar.gz.

File metadata

  • Download URL: remoteprotocols-0.0.5.tar.gz
  • Upload date:
  • Size: 28.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.5

File hashes

Hashes for remoteprotocols-0.0.5.tar.gz
Algorithm Hash digest
SHA256 134522b0e1134d8541e103f229b8c1bd9fd764ae6187143bbe977601f2cf1c4f
MD5 fd96e8bae2d9a9f41b6b383c2b871c59
BLAKE2b-256 f5e09e0fe865c6143b495f9e86d8bd99153fb6a9d160ade93811bf879a05ec5b

See more details on using hashes here.

File details

Details for the file remoteprotocols-0.0.5-py2.py3-none-any.whl.

File metadata

  • Download URL: remoteprotocols-0.0.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 32.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.5

File hashes

Hashes for remoteprotocols-0.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f5adf253514e8a60fd213f68b0706243b7d14ab79313e34936fa9eec2aa45a93
MD5 c7130d9f8c2e5ca51a6ce50dd0e5816b
BLAKE2b-256 898e6ab20c8788148303940e8ff00d72e8964e947378feb3a573db137c15aaa9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page