Complete setup instructions for the Home Assistant Floorplan integration.
HACS (Home Assistant Community Store) makes installation and updates simple.
- Ensure HACS is installed. If not, follow HACS installation
- Go to HACS → Integrations
- Click Explore & Download Repositories
- Search for "Floorplan"
- Click the result to open the integration
- Click Download
- Select the version and confirm
- Restart Home Assistant (Settings → System → Restart)
- Go to Settings → Devices & Services → Create Integration
- Search for and select "Floorplan"
- Follow the setup wizard
For manual installation or development:
- Download or clone the repository
- Copy the
custom_components/floorplandirectory to your Home Assistantcustom_componentsdirectory:~/.homeassistant/custom_components/floorplan/ - Restart Home Assistant (Settings → System → Restart)
- Go to Settings → Devices & Services → Create Integration
- Search for and select "Floorplan"
- Follow the setup wizard
After installation, you'll see a configuration dialog:
-
Floorplan Integration Setup
- Provider Configuration: Choose whether to enable the Bermuda location provider
- ✅ Enable Bermuda Location Provider (BLE Trilateration) - for tracking moving devices
- ⬜ Uncheck to disable if you only need static entity positioning
- Provider Configuration: Choose whether to enable the Bermuda location provider
-
Click Submit to complete setup
Your floorplan integration is now registered, but you need to configure your actual floorplan layout and entities.
Create floorplan/floorplan.yaml in your Home Assistant configuration directory (typically ~/.homeassistant/floorplan/floorplan.yaml).
Note: The directory is created automatically after the integration setup, or you can create it manually.
Define the physical floors in your home with their ceiling heights:
floors:
ground_floor:
height: 2.4 # Ceiling height in meters (ground floor ceiling)
1st_floor:
height: 5.2 # First floor ceiling (2.4m ground + 2.8m floor height)
2nd_floor:
height: 7.6 # Second floor ceiling (5.2m + 2.4m floor height)
basement:
height: -2.5 # Basement ceiling (below ground level)Important Semantics:
- Floor ID: Unique identifier (alphanumeric with underscores) - friendly names auto-fetched from HA floor registry
- height: Ceiling height in meters (not floor level!)
- Used for filtering beacons and entities by floor
- Ground floor range: 0m to its ceiling height (e.g., 0-2.4m)
- First floor range: ground ceiling to first ceiling (e.g., 2.4-5.2m)
- Beacons/entities assigned to floor based on their Z coordinate falling in range
Define room boundaries and properties:
rooms:
living_room:
name: Living Room # Display name
floor: ground_floor # Floor ID from above
area: living_room # Optional: Home Assistant area ID
boundaries:
- [0, 0] # Point 1: X=0m, Y=0m
- [10, 0] # Point 2: X=10m, Y=0m
- [10, 8] # Point 3: X=10m, Y=8m
- [0, 8] # Point 4: X=0m, Y=8m
kitchen:
name: Kitchen
floor: ground_floor
area: kitchen
boundaries:
- [10, 0]
- [15, 0]
- [15, 5]
- [10, 5]
hallway:
name: Hallway
floor: ground_floor
boundaries:
- [8, 0]
- [10, 0]
- [10, 2]
- [8, 2]Properties:
- name: Display name for the room (OPTIONAL - if omitted, uses name from Home Assistant area registry)
- floor: Floor ID where this room is located
- area: Optional link to Home Assistant area (for automation/grouping AND name lookup if name not specified)
- boundaries: List of
[X, Y]coordinates defining the room polygon- Points should form a closed polygon (first and last point should be adjacent)
- Order (clockwise/counter-clockwise) doesn't matter
- At least 3 points required for a valid polygon
Coordinate System:
- Origin
[0, 0]is typically at one corner of your home - X increases to the right
- Y increases forward/away
- All measurements in meters
- Keep values simple for easier mental mapping (use whole numbers where possible)
Position any Home Assistant entity at a fixed location:
static_entities:
light.living_room:
coordinates: [5, 4, 1.8] # [X, Y, Z] in meters
sensor.hallway_temperature:
coordinates: [9, 1, 1.5]
camera.front_door:
coordinates: [0, 0, 2.2]
light.bedroom_1:
coordinates: [3, 8, 0.9]
switch.office_power:
coordinates: [12, 5, 0.8]Entity ID Format: Use the full Home Assistant entity ID as shown in Developer Tools
Coordinates: [X, Y, Z]
- X: Horizontal position (left/right) in meters
- Y: Depth position (forward/back) in meters
- Z: Height above ground in meters
- Typical heights:
- Lights: 1.8-2.4m (ceiling height)
- Outlets/switches: 0.8-1.2m
- Cameras: 1.5-2.2m
- Floor sensors: 0.0-0.2m
- Typical heights:
Define BLE scanner nodes used for trilateration of moving devices:
moving_entities:
beacon_nodes:
D4:5F:4E:A1:23:45: # Bluetooth device ID
coordinates: [12, 2.5, 2.0] # [X, Y, Z] in meters
A3:2B:1C:F9:87:56:
coordinates: [5, 4, 2.0]
F1:E2:D3:C4:B5:A6:
coordinates: [4, 8, 2.0]Finding Device IDs:
- Go to Settings → Devices & Services → Bluetooth
- Look for your BLE scanner devices (typically named with MAC addresses)
- The device ID is shown under each device
Device Friendly Names:
- Device friendly names are automatically fetched from Home Assistant device registry
- Displayed on the floorplan card instead of MAC addresses
- Uses custom name if set, otherwise device name
- Falls back to MAC address if device not found in registry
Positioning Guidelines:
- Mount scanners 1.5-2.5m high (typical wall height)
- Spread them throughout your home for better coverage
- At least 3 scanners required for 3D trilateration
- 4+ scanners recommended for better accuracy
- Form a rough triangle or square around your tracking area
- Z coordinate should match actual mounting height for accurate tracking
# floorplan/floorplan.yaml
floors:
ground_floor:
height: 2.4 # Ground floor ceiling height
1st_floor:
height: 5.2 # First floor ceiling height (2.4m + 2.8m)
rooms:
# Ground Floor
living_room:
name: Living Room
floor: ground_floor
area: living_room
boundaries:
- [0, 0]
- [10, 0]
- [10, 8]
- [0, 8]
kitchen:
name: Kitchen
floor: ground_floor
area: kitchen
boundaries:
- [10, 0]
- [15, 0]
- [15, 5]
- [10, 5]
hallway:
name: Hallway
floor: ground_floor
boundaries:
- [8, 0]
- [10, 0]
- [10, 8]
- [8, 8]
# First Floor
master_bedroom:
name: Master Bedroom
floor: 1st_floor
area: master_bedroom
boundaries:
- [0, 0]
- [8, 0]
- [8, 10]
- [0, 10]
guest_bedroom:
name: Guest Bedroom
floor: 1st_floor
area: guest_bedroom
boundaries:
- [8, 0]
- [13, 0]
- [13, 8]
- [8, 8]
bathroom:
name: Bathroom
floor: 1st_floor
boundaries:
- [13, 0]
- [15, 0]
- [15, 5]
- [13, 5]
static_entities:
# Ground Floor Lighting
light.living_room:
coordinates: [5, 4, 2.3]
light.kitchen:
coordinates: [12.5, 2.5, 2.3]
light.hallway:
coordinates: [9, 4, 2.3]
# Cameras
camera.front_door:
coordinates: [0, 0, 2.1]
camera.living_room:
coordinates: [8.5, 7.5, 2.4]
# Sensors
sensor.living_room_temp:
coordinates: [5, 4, 1.5]
sensor.kitchen_motion:
coordinates: [14, 3, 2.0]
moving_entities:
beacon_nodes:
D4:5F:4E:A1:23:45:
coordinates: [12, 2.5, 2.0]
A3:2B:1C:F9:87:56:
coordinates: [5, 4, 2.0]
F1:E2:D3:C4:B5:A6:
coordinates: [4, 8, 2.0]The Bermuda provider is optional and enables BLE-based trilateration for tracking moving devices.
Via UI:
- Go to Settings → Devices & Services
- Find the "Floorplan" integration entry
- Click Edit (gear icon)
- Check/uncheck "Enable Bermuda Location Provider"
- Click Submit
Via YAML (if using YAML configuration):
# configuration.yaml
floorplan:
providers:
bermuda:
enabled: true # false to disableTo use Bermuda provider for location tracking:
- Bermuda integration installed - Install via HACS or manually
- Beacon nodes configured - At least 3 BLE scanners with known positions (see above)
- Bermuda configured - Set up device tracking in Bermuda (import devices to track)
- Distance sensors available - Bermuda creates
distance_to_*sensors for each device
- Discovery Phase: System finds all
distance_to_*sensors created by Bermuda - Matching Phase: Matches sensor names to beacon nodes in your floorplan
- Triangulation: Uses 3D least-squares trilateration with distance measurements
- Calculation: Returns [X, Y, Z] coordinates for tracked devices
- Minimum 3 scanners required - At least 3 distance measurements needed for 3D calculation
- Distance accuracy - Accuracy depends on Bermuda's RSSI-to-distance conversion
- Z-coordinate accuracy - Primary use is X/Y positioning (Z less precise)
- Range dependent - Devices must be in BLE range of at least 3 scanners
- Real-time: Updates as frequently as Bermuda provides new distance measurements
See Location Providers for more details.
The floorplan configuration file should be at:
~/.homeassistant/floorplan/floorplan.yaml
Or relative to your Home Assistant configuration directory:
<ha_config>/floorplan/floorplan.yaml
Home Assistant creates this directory automatically after you run the integration for the first time, or you can create it manually.
After creating your configuration file:
- Go to Settings → System → Logs (if Home Assistant 2024.1+)
- Or check the terminal output for any errors
- Restart Home Assistant if configuration changed
- Test by calling a service: Developer Tools → Services
- Search for
floorplan.*services - Call
floorplan.get_rooms_by_floorto verify configuration loaded
If you see no services, check logs for errors in loading the configuration file.
Symptom: Services don't appear, no rooms visible
Solutions:
- Verify file is at
floorplan/floorplan.yaml(check capitalization) - Validate YAML syntax using an online YAML validator
- Check Home Assistant logs for parsing errors
- Ensure proper indentation (YAML is whitespace-sensitive)
- Restart Home Assistant after making changes
Symptom: "Device not registered" error when adding beacon nodes
Solutions:
- Verify device ID in Settings → Devices & Services → Bluetooth
- Copy the exact ID (watch for special characters)
- Ensure device is registered in Home Assistant Bluetooth registry
- Some devices may use different formats (MAC or UUID)
Symptom: Services return empty room list
Solutions:
- Verify floorplan.yaml exists and is readable
- Check that
floorssection is defined - Ensure rooms reference valid floor IDs
- Restart integration or Home Assistant
- Check logs for parsing errors
Symptom: Bermuda provider enabled but no coordinates returned
Solutions:
- Verify at least 3 beacon nodes configured
- Check that beacon node IDs match Bluetooth registry exactly
- Ensure Bermuda is tracking target devices (has distance_to_* sensors)
- Verify distance sensors are not in "unknown" state
- Try calling
floorplan.get_beacon_nodesto verify node registration
- Services Reference - API documentation for all available services
- Architecture & Design - How the system works internally
- Location Providers - Details on Bermuda and future providers