import binascii import struct import base64 import csv import json def pronto2lirc(pronto): codes = [int(binascii.hexlify(pronto[i:i+2]), 16) for i in range(0, len(pronto), 2)] # print(codes) if codes[0]: raise ValueError('Pronto code should start with 0000') if len(codes) != 4 + 2 * (codes[2] + codes[3]): raise ValueError('Number of pulse widths does not match the preamble') frequency = 1 / (codes[1] * 0.241246) return [int(round(code / frequency)) for code in codes[4:]] def lirc2broadlink(pulses): array = bytearray() for pulse in pulses: # pulse = pulse * 269 / 8192 # 32.84ms units pulse = int(pulse * 269 / 8192) # 32.84ms units # print(pulse) if pulse < 256: array += bytearray(struct.pack('>B', pulse)) # big endian (1-byte) else: array += bytearray([0x00]) # indicate next number is 2-bytes array += bytearray(struct.pack('>H', pulse)) # big endian (2-bytes) packet = bytearray([0x26, 0x00]) # 0x26 = IR, 0x00 = no repeats packet += bytearray(struct.pack('