from bacpypes.core import run, stop, deferred
from bacpypes.local.device import LocalDeviceObject
from bacpypes.pdu import Address, GlobalBroadcast
from myems_application import MyEMSApplication
import config


########################################################################################################################
# this procedure tests BACnet/IP environment
########################################################################################################################
def main():

    # make a device object
    this_device = LocalDeviceObject(objectName=config.bacnet_device['object_name'],
                                    objectIdentifier=config.bacnet_device['object_identifier'],
                                    maxApduLengthAccepted=config.bacnet_device['max_apdu_length_accepted'],
                                    segmentationSupported=config.bacnet_device['segmentation_supported'],
                                    vendorIdentifier=config.bacnet_device['vendor_identifier'], )

    # point list, set according to your device
    point_list = [
        # point_id, addr, obj_type, obj_inst, prop_id, idx
        (1, '10.117.73.53', 'analogInput', 1, 'presentValue', None),
        (2, '10.117.73.53', 'analogInput', 2, 'presentValue', None),
        (3, '10.117.73.53', 'analogInput', 3, 'presentValue', None),
        (4, '10.117.73.53', 'analogInput', 4, 'presentValue', None),
        (5, '10.117.73.53', 'analogInput', 5, 'presentValue', None),
        (6, '10.117.73.53', 'analogInput', 6, 'presentValue', None),
    ]

    # make a simple application
    this_application = MyEMSApplication(point_list,
                                        this_device,
                                        config.bacnet_device['local_address'],
                                        Address(config.bacnet_device['foreignBBMD']),
                                        int(config.bacnet_device['foreignTTL']))

    # fire off a request when the core has a chance
    deferred(this_application.next_request)

    run()

    # dump out the results
    for request, response in zip(point_list, this_application.response_values):
        print(request, response)


if __name__ == "__main__":
    main()
