Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add X1 Omni support (1vxt52) #611

Merged
merged 2 commits into from
Dec 5, 2024
Merged

Add X1 Omni support (1vxt52) #611

merged 2 commits into from
Dec 5, 2024

Conversation

gdgib
Copy link
Contributor

@gdgib gdgib commented Dec 5, 2024

I've got an X1 Omni (1vxt52), and obviously with the recent changes it no longer shows up in HA. My bot seems to work well enough with both the X2 Omni and X1 Turbo files, but I think the X1 Turbo is closer in feature set, both according to marketing and testing.

To test, I just hacked the symlink into my running HA instance and restarted HA. 2o4lnm seems a little better fit, but e6ofmn handled at least the basics, FWIW.

I admit I would LOVE a guide on how to properly determine the features in this file, because in the absence of that I'm "hacking" more than "coding" and that makes me justifiably nervous. Just because everything works doesn't mean it works for the right reasons, you know?

Let me know if you've got other steps I can take to make sure this is really working, please!

Summary by CodeRabbit

  • New Features
    • Introduced comprehensive configuration for a robotic vacuum device, enhancing battery management, cleaning operations, and custom command execution.
    • Added functionalities for fan speed control, lifespan management of components, and advanced mapping features.
    • Enabled network information retrieval and sound playback capabilities.
    • Implemented settings management for features like carpet auto fan boost and voice assistant state.
    • Enhanced state and statistics reporting for improved user insights.
    • Added support for a new device identifier, ensuring it is included in model loading verification.

Copy link
Contributor

coderabbitai bot commented Dec 5, 2024

Walkthrough

The pull request introduces a new file, 1vxt52.py, within the deebot_client framework, which provides a detailed configuration for a robotic vacuum device. This file defines various capabilities of the device, including battery management, cleaning operations, fan speed control, lifespan management, mapping features, network information, sound playback, and settings management. A DEVICES dictionary is populated with a StaticDeviceInfo instance that encapsulates these functionalities, ensuring efficient command and event handling.

Changes

File Path Change Summary
deebot_client/hardware/deebot/1vxt52.py Introduced a new configuration file for a robotic vacuum, defining capabilities and populating DEVICES with StaticDeviceInfo.
tests/hardware/test_init.py Added new device identifier "1vxt52" in model loading tests and updated expected commands for device class "p95mgv" in event extraction tests.

Possibly related PRs

  • Add Deebot T30 Omni #548: The addition of a new device identifier "1vxt52" in the test suite directly relates to the new device configuration introduced in the main PR, ensuring that the new device is included in the model loading verification.
  • Fix X2 Omni #552: Although this PR focuses on the X2 Omni, it involves modifications to cleaning command classes that may relate to the cleaning operations defined in the main PR for the new device.
  • Add Deebot T30 Pro Omni #597: Similar to the main PR, this PR introduces a new device configuration with a DEVICES dictionary entry, indicating a parallel development in defining capabilities for robotic vacuum devices.
  • Add Deebot N20 Pro Plus #608: This PR also introduces a new device configuration with a comprehensive set of capabilities, aligning with the structured approach taken in the main PR for the new device.
  • Add support for Deebot N8 #613: The addition of capabilities for the Deebot N8 aligns with the main PR's focus on defining device functionalities and command handling.
  • Add support for Deebot N8 Pro+ #617: This PR introduces support for another Deebot model, including a structured approach to capabilities, similar to the main PR's focus on device functionalities.
  • Add support for Deebot T10 #618: The addition of capabilities for the Deebot T10 mirrors the main PR's approach to defining a comprehensive configuration for a robotic vacuum device.
  • Add support for Deebot N8 Pro+ Black #619: This PR also focuses on adding support for a specific Deebot model, emphasizing the structured capabilities and functionalities that are a key aspect of the main PR.

Suggested reviewers

  • edenhaus

🐇 In the world of dust and cheer,
A vacuum's dance is drawing near.
With battery checks and maps so bright,
It cleans the floors from morn till night.
New commands and sounds, oh what a sight!
Hooray for 1vxt52, our cleaning knight! 🧹✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 3ab9bca and 062bb2a.

📒 Files selected for processing (1)
  • tests/hardware/test_init.py (1 hunks)
🔇 Additional comments (2)
tests/hardware/test_init.py (2)

253-253: LGTM: Model ID addition matches PR objectives

The addition of "1vxt52" to the supported devices list aligns with the X1 Omni model mentioned in the PR objectives.


Line range hint 1-284: Add test coverage for X1 Omni capabilities

The test file lacks specific test cases for the X1 Omni (1vxt52) model's capabilities. Since you mentioned the device works with both X2 Omni and X1 Turbo configurations, we should:

  1. Add a test case in test_capabilities_event_extraction to verify the expected capabilities
  2. Add a test case in test_get_static_device_info to ensure proper device info retrieval

Let's verify which configuration is being used for the new model:

Based on your testing results showing X1 Turbo being more aligned with X1 Omni's feature set, here's a suggested test addition:

@pytest.mark.parametrize(
    ("class_", "expected"),
    [
        ("not_specified", lambda: None),
        ("yna5xi", lambda: DEVICES["yna5xi"]),
+       ("1vxt52", lambda: DEVICES["1vxt52"]),
    ],
)
async def test_get_static_device_info(...)

@pytest.mark.parametrize(
    ("class_", "expected"),
    [
        # existing test cases...
+       (
+           "1vxt52",
+           {
+               # Copy capabilities from X1 Turbo configuration
+               # Adjust based on actual supported features
+           }
+       ),
    ],
    ids=["5xu9h3", "itk04l", "yna5xi", "p95mgv", "1vxt52"],
)
async def test_capabilities_event_extraction(...)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@gdgib
Copy link
Contributor Author

gdgib commented Dec 5, 2024

FOLLOW THESE AT YOUR OWN RISK TO TEST

If anyone spots this and is willing to risk completely breaking their HA install here are the steps for testing this locally on HAOS 2024.12.0:

  • Open HomeAssistant CLI (e.g. the console), and run login to get a shell prompt
  • docker ps | grep homeassistant: - yes the colon is part of it!
  • docker exec -it <CONTAINERID> sh - get the container ID from the start of the output above, it's a hex string
  • cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot
  • ln -svfT 2o4lnm.py 1vxt52.py
  • Restart home assistant

FOLLOW THESE AT YOUR OWN RISK TO TEST

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
deebot_client/hardware/deebot/1vxt52.py (1)

Line range hint 3-97: Consider reusing existing device configurations to reduce duplication

Since the capabilities of the X1 Omni are similar to those of the X1 Turbo (2o4lnm), you could import the existing configuration instead of duplicating the code. This approach reduces code duplication and simplifies maintenance.

Here’s how you might adjust the code:

from .2o4lnm import DEVICES as PARENT_DEVICES, short_name as parent_short_name

DEVICES[short_name(__name__)] = PARENT_DEVICES[parent_short_name(__name__)]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between f64582f and 3ab9bca.

📒 Files selected for processing (1)
  • deebot_client/hardware/deebot/1vxt52.py (1 hunks)
🔇 Additional comments (1)
deebot_client/hardware/deebot/1vxt52.py (1)

1-1: ⚠️ Potential issue

Remove unintended filename reference

The line 2o4lnm.py appears at the beginning of the file, which seems unintended and will cause a syntax error. Please remove this line.

Apply this diff to fix the issue:

-2o4lnm.py

Likely invalid or redundant comment.

@gdgib gdgib mentioned this pull request Dec 5, 2024
4 tasks
@lnx85 lnx85 mentioned this pull request Dec 5, 2024
4 tasks
@edenhaus
Copy link
Contributor

edenhaus commented Dec 5, 2024

I admit I would LOVE a guide on how to properly determine the features in this file, because in the absence of that I'm "hacking" more than "coding" and that makes me justifiably nervous. Just because everything works doesn't mean it works for the right reasons, you know?

There is no "correct" way to determine the features properly as Ecovacs is not providing any public API documentation. Therefore, I used the "try and error" approach in the past. I'm also logging the traffic between the app and the Ecovacs server to see if I can spot new commands but for that you need a man in the middle proxy setup, which is also not trivial

@edenhaus edenhaus changed the title Add X1 Omni support (sylink to X1 Turbo, based on feature set & testing) Add X1 Omni support (1vxt52) Dec 5, 2024
@edenhaus edenhaus linked an issue Dec 5, 2024 that may be closed by this pull request
4 tasks
@edenhaus
Copy link
Contributor

edenhaus commented Dec 5, 2024

Please fix the tests by applying:

diff --git a/tests/hardware/test_init.py b/tests/hardware/test_init.py
index b4039cb..24bf9df 100644
--- a/tests/hardware/test_init.py
+++ b/tests/hardware/test_init.py
@@ -250,6 +250,7 @@ def test_all_models_loaded() -> None:
     """Test that all models are loaded."""
     _load()
     assert list(DEVICES) == [
+        "1vxt52",
         "2ap5uq",
         "2o4lnm",
         "4vhygi",

or give me push access to your repo

@marcolino7
Copy link
Contributor

  • cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot

I tried this to make it work my Deebot T9, but I got an error:

2024-12-05 11:54:34.874 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry xxxxxxxxxxx@gmail.com for ecovacs
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 640, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/ecovacs/__init__.py", line 29, in async_setup_entry
    await controller.initialize()
  File "/usr/src/homeassistant/homeassistant/components/ecovacs/controller.py", line 81, in initialize
    devices = await self._api_client.get_devices()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/deebot_client/api_client.py", line 81, in get_devices
    if static_device_info := await get_static_device_info(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        device["class"]
        ^^^^^^^^^^^^^^^
    ):
    ^
  File "/usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot/__init__.py", line 32, in get_static_device_info
    await asyncio.get_event_loop().run_in_executor(None, _load)
  File "/usr/local/lib/python3.13/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot/__init__.py", line 26, in _load
    importlib.import_module(full_package_name)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/util/loop.py", line 200, in protected_loop_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'deebot_client.hardware.deebot.1vxt52'

How can I check correct file to my deebot T9? is there a way to make it work? Many Thanks

@enter2name
Copy link

@gdgib
I also have a DEEBOT X1 OMNI. I will try the next view days to get some information about the supported commands.

@mislav
Copy link

mislav commented Dec 5, 2024

I am a Home Assistant user and I was trying the Ecovacs integration for the first time today, only to find that my model (X1 Omni) was not supported. That led me to this repository, where I checked open PRs and saw this one from the same day proposing to add support for exactly my model 🎉 So thanks @gdgib!

So far, trying out this PR in my HA seems to work: it connected my X1 Omni to HA, where previously it didn't work (i.e. no entities/devices were previously discovered by Ecovacs integration). Some entities don't seem to be enabled for this model, but I didn't expect all entities to be available. The most important information from my vaccum, such as its battery level and the size of area cleaned, as well as the current cleaning status, seems to be read correctly.

Should I test something specific on my end?

FOLLOW THESE AT YOUR OWN RISK TO TEST

If anyone spots this and is willing to risk completely breaking their HA install here are the steps for testing this locally on HAOS 2024.12.0:

  • Open HomeAssistant CLI (e.g. the console), and run login to get a shell prompt
  • docker ps | grep homeassistant: - yes the colon is part of it!
  • docker exec -it <CONTAINERID> sh - get the container ID from the start of the output above, it's a hex string
  • cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot
  • ln -svfT 2o4lnm.py 1vxt52.py
  • Restart home assistant

FOLLOW THESE AT YOUR OWN RISK TO TEST

Thanks for this, but it took me a while to interpret these instructions. I tried ssh-ing into HA the way I always do, using the "Terminal & SSH" addon, but docker isn't available there because the addon doesn't have full access to the host system. Then I used these instructions to enable SSH access to the host system using a USB stick. (If my machine running Home Assistant OS had a screen and keyboard attached, I reckon I could have used the developer console, but my Raspberry Pi has no peripherals.)

Then, once in SSH session on the HA host system, typing login would immediately terminate my SSH session—I have no clue if that is supposed to happen:

$ ssh -p 22222 root@homeassistant.local
Welcome to Home Assistant OS.

Use `ha` to access the Home Assistant CLI.
# login
Connection to homeassistant.local closed.

However, I realized that within this shell I can just access docker without having to login first. This is the one-liner that I've adapted from the instructions above:

docker exec "$(docker ps -f name=homeassistant -q)" ln -svfT 2o4lnm.py /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot/1vxt52.py

Then I restarted my HA and the changes in this PR took effect for me 👍

@enter2name
Copy link

@edenhaus
By when does this merge have to be in the branch to be included in the Home Assistant patch tomorrow?
Refering to: #612 (comment)

Thanks for the answer.

@edenhaus edenhaus added the pr: new-feature PR, which adds a new feature label Dec 5, 2024
@edenhaus
Copy link
Contributor

edenhaus commented Dec 5, 2024

@edenhaus By when does this merge have to be in the branch to be included in the Home Assistant patch tomorrow? Refering to: #612 (comment)

Thanks for the answer.

Until tomorrow 12 CET.

@gdgib Please checkout #611 (comment) to get this PR merged as soon as possible.
If I had access to the fork, I could push the required changes myself. Otherwise please apply the provided diff

@willliamchan
Copy link

I am a Home Assistant user and I was trying the Ecovacs integration for the first time today, only to find that my model (X1 Omni) was not supported. That led me to this repository, where I checked open PRs and saw this one from the same day proposing to add support for exactly my model 🎉 So thanks @gdgib!

So far, trying out this PR in my HA seems to work: it connected my X1 Omni to HA, where previously it didn't work (i.e. no entities/devices were previously discovered by Ecovacs integration). Some entities don't seem to be enabled for this model, but I didn't expect all entities to be available. The most important information from my vaccum, such as its battery level and the size of area cleaned, as well as the current cleaning status, seems to be read correctly.

Should I test something specific on my end?

FOLLOW THESE AT YOUR OWN RISK TO TEST
If anyone spots this and is willing to risk completely breaking their HA install here are the steps for testing this locally on HAOS 2024.12.0:

  • Open HomeAssistant CLI (e.g. the console), and run login to get a shell prompt
  • docker ps | grep homeassistant: - yes the colon is part of it!
  • docker exec -it <CONTAINERID> sh - get the container ID from the start of the output above, it's a hex string
  • cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot
  • ln -svfT 2o4lnm.py 1vxt52.py
  • Restart home assistant

FOLLOW THESE AT YOUR OWN RISK TO TEST

Thanks for this, but it took me a while to interpret these instructions. I tried ssh-ing into HA the way I always do, using the "Terminal & SSH" addon, but docker isn't available there because the addon doesn't have full access to the host system. Then I used these instructions to enable SSH access to the host system using a USB stick. (If my machine running Home Assistant OS had a screen and keyboard attached, I reckon I could have used the developer console, but my Raspberry Pi has no peripherals.)

Then, once in SSH session on the HA host system, typing login would immediately terminate my SSH session—I have no clue if that is supposed to happen:

$ ssh -p 22222 root@homeassistant.local
Welcome to Home Assistant OS.

Use `ha` to access the Home Assistant CLI.
# login
Connection to homeassistant.local closed.

However, I realized that within this shell I can just access docker without having to login first. This is the one-liner that I've adapted from the instructions above:

docker exec "$(docker ps -f name=homeassistant -q)" ln -svfT 2o4lnm.py /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot/1vxt52.py

Then I restarted my HA and the changes in this PR took effect for me 👍

Thank you so much and following the one-liner my X1 Omni is now back online. I tried to also use the same method to put my Ecovacs U2 Pro back online!

@edenhaus Hi, I am not sure how to create a PR but I can confirm the same procedure works for Ecovacs U2 PRO (7j1tu6). What I did was to use the same one-liner and had 1vxt52.py replaced with 7j1tu6.py, reboot HA and I am completely back in the game. May I ask if this can be included from the next release? Thank you!

@gdgib
Copy link
Contributor Author

gdgib commented Dec 5, 2024

@edenhaus added you to the fork AND updated the tests for good measure. Thanks for the fast turn around.

@willliamchan if you look through the files in https://github.com/DeebotUniverse/client.py/tree/dev/deebot_client/hardware/deebot, you'll find a bunch are just one-line symlinks. Ignore those for now. Do any of the longer files go with a deebot model similar to the U2 Pro? I ask because while the hack you're using will work for the basics, I don't think it's quite right since I think the X1 series and U2 series seem to have different features. I strongly suggest opening an issue (https://github.com/DeebotUniverse/client.py/issues) for the U2 Pro if there isn't one already, since it's a separate device. I might be able to help with this when I'm not on my lunch break.

@willliamchan
Copy link

@edenhaus added you to the fork AND updated the tests for good measure. Thanks for the fast turn around.

@willliamchan if you look through the files in https://github.com/DeebotUniverse/client.py/tree/dev/deebot_client/hardware/deebot, you'll find a bunch are just one-line symlinks. Ignore those for now. Do any of the longer files go with a deebot model similar to the U2 Pro? I ask because while the hack you're using will work for the basics, I don't think it's quite right since I think the X1 series and U2 series seem to have different features. I strongly suggest opening an issue (https://github.com/DeebotUniverse/client.py/issues) for the U2 Pro if there isn't one already, since it's a separate device. I might be able to help with this when I'm not on my lunch break.

Hi, yes i think you're right that U2 Pro is more like a basic one without rich features like X1 Omni. I am not sure which file look alike U2 Pro to be honest, however I tried to enable all the "disabled entities" and take notes of the below that shouldn't belong to U2 Pro and they are:-

Configuration
Map - Map is not available even from Ecovacs App
Advanced Mode
Carpet Auto-Boost Suction
Clean Count
Clean Preference
Continuous Cleaning
Reset main brush lifespan
Reset round mop lifespan
Reset unit care lifespan
True detect

Diagnostic
Round mop lifespan
Unit care lifespan

Copy link

codecov bot commented Dec 5, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 86.42%. Comparing base (f64582f) to head (062bb2a).
Report is 5 commits behind head on dev.

Additional details and impacted files
@@           Coverage Diff           @@
##              dev     #611   +/-   ##
=======================================
  Coverage   86.42%   86.42%           
=======================================
  Files          88       88           
  Lines        3301     3301           
  Branches      298      298           
=======================================
  Hits         2853     2853           
  Misses        394      394           
  Partials       54       54           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

@edenhaus edenhaus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @gdgib 👍

@edenhaus edenhaus merged commit 76098aa into DeebotUniverse:dev Dec 5, 2024
8 of 9 checks passed
This was referenced Dec 5, 2024
@gdgib gdgib deleted the X1Omni branch December 6, 2024 00:05
@gdgib
Copy link
Contributor Author

gdgib commented Dec 6, 2024

I'll make you a deal @willliamchan, if you open a separate issue so that we can keep each model to its own PR/issue, then I'll try to hack something together for you today.

All you have to do is go to is create an issue, and summarize the last two comments in it. Heck you can even just paste links in there!

Honestly, if you don't do that I'll probably do that for you too, but it's a good habit to learn when you need something from an open source project to file a separate issue for each request. It really helps our sanity.

@gdgib
Copy link
Contributor Author

gdgib commented Dec 6, 2024

Thank you @edenhaus ! Can't tell you how much I appreciate all your hard work on this code base, and the integration.

@coderabbitai coderabbitai bot mentioned this pull request Dec 6, 2024
@willliamchan
Copy link

I'll make you a deal @willliamchan, if you open a separate issue so that we can keep each model to its own PR/issue, then I'll try to hack something together for you today.

All you have to do is go to is create an issue, and summarize the last two comments in it. Heck you can even just paste links in there!

Honestly, if you don't do that I'll probably do that for you too, but it's a good habit to learn when you need something from an open source project to file a separate issue for each request. It really helps our sanity.

Thank you very much Greg, I think I've managed to create a new issue and here is the link - #629

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr: new-feature PR, which adds a new feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add support for DEEBOT X1 OMNI
6 participants