Untitled

 avatar
unknown
plain_text
5 months ago
2.4 kB
4
Indexable
#!/usr/bin/python

import logging
from bacpypes.debugging import bacpypes_debugging, ModuleLogger
from bacpypes.consolelogging import ConfigArgumentParser
from bacpypes.core import run
from bacpypes.app import BIPSimpleApplication
from bacpypes.object import AnalogValueObject, BinaryValueObject
from bacpypes.local.device import LocalDeviceObject
from bacpypes.apdu import ReadPropertyRequest
from bacpypes.pdu import Address
from bacpypes.primitivedata import ObjectIdentifier
from bacpypes.service.device import WhoIsIAmServices

# Set up logging to print debug messages to the console
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")

# Debugging
_debug = 1
_log = ModuleLogger(globals())

@bacpypes_debugging
class BACnetClientApplication(BIPSimpleApplication, WhoIsIAmServices):
    def read_property(self, address, object_type, object_instance, property_id):
        """Reads a property from a BACnet device."""
        request = ReadPropertyRequest(
            objectIdentifier=ObjectIdentifier(object_type, object_instance),
            propertyIdentifier=property_id
        )
        request.pduDestination = Address(address)

        if _debug:
            _log.debug("Sending ReadPropertyRequest: %r", request)

        # Create an IOCB indirectly via request() method, handles confirmed requests automatically
        self.request(request)

def main():
    # Parse command line arguments
    parser = ConfigArgumentParser(description="BACnet Client")
    args = parser.parse_args()

    if _debug:
        _log.debug("BACnet Client Starting")

    # Create a local BACnet device object
    local_device = LocalDeviceObject(ini=args.ini)

    # Create BACnet client application
    bacnet_client = BACnetClientApplication(local_device, args.ini.address)

    # Define target BACnet device address (replace with actual server IP/port)
    server_address = "127.0.0.1:47899"  # Change this to match your BACnet environment

    # Read AnalogValueObject (Object Type: analogValue, Instance ID: 1)
    bacnet_client.read_property(server_address, "analogValue", 1, "presentValue")

    # Read BinaryValueObject (Object Type: binaryValue, Instance ID: 1)
    bacnet_client.read_property(server_address, "binaryValue", 1, "presentValue")

    run()


if __name__ == "__main__":
    main()
Editor is loading...
Leave a Comment