Gaai

maintainer GitHub Discussions GitHub Issues or Pull Requests

android android studio kotlin compose

beta

GitHub Release GitHub Release Date GitHub License

GitHub last commit GitHub contributors GitHub commit activity (master)

Nexxtender Charger android app

The goal of this app is to control the Nexxtender Home and Nexxtender Mobile charger without requiring the Android Nexxtmove app. The Android Nexxtmove app is the official app for controlling the Nexxtender chargers and for syncing billing information to the Nexxtmove.me website for refunding. Both the Nexxtmove app and the Nexxtmove.me website require a username and password to login. Without it, it is impossible to use the Nexxtmove app and therefore impossible to operate the Nexxtender Home charger, which has no UI or input device on its own. If you no longer have a valid username and password for the Nexxtmove app, using Gaai is an option. Other alternatives are

Gaai’s source code is hosted on Github.

Gaai?

Choosing a short distinctive name for a project is always difficult. A bird name was chosen. Gaai is Dutch for the Eurasian jay.

Features

The following features are not available:

Installing Gaai

There are 3 ways to install Gaai on your Android phone:

  1. Install Gaai using APK file
  2. Install Gaai using Android Studio on Windows
  3. Install Gaai using Google Play Store

Install Gaai using APK file

For most people, this is the preferred way of installing.

An APK file generated from Gaai can be installed as described in How to install third-party apps without the Google Play Store.

Gaai APK files are available for the official releases in the GitHub repo. Select a release, open its assets and select the APK file.

If the selected APK is a -debug version, it will install without questions. If it is a -release version, it is signed with the Gaai signature key and Android will perform some tests. If Google Play Protect recommends to scan the app, select “scan app” and wait for the scanning to complete. If the scanning is complete, select “Install app”.

Install Gaai using Android Studio on Windows

Gaai can be installed on your Android phone using Android Studio. See Environment setup. Only used by developers during development.

Install Gaai using Google Play Store

Once Gaai is sufficiently stable, distributing it via Google Play Store is an option to consider. For the moment it is not available.

Getting Started

Bluetooth

Gaai uses BLE to connect to the Nexxtender Home or Nexxtender Mobile, so make sure that Bluetooth is enabled on your mobile device.

In addition, Gaai requires some Bluetooth related permissions in order to function. When Gaai is ran for the first time, it will ask for the required permissions. In that case, please press the “Request permissions” button, and then press “Allow”. If you press “Don’t Allow”, Gaai will insist that it needs the permissions to continue, but recent Android versions only allow an app to ask only once for permissions. The only way out in that case is to go to Android Settings -> Apps -> Gaai -> Permissions. In the “Not Allowed” section you will find the permission “Nearby devices”: click on it and press “Allow”. You now have granted the permission.

Depending on the Android version, the following permissions are required:

Note that permission naming is confusing in Android! Although the Gaai application code asks for the permissions BLUETOOTH_SCAN and BLUETOOTH_CONNECT in Android 12 and up:

Bluetooth pairing

The first time that Gaai connects to a Nexxtender Home or Nexxtender Mobile device, Gaai will show a pop-up asking to enter the 6-digit PIN. After entering the PIN, pairing completes.

See PIN value for the PIN value.

If the mobile phone user later removes the Nexxtender Home or Nexxtender Mobile device from the “Bluetooth” menu in Android, the pairing information is lost and Gaai will not automatically open the pairing dialog again. The only options to restore from this situation are either of:

PIN value

The Nexxtender charger installer that installed your charger and connected it with the Nexxtmove app on your mobile phone, has paired it with the Nexxtender charger using the correct PIN value. In general, the installer will not have provided you with that PIN value. As long as you use the same mobile phone to connect to the Nexxtender charger, both devices should stay paired and there is no issue. But when you need to move to another phone, you need the PIN value. If you don’t have the PIN code, you can provide the Gaai GitHub repository owner with the PN and SN values as mentioned in Add a Nexxtender charger device and he will calculate it for you.

First start

When Gaai is started the first time, it has no Nexxtender devices in its database yet. Gaai will display a home screen like the following:

Empty DB

At the bottom right is a button with a “+” that allows to add a Nexxtender device.

Add a Nexxtender device

When tapping the “+” in the home screen, the following dialog box appears:

Device Entry Empty

The Scan device button stays grayed out until a valid PN and SN are entered. The PN and SN of your *Nexxtender * can be found at the bottom of your device, as is shown in

serial.

When a valid PN and SN are entered, the Scan Device button become active.

Device Entry Empty

Make sure that you are close to the Nexxtender device and that no other device is connected with it over BLE. Tap the Scan Device button. Scanning will start and the button will now show Cancel Scanning allowing you to cancel the scan if it takes to long.

Device Entry Empty

If you entered the correct PN and SN, Gaai should find the Nexxtender in less then a few seconds and show the following screen.

Device Entry Empty

Gaai shows a card with the details of the found device.

Press Save to save this device in Gaai’s database. This will bring you back to the previous screen, now showing one device.

If the device that you scanned was already in Gaai’s database, you will see

Device Entry Empty

Gaai will not let you create duplicates.

List of Devices

As soon as the database contains at least one device, Gaai shows a list of all registered devices at startup as shown in the next picture.

Device Entry Empty

In this screen you can

Device details

When clicking on a device card in List of Devices, Gaai tries to connect to the device and shows the following screen.

Device Detail

The complete screen is larger then the phone’s screen. You must scroll up to see the other parts. When the screen opens, only the labels are shown without data values. The values are populated as soon as Gaai has established the connection and read all the data. That can take 5 seconds. If no data appears after a few seconds, it might be that another BLE client is still connected to the device. It could also be a problem in Gaai. It is normally solved by going back to the previous screen using the left arrow at the top left of the screen, and try again.

The card on the top is the same one as from the List of Devices.

The next cards show the device name and the Device Information. These contain general BLE information, not specific for a Nexxtender charger.

The next cards contain specific Nexxtender charger information as reported by the device. The Nexxtender Home supports all cards. The Nexxtender Mobile only supports the Basic Data card.

Basic Data

The Basic Data card shows Basic Nexxtender Home and Nexxtender Mobile charging data.

Basic Data Card

Field Description
Seconds Number of seconds since start of charging
Discriminator Possible discriminator states: STARTED, CHARGING, STOPPED
Status Possible states: PLUGGED, CHARGING, FAULT
Energy Total energy in kWh charged during this session
Phase count Charging Phase Count

Grid Data

The Grid Data card shows Grid Data as measured by the Nexxtender Home. It is not supported by the Nexxtender Mobile.

Grid Data Card

Field Description
Timestamp Current time
L1 Current Grid phase L1 current
L2 Current Grid phase L2 current
L3 Current Grid phase L3 current
Consumed Total grid power consumption in Wh during this quarter. Set to 0 when ‘‘interval’’ is set to 0.
Interval Counts the seconds in the current quarter. Is set to 0 every multiple of a quarter (hh:00, hh:15, hh:30, hh:45)

Car Data

The Car Data card shows Car Data as measured by the Nexxtender Home. It is not supported by the Nexxtender Mobile.

Car Data Card

Field Description
Timestamp Current time
L1 Current Car phase L1 current
L2 Current Car phase L2 current
L3 Current Car phase L3 current
L1 Power Car phase L1 power consumption
L2 Power Car phase L2 power consumption
L3 Power Car phase L3 power consumption

Advanced Data

The Advanced Data card shows Advanced Data as measured by the Nexxtender Home. It is not supported by the Nexxtender Mobile.

Advanced Data Card

Field Description
Timestamp Current time
I Available Available current
Grid Power Total power consumption from the grid
Car Power Total power consumption by the car
Authorization Status Possible states: UNAUTHORIZED, AUTHORIZED DEFAULT, AUTHORIZED ECO, AUTHORIZED MAX, CHARGE STOPPED IN APP, CHARGE PAUSED
Error Code Error code returned by the Nexxtender Home

Configuration

The Configuration card shows the data that can be configured in the Nexxtender Home. It is not supported by the Nexxtender Mobile. In theory all these fields are configurable and can be changed. Gaai only allows to change the fields marked with edit outline. There are three different layouts, depending on the Firmware Version.

Configuration 1.0

This is the layout for Firmware Version below 1.1.0.

Configuration Card1_0

Field Description
Default Mode Possible default charging modes: ECO_PRIVATE, MAX_PRIVATE, ECO_OPEN, MAX_OPEN
Max Grid Maximum allowed grid consumption. Set this equal or smaller to the value of the main grid fuses. Set this to a lower value if you have a peak tariff contract
Safe Minimum charging current for the device. Certified chargers are required to provide a minimum of 6A
Weekdays Off peak period for week days
Weekend Off peak period for weekend days

Configuration 1.1

This is the layout for Firmware Version from 1.1.0 to 3.50. The fields “Max Device” and “Network Type” are added compared to the 1.0 format.

Configuration Card1_1

Field Description
Default Mode See Configuration 1.0
Max Grid See Configuration 1.0
Safe See Configuration 1.0
Weekdays See Configuration 1.0
Weekend See Configuration 1.0
Max Device Maximum allowed charging speed in A for the EV device. Safe <= Max Device <= Max Grid
Network Type Mono/Tri+N or Tri

For the field “Network Type” Gaai does not implement the option to change the value, as it is probably not wise to change this value if you don’t know what you are doing.

Configuration CBOR

This is the layout for Firmware Version above and including 3.50. The fields “I EVSE Min” and “I Capacity” are added compared to the 1.1 format. Most other fields from versions 1.0 and 1.1 have a different name in CBOR format.

Configuration CardCBOR

Field Description
Charge Mode See Default Mode in Configuration 1.1
I Max See Max Grid in Configuration 1.1
I Level 1 See Safe in Configuration 1.1
Weekdays See Configuration 1.1
Weekend See Configuration 1.1
I EVSE Max See Max Device in Configuration 1.1
Phase Seq (Network Type) See Network Type in Configuration 1.1
I EVSE Min Not used
I Capacity Peak grid current limit. I Level 1 <= I Capacity <= I Max. You can set this to a lower value if you have a peak tariff contract. Configurations 1.0 and 1.1 behave as if I Capacity == Max Grid

For the field “I EVSE Min” Gaai does not implement the option to change the value, as the value does not seem to be used by the Nexxtender Home.

Changing configuration

Clicking on edit outline next to “Default Mode”/”Charge Mode” gives the following dialog screen:

Default mode dialog

Select the required default charging mode and press OK to confirm. OK is grayed out if the choice is still “Unknown”. Pressing Cancel does not change anything.

Note that setting the default mode to an ECO variant does not seem to have an effect. The Nexxtender charger does accept it, but if you start charging in ECO mode, it will activate MAX mode anyhow. The only way the start ECO mode is to explicitly start it with the Start Charge ECO button in the screen from section Loader. This seems to be an issue with the charger; I have the same issue when using the Nexxtmove app.

Clicking on edit outline next to any of the fields with a value expressed in A gives the following dialog screen:

Ampere Slider Dialog

Select the required current value in Amperes using the slider and press OK to confirm. Pressing Cancel does not change anything.

Clicking on edit outline next to “Weekdays” or “Weekend” gives the following dialog screen:

Tou Period Dialog

Change both Start and End times by clicking edit outline next to it. A time picker dialog opens to select a time:

Tou Time Picker Dialog

After changing the Start and End times, press OK to confirm. Pressing Cancel does not change anything.

Time

The Time card allows to sync the time of the Nexxtender Home with the time on the phone. It is not supported by the Nexxtender Mobile.

Time Card

Clicking “Get Time” reads the current time from the Nexxtender Home.

Time Card Get Time

Clicking “Sync Time” writes the current phone time to the Nexxtender Home.

Loader

The Loader card allows to start or switch the Nexxtender Home to charge in a specific mode or to stop it. It is not supported by the Nexxtender Mobile.

Loader Card

Click on a button and the Nexxtender Home immediately switches to the corresponding state.

Badges

The Badges card allows to go to the Badge list screen.

Badges Card

Click on the button to go to the Badge list screen.

Badge list

This screen shows the list of RF badges registered by the charger. Gaai does not keep a database of registered badges; it only shows the live list as known by the charger. If there are no badges registered yet, the screen will look like:

Empty Badge List

If there are already badges registered, the screen will show them:

Example Badge List

Each row shows 1 registered badge. Each badge has an ISO/IEC 14443-3 UID number that can either be 4, 7 or 10 bytes in length. Each badge also has a Charge Type that indicates if this badge will start charging in MAX mode or DEFAULT mode. The BLE protocol with the charger does unfortunately not report this Charge Type, so Gaai will report them as UNKNOWN.

In this screen you can

Make sure that you are close to the Nexxtender charger and that no other device is connected with it over BLE.

Links

Useful information can be found at

License

This project is licensed under the GNU AGPLv3 License. See the LICENSE file for details.

Acknowledgements

Supported Android versions and Nexxtender Home/Mobile firmware versions

In theory Gaai should work from API 26 (Android 8) and higher, but these are not all tested. For the Nexxtender Home firmware versions, there is insufficient documentation available to assess if it will work for older versions.

The following table shows the version combinations for which it was confirmed that it works. Basic scenarios seems to work, but further testing is required for other scenarios. The first row is the main combination used for testing and debugging during development. The other rows are confirmed by other users.

Phone Model Android API (version) Nexxtender Home firmware version Nexxtender Mobile firmware version
Google Pixel 6 Pro 34 (14) 2.53.2  
Google Pixel 8 Pro 35 (15) 2.53.2  
Nokia X10 34 (14) 2.53.2  
OnePlus Nord 2 33 (13) 3.65.0  
Samsung Galaxy J7 27 (8.1) 3.65.0  

There are currently no combinations for which it is confirmed that it does not work.

Disclaimer

The developer

Gaai is only tested on a the phone versus Nexxtender Home/Mobile versions as indicated in section Supported Android versions and Nexxtender Home firmware versions

At this point Gaai should be considered an alpha app, for trials only. It is currently not tested on sufficient combinations, so please expect to spend the necessary debugging time. If despite the preceding warnings, you decide to use Gaai, that is on your own responsibility. But we will do our best to help you.