Connecting SUSI iOS App to SUSI Smart Speaker
SUSI Smart Speaker is an Open Source speaker with many exciting features. The user needs an Android or iOS device to set up the speaker. You can refer this post for initial connection to SUSI Smart Speaker. In this post, we will see how a user can connect SUSI Smart Speaker to iOS devices (iPhone/iPad).
Implementation –
The first step is to detect whether an iOS device connects to SUSI.AI hotspot or not. For this, we match the currently connected wifi SSID with SUSI.AI hotspot SSID. If it matches, we show the connected device in Device Activity to proceed further with setups.
Choosing Room –
Room name is basically the location of your SUSI Smart Speaker in the home. You may have multiple SUSI Smart Speaker in different rooms, so the purpose of adding the room is to differentiate between them.
When the user clicks on Wi-Fi displayed cell, it starts the initial setups. We are using didSelectRowAt
method of UITableViewDelegate
to get which cell is selected. On clicking the displayed Wi-Fi cell, a popup is open with a Room Location Text field.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.row == 0, let speakerSSID = fetchSSIDInfo(), speakerSSID == ControllerConstants.DeviceActivity.susiSSID { // Open a popup to select Rooms presentRoomsPopup() } }
When the user clicks the Next button, we send the speaker room location to the local server of the speaker by the following API endpoint with room name as a parameter:
http://10.0.0.1:5000/speaker_config/
Refer this post for getting more detail about how choosing room work and how it is implemented in SUSI iOS.
Sharing Wi-Fi Credentials –
On successfully choosing the room, we present a popup that asks the user to enter the Wi-Fi credentials of previously connected Wi-Fi so that we can connect our Smart Speaker to the wifi which can provide internet connection to play music and set commands over the speaker.
We present a popup with a text field for entering wifi password.
When the user clicks the Next button, we share the wifi credentials to wifi by the following API endpoint:
http://10.0.0.1:5000/wifi_credentials/
With the following params-
- Wifissid – Connected Wi-Fi SSID
- Wifipassd – Connected Wi-Fi password
In this API endpoint, we are sharing wifi SSID and wifi password with Smart Speaker. If the credentials successfully accepted by speaker than we present a popup for user SUSI account password, otherwise we again present Enter Wifi Credentials popup.
Client.sharedInstance.sendWifiCredentials(params) { (success, message) in DispatchQueue.main.async { self.alertController.dismiss(animated: true, completion: nil) if success { self.presentUserPasswordPopup() } else { self.view.makeToast("", point: self.view.center, title: message, image: nil, completion: { didTap in UIApplication.shared.endIgnoringInteractionEvents() self.presentWifiCredentialsPopup() }) } } }
Sharing SUSI Account Credentials –
In the method above we have seen that when SUSI Smart Speaker accept the wifi credentials, we proceed further with SUSI account credentials. We open a popup to Enter user’s SUSI account password:
When the user clicks the Next button, we use following API endpoint to share user’s SUSI account credentials to SUSI Smart Speaker:
http://10.0.0.1:5000/auth/
With the following params-
- password
User email is already saved in the device so the user doesn’t have to type it again. If the user credentials successfully accepted by speaker then we proceed with configuration process otherwise we open up Enter Password popup again.
Client.sharedInstance.sendAuthCredentials(params) { (success, message) in DispatchQueue.main.async { self.alertController.dismiss(animated: true, completion: nil) if success { self.setConfiguration() } else { self.view.makeToast("", point: self.view.center, title: message, image: nil, completion: { didTap in UIApplication.shared.endIgnoringInteractionEvents() self.presentUserPasswordPopup() }) } } }
Setting Configuration –
After successfully sharing SUSI account credentials, following API endpoint is using for setting configuration.
http://10.0.0.1:5000/config/
With the following params-
- sst
- tts
- hotword
- wake
The success of this API call makes successfully connection between user iOS Device and SUSI Smart Speaker.
Client.sharedInstance.setConfiguration(params) { (success, message) in DispatchQueue.main.async { if success { // Successfully Configured self.isSetupDone = true self.view.makeToast(ControllerConstants.DeviceActivity.doneSetupDetailText) } else { self.view.makeToast("", point: self.view.center, title: message, image: nil, completion: { didTap in UIApplication.shared.endIgnoringInteractionEvents() }) } } }
After successful connection-
Resources –
You must be logged in to post a comment.