Integration Guide

Step-by-step instructions for setting up the Microsoft Places integration with Haltian IoT
Alpha

Overview

This guide walks through the end-to-end setup of the Haltian IoT integration with Microsoft Places. The process involves both customer and Haltian tasks:

TaskResponsible Party
Configure buildings and floorsCustomer
Create floorplans (IMDF maps)Haltian + Customer
Turn on Places FinderCustomer
Configure desk bookingCustomer
Map sensors to resourcesHaltian
Provide real-time occupancy dataHaltian

Setup Process Overview

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F6FAFA', 'primaryTextColor': '#143633', 'primaryBorderColor': '#143633', 'lineColor': '#143633', 'secondaryColor': '#C7FDE6', 'tertiaryColor': '#73F9C1', 'clusterBkg': '#ffffff', 'clusterBorder': '#143633', 'edgeLabelBackground': '#ffffff'}}}%%
flowchart TB
    subgraph Customer["Customer Tasks"]
        S1["1. Configure\nBuildings & Floors"]
        S2["2. Configure\nFloorplans"]
        S3["3. Enable\nPlaces Finder"]
        S4["4. Configure\nDesk Booking"]
    end

    subgraph Haltian["Haltian Tasks"]
        S2H["2. Prepare\nIMDF Files"]
        S5["5. Map Sensors\nto Resources"]
        S6["6. Enable Occupancy\nData Feed"]
    end

    S1 --> S2
    S2H --> S2
    S2 --> S3
    S3 --> S4
    S4 --> S5
    S5 --> S6

Prerequisites

License Requirements

Microsoft Places features require specific licenses:

LicenseFeatures
Microsoft 365 subscriptionCore features: work plans, calendar cards, RSVP
Teams PremiumEnhanced features: Places finder, space analytics
Microsoft 365 CopilotAI features: managed booking, recommended days

See Microsoft’s license requirements for current details.

Tools Required

  • PowerShell 7.4.0+ - Download
  • Microsoft Places PowerShell module:
Install-Module -Name MicrosoftPlaces -Force

Permissions

You need two Exchange Online management roles:

  • TenantPlacesManagement - Manage Places
  • MailRecipient - Manage users and mailboxes

If you have the Exchange Administrator role, you likely have these permissions. Otherwise:

New-ManagementRoleAssignment -Role TenantPlacesManagement -User <UPN>

Step 1: Configure Buildings and Floors (Customer)

1.1 Create Building Hierarchy

  1. Launch PowerShell 7 as Administrator
  2. Connect to Microsoft Places:
Connect-MicrosoftPlaces
  1. Initialize the hierarchy:
Initialize-Places
  1. Select Option 1 to create a CSV file from existing room data

The generated CSV contains your organization’s rooms and workspaces with inferred building/floor names.

1.2 Review and Edit CSV

  1. Open the CSV file
  2. Correct building and floor names in InferredBuildingName and InferredFloorName columns
  3. Remove all columns except:
    • InferredBuildingName
    • InferredFloorName
    • InferredSectionName
    • PrimarySmtpAddress
  4. Save and close the file

1.3 Upload Hierarchy

Initialize-Places

Select Option 2 to import your edited CSV file.

1.4 Verify

Check that buildings appear in Microsoft Teams or Outlook calendar workplace presence settings.

1.5 Add Metadata (Optional)

Add capacity, A/V equipment, room pictures using Set-PlaceV3:

Set-PlaceV3 -Identity "meeting-room@contoso.com" -Capacity 10 -AudioDevices "Teams Room"

See Set-PlaceV3 documentation for full options.

Step 2: Configure Floorplans (Customer + Haltian)

Floor plans enable users to see building layouts and find rooms/desks visually.

2.1 Export Spatial Information (Customer)

  1. Find the building PlaceId:
Get-PlaceV3 -Type Building | ? {$_.DisplayName -eq 'Your Building Name'} | ft DisplayName,PlaceId
  1. Export building data to CSV:
Get-PlaceV3 -AncestorId <BuildingPlaceId> | Export-Csv "YourBuilding.csv" -NoTypeInformation
  1. Share this CSV file with Haltian

2.2 Prepare IMDF Files (Haltian)

Haltian creates IMDF (Indoor Mapping Data Format) files:

  • One zipped folder per building containing:
    • building.geojson
    • footprint.geojson
    • level.geojson
    • unit.geojson

Requirements:

  • Maps must be georeferenced
  • Each package contains only one building
  • Floor ordinal values match Microsoft Places SortOrder
  • Names use language code format:
{
  "properties": {
    "name": {
      "en": "3rd Floor"
    }
  }
}

2.3 Generate Correlation File (Customer)

  1. First run — extract map features:
Import-MapCorrelations -MapFilePath "path\to\imdffile.zip"

This creates mapfeatures.csv.

  1. Second run — correlate with Places data:
Import-MapCorrelations -MapFilePath "path\to\imdffile.zip" -CorrelationsFilePath "path\to\mapfeatures.csv"

2.4 Correlate Spaces (Customer)

  1. Open the building CSV (from Step 2.1) and mapfeatures.csv side by side
  2. For each building, floor, and room: copy PlaceId, Name, and Type from building CSV to mapfeatures CSV
  3. Save the file

2.5 Update IMDF with Correlations (Customer)

Import-MapCorrelations -MapFilePath "path\to\imdffile.zip" -CorrelationsFilePath "path\to\mapfeatures.csv"

This creates imdf_correlated.zip.

2.6 Import Maps (Customer)

  1. Get the building PlaceId:
Get-PlaceV3 -Type Building | ? {$_.DisplayName -eq 'Your Building'} | ft DisplayName,PlaceId
  1. Import the correlated maps:
New-Map -BuildingId <BuildingPlaceId> -FilePath "path\to\imdf_correlated.zip"

Step 3: Enable Places Finder (Customer)

Places Finder replaces the Room Finder experience in Outlook and Teams.

Enable for Specific Group

Set-PlacesSettings -PlacesFinderEnabled 'Default:false,OID:<group-object-id>:true'

Enable for Everyone

Set-PlacesSettings -PlacesFinderEnabled 'Default:true'

Verify Settings

Get-PlacesSettings

Step 4: Configure Desk Booking (Customer)

Enable desk booking for workspaces in Microsoft Places. See Microsoft’s desk booking documentation for details.

Step 5: Sensor Mapping (Haltian)

Haltian maps physical sensors to Microsoft Places resources:

  1. Room sensors — Mapped to meeting room resources
  2. Desk sensors — Mapped to bookable desk resources
  3. Zone sensors — Mapped to floor sections

This enables:

  • Real-time room availability
  • Desk occupancy status
  • Space utilization analytics

Troubleshooting

Buildings Not Appearing

  • Verify CSV was imported successfully with Initialize-Places
  • Check building names match exactly
  • Wait up to 1 hour for sync

Maps Not Displaying

  • Verify IMDF files follow Apple IMDF specifications
  • Check all correlations are complete in mapfeatures.csv
  • Ensure floor ordinal values match SortOrder

Occupancy Data Not Updating

  • Verify sensor-to-resource mapping with Haltian
  • Check sensor connectivity in Haltian IoT Studio
  • Confirm API integration is active
  • Check that sensors have recent lastSeen timestamps in IoT Studio
  • Ensure the correct device group is mapped if using the Occupancy Data Engine

Room Release Not Working

  • Confirm Teams Premium license is assigned to room mailboxes
  • Verify occupancy sensors are reporting to the correct room resource
  • Check that automatic room release is enabled in Microsoft Places settings
  • Allow 5–10 minutes for no-show detection (sensor must confirm the room is empty)

Desk Booking Shows Wrong Status

  • Verify one-to-one mapping between desk sensor and bookable workspace
  • Check sensor battery level — low battery causes delayed or missed reports
  • Confirm sensor is mounted correctly per installation guide

For more common questions, see the FAQ.

Support

Next Steps