diff --git a/tools/rpi/ahoy.py b/tools/rpi/ahoy.py index 5464f23d..86a9e35b 100644 --- a/tools/rpi/ahoy.py +++ b/tools/rpi/ahoy.py @@ -37,12 +37,16 @@ def ser_to_esb_addr(s): """ Convert a Hoymiles inverter/DTU serial number into its corresponding NRF24 'enhanced shockburst' address byte sequence (5 bytes). - * + + The NRF library expects these in LSB to MSB order, even though the transceiver + itself will then output them in MSB-to-LSB order over the air. + The inverters use a BCD representation of the last 8 digits of their serial number, in reverse byte order, followed by \x01. """ - return ser_to_hm_addr(s)[::-1] + b'\x01' + air_order = ser_to_hm_addr(s)[::-1] + b'\x01' + return air_order[::-1] def compose_0x80_msg(dst_ser_no=72220200, src_ser_no=72220200, ts=None): """ @@ -76,12 +80,23 @@ def compose_0x80_msg(dst_ser_no=72220200, src_ser_no=72220200, ts=None): p = p + struct.pack('B', crc8) return p +def print_addr(a): + print(f"ser# {a} ", end='') + print(f" -> HM {' '.join([f'{x:02x}' for x in ser_to_hm_addr(a)])}", end='') + print(f" -> ESB {' '.join([f'{x:02x}' for x in ser_to_esb_addr(a)])}") + + + def main_loop(): """ Keep receiving on channel 3. Every once in a while, transmit a request to one of our inverters on channel 40. """ + + print_addr(inv_ser) + print_addr(dtu_ser) + ctr = 1 while True: radio.setChannel(3)