Skip to content

Anchors

A WIN anchor is a placed beacon — a fixed beacon positioned on a floorplan, identified by its server-issued uid. It carries a name, a type (ANCHOR or BRIDGE), and a position object.

An anchor has no MAC address. The MAC belongs to a Node; the binding between hardware and a placed beacon is an Association. The desktop site-plan client aggregates the three for display, but the server keeps them separate.

Quick reference

Method What it does
client.anchors.list() All anchors in scope.
client.anchors.create(*, name, position, type="ANCHOR", **fields) Create a placed anchor.
client.anchors.update(uid, **fields) Update; validates type if passed.
client.anchors.delete(uid) Delete; server-side closes open associations.

Creating

The server's createWinAnchor schema requires name, type (ANCHOR or BRIDGE), and position. The position object must include x, y, z, and area_uid.

anchor = client.anchors.create(
    name="Anchor 7",
    position={"x": 1.0, "y": 2.0, "z": 0.0, "area_uid": area.uid},
)

type defaults to "ANCHOR". Other values raise ValueError before the HTTP call.

Anchor vs node vs association

If your workflow is "I have a MAC and want a placed anchor bound to it," call three primitives:

anchor = client.anchors.create(name=..., position=...)
node = client.nodes.create(mac_address=...)
client.anchor_associations.create(node.mac_address, anchor.uid)

See client.anchor_associations for the full surface (create / list / list_all / update / close / delete). A compound anchors.create_with_node(...) that wraps the three calls is planned for a future milestone.

Model — Anchor

Field Type Notes
uid str Server-assigned.
name str Display.
type str Anchor type.
area_uid str Parent area.
x / y / z int \| None Placement.
node Node \| None The bound hardware node; the MAC is anchor.node.mac_address.

Full field list.

  • Hardware: Nodes. Anchors and nodes bind via Associations.
  • Parent: Areas. The anchor's area_uid references this area.

See also