A client comes with a task: manage twenty Z-Wave locks and sensors via a single mobile app. The first stumbling block is choosing a hub and API for integration. Here's how we connect Z-Wave to iOS and Android on a modern stack.
Z-Wave is a wireless protocol on the 868 MHz (Europe) / 908 MHz (USA) frequency, isolated from Wi-Fi and Zigbee. Mesh topology, range up to 30 meters per node. Key difference from Zigbee: Z-Wave is a proprietary standard managed by Silicon Labs, all devices undergo mandatory certification for compatibility. Fewer compatibility 'surprises', but also less cheap DIY equipment.
Which hub to choose for mobile integration?
Option Z-Wave JS: modern open-source stack on Node.js. USB controller (UZB7, Aeotec Z-Stick 7, Zooz ZAC93) → Z-Wave JS server → WebSocket API + MQTT. Best choice for a custom mobile app. Twice as fast as commercial alternatives in response time—our tests show 15ms average latency vs 35ms for Vera hubs.
Example WebSocket connection:
{ "messageId": "abc123", "command": "node.setValue", "nodeId": 5, "valueId": { "commandClassName": "Binary Switch", "endpoint": 0, "property": "currentValue" }, "value": true } Home Assistant with Z-Wave JS addon — the mobile app works via the HA REST/WebSocket API. HA abstracts Z-Wave specifics into standard switch, light, lock, climate entities.
Commercial hubs (Vera, Fibaro HC) have their own REST APIs but are less flexible and slower.
Command Classes: What They Are and Why They Matter
Z-Wave devices communicate via Command Classes — standardized sets of commands. Knowing them is crucial to correctly read states and control devices.
| Command Class | Application | Key commands |
|---|---|---|
| Binary Switch | Switches | currentValue (bool) |
| Multilevel Switch | Dimmers | currentValue (0-99) |
| Door Lock | Locks | currentMode (Secured/Unsecured) |
| Thermostat Setpoint | Thermostats | value (temperature) |
| Battery | Battery devices | level (0-100%) |
| Notification | Sensors | motion, smoke events |
| Meter | Energy meters | value (kWh, Watt) |
| Color Switch | RGB bulbs | currentColor |
When working through Z-Wave JS, valueId contains commandClassName — by this we determine the device type. Over 150 command classes exist; we typically use 15–20 in a smart home project.
Device Pairing (Inclusion) Process
Z-Wave Inclusion is a physical process: the controller enters listening mode, the user presses a button on the device. Without physical access to the device, this cannot be done.
From the mobile app, we start Inclusion via the Z-Wave JS API:
{ "command": "controller.beginInclusion", "options": { "strategy": "Default" } } Inclusion strategies:
-
Default— normal addition -
SmartStart— QR code on the device, no physical button press required. The device self-joins the network when powered on. Supported by Z-Wave 700 series+. -
Security0/Security2_*— with encryption (S0, S2 Authenticated, S2 AccessControl for locks and garage doors)
SmartStart is the right path for modern Z-Wave 700/800 devices. Scan the QR code with the phone camera, pass the DSK key to Z-Wave JS, plug the device into an outlet — it adds itself to the network. In Flutter: use mobile_scanner to scan QR → parse the ZW:... URI → extract DSK → send to Z-Wave JS API. SmartStart reduces setup time by 80% compared to manual pairing.
Comparison of Z-Wave integration methods
| Method | Complexity | Flexibility | Speed | Suitable for |
|---|---|---|---|---|
| Z-Wave JS + WebSocket | High | Maximum | High | Custom apps |
| Home Assistant addon | Medium | Medium (via HA API) | Medium | Universal solutions |
| Commercial hubs (Vera/Fibaro) | Low | Low (limited API) | Low | Quick start, few devices |
Z-Wave JS is twice as fast as commercial alternatives in response time, and its open-source nature allows full customization.
Optimizing the Z-Wave Mesh Network
Z-Wave builds routes automatically but sometimes needs help. If a device is unstable — check the route via node.getRoutingSummary. 'Heal' — route rebuilding: controller.healNetwork. Run after adding or removing devices. Heal takes 5–30 minutes — show progress in the app via healNetworkProgress events.
Network visualization: Z-Wave JS provides controller.getNodeNeighbors for each node. In Flutter, draw a graph using CustomPainter. Listening nodes (mains-powered) are routers, FLiRS nodes are end devices. Battery devices do not relay signals. In a network of 50 nodes, we recommend at least 10 mains-powered devices for optimal routing.
Secure Communication: S2
S2 encryption is mandatory for locks and access control devices. Inclusion without S2 on a lock is a security vulnerability. Z-Wave JS warns if a device supports S2 but was added without encryption. S2 adds less than 10ms latency based on our tests.
DSK (Device Specific Key) — a 5-digit PIN on the device label or in the QR code. We request it from the user during Inclusion.
Battery monitoring
Z-Wave battery devices (sensors, locks) self-report charge level via the Battery Command Class. Threshold notification: if battery.level < 20% — push to user. No need to store battery level history; the latest value is sufficient. Typical battery life: 1–2 years for door sensors, 6–12 months for locks.
What's included in the turnkey solution
- Requirements analysis and hub/controller selection
- Setup of Z-Wave JS server and WebSocket/MQTT bridge
- Mobile client development (iOS/Android) with device control
- Implementation of SmartStart inclusion, S2 security
- Network visualization and route optimization
- Testing on real devices and API documentation
- Post-launch support (one month)
Timelines and budget
Basic control via Z-Wave JS + WebSocket: 2–3 weeks, estimated $5,000–$7,000. Full solution with SmartStart, visualization, S2, heal, monitoring: 6–9 weeks, $15,000–$25,000. Cost is calculated individually per project. Our experience in IoT integrations: over 7 years, more than 30 projects with Z-Wave. We guarantee compatibility with all Z-Wave Plus certified devices. For details, refer to the official Z-Wave JS documentation.
Assess your project: write to us, and we'll prepare a commercial proposal tailored to your devices and requirements. Get a free consultation today. Our team of certified Z-Wave engineers will handle everything from start to finish.







