Пример #1
0
    def _add_points(qty, device):
        # Add a lot of points for tests (segmentation required)
        mvs = []
        avs = []
        bvs = []
        ais = []
        bis = []
        aos = []
        bos = []
        charstr = []

        for i in range(qty):
            mvs.append(
                create_MV(oid=i, name="mv{}".format(i), pv=1,
                          pv_writable=True))
            new_av = create_AV(oid=i,
                               name="av{}".format(i),
                               pv=99.9,
                               pv_writable=True)
            new_av.units = EngineeringUnits.enumerations["degreesCelsius"]
            new_av.description = "Fake Description {}".format(i)
            avs.append(new_av)
            bvs.append(
                create_BV(oid=i, name="bv{}".format(i), pv=1,
                          pv_writable=True))
            ais.append(create_AI(oid=i, name="ai{}".format(i), pv=99.9))
            aos.append(create_AO(oid=i, name="ao{}".format(i), pv=99.9))
            bis.append(create_BI(oid=i, name="bi{}".format(i), pv=1))
            bos.append(create_BO(oid=i, name="bo{}".format(i), pv=1))
            charstr.append(
                create_CharStrValue(
                    oid=i,
                    name="string{}".format(i),
                    pv=CharacterString("test"),
                    pv_writable=True,
                ))

        for mv in mvs:
            device.this_application.add_object(mv)
        for av in avs:
            device.this_application.add_object(av)
        for bv in bvs:
            device.this_application.add_object(bv)
        for ai in ais:
            device.this_application.add_object(ai)
        for ao in aos:
            device.this_application.add_object(ao)
        for bi in bis:
            device.this_application.add_object(bi)
        for bo in bos:
            device.this_application.add_object(bo)
        for cs in charstr:
            device.this_application.add_object(cs)
Пример #2
0
    def _add_points(qty, device):
        # Add a lot of points for tests (segmentation required)
        mvs = []
        avs = []
        bvs = []
        ais = []
        bis = []
        aos = []
        bos = []

        for i in range(qty):
            mvs.append(create_MV(oid=i, name='mv{}'.format(i), pv=1))
            avs.append(create_AV(oid=i, name='av{}'.format(i), pv=99.9))
            bvs.append(create_BV(oid=i, name='bv{}'.format(i), pv=1))
            ais.append(create_AI(oid=i, name='ai{}'.format(i), pv=99.9))
            aos.append(create_AO(oid=i, name='ao{}'.format(i), pv=99.9))
            bis.append(create_BI(oid=i, name='bi{}'.format(i), pv=1))
            bos.append(create_BO(oid=i, name='bo{}'.format(i), pv=1))

        def _make_mutable(obj, identifier='presentValue', mutable=True):
            """ 
            This function is not the way to go as it changes the class
            property...As bacpypes issue #224, it will need a lot of work
            """
            for prop in obj.properties:
                if prop.identifier == identifier:
                    prop.mutable = mutable
            return obj

        for mv in mvs:
            device.this_application.add_object(_make_mutable(mv))
        for av in avs:
            device.this_application.add_object(_make_mutable(av))
        for bv in bvs:
            device.this_application.add_object(bv)
        for ai in ais:
            device.this_application.add_object(ai)
        for ao in aos:
            device.this_application.add_object(ao)
        for bi in bis:
            device.this_application.add_object(bi)
        for bo in bos:
            device.this_application.add_object(bo)
Пример #3
0
def start_device():
    print("Starting BACnet device")
    new_device = BAC0.lite()
    new_device._log.info('Device ID : {}'.format(new_device.Boid))
    time.sleep(10)

    default_pv = CharacterString("empty")

    ####humidity#######
    Current_humidity = create_AV(oid=0,
                                 name="Midnight_Humidity",
                                 pv=0,
                                 pv_writable=False)
    Current_humidity.units = EngineeringUnits("percent")
    Current_humidity.description = CharacterString(
        "Midnight Humidity in Percent Relative Humidity")

    ####temp#######
    Current_temp = create_AV(oid=1,
                             name="Midnight_Temp",
                             pv=0,
                             pv_writable=False)
    Current_tempunits = EngineeringUnits("degreesFahrenheit")
    Current_description = CharacterString("5AM Temperature in degF")

    ####dewpoint#######
    Current_dewpoint = create_AV(oid=2,
                                 name="Midnight_Dewpoint",
                                 pv=0,
                                 pv_writable=False)
    Current_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Current_dewpoint.description = CharacterString("Midnight Outdoor Dewpoint")

    ####clouds#######
    Current_clouds = create_AV(oid=3,
                               name="Midnight_Cloud_Cover",
                               pv=0,
                               pv_writable=False)
    Current_clouds.units = EngineeringUnits("percent")
    Current_clouds.description = CharacterString(
        "Midnight Cloud Cover In Percent")

    ####description#######
    Current_description = create_CharStrValue(
        oid=4, name="Midnight_Weather_Description", pv=default_pv)
    Current_description.description = CharacterString(
        "Midnight Weather Description")

    ####humidity#######
    Five_AM_humidity = create_AV(oid=5,
                                 name="5:00AM_Humidity",
                                 pv=0,
                                 pv_writable=False)
    Five_AM_humidity.units = EngineeringUnits("percent")
    Five_AM_humidity.description = CharacterString(
        "5AM Humidity in Percent Relative Humidity")

    ####temp#######
    Five_AM_temp = create_AV(oid=6,
                             name="5:00AM_Temp",
                             pv=0,
                             pv_writable=False)
    Five_AM_temp.units = EngineeringUnits("degreesFahrenheit")
    Five_AM_temp.description = CharacterString("5AM Temperature in degF")

    ####dewpoint#######
    Five_AM_dewpoint = create_AV(oid=7,
                                 name="5:00AM_Dewpoint",
                                 pv=0,
                                 pv_writable=False)
    Five_AM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Five_AM_dewpoint.description = CharacterString("5AM Outdoor Dewpoint")

    ####clouds#######
    Five_AM_clouds = create_AV(oid=8,
                               name="5:00AM_Cloud_Cover",
                               pv=0,
                               pv_writable=False)
    Five_AM_clouds.units = EngineeringUnits("percent")
    Five_AM_clouds.description = CharacterString("5AM Cloud Cover In Percent")

    ####description#######
    Five_AM_description = create_CharStrValue(
        oid=9, name="5:00AM_Weather_Description", pv=default_pv)
    Five_AM_description.description = CharacterString(
        "5AM Weather Description 5AM")

    ####humidity#######3HR
    Eight_AM_humidity = create_AV(oid=10,
                                  name="8:00AM_Humidity",
                                  pv=0,
                                  pv_writable=False)
    Eight_AM_humidity.units = EngineeringUnits("percent")
    Eight_AM_humidity.description = CharacterString(
        "8:00AM Humidity in Percent Relative Humidity")

    ####temp#######3HR
    Eight_AM_temp = create_AV(oid=11,
                              name="8:00AM_Temp",
                              pv=0,
                              pv_writable=False)
    Eight_AM_temp.units = EngineeringUnits("degreesFahrenheit")
    Eight_AM_temp.description = CharacterString("8:00AM Temp in degF")

    ####dewpoint#######3HR
    Eight_AM_dewpoint = create_AV(oid=12,
                                  name="8:00AM_Dewpoint",
                                  pv=0,
                                  pv_writable=False)
    Eight_AM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Eight_AM_dewpoint.description = CharacterString("8:00AM Outdoor Dewpoint")

    ####clouds#######3HR
    Eight_AM_clouds = create_AV(oid=13,
                                name="8:00AM_Cloud_Cover",
                                pv=0,
                                pv_writable=False)
    Eight_AM_clouds.units = EngineeringUnits("percent")
    Eight_AM_clouds.description = CharacterString(
        "8:00AM Cloud Cover In Percent")

    ####description#######3HR
    Eight_AM_description = create_CharStrValue(
        oid=14, name="8:00AM_Weather_Description", pv=default_pv)
    Eight_AM_description.description = CharacterString(
        "8:00AM Weather Description")

    ####humidity#######6HR
    Eleven_AM_humidity = create_AV(oid=15,
                                   name="11:00AM_Humidity",
                                   pv=0,
                                   pv_writable=False)
    Eleven_AM_humidity.units = EngineeringUnits("percent")
    Eleven_AM_humidity.description = CharacterString(
        "11:00AM Humidity in Percent Relative Humidity")

    ####temp#######6HR
    Eleven_AM_temp = create_AV(oid=16,
                               name="11:00AM_Temp",
                               pv=0,
                               pv_writable=False)
    Eleven_AM_temp.units = EngineeringUnits("degreesFahrenheit")
    Eleven_AM_temp.description = CharacterString("11:00AM Temp in degF")

    ####dewpoint#######6HR
    Eleven_AM_dewpoint = create_AV(oid=17,
                                   name="11:00AM_Dewpoint",
                                   pv=0,
                                   pv_writable=False)
    Eleven_AM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Eleven_AM_dewpoint.description = CharacterString(
        "11:00AM Outdoor Dewpoint")

    ####clouds#######6HR
    Eleven_AM_clouds = create_AV(oid=18,
                                 name="11:00AM_Cloud_Cover",
                                 pv=0,
                                 pv_writable=False)
    Eleven_AM_clouds.units = EngineeringUnits("percent")
    Eleven_AM_clouds.description = CharacterString(
        "11:00AM Cloud Cover In Percent")

    ####description#######6HR
    Eleven_AM_description = create_CharStrValue(
        oid=19, name="11:00AM_Weather_Description", pv=default_pv)
    Eleven_AM_description.description = CharacterString(
        "11:00AM Weather Description")

    ####humidity#######9HR
    Two_PM_humidity = create_AV(oid=20,
                                name="2:00PM_Humidity",
                                pv=0,
                                pv_writable=False)
    Two_PM_humidity.units = EngineeringUnits("percent")
    Two_PM_humidity.description = CharacterString(
        "2:00PM Humidity in Percent Relative Humidity")

    ####temp#######9HR
    Two_PM_temp = create_AV(oid=21,
                            name="2:00PM_Temp",
                            pv=0,
                            pv_writable=False)
    Two_PM_temp.units = EngineeringUnits("degreesFahrenheit")
    Two_PM_temp.description = CharacterString("2:00PM Temp in degF")

    ####dewpoint#######9HR
    Two_PM_dewpoint = create_AV(oid=22,
                                name="2:00PM_Dewpoint",
                                pv=0,
                                pv_writable=False)
    Two_PM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Two_PM_dewpoint.description = CharacterString("2:00PM Outdoor Dewpoint")

    ####clouds#######9HR
    Two_PM_clouds = create_AV(oid=23,
                              name="2:00PM_Cloud_Cover",
                              pv=0,
                              pv_writable=False)
    Two_PM_clouds.units = EngineeringUnits("percent")
    Two_PM_clouds.description = CharacterString(
        "2:00PM Cloud Cover In Percent")

    ####description#######9HR
    Two_PM_description = create_CharStrValue(oid=24,
                                             name="2:00PM_Weather_Description",
                                             pv=default_pv)
    Two_PM_description.description = CharacterString(
        "2:00PM Weather Description")

    ####humidity#######12HR
    Five_PM_humidity = create_AV(oid=25,
                                 name="5:00PM_Humidity",
                                 pv=0,
                                 pv_writable=False)
    Five_PM_humidity.units = EngineeringUnits("percent")
    Five_PM_humidity.description = CharacterString(
        "5:00PM Humidity in Percent Relative Humidity")

    ####temp#######12HR
    Five_PM_temp = create_AV(oid=26,
                             name="5:00PM_Temp",
                             pv=0,
                             pv_writable=False)
    Five_PM_temp.units = EngineeringUnits("degreesFahrenheit")
    Five_PM_temp.description = CharacterString("5:00PM Temp in degF")

    ####dewpoint#######12HR
    Five_PM_dewpoint = create_AV(oid=27,
                                 name="5:00PM_Dewpoint",
                                 pv=0,
                                 pv_writable=False)
    Five_PM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Five_PM_dewpoint.description = CharacterString("5:00PM Outdoor Dewpoint")

    ####clouds#######12HR
    Five_PM_clouds = create_AV(oid=28,
                               name="5:00PM_Cloud_Cover",
                               pv=0,
                               pv_writable=False)
    Five_PM_clouds.units = EngineeringUnits("percent")
    Five_PM_clouds.description = CharacterString(
        "5:00PM Cloud Cover In Percent")

    ####description#######12HR
    Five_PM_description = create_CharStrValue(
        oid=29, name="5:00PM_Weather_Description", pv=default_pv)
    Five_PM_description.description = CharacterString(
        "5:00PM Weather Description")

    ####humidity#######15HR
    Eight_PM_humidity = create_AV(oid=30,
                                  name="8:00PM_Humidity",
                                  pv=0,
                                  pv_writable=False)
    Eight_PM_humidity.units = EngineeringUnits("percent")
    Eight_PM_humidity.description = CharacterString(
        "8:00PM Humidity in Percent Relative Humidity")

    ####temp#######15HR
    Eight_PM_temp = create_AV(oid=31,
                              name="8:00PM_Temp",
                              pv=0,
                              pv_writable=False)
    Eight_PM_temp.units = EngineeringUnits("degreesFahrenheit")
    Eight_PM_temp.description = CharacterString("8:00PM Temp in degF")

    ####dewpoint#######15HR
    Eight_PM_dewpoint = create_AV(oid=32,
                                  name="8:00PM_Dewpoint",
                                  pv=0,
                                  pv_writable=False)
    Eight_PM_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    Eight_PM_dewpoint.description = CharacterString("8:00PM Outdoor Dewpoint")

    ####clouds#######15HR
    Eight_PM_clouds = create_AV(oid=33,
                                name="8:00PM_Cloud_Cover",
                                pv=0,
                                pv_writable=False)
    Eight_PM_clouds.units = EngineeringUnits("percent")
    Eight_PM_clouds.description = CharacterString(
        "8:00PM Cloud Cover In Percent")

    ####description#######15HR
    Eight_PM_description = create_CharStrValue(
        oid=34, name="8:00PM_Weather_Description", pv=default_pv)
    Eight_PM_description.description = CharacterString(
        "8:00PM Weather Description")

    ####GPS#######
    latitude = create_AV(oid=35,
                         name="Latitude_GPS_Setting",
                         pv=0,
                         pv_writable=False)
    latitude.description = CharacterString(
        "GPS Latitude for Weather Data Request")

    ####GPS#######
    longitude = create_AV(oid=36,
                          name="Longitude_GPS_Setting",
                          pv=0,
                          pv_writable=False)
    longitude.description = CharacterString(
        "GPS Longitude for Weather Data Request")

    new_device.this_application.add_object(Current_humidity)
    new_device.this_application.add_object(Current_temp)
    new_device.this_application.add_object(Current_dewpoint)
    new_device.this_application.add_object(Current_clouds)
    new_device.this_application.add_object(Current_description)

    new_device.this_application.add_object(Five_AM_humidity)
    new_device.this_application.add_object(Five_AM_temp)
    new_device.this_application.add_object(Five_AM_dewpoint)
    new_device.this_application.add_object(Five_AM_clouds)
    new_device.this_application.add_object(Five_AM_description)

    new_device.this_application.add_object(Eight_AM_humidity)
    new_device.this_application.add_object(Eight_AM_temp)
    new_device.this_application.add_object(Eight_AM_dewpoint)
    new_device.this_application.add_object(Eight_AM_clouds)
    new_device.this_application.add_object(Eight_AM_description)

    new_device.this_application.add_object(Eleven_AM_humidity)
    new_device.this_application.add_object(Eleven_AM_temp)
    new_device.this_application.add_object(Eleven_AM_dewpoint)
    new_device.this_application.add_object(Eleven_AM_clouds)
    new_device.this_application.add_object(Eleven_AM_description)

    new_device.this_application.add_object(Two_PM_humidity)
    new_device.this_application.add_object(Two_PM_temp)
    new_device.this_application.add_object(Two_PM_dewpoint)
    new_device.this_application.add_object(Two_PM_clouds)
    new_device.this_application.add_object(Two_PM_description)

    new_device.this_application.add_object(Five_PM_humidity)
    new_device.this_application.add_object(Five_PM_temp)
    new_device.this_application.add_object(Five_PM_dewpoint)
    new_device.this_application.add_object(Five_PM_clouds)
    new_device.this_application.add_object(Five_PM_description)

    new_device.this_application.add_object(Eight_PM_humidity)
    new_device.this_application.add_object(Eight_PM_temp)
    new_device.this_application.add_object(Eight_PM_dewpoint)
    new_device.this_application.add_object(Eight_PM_clouds)
    new_device.this_application.add_object(Eight_PM_description)

    new_device.this_application.add_object(latitude)
    new_device.this_application.add_object(longitude)

    return new_device
Пример #4
0
def start_device():
    print("Starting BACnet device")
    new_device = BAC0.lite()
    new_device._log.info('Device ID : {}'.format(new_device.Boid))
    time.sleep(10)

    default_pv = CharacterString("empty")

    current_humidity = create_AV(oid=0,
                                 name="Current_Humidity",
                                 pv=0,
                                 pv_writable=False)
    current_humidity.units = EngineeringUnits("percent")
    current_humidity.description = CharacterString(
        "Current Humidity in percent relative humidity")

    current_temp = create_AV(oid=1,
                             name="Current_Temp",
                             pv=0,
                             pv_writable=False)
    current_temp.units = EngineeringUnits("degreesFahrenheit")
    current_temp.description = CharacterString("Current Temperature in degF")

    current_windspd = create_AV(oid=2,
                                name="Current_Wind_Speed",
                                pv=0,
                                pv_writable=False)
    current_windspd.units = EngineeringUnits("milesPerHour")
    current_windspd.description = CharacterString("Current Wind Speed")

    current_winddir = create_CharStrValue(oid=3,
                                          name="Current_Wind_Dir",
                                          pv=default_pv,
                                          pv_writable=False)
    current_winddir.description = CharacterString("Wind Direction String")

    current_pressure = create_AV(oid=4,
                                 name="Current_Pressure",
                                 pv=0,
                                 pv_writable=False)
    current_pressure.units = EngineeringUnits("hectopascals")
    current_pressure.description = CharacterString(
        "Current Barometric Pressure")

    current_cloudcov = create_AV(oid=5,
                                 name="Current_Cloud_Cover",
                                 pv=0,
                                 pv_writable=False)
    current_cloudcov.units = EngineeringUnits("percent")
    current_cloudcov.description = CharacterString(
        "Current Cloud Cover in Percent")

    last_update = create_DateTimeValue(oid=1, name="Last_Update")
    last_update.description = CharacterString("Last update timestamp")

    current_location = create_CharStrValue(oid=8,
                                           name="Weather_Station_City",
                                           pv=default_pv)
    current_location.description = CharacterString(
        "Location of Weather Station")

    current_description = create_CharStrValue(
        oid=9, name="Current_Weather_Description", pv=default_pv)
    current_description.description = CharacterString(
        "Weather Station Description String")

    current_dewpoint = create_AV(oid=10,
                                 name="Current_Dewpoint",
                                 pv=0,
                                 pv_writable=False)
    current_dewpoint.units = EngineeringUnits("degreesFahrenheit")
    current_dewpoint.description = CharacterString("Current Outdoor Dewpoint")

    new_device.this_application.add_object(current_humidity)
    new_device.this_application.add_object(current_temp)
    new_device.this_application.add_object(current_windspd)
    new_device.this_application.add_object(current_winddir)
    new_device.this_application.add_object(current_pressure)
    new_device.this_application.add_object(current_cloudcov)
    new_device.this_application.add_object(last_update)
    new_device.this_application.add_object(current_location)
    new_device.this_application.add_object(current_description)
    new_device.this_application.add_object(current_dewpoint)

    return new_device
Пример #5
0


'''
thanks Andrew Rodgers at Ace IoT
for some coding tips on writing a better script

Create writeable duct pressure setpoint below. This is where trim respond
logic from othersource to write to this point. In real worldthis pressure
setpoint would exist on an AHU controller for a VAV system per this sequence:
https://www.taylor-engineering.com/wp-content/uploads/2020/04/ASHRAE_Journal_-_Trim_and_Respond.pdf

'''
for point in bacnet_objects:
  bacnet.this_application.add_object(point['object'])
bacnet.this_application.add_object(create_AV(oid=10, name='DAP-SP',  pv=1, pv_writable=True))



def main():
    task1 = RecurringTask(changeValues,delay=60)
    task1.start()

    while True:
      for point in bacnet_objects:
        bac0_object = bacnet.this_application.get_object_name(point['name'])
        bacnet._log.info(f"{point['label']} is {bac0_object.presentValue}")
        duct_pres_sp = bacnet.this_application.get_object_name('DAP-SP')
        bacnet._log.info('Duct Pressure Setpoint is {}'.format(duct_pres_sp.presentValue))
        time.sleep(120)