# Integration - Beatbot

**URL:** <https://community.gladysassistant.com/t/integration-beatbot/11057>\
**Category:** Développement\
**Tags:** integration-externe\
**Created:** [October 12, 2026, 8:38am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057 "2026-10-12T08:38:10Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 12, 2026, 8:38am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/1 "2026-10-12T08:38:10Z")

</div>

Hello everyone,

I present to you **Beatbot** , a new external integration for Gladys that allows you to control and monitor **Beatbot pool robots** (AquaSense, Sora ranges…) and their **cleaning station**.

![Beatbot for Gladys](https://raw.githubusercontent.com/prohand/gladys-beatbot/main/cover.png)

## What it does

For each robot in your Beatbot account, depending on what the robot offers:

- **Status** : stopped, cleaning, paused, returning, charging, at base, error
- **Start / pause** cleaning
- **Return to base** (or to the waterline to retrieve it)
- **Battery** and **charging in progress**
- **Cleaning mode** (bottom, walls, waterline… with the names given by Beatbot)
- **Child safety** and **do not disturb** (voice messages cut off)
- A **cloud / unreachable** badge on each robot

The states arrive **in real time** (Beatbot event stream), with a complete reread every 10 minutes to catch up on any network outage.

## Scenes (Gladys 5.1+)

**Triggers:**

- **Pool robot status changed** (filter possible on the robot and the new status)
- **Pool cleaning finished** , with the **cycle duration** and remaining battery
- **Pool robot fault** : stuck robot, full basket, motor fault, water too cold… (filter possible on the faults that interest you)

**Actions:**

- Start cleaning
- Pause
- Bring the robot back
- Choose the cleaning mode

Some ideas:

- «&nbsp;When cleaning is finished, send me a message with its duration&nbsp;»
- «&nbsp;When the robot is stuck, alert me on Telegram&nbsp;»
- «&nbsp;Every morning at 9 a.m., start wall cleaning&nbsp;»

## Dashboard widget

The **Pool robot** widget displays the live battery, status, current fault, connection, mode, and duration of the last cleaning, with the **Start** , **Pause** , and **Return** buttons.

## Prerequisites

- **Gladys 5.1.0 or newer**
- A **Beatbot account** with your robots already functional in the Beatbot app
- **Internet access** : Beatbot robots are only controlled via the Beatbot cloud, there is no local control

## Installation

1. In Gladys: **Integrations** , search for **Beatbot** and install it.
2. **Configuration** tab: click on **Connect** and log in on the Beatbot page. Your password is entered on Beatbot, it never goes through Gladys.
3. The account region (Europe, North America, China) is detected automatically.
4. Your robots appear in the **Discovery** tab: add them.

The **Test connection** button lists the robots found with their status and battery.

## How it works

The integration uses the «&nbsp;open API&nbsp;» that Beatbot publishes for home automation, the same as their official Home Assistant integration. The code is a port of their official library [beatbot-cloud-python](https://github.com/Beatbot-Robotics/beatbot-cloud-python).

## Important: call for testers

This is a **first version** , tested with a fake Beatbot cloud (106 automatic tests), but **not yet on a real robot**. If you have a Beatbot, your feedback is very much appreciated.

The point to watch is the **account connection** :

- the integration uses the public client identifier provided by Beatbot;
- if the Beatbot login page displays an error on the return address (`redirect_uri`), report it here, with a screenshot if possible.

For a problem, please indicate:

- the robot model;
- your Gladys version;
- the integration logs (they never contain your tokens).

## Links

- Source code: [GitHub - prohand/gladys-beatbot: Gladys external integration to connect beatbot devices in Gladys · GitHub](https://github.com/prohand/gladys-beatbot)
- Documentation: [gladys-beatbot/docs/en.md at main · prohand/gladys-beatbot · GitHub](https://github.com/prohand/gladys-beatbot/blob/main/docs/en.md)
- Report a bug: [Issues · prohand/gladys-beatbot · GitHub](https://github.com/prohand/gladys-beatbot/issues)

Happy swimming! 🏊

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 16, 2026, 5:53pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/2 "2026-10-16T17:53:07Z")

</div>

Thanks @prohand  
First feedback finally: the connect button does nothing, nothing happens, and nothing in the logs.

Question: why is there a home assistant in there?

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/4/a/4ae63e931bd7795bd2994f371498ee89ae6164af.png)

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 16, 2026, 6:01pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/3 "2026-10-16T18:01:17Z")

</div>

Thanks @mutmut for the feedback!

- **Connecting does nothing** : Gladys opens the Beatbot page in a new tab, and your browser probably blocked it as a pop-up (Safari on iPhone often does this). You can try again from a computer, or allow pop-ups (Settings → Apps → Safari → Block Pop-ups)? Which browser were you using?
- **Home Assistant** : “home-assistant” is just the name of the public client ID that Beatbot publishes for its API. Home Assistant is not required.
- **Version 1.2.1** explains this in the setup screen and in the documentation. It also writes to the logs when you click Connect, and why a connection fails.
- If the Beatbot page opens but displays an error on redirect\_uri, let me know: that will mean that Beatbot does not yet accept Gladys’s return address.

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 16, 2026, 7:17pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/4 "2026-10-16T19:17:22Z")

</div>

> [@prohand](#):
>
> - **Home Assistant** : « home-assistant » is just the name of the public client identifier that Beatbot publishes for its API. Home Assistant is not required.

So why not Gladys by default?

I’m checking on my computer because I was indeed on Safari/iOS.

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 16, 2026, 7:35pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/5 "2026-10-16T19:35:30Z")

</div>

Because we don’t choose this name: the client identifier must be created by Beatbot on its login server. Today, Beatbot only publishes one, `home-assistant`. With `gladys`, the Beatbot page would refuse the connection (unknown client).

The field remains modifiable: if Beatbot one day provides an identifier for Gladys, we enter it in **OAuth Client Identifier** , and I will set it as the default in a future version.

Tell me what the connection from the computer gives, especially if the Beatbot page displays an error on `redirect_uri`.

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 17, 2026, 8:20am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/6 "2026-10-17T08:20:53Z")

</div>

I understand about the identifier.

I just tested it on the computer and indeed a popup page opens for authorization.  
If you make a mistake once during login (username and/or password), then the token is no longer valid.  
I closed the page and clicked on `Connect` again in the integration, the popup page displays:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/1/6/16cd1b04ad8df0f3896ce2fa779658700a6ffaa4.png)  
And it’s no longer possible to do anything, even by reloading the integration page and trying to reconnect.

The URL is:

```auto
https://oauth.beatbot.com/oauth2/authorize?response_type=code&client_id=home-assistant&redirect_uri=https%3A%2F%2Fmy.gladysassistant.com%2Fredirect%2Foauth&scope=device%3Ainfo&state=azerty&code_challenge=azerty&code_challenge_method=S256

```

And nothing explicit in the logs:

```json
[2026-10-16T21:26:00.427Z] [INFO] Beatbot sign-in requested (Connect clicked)
[2026-10-17T08:15:38.298Z] [INFO] Beatbot sign-in requested (Connect clicked)
[2026-10-17T08:16:56.943Z] [INFO] Beatbot sign-in requested (Connect clicked)
[2026-10-17T08:19:25.959Z] [INFO] Beatbot sign-in requested (Connect clicked)

```

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 17, 2026, 8:34am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/7 "2026-10-17T08:34:30Z")

</div>

Thanks @mutmut, that’s exactly the feedback I needed!

**What’s happening**

- The page « Whitelabel Error Page … status=400 » comes from the Beatbot login server, not from Gladys.
- This server displays the login page **before** checking where the request comes from. It only checks **after** the login.
- I think it rejects Gladys’s return address ([my.gladysassistant.com](http://my.gladysassistant.com)) and only accepts the one from Home Assistant.
- So it’s probably not your password: the error occurs once you’re logged in.

**Why you’re stuck**

- You are now logged in to Beatbot. Each new attempt skips the login and immediately hits the error.
- A private browsing window resets everything, but you’ll hit the same error again after logging in, as long as Beatbot hasn’t changed anything.

**A question to confirm**

- During your 2nd attempt, was your password accepted just before the error page?

**Small correction**

- In my previous message, I said that with a Gladys ID, the Beatbot page would refuse the connection. In fact, it would still display the login, and the error would occur after.

**Next steps**

- I asked Beatbot to allow Gladys, by email and on GitHub: [OAuth redirect URI for Gladys Assistant (open API, client home-assistant · Issue #6 · Beatbot-Robotics/beatbot-cloud-python · GitHub](https://github.com/Beatbot-Robotics/beatbot-cloud-python/issues/6)
- They just need to change a setting on their side. There’s nothing we can do on the Gladys side in the meantime.
- I’ll come back here as soon as they respond. Thanks for your patience and for testing! 🏊

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 17, 2026, 8:41am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/8 "2026-10-17T08:41:11Z")

</div>

Oh my god you’re faster than me, I also created an Issue at Beatbot but I messed up the repository and put it on the ha\_beatbot 🤣 And when I tried to recreate it in the other repository you had already done it 😅

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 17, 2026, 8:42am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/9 "2026-10-17T08:42:49Z")

</div>

> [@prohand](#):
>
> **A question to confirm**
> 
> - Was your password accepted just before the error page on your second attempt?

Excellent question because I saw a page that told me (I think) that the token had expired, that’s all.  
And so I closed that page and went back to Gladys.

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 17, 2026, 8:52am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/10 "2026-10-17T08:52:01Z")

</div>

😄 No worries about the issue on ha\_beatbot, on the contrary: two requests mean more chances they’ll see it!

For the « expired token »: it’s probably the Beatbot login page that expired after the password error, not your account.

Can you do one last test to be sure?

1. Open a **private browsing window** and go to your Gladys.
2. Click on **Connect** , then log in to Beatbot **on the first try** , without any password error.
3. Tell me what appears right after:
  - the page « Whitelabel Error Page … 400 »: it’s indeed Gladys’s return address that Beatbot is refusing. We’ll have to wait for their response;
  - something else: send me a screenshot.

**Version 1.2.2** has been released. It doesn’t add anything new for the connection, but the documentation now explains this error and the private window trick.

Thanks again for the tests! 🏊

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 17, 2026, 9:16am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/11 "2026-10-17T09:16:51Z")

</div>

in v1.2.1 and private window with the correct password:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/e/f/eff63742b080b7b58113bac5908e18b0a3ddaae5.jpeg)

EDIT: same in 1.2.2

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 17, 2026, 9:39am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/12 "2026-10-17T09:39:27Z")

</div>

Thanks @mutmut, great test! 👍

The message has changed: with the correct password, Beatbot displays _«&nbsp;Expired authorization request&nbsp;»_ instead of the 400 page. I think Beatbot only checks the request _after_ login, denies it, and displays this message for lack of a better option. The 1.2.2 doesn’t change this: it only updates the documentation.

To be certain, can you do a final test? It compares Gladys with Home Assistant:

1. Open a _new private window_.
2. Paste this link. It’s exactly the same request as Gladys, except for the return address, which is that of Home Assistant:

```auto

https://oauth.beatbot.com/oauth2/authorize?response_type=code&client_id=home-assistant&redirect_uri=https%3A%2F%2Fmy.home-assistant.io%2Fredirect%2Foauth&scope=device%3Ainfo&state=testgladys123456&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWEIWjEZ6TBGM&code_challenge_method=S256

```

1. Log in with the _correct password_.
2. Tell me where you end up:
  - a _[my.home-assistant.io](http://my.home-assistant.io)_ page with `code=` in the address: Beatbot accepts Home Assistant but not Gladys. It’s confirmed, and I add the proof to the request at Beatbot;
  - still _«&nbsp;Expired authorization request&nbsp;»_: the problem is elsewhere, and I’m digging.

This test is safe: the received code is useless without a secret key that no one has, and it expires immediately. Don’t copy the code on the forum, just the page name 😉

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [October 17, 2026, 9:50am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/13 "2026-10-17T09:50:56Z")

</div>

> [@prohand](#):
>
> 1. Paste this link. It’s exactly the same request as Gladys, except for the return address, which is Home Assistant’s:

Well done!

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/b/e/be7cf95e879df3b928a7069340a1d32eaff838cb.png)  
I didn’t do `Allow`.

We’re now waiting for Beatbot’s reply on your GitHub issue.

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [October 17, 2026, 9:55am UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/14 "2026-10-17T09:55:24Z")

</div>

Thanks @mutmut, that’s the proof we needed! 🎯

With the Home Assistant return address, Beatbot correctly displays the “Authorize Home Assistant” page. With Gladys’s address, it shows “Authorization request expired.” So it’s confirmed: Beatbot simply rejects Gladys’s return address. Neither your account nor the integration is at fault.

You did the right thing by not clicking Authorize 👍

I’m adding this proof to the GitHub request. Now we just have to wait for Beatbot to add Gladys’s address: it’s a simple setting on their end. I’ll let you know here as soon as they respond.

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [November 6, 2026, 12:16pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/15 "2026-11-06T12:16:51Z")

</div>

Back on GitHub:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/2/7/27baeb7db9917e951c9f0b7a23c89dbf3278d148.png)

Nothing left to wait for 🙂

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [November 6, 2026, 3:13pm UTC](https://community.gladysassistant.com/t/integration-beatbot/11057/16 "2026-11-06T15:13:05Z")

</div>

Very well and we still have a few months before we restart the robot 🥶
