vespuccio
(vespuccio)
April 7, 2025, 3:38am
1
Tasmota website has IR codes to turn a tv On and Off instead of toggle: Codes for IR Remotes - Tasmota . Since remote controls don’t have such buttons I cannot learn such commands from my tuya zigbee ir transmitters.
I also don’t know how to convert such codes. Is there a database of codes for Samsung TVs and tuya zigbee IR devices?
vespuccio
(vespuccio)
April 7, 2025, 4:26am
2
i tried
import binascii
import struct
import base64
def pronto2lirc(pronto):
codes = [int(binascii.hexlify(pronto[i:i+2]), 16) for i in range(0, len(pronto), 2)]
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 = int(pulse * 269 / 8192) # 32.84ms units
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('<H', len(array))) # little endian byte count
packet += array
packet += bytearray([0x0d, 0x05]) # IR terminator
# Add 0s to make ultimate packet size a multiple of 16 for 128-bit AES encryption.
remainder = (len(packet) + 4) % 16 # rm.send_data() adds 4-byte header (02 00 00 00)
if remainder:
packet += bytearray(16 - remainder)
return packet
if __name__ == '__main__':
import sys
#for code in sys.argv[1:]:
code = "0000 006D 0000 0022 00AC 00AB 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0016 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0041 0015 0016 0015 0041 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0689"
pronto = bytearray.fromhex(code)
pulses = pronto2lirc(pronto)
packet = lirc2broadlink(pulses)
print()
print("b64:"+base64.b64encode(packet).decode('utf-8'))
with many pronto codes for samsung and on many ir transmitters but it had no effect on the tv