def decode_digital_data()

in transform_binary_payload/src-payload-decoders/python/nas_um3080.py [0:0]


def decode_digital_data(decoded, start_byte):
    # Get digital settings from start byte
    settings = decoded[start_byte]
    
    # Get value of digital during reporting from settings
    value = (settings & 0b00000001)

    # Get digital trigger mode from settings
    trigger_mode_flag = (settings & 0b00000010)
    trigger_mode = "disabled"
    if trigger_mode_flag == 0b00000010:
        trigger_mode = "enabled"

    # Get digital trigger alert from settings
    trigger_alert_flag = (settings & 0b00000100)
    trigger_alert = "no"
    if trigger_alert_flag == 0b00000100:
        trigger_alert = "yes"

    # Get digital medium type from settings
    medium_type_flag = (settings & 0b11110000) >> 4
    medium_type = "unknown"
    if medium_type_flag == 0x00:
        medium_type = "n/a"
    elif medium_type_flag == 0x01:
        medium_type = "Pulses"
    elif medium_type_flag == 0x02:
        medium_type = "Water in L"
    elif medium_type_flag == 0x03:
        medium_type = "Electricity in Wh"
    elif medium_type_flag == 0x04:
        medium_type = "Gas in L"
    elif medium_type_flag == 0x05:
        medium_type = "Heat in Wh"

    # Get digital counter from start byte + 4 to 1
    counter = int((decoded[start_byte + 4] << 24) | (decoded[start_byte + 3] << 16) |
                  (decoded[start_byte + 2] << 8) | (decoded[start_byte + 1]))

    # Output
    result = {
        "value": value,
        "triggerMode": trigger_mode,
        "triggerAlert": trigger_alert,
        "mediumType": medium_type,
        "counter": counter,
    }

    return result