HarmonyOS 6 Smart Home Development Guide: Build a Whole-Home Control System with Floating Navigation and Immersive Ambient Lighting

This article focuses on the HarmonyOS 6 smart home control system, “Luminous Home,” whose core idea is to model rooms, navigation, and lighting effects as a unified interaction system. It addresses common issues in traditional smart home apps, such as frequent page switching, weak state feedback, and fragmented scene control. Keywords: HarmonyOS 6, floating navigation, immersive ambient lighting.

Technical Specification Snapshot

Parameter Description
Development Language TypeScript / ArkTS / ETS
UI Framework ArkUI
System Version HarmonyOS 6 / API 23
Core Protocols Distributed device collaboration, AppStorage state synchronization
Core Dependencies @kit.DistributedServiceKit, @kit.LocationKit
Project Type Whole-home smart control center
Stars Not provided in the original article

Insert image description here AI Visual Insight: The image shows a dark-themed smart home control interface that highlights a floating navigation bar, ambient glow effects, and device card hierarchy. It clearly reflects the interaction design principle of “the room is the interface, and the state is the lighting effect.”

HarmonyOS 6 introduces a more spatial interaction model for smart home experiences

Traditional smart home apps often center their design around bottom tabs. As the number of devices grows, page switching and state confirmation become increasingly inefficient. The floating navigation and immersive ambient lighting capabilities in HarmonyOS 6 are well suited to mapping room context directly to interaction entry points.

In the “Luminous Home” solution, the living room, bedroom, study, kitchen, and bathroom are not just business-level groups. They also serve as the unified source of UI layout, primary color, lighting intensity, and device priority. This shifts the control logic from “find a device” to “enter a space.”

The spatial mapping table defines consistency between navigation and visual language

Room Primary Color Navigation Position Lighting Effect Priority Devices
Living Room #F5A623 Bottom floating Warm breathing light Lights / TV / Air Conditioner
Bedroom #9B59B6 Left mini nav Soft gradient Lights / Curtains / Air Purifier
Study #4A90E2 Right rail Focused and stable Desk Lamp / Computer / Speaker
Kitchen #FFE66D Top quick access Bright and crisp Range Hood / Refrigerator / Lights
Bathroom #4ECDC4 Bottom waterproof Fresh pulse Bathroom Heater / Water Heater / Dehumidifier

The significance of this mapping table is not just color selection. It moves spatial semantics to the front of the interaction model. After that, developers only need to switch RoomConfig to update navigation layout, device ordering, ambient light layers, and interaction density in a coordinated way.

export const DeviceStateLightMap = {
  light: {
    off: { color: '#333333', pulse: 0, intensity: 0 },
    dim: { color: '#FFE4B5', pulse: 8000, intensity: 0.3 },
    bright: { color: '#FFFFFF', pulse: 4000, intensity: 1.0 }
  },
  ac: {
    cool: { color: '#00D2FF', pulse: 3000, intensity: 0.7 },
    heat: { color: '#FF6B6B', pulse: 3000, intensity: 0.7 }
  }
};

This mapping converts device states into color, pulse, and intensity, providing a unified protocol for real-time UI feedback.

The core component breakdown reflects a clear scenario-oriented architecture

The entire system can be divided into four layers: spatial awareness, navigation adaptation, device control, and scene transition. This split improves ArkUI component reuse and makes it easier to integrate real IoT data sources and device gateways later.

SpatialFloatNav handles spatial awareness and navigation form switching

SpatialFloatNav is the core component of the entire solution. It infers the user’s current space by using a distributed device list, room signal analysis, and periodic detection, then switches the navigation position, device list, and room theme color accordingly.

Its key value lies in three areas. First, it sorts devices by room priority. Second, it automatically switches between bottom, left, right, or top navigation layouts. Third, it synchronizes the room’s primary color to global storage so other components can consume it.

private switchRoom(roomType: RoomType): void {
  const config = this.roomConfigs.get(roomType);
  if (!config) return;

  this.currentRoom = config; // Switch the current room configuration
  this.currentLightColor = config.primaryColor; // Sync the theme color
  this.loadRoomDevices(roomType); // Reload the device list
  AppStorage.setOrCreate('current_room_color', config.primaryColor); // Broadcast global state
}

This logic consolidates state after a room switch and acts as the key entry point that links navigation, theme, and devices.

DeviceControlPanel turns parameter control into visible feedback

The device control panel is more than a stack of sliders. Its design principle is that control should immediately produce feedback: brightness changes affect glow opacity, air conditioner temperature shifts map to cool or warm colors, and curtain openness changes both visual position and perceived brightness.

This design significantly reduces the user’s dependence on numeric values. It also gives developers a reusable control-item model: switch, slider, button_group, and color_picker, which is enough to cover most home devices.

private getControlColor(control: ControlItem): string {
  if (control.id === 'temperature') {
    const temp = control.value as number;
    if (temp < 20) return '#00D2FF'; // Map low temperature to cool blue
    if (temp < 26) return '#F5A623'; // Map medium temperature to warm yellow
    return '#FF6B6B'; // Map high temperature to hot red
  }
  return this.panelColor;
}

This code implements a direct mapping from numeric values to visual semantics, which improves the perceived responsiveness of controls.

SceneTransition creates an immersive sense of ceremony during scene switching

Scene control often stops at “send a batch of commands,” but this solution adds full-screen transition masks, enlarged scene icons, and flying device-state animations so that switching to “Movie Mode” or “Sleep Mode” feels like entering a new space.

At its core, it wraps a state change in a short, interpretable visual flow. For multi-device orchestration, this kind of feedback greatly reduces uncertainty about whether execution has completed.

async triggerScene(sceneId: string): Promise
<void> {
  const scene = this.scenes.find(s => s.id === sceneId);
  if (!scene || this.isTransitioning) return;

  this.currentScene = scene; // Record the current scene
  this.isTransitioning = true; // Start the transition animation
  await this.runTransition(scene.transitionDuration); // Run the animation
  this.applyDeviceStates(scene.deviceStates); // Sync device states
  this.isTransitioning = false; // End the switch
}

This flow connects scene animation and device orchestration to ensure that visuals and business logic complete in sync.

The page integration model emphasizes centralized state management

As the page container, SmartHomePage is responsible for combining SpatialFloatNav, DeviceControlPanel, and SceneTransition. The implementation itself is not complicated. The real key is using AppStorage as the cross-component state bridge.

This model works well for rapid prototyping: navigation emits events, the control panel updates state, the transition component presents the switching process, and the page layer only orchestrates the flow instead of taking on complex business logic directly.

The recommended state flow looks like this

@State selectedDevice: { name: string, type: string } | null = null;

onDeviceSelect: (device) => {
  this.selectedDevice = { name: device.label, type: device.deviceType }; // Record the current device
  this.showDevicePanel = true; // Open the control panel
}

This code reflects the minimum responsibility of the page layer: receive events, maintain selection state, and trigger presentation.

The engineering value of this solution lies in unifying interaction and visual protocols

From an engineering perspective, “Luminous Home” is not just a UI demo. It is a unified modeling method in which rooms define context, device states become visual encoding, scenes represent batch state transitions, and distributed capabilities handle cross-device synchronization.

As the solution evolves, developers can integrate real RSSI, Bluetooth beacons, Matter gateways, or home control hubs while keeping the current RoomConfig and LightMap structures unchanged. Only the data acquisition layer needs to be replaced.

Distributed synchronization at a glance

class DeviceStateSync {
  async syncToDistributedDevices(state: any): Promise
<void> {
    const devices = distributedDeviceManager.getTrustedDeviceListSync(); // Get trusted devices
    const onlineDevices = devices.filter(d => d.deviceType === 'smartHome'); // Filter online home endpoints
    AppStorage.setOrCreate('sync_light_theme', state); // Sync theme and state
  }
}

This code outlines the basic entry point for multi-device state distribution and works well as a front-end synchronization skeleton before deeper backend integration.

During debugging and production rollout, prioritize sensing accuracy and power efficiency

In real environments, room-detection errors hurt the user experience more than animation quality. Start by collecting signal samples across multiple rooms, establish boundary thresholds, and then tune the refresh frequency of lighting effects. For night mode, proactively reduce particle count and blur intensity.

At the same time, complete your accessibility and privacy strategy. Process location and room data locally whenever possible, and provide voice or text alternatives for state changes so visual interaction does not become the only entry point.

FAQ

FAQ 1: Which HarmonyOS application scenarios are best suited to this approach?

It works well for smart homes, smart hotels, smart offices, and in-vehicle cockpits. Any scenario where spatial context determines the control entry point can reuse this room-mapping and lighting-encoding model.

FAQ 2: Can I still build a prototype without real distributed devices?

Yes. The original implementation already uses a mock device database and randomized room detection. In the early stages, you can validate navigation, lighting effects, and scene workflows with local mock data before gradually integrating real devices.

FAQ 3: What are the most common pitfalls during implementation?

There are three main categories: unstable room detection causing frequent UI switching, excessive use of blur creating performance and power pressure, and too many inter-component state broadcasts making the system hard to maintain. Add debouncing, layered caching, and unified state management to address these issues.

AI Readability Summary: This article reconstructs the “Luminous Home” case study and systematically breaks down how HarmonyOS 6 applies floating navigation, immersive ambient lighting, device-state light encoding, and distributed synchronization in smart home systems. It covers core component design, ArkUI page integration, debugging guidance, and common implementation questions.