Skip to main content

API for Bosch Indego mower

Project description

PyPI

API for Bosch Indego lawnmowers

Join the Discord channel to discuss around this integration: https://discord.gg/aD33GsP

Usage with Home Assistant

For source files and version handling: https://github.com/jm-73/pyIndego

For PYPI package: https://pypi.org/project/pyIndego/

Basic information needed

Information Description
your_username Your username in the BoschSmartMove app
your_password Your password for the app
your_serial Your Bosch Indego serial (found on the mover, in the mover menu or in the app)

The python library is written for the login method with username (email address) and password. Login with Facebook account is not supported.

Call the API and the mower

Call the API:

IndegoApi_Instance = IndegoAPI(username='your_mail@gmail.com', password='your_password', serial='your_serial')

get-functions

Description for the functions updating data from API and mower. The functions collecting data from only Bosch API does not wake up mower. Functions collecting data from both Bosch API and mower does wake up mower from sleeping.

API Call Bosch API Mower Mower needs to be online
getAlerts X
getGenericData X
getLastComletedCutting X
getOperatingData X X
getState X
getUpdates X X
getUsers X
login X

List of get-functions

getAlerts()

Collect alerts.

Response:
{
    'alm_sn': '123456789', 
    'alert_id': '5d48171263c5345a75dbc017', 
    'error_code': 'ntfy_blade_life', 
    'headline': 'Underhållstips.', 
    'date': '2019-08-05T11:46:26.397Z', 
    'message': 'Kontrollera klippknivarna. Indego har klippt i 100 timmar. Ska den fungera optimalt, kontrollera klippknivarna så att de är i bra skick. Du kan beställa nya knivar via avsnittet Tillbehör.', 
    'read_status': 'unread', 
    'flag': 'warning', 
    'push': True
}

getGenericData()

Collect serial, service counter, name, mowing mode, model number and firmware.

Response:
{
    'alm_sn': '123456789', 
    'alm_name': 'Indego', 
    'service_counter': 60488, 
    'needs_service': False, 
    'alm_mode': 'manual', 
    'bareToolnumber': '3600HA2300', 
    'alm_firmware_version': '00837.01043'
}

getNextcutting()

Collects data on next cutting. Seems to get the last command sent to the mower.

Response:
{
    'mow_next': '2020-05-25T10:00:00+02:00'
}

getOperatingData()

Collect operational data data: battery, runtime, garden data and temperature.

Response:
{
    'runtime': {
        'total': {
            'operate': 86333, 
            'charge': 25845
        }, 
        'session': {
            'operate': 0, 
            'charge': 0
        }
    }, 
    'battery': {
        'voltage': 33.5, 
        'cycles': 1, 
        'discharge': 0.0, 
        'ambient_temp': 17, 
        'battery_temp': 17, 
        'percent': 335
    }, 
    'garden': {
        'id': 7, 
        'name': 1, 
        'signal_id': 1, 
        'size': 625, 
        'inner_bounds': 3, 
        'cuts': 26, 
        'runtime': 82197, 
        'charge': 24860, 
        'bumps': 4650, 
        'stops': 24, 
        'last_mow': 4
    }, 
    'hmiKeys': 1344
}

getState()

Collects state of mower, % lawn mowed, position, runtime, map coordinates.

Response:
{
    'state': 64513, 
    'map_update_available': True, 
    'mowed': 95, 
    'mowmode': 0, 
    'xPos': 68, 
    'yPos': 30, 
    'runtime': {
        'total': {
            'operate': 86327, 
            'charge': 25845
            }, 
        'session': {
            'operate': 4, 
            'charge': 0
            }
        }, 
    'mapsvgcache_ts': 1565381013023, 
    'svg_xPos': 928, 
    'svg_yPos': 264
}

getUpdates()

Check if there are any updates apllicable to the mower.

Response:
{
     'available': False
}

getUsers()

Collect user data.

Response:
{
    'email': 'mail@gmail.com', 
    'display_name': 'Indego', 
    'language': 'sv', 
    'country': 'GB', 
    'optIn': True, 
    'optInApp': True
}

Functions for reading data from locally cached API data

All functions that doesnt contain "get" first in name is collecting data from locally stored variables in the function. No API calls to Bosch or mower.

AlertsCount()

Alertscount
Counts the current alarms on mower.

Response:
1

AlertsDescription()

AlertDescription
Get detailed list of alerts

Response:
[
    {
        'alm_sn': '505703041', 
        'alert_id': '5d5c395c63c5346994440e60', 
        'error_code': 'ntfy_blade_life', 
        'headline': 'Underhållstips.', 
        'date': '2019-08-20T18:18:04.472Z', 
        'message': 'Kontrollera klippknivarna. Indego har klippt i 100 timmar. Ska den fungera optimalt, kontrollera klippknivarna så att de är i bra skick. Du kan beställa nya knivar via avsnittet Tillbehör.', 
        'read_status': 'unread', 
        'flag': 'warning', 
        'push': True
    } 
]

AlmFirmwareVersion()

Alertscount
Gets the mower firmware version.

Response:
smart

AlmMode()

Alertscount
Gets the mower mode.

Response:
smart

AlmName()

Alertscount
Gets the mower instance name.

Response:
Indego

BareToolNumber()

Alertscount
Show the model number of the mower.

Response:
3600HA2300

Battery()

Alertscount
Get battery information.

Response:
???

BatteryPercent()

Alertscount
Get the raw value for percentage left. For Gen 1 this seems to be the battery voltage. For Gen 2 mowers it seems to be the actual percentage left in the battery.

Response:
???

BatteryPercentAdjusted()

Alertscount
Get the adjusted value for percentage left. Calculated for Gen 1 mowers, and the actual percentage value for Gen 2.

Response:
85

BatteryVoltage()

Alertscount
Get the voltage for the battery. For Gen 1 mowers this value seems to be correct. For Gen 2 it seems to be the same value as the percentage left in battery.

Response:
38.6

BatteryCycles()

Alertscount
Dont know what this value is?

Response:
0

BatteryDischarge()

Alertscount
Seems to be the Ah the mower is currently drawing.

Response:
1.2

BatteryAmbientTemp()

Alertscount
Seems to be the ambient temp of the battery.

Response:
28

BatteryTemp()

Alertscount
Seems to be the temp of the battery.

Response:
29

Country()

Alertscount
Show country for the Bosch account.

Response:
GB

Displayname()

Alertscount
Show name for the Bosch account.

Response:
mowername

Email()

Alertscount
Show email adress for the Bosch account.

Response:
mail@gmail.com

FriendlyAlertErrorCode()

Alertscount
Get user friendly alert error code description to be shown in HA GUI.

Response:
Reminder blade life

Garden()

Alertscount
Dont know what this is?

Response:
{
    'garden': {
        'id': 7, 
        'name': 1, 
        'signal_id': 1, 
        'size': 625, 
        'inner_bounds': 3, 
        'cuts': 26, 
        'runtime': 82197, 
        'charge': 24860, 
        'bumps': 4650, 
        'stops': 24, 
        'last_mow': 4
    }
} 

HmiKeysn()

Alertscount
Dont know what this is?

Response:
1344

Language()

Alertscount
Show language for the Bosch account.

Response:
sv

MapSvgCacheTs()

Alertscount
Dont know what this is...

Response:
1565416077642

MapUpdateAvailable()

Alertscount
Show if there is an update of the map image.

Response:
True

ModelDescription()

Alertscount
Get user friendly model name.

Response:
Indego Connect 1000

ModelVoltage()

Alertscount
Get the predefined voltage limits in order to calculate battery percentage.

Response:
{
    'min': '297',
    'max': '369'
}

ModelVoltageMin()

Alertscount
Get the minimum predefined voltage limits in order to calculate battery percentage.

Response:
297

ModelVoltageMax()

Alertscount
Get the maximum predefined voltage limits in order to calculate battery percentage.

Response:
369

Mowed()

Alertscount
Show percentage of lawn mowed

Response:
95

MowerState()

Alertscount
Show current state of mower

Response:
258

MowerStateDescription()

Alertscount
Show simple description of current state of mower. States available are Docked, Mowing, Stuck, Diagnostics mode, End of life, Software update.

Response:
Docked

MowerStateDescriptionDetailed()

Alertscount
Show description in detail of current state of mower.

Response:
Sleeping

MowingModeDescription()

Alertscount
Get the user friendly mowing mode description.

Response:
Smart

NeedsService()

Alertscount
Gets the needs service flag. Dont know when it is used.

Response:
False

NextCutting()

Alertscount
Should get the next planned cutting session. Seems to give the last sent mower command.

Response:
{
    'lastMowSent': '2019-08-20T05:09:51.842+01:00', 
    'lastMowCode': 200
}

OptIn()

Alertscount
Dont know what this are for?

Response:
True

OptInApp()

Alertscount
Dont know what this are for?

Response:
True

Runtime()

Alertscount
Get session and total rutime and charge time in minutes.

Response:
{
    'total': {
        'operate': 86389, 
        'charge': 25891
    }, 
    'session': {
        'operate': 0, 
        'charge': 0
    }
}

RuntimeSession()

Alertscount
Get session runtime and charge time in minutes

Response:
{
    'operate': 4, 
    'charge': 1
}

RuntimeTotal()

Alertscount
Get total runtime and charge time in hours

Response:
{
    'operate': 86389, 
    'charge': 25891
}

Serial()

Get the serial number

Response:
123456789

ServiceCounter()

Alertscount
Get service counter for knives

Response:
73275

SvgxPos()

Alertscount
Show svg x-position of mower.

Response:
928

FirmwareAvailable()

Alertscount
Checks if there are any firmware updates available for the mower.

Response:
false

SvgyPos()

Alertscount
Show svg y-position of mower.

Response:
264

xPos()

Alertscount
Show x-position of mower.

Response:
85

yPos()

Alertscount
Show y-position of mower.

Response:
48

Sending commands

putCommand(command)

Send command. Accepted commands:

Command Description
mow Start mowing
pause Pause mower
returnToDock Return mower to dock

Not working

Not properly implemented yet

getLocation()

Get garden location (GPS coordinates?)

getPredicitiveCalendar()

Get the calender for predicted cutting sessions

getUserAdjustment()

Get the user adjustment of the cutting frequency

getCalendar()

Get the calendar for allowed cutting times

getSecurity()

Get the security settings

getAutomaticUpdate()

Get the automatic update settings

API CALLS

https://api.indego.iot.bosch-si.com:443/api/v1

post
/authenticate

get
/alerts
/alms/<serial>
/alms/<serial>/automaticUpdate
/alms/<serial>/calendar
/alms/<serial>/map
/alms/<serial>/updates
/alms/<serial>/operatingData
/alms/<serial>/predictive
/alms/<serial>/predictive/calendar
/alms/<serial>/predictive/lastcutting
/alms/<serial>/predictive/location
/alms/<serial>/predictive/nextcutting
/alms/<serial>/predictive/useradjustment
/alms/<serial>/predictive/weather
/alms/<serial>/security
/alms/<serial>/state
/users/<userid>

put
/alms/<serial>/automaticUpdate
/alms/<serial>/predictive/calendar
/alms/<serial>/predictive/location
/alms/<serial>/predictive
/alms/<serial>/state
/alms/<serial>/predictive/useradjustment

delete
/alerts/<alertid>

Project details


Release history Release notifications | RSS feed

This version

0.8.3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyIndego-0.8.3.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyIndego-0.8.3-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file pyIndego-0.8.3.tar.gz.

File metadata

  • Download URL: pyIndego-0.8.3.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for pyIndego-0.8.3.tar.gz
Algorithm Hash digest
SHA256 ee808f82d6a4f20b4405b5aff9ab545359fa373baf3b47f90bbb19a4c6c86720
MD5 e3d5adec9062269e68cfdd4bef3ffd1d
BLAKE2b-256 3050298e00b9592e0c27e43b9a7c23cb9ee8310b071358cd7adbbfd3d8a437d8

See more details on using hashes here.

File details

Details for the file pyIndego-0.8.3-py3-none-any.whl.

File metadata

  • Download URL: pyIndego-0.8.3-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for pyIndego-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1ae66e877840557e222fec030b1444d3798228a56b9811d092a84f17c5e4774f
MD5 8b237169fbc0c6a525d282b95296093e
BLAKE2b-256 266295eaf514083191b451bf0bc5f2b8c10ac13583bb0bc156a48b49fc9f761f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page