Devices ******* .. _ap: Access Point ------------ The Airfinder :class:`.AccessPoint` acts as the BLE Gateway to Symphony Link traffic, the ultimately ends up to Conductor through the :ref:`gateway`. The AccessPoint can also act as a :ref:`lb` when configured to do so. Retrieving an :class:`.AccessPoint` object is really easy with the :meth:`.User.get_access_point` method, and supports all address schemes :: my_ap = u.get_access_point("C0:00:00:00:XX:XX") The :ref:`ap` is a child class of the :class:`.Module`, and comes with all the same functionality. Some of the added functionality can be seen through the configuration of the :class:`.AccessPoint`. To send and request these configurations, the methods construct a Symphony Link :class:`.DownlinkMessage` with the formatted data to perform the request. The optional arguments in the methods are identical to those in :meth:`Module.send_message` and will construct a :class:`.DownlinkMessage` the same. Please reference :ref:`dl_mech` for more! **Location Beacon Operation** There are two AP Operation Modes, `Connectable` and `Reference`. When acting as a "Reference"/location beacon, the Access Point does only that. To determine the AP Type of the Access Point can be done as so :: my_ap.ap_type > AccessPoint.APType.Connectable conf_dl = my.ap.set_ap_type(AccessPoint.APType.Reference) conf_dl.wait_for_success() In Addition, Location Groups and Weights can also be set for Access Points in this mode of operation. :: # Location Weights my_ap.location_weight > 0 conf_dl = my_ap.set_location_weight(3) conf_dl.wait_for_success() # Location Groups my_ap.location_group > 0 conf_dl = my_ap.set_location_group(5) conf_dl.wait_for_success() Then, the schedule can be defined with the :class:`.Schedule` object, same as the :ref:`lb`. **Power Adjustment** **Advertising Rate** **Time Sync Rate** **Duty Cycle** **Status** .. _lb: Location Beacon --------------- :class:`.Location` Beacons are installed around a :class:`.Site`, :class:`.Area` and :class:`.Zone`. These beacons must be installed in known areas and provisioned - using the UI will give the best visual representation of this. While installed, the beacons will advertise their address for the :ref:`tag` to report to the Cloud. These devices also communicate directly through the SymBLE :ref:`ap`. To get a location beacon node, use the :meth:`User.get_node` method... :: lb = user.get_node(xx:xx:xx:xx:xx:xx) Which will construct the :class:`.Location` object for Location Beacon devices. To configure the behavior of the Location Beacon, the following fields are modifiable... **Advertising Enable** Enables or Disables the device as a :ref:`lb`. To view this value :: lb.adv_en > True **Advertising Schedule** The Advertising Schedule of the Location Beacon controls when the :ref:`lb` has its advertisements enabled. To easily modify this advertisement schedule, the :class:`.Schedule` is available. To see the advertising schedule of a location beacon, simply :: schedule = lb.schedule and the default location beacon schedule looks like this :: schedule.show_grid() | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ==================================================================================================== Hour 0 | True | True | True | True | True | True | True | Hour 1 | True | True | True | True | True | True | True | Hour 2 | True | True | True | True | True | True | True | Hour 3 | True | True | True | True | True | True | True | Hour 4 | True | True | True | True | True | True | True | Hour 5 | True | True | True | True | True | True | True | Hour 6 | True | True | True | True | True | True | True | Hour 7 | True | True | True | True | True | True | True | Hour 8 | True | True | True | True | True | True | True | Hour 9 | True | True | True | True | True | True | True | Hour 10 | True | True | True | True | True | True | True | Hour 11 | True | True | True | True | True | True | True | Hour 12 | True | True | True | True | True | True | True | Hour 13 | True | True | True | True | True | True | True | Hour 14 | True | True | True | True | True | True | True | Hour 15 | True | True | True | True | True | True | True | Hour 16 | True | True | True | True | True | True | True | Hour 17 | True | True | True | True | True | True | True | Hour 18 | True | True | True | True | True | True | True | Hour 19 | True | True | True | True | True | True | True | Hour 20 | True | True | True | True | True | True | True | Hour 21 | True | True | True | True | True | True | True | Hour 22 | True | True | True | True | True | True | True | Hour 23 | True | True | True | True | True | True | True | To modify this schedule, you can either set a specific hour to a certain value for each day with :meth:`Schedule.set_hour_per_day`. In this example, 03:00 AM UTC is set to not advertise :: schedule.set_hour_per_day(3, False) schedule.show_grid() | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ==================================================================================================== Hour 0 | True | True | True | True | True | True | True | Hour 1 | True | True | True | True | True | True | True | Hour 2 | True | True | True | True | True | True | True | Hour 3 | False | False | False | False | False | False | False | Hour 4 | True | True | True | True | True | True | True | Hour 5 | True | True | True | True | True | True | True | Hour 6 | True | True | True | True | True | True | True | Hour 7 | True | True | True | True | True | True | True | Hour 8 | True | True | True | True | True | True | True | Hour 9 | True | True | True | True | True | True | True | Hour 10 | True | True | True | True | True | True | True | Hour 11 | True | True | True | True | True | True | True | Hour 12 | True | True | True | True | True | True | True | Hour 13 | True | True | True | True | True | True | True | Hour 14 | True | True | True | True | True | True | True | Hour 15 | True | True | True | True | True | True | True | Hour 16 | True | True | True | True | True | True | True | Hour 17 | True | True | True | True | True | True | True | Hour 18 | True | True | True | True | True | True | True | Hour 19 | True | True | True | True | True | True | True | Hour 20 | True | True | True | True | True | True | True | Hour 21 | True | True | True | True | True | True | True | Hour 22 | True | True | True | True | True | True | True | Hour 23 | True | True | True | True | True | True | True | Then, to set a single value for an entire day, the :meth:`.Schedule.set_day` will help. The next example completely disabled advertisements on Wednesday. :: schedule.set_day(schedule.Day.WEDNESDAY, False) schedule.show_grid() | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ==================================================================================================== Hour 0 | True | True | True | False | True | True | True | Hour 1 | True | True | True | False | True | True | True | Hour 2 | True | True | True | False | True | True | True | Hour 3 | False | False | False | False | False | False | False | Hour 4 | True | True | True | False | True | True | True | Hour 5 | True | True | True | False | True | True | True | Hour 6 | True | True | True | False | True | True | True | Hour 7 | True | True | True | False | True | True | True | Hour 8 | True | True | True | False | True | True | True | Hour 9 | True | True | True | False | True | True | True | Hour 10 | True | True | True | False | True | True | True | Hour 11 | True | True | True | False | True | True | True | Hour 12 | True | True | True | False | True | True | True | Hour 13 | True | True | True | False | True | True | True | Hour 14 | True | True | True | False | True | True | True | Hour 15 | True | True | True | False | True | True | True | Hour 16 | True | True | True | False | True | True | True | Hour 17 | True | True | True | False | True | True | True | Hour 18 | True | True | True | False | True | True | True | Hour 19 | True | True | True | False | True | True | True | Hour 20 | True | True | True | False | True | True | True | Hour 21 | True | True | True | False | True | True | True | Hour 22 | True | True | True | False | True | True | True | Hour 23 | True | True | True | False | True | True | True | Then to just set one specific hour on one specific day, you can use the :meth:`Schedule.set_hour` method. This example disables location beacons on Sunday at 2:00 PM UTC :: schedule.set_hour(schedule.Day.SUNDAY, 14, False) schedule.show_grid() | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ==================================================================================================== Hour 0 | True | True | True | False | True | True | True | Hour 1 | True | True | True | False | True | True | True | Hour 2 | True | True | True | False | True | True | True | Hour 3 | False | False | False | False | False | False | False | Hour 4 | True | True | True | False | True | True | True | Hour 5 | True | True | True | False | True | True | True | Hour 6 | True | True | True | False | True | True | True | Hour 7 | True | True | True | False | True | True | True | Hour 8 | True | True | True | False | True | True | True | Hour 9 | True | True | True | False | True | True | True | Hour 10 | True | True | True | False | True | True | True | Hour 11 | True | True | True | False | True | True | True | Hour 12 | True | True | True | False | True | True | True | Hour 13 | True | True | True | False | True | True | True | Hour 14 | False | True | True | False | True | True | True | Hour 15 | True | True | True | False | True | True | True | Hour 16 | True | True | True | False | True | True | True | Hour 17 | True | True | True | False | True | True | True | Hour 18 | True | True | True | False | True | True | True | Hour 19 | True | True | True | False | True | True | True | Hour 20 | True | True | True | False | True | True | True | Hour 21 | True | True | True | False | True | True | True | Hour 22 | True | True | True | False | True | True | True | Hour 23 | True | True | True | False | True | True | True | **RSSI Adjustment** A signed 8-bit integer, that is used to adjust the RSSI readings of the :ref:`lb`. **Location Weight** A field to add bias to or from a certain :ref:`lb`. **Location Group** A field used to associate multiple :ref:`lb` devices together, to add bias given the installation point of the device. **Transmit Power** A signed 8-bit integer, that sets the Transmit Power of the :ref:`lb`. .. _tag: Standard Tag ------------ TODO Supertag -------- TODO