# lora.py

# benötigt sleep-Funktion
from time import sleep

#################################################################################
#                 Funktionen zur Kommunikation mit dem LORA-Modul               #
#################################################################################

def send_command(uart, cmd):       # cmd ist vom Typ String 
    c = bytes(cmd, 'UTF-8') + b'\r\n'       # c ist vom Typ Byte-String (Bytes)
    anzahl_der_gesendeten_bytes = uart.write(c)
    print(anzahl_der_gesendeten_bytes, 'Bytes gesendet:', c)

def read_response(uart):
    print('auf Nachricht warten...')
    while not uart.any(): # warten, bis (mindestens) ein Byte im Lesepuffer ist
        sleep(0.1)
    return uart.readline()

def response_to_list(r): # Liste von Zeichenketten
    r = str(r, 'UTF-8')
    r = r.split(',')
    r0 = r[0].split('=') # Adresse isolieren
    r[0] = r0[1]
    r4 = r[4].split('\r') # CR-LF abtrennen
    r[4] = r4[0]
    return r

def lora_init(uart):    
    # Prüfe nach, ob LoRa-Modul antwortet...
    lora_address = '???'
    send_command(uart, 'AT')
    r = read_response(uart)
    print(r)
    if r == b'+OK\r\n': # Wenn nicht r=OK, dann...
        # LoRa-Adresse ermitteln und anzeigen    
        send_command(uart, 'AT+ADDRESS?')
        lora_address = read_response(uart) # Rückgabewert ist vom Typ Bytes
        lora_address = str(lora_address, 'UTF-8') # umwandeln in Typ String
        lora_address = lora_address[9:]
        print('Eigene LORA-Adresse:', lora_address)
        print()
    return lora_address 
 
def send_message(uart, addr, msg): # addr: Adresse; msg: Botschaft
    payload_length = len(msg)
    cmd = 'AT+SEND='+str(addr)+','+str(payload_length)+','+msg
    print('send_message:', cmd)
    send_command(uart, cmd)

