Skip to main content

Cookbook

Task-based SSH recipes for routine provisioning operations.

v5.33.5
Applies to
operatorsmanufacturers
UpdatedSep 10, 2026

Cookbook

This page covers SSH-based provisioning operations. It follows the recommended provisioning approach: configure manually, validate, then scale.

1 Audience and assumptions

We assume the following:

  • you are a mid- or senior-level software engineer with linux command line knowledge
  • you are working on Windows 11
  • you are using PowerShell
  • SSH access to the controller is already available

The SSH-based provisioning method will work on other host operating systems and with other terminal applications as well, but the instructions in this documentation are tailored to the above assumptions for simplicity. Minor adjustments may be needed.

2 General recipes


  • Run on Computer (PowerShell)
    ssh charge@192.168.123.123
  • Run on Controller
    cd /home/charge/persistency
  • For filenames and parameter mapping, see here.

    Run on Controller
    ls *_*
  • For filenames and parameter mapping, see here.

    Run on Controller
    head -n 1 *_*

  • For filenames and parameter mapping, see here.

    Run on Controller
    head -1 
  • Run on Controller
    sync
    tip

    The sync command ensures that all pending changes are written to disk. Make sure to always run it before rebooting the Charge Controller.

  • Run on Controller
    reboot
    tip

    Make sure to always run sync before rebooting the Charge Controller.

3 Configuration recipes




  • Sets the active value of a configuration parameter. The controller uses the _custom file as the current runtime value.

    Filename: <parameterKey>_custom

    Run on Computer (PowerShell)
    $Value = ''
    Set-Content -Path .\_custom -Value $Value -NoNewline
    scp -O .\_custom charge@192.168.123.123:/home/charge/persistency/_custom

    On the controller: verify:

    Run on Controller
    head -1 /home/charge/persistency/_custom



  • Sets the custom default value of a configuration parameter. This is the value restored after a factory reset.

    Filename: <parameterKey>_custom_default

    Role
    Can set a custom default?
    #
    Manufacturer
    No, this wouldn't come with any benefit either as the Operator's reset will reset to the Manufacturer values directly. No need for Manufacturer defaults. See here for more on this.
    #
    Operator
    Yes — write the value to <parameterKey>_custom_default.
    Run on Computer (PowerShell)
    $Value = ''
    Set-Content -Path .\_custom_default -Value $Value -NoNewline
    scp -O .\_custom_default charge@192.168.123.123:/home/charge/persistency/_custom_default

    On the controller: verify:

    Run on Controller
    head -1 /home/charge/persistency/_custom_default


  • Filename: ChargeBoxIdentity_custom

    Run on Computer (PowerShell)
    $Value = 'DE*ABC*E1234567*1'
    Set-Content -Path .\ChargeBoxIdentity_custom -Value $Value -NoNewline
    scp -O .\ChargeBoxIdentity_custom charge@192.168.123.123:/home/charge/persistency/ChargeBoxIdentity_custom


  • Filename: OCPPBackendJSONURL_custom

    Run on Computer (PowerShell)
    $Value = 'ws://backend.example.com/OCPPJProxy/v16/'
    Set-Content -Path .\OCPPBackendJSONURL_custom -Value $Value -NoNewline
    scp -O .\OCPPBackendJSONURL_custom charge@192.168.123.123:/home/charge/persistency/OCPPBackendJSONURL_custom


  • Filename: SerialNumberManufacturer_custom

    Run on Computer (PowerShell)
    $Value = '1234567890'
    Set-Content -Path .\SerialNumberManufacturer_custom -Value $Value -NoNewline
    scp -O .\SerialNumberManufacturer_custom charge@192.168.123.123:/home/charge/persistency/SerialNumberManufacturer_custom
    Run on Controller
    ls -l /home/charge/persistency/SerialNumberManufacturer_custom
    sync
    reboot


  • Passwords must be saved as Base64 with padding (standard RFC 4648 encoding, including trailing = characters). Do not strip padding. Ensure your password itself does not contain characters that produce ambiguous Base64 output — see the tip below.

    tip

    For simplicity, you can restrict your password generation to alphanumeric characters (A-Z, a-z, 0-9). This ensures that the generated password can always be safely Base64-encoded.

    danger

    Do not run the command below as-is. Use your own strong password generator and replace the password variable with your generated password. Make sure to keep the password secure and out of reach of unauthorized parties.

    Run on Computer (PowerShell)
    $FileName = 'ManufacturerPwd_custom'
    $Password = ''
    $Bytes = [System.Text.Encoding]::UTF8.GetBytes($Password)
    $Base64 = [Convert]::ToBase64String($Bytes)
    Set-Content -Path ".\$FileName" -Value $Base64 -NoNewline


  • Filename: ManufacturerPwd_custom

    danger

    Do not run the command below as-is. Use your own strong password generator and replace the password variable with your generated password. Make sure to keep the password secure and out of reach of unauthorized parties.

    Run on Computer (PowerShell)
    scp -O .\ManufacturerPwd_custom charge@192.168.123.123:/home/charge/persistency/ManufacturerPwd_custom
    Run on Controller
    ls -l /home/charge/persistency/ManufacturerPwd_custom
    sync
    reboot


  • Filename: OperatorPwd_custom_default

    The operator password is set as a custom default (_custom_default). By setting only the default, the operator is prompted to set their own password on first login, as intended by RED 3.3.

    danger

    Do not run the command below as-is. Use your own strong password generator and replace the password variable with your generated password. Make sure to keep the password secure and out of reach of unauthorized parties.

    Run on Computer (PowerShell)
    scp -O .\OperatorPwd_custom_default charge@192.168.123.123:/home/charge/persistency/OperatorPwd_custom_default
    Run on Controller
    ls -l /home/charge/persistency/OperatorPwd_custom_default
    sync
    reboot


  • Filename: InstallerPwd_custom_default

    The installer password is set as a custom default (_custom_default). By setting only the default, the installer is prompted to set their own password on first login, as intended by RED 3.3.

    danger

    Do not run the command below as-is. Use your own strong password generator and replace the password variable with your generated password. Make sure to keep the password secure and out of reach of unauthorized parties.

    Run on Computer (PowerShell)
    scp -O .\InstallerPwd_custom_default charge@192.168.123.123:/home/charge/persistency/InstallerPwd_custom_default
    Run on Controller
    ls -l /home/charge/persistency/InstallerPwd_custom_default
    sync
    reboot


  • Filename: OCPPMeterType_custom

    For valid numeric values, see here.

    Run on Computer (PowerShell)
    $Value = ''
    Set-Content -Path .\OCPPMeterType_custom -Value $Value -NoNewline
    scp -O .\OCPPMeterType_custom charge@192.168.123.123:/home/charge/persistency/OCPPMeterType_custom


  • Filename: SecondMeterType_custom

    For valid numeric values, see here.

    Run on Computer (PowerShell)
    $Value = ''
    Set-Content -Path .\SecondMeterType_custom -Value $Value -NoNewline
    scp -O .\SecondMeterType_custom charge@192.168.123.123:/home/charge/persistency/SecondMeterType_custom

4 Device identity recipes

  • Based on your needs, the firmware version can be read in several ways:

    Run on Controller
    opkg list-installed | cut -d' ' -f3

    Example output: 5.34.4-21648

    tip

    cut -d' ' -f3 keeps only the third word from the line. Here, that is the firmware version.

  • Run on Controller
    head -n 1 /sys/class/net/eth0/address

    This is the MAC address of the controller's Ethernet interface (eth0).

  • Run on Controller
    head -n 1 /dev/ebee_variant
    • Manufacturer Serial Number:
    Run on Controller
    head -n 1 /home/charge/persistency/SerialNumberManufacturer_custom
    • Controller Serial Number:
    Run on Controller
    head -n 1 /home/charge/persistency/SerialNumber_custom
  • Run on Controller
    head -n 1 /tmp/.ebee_version.txt
    head -n 1 /dev/ebee_variant
    head -n 1 /sys/class/net/eth0/address
    head -n 1 /home/charge/persistency/SerialNumber_custom

5 Firmware update recipes



  • Run on Computer (PowerShell)
    scp -O .\ charge@192.168.123.123:/home/charge/

  • Run on Controller
    opkg install /home/charge/

    Updates triggered through OPKG will automatically schedule a reboot. You do not need to manually reboot the controller after running this command.

    #
    First timer
    5 sec
    #
    Second timer
    2 min
    #
    Third timer
    30 min

    The second and third timers are failsafes that will reboot the controller if the first timer fails to do so.

    • Option 1:
    Run on Controller
    head -n 1 /tmp/.ebee_version_info.txt

    Example output: 5.33.0-21510-57641b50ef

    • Option 2:
    Run on Controller
    head -n 1 /tmp/.ebee_version.txt

    Example output: 5.33.0-21510