[boschindego] Rewrite to avoid external dependencies (#12905)

* Rewrite to avoid external dependencies

Fixes #12720

* Improve session handling
* Avoid reauthorization for each command/poll
* Further improve session handling
* Refactor SSO cookie handling
* Optimize getting DeviceStatus for unknown status code

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
Jacob Laursen
2022-06-14 22:51:26 +02:00
committed by GitHub
parent fd9fa722d3
commit 960be6bc83
35 changed files with 1721 additions and 239 deletions

View File

@@ -1,69 +1,83 @@
# Bosch Indego Binding
This is the Binding for Bosch Indego Connect lawn mowers.
Thank´s to zazaz-de who found out how the API works. His [Java Library](https://github.com/zazaz-de/iot-device-bosch-indego-controller) made this Binding possible.
Thank´s to zazaz-de who found out how the API works.
His [Java Library](https://github.com/zazaz-de/iot-device-bosch-indego-controller) made this Binding possible.
## Configuration of the Thing
## Thing Configuration
Currently the binding supports ***indego*** mowers as a thing type with this parameters:
Currently the binding supports ***indego*** mowers as a thing type with these configuration parameters:
| parameter | datatype | required |
|-----------|----------|--------------------------------|
| username | String | yes |
| password | String | yes |
| refresh | integer | no (default: 180, minimum: 60) |
The refresh interval is specified in seconds.
A possible entry in your thing file could be:
```java
boschindego:indego:lawnmower [username="mail@example.com", password="idontneedtocutthelawnagain", refresh=120]
```
| Parameter | Description |
|-----------|----------------------------------------------------------------------|
| username | Username for the Bosch Indego account |
| password | Password for the Bosch Indego account |
| refresh | Specifies the refresh interval in seconds (default 180, minimum: 60) |
## Channels
| item-type | description | |
| Channel | Item Type | Description |
|--------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------|
| state | Number | You can send commands to this channel to control the mower and read the simplified state from it (1=mow, 2=return to dock, 3=pause) |
| errorcode | Number | Errorcode of the mower (0=no error, readonly) |
| statecode | Number | Detailed state of the mower. I included English and German map-files to read the state easier (readonly) |
| errorcode | Number | Error code of the mower (0=no error, readonly) |
| statecode | Number | Detailed state of the mower (readonly) |
| textualstate | String | State as a text. (readonly) |
| ready | Number | Shows if the mower is ready to mow (1=ready, 0=not ready, readonly) |
| mowed | Dimmer | Cut grass in percent (readonly) |
For example you can use this sitemap entry to control the mower manually:
### State Codes
```perl
Switch item=indegostate mappings=[ 1="Mow", 2="Return",3="Pause" ]
| Code | Description |
|-------|---------------------------------------------|
| 0 | Reading status |
| 257 | Charging |
| 258 | Docked |
| 259 | Docked - Software update |
| 260 | Docked |
| 261 | Docked |
| 262 | Docked - Loading map |
| 263 | Docked - Saving map |
| 513 | Mowing |
| 514 | Relocalising |
| 515 | Loading map |
| 516 | Learning lawn |
| 517 | Paused |
| 518 | Border cut |
| 519 | Idle in lawn |
| 769 | Returning to dock |
| 770 | Returning to dock |
| 771 | Returning to dock - Battery low |
| 772 | Returning to dock - Calendar timeslot ended |
| 773 | Returning to dock - Battery temp range |
| 774 | Returning to dock |
| 775 | Returning to dock - Lawn complete |
| 776 | Returning to dock - Relocalising |
| 1025 | Diagnostic mode |
| 1026 | End of life |
| 1281 | Software update |
| 64513 | Docked |
## Full Example
### `indego.things` File
```
boschindego:indego:lawnmower [username="mail@example.com", password="idontneedtocutthelawnagain", refresh=120]
```
## Meaning of the numeric statecodes
### `indego.items` File
You can use this as .map file
```text
0=Reading status
257=Charging
258=Docked
259=Docked - Software update
260=Docked
261=Docked
262=Docked - Loading map
263=Docked - Saving map
513=Mowing
514=Relocalising
515=Loading map
516=Learning lawn
517=Paused
518=Border cut
519=Idle in lawn
769=Returning to Dock
770=Returning to Dock
771=Returning to Dock - Battery low
772=Returning to dock - Calendar timeslot ended
773=Returning to dock - Battery temp range
774=Returning to dock
775=Returning to dock - Lawn complete
776=Returning to dock - Relocalising
```
Number Indego_State { channel="boschindego:indego:lawnmower:state" }
Number Indego_ErrorCode { channel="boschindego:indego:lawnmower:errorcode" }
Number Indego_StateCode { channel="boschindego:indego:lawnmower:statecode" }
String Indego_TextualState { channel="boschindego:indego:lawnmower:textualstate" }
Number Indego_Ready { channel="boschindego:indego:lawnmower:ready" }
Dimmer Indego_Mowed { channel="boschindego:indego:lawnmower:mowed" }
```
### `indego.sitemap` File
```
Switch item=Indego_State mappings=[1="Mow", 2="Return",3="Pause"]
```