Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Ecovacs Deebot Vacuum //NPM Package Verfügbar! Python Library

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Ecovacs Deebot Vacuum //NPM Package Verfügbar! Python Library

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      abn0rm last edited by

      Hallo zusammen,

      ich bräuchte mal Unterstützung/Schützenhilfe eines Profis. Es geht im speziellen um Python, wovon ich leider nicht all zu viel verstehe. Ich fühle mich eher bei den Frontend-technologien heimisch.

      Seit ein paar Wochen bin ich stolzer Besitzer eines Ecovacs Deebot Saugers. Ziel ist es, den Saugers in ioBroker einzubinden, sowie sämtliche Daten des Saugers auszulesen. Der Sauger verfügt über eine Wlan Schnittstelle und eine dazugehörige App. Mittels dieser App kann ich den Saugern steuern, Zeiten definieren, sowie den Zustand der Komponenten (Bürsten & Filter) einsehen. Außerdem bekomme ich das Reininungsprotokoll angezeigt.

      Daraufhin begann ich mit meiner Recherche. Ich fand ein paar Mitstreiter von Übersee, die eine Python Library für den Sauger entwickelten. Zusätzlich wurde ein CLI für die "einfache" Steuerung entwickelt. Ich kann den Saugern also mittels Shell Execute steuern. Ich hatte Kontakt mit dem Entwickler aufgenommen, der mir sagte, dass ich mittels der Library ebenfalls sämtliche Daten (Akku-Status, Laufzeit, aktuellem Status, etc.) auslesen könnte. Allerdings stoße ich hier an meine Grenzen, was das Verständnis von Python angeht. Mein Wunsch wäre es, die Daten nach einem Aufruf (bspw. via shell oder einfachem URL GET) als response zu erhalten. Die Weiterverarbeitung in ioBroker würde ich mir dann doch noch selbst zutrauen.

      Gibt es hier Mitstreiter, die mir den Weg-(anfang) pflastern könnten? Was muss ich bedenken? Wie müsste meine Datei bzw. mein Code dafür aussehen?

      Hier ein Verweis zu einem ähnlichen Forum: https://community.smartthings.com/t/eco … -n79/93410

      Und der Verweis aufs GIT der aktuellen Library: https://github.com/wpietri/sucks

      Ich danke euch vielmals für eure Bemühungen! 🙂

      Beste Grüße und ein schönes Wochenende..

      Adrian

      1 Reply Last reply Reply Quote 0
      • A
        abn0rm last edited by

        Hallo zusammen,

        ich möchte das Thema mal wieder aus der Versenkung holen:

        Durch Zufall habe ich mitbekommen, das es mittlerweile auch ein NPM Package der Library gibt. (https://www.npmjs.com/package/sucks)

        Doch leider hielt sich mein Erfolg damit zu hantieren wieder einmal Stark in Grenzen.

        Ich bin recht einfach vorgegangen: Sucks, node-machine-id sowie xmpp als zusätzliche NPM Pakete im JS Adapter angegeben. Anschließend ein neues Script angelegt und mit folgendem Code befüllt und auch angepasst:

        
        const sucks = require('sucks')
            , EcoVacsAPI = sucks.EcoVacsAPI
            , VacBot = sucks.VacBot
            , nodeMachineId = require('node-machine-id')
            , http = require('http')
            , countries = sucks.countries;
        
        let account_id = "email@domain.com"
            , password = "a1b2c3d4"
            , password_hash = EcoVacsAPI.md5(password)
            , device_id = EcoVacsAPI.md5(nodeMachineId.machineIdSync())
            , country = null
            , continent = null;
        
        httpGetJson('http://ipinfo.io/json').then((json) => {
            country = json['country'].toLowerCase();
            continent = countries[country.toUpperCase()].continent.toLowerCase();
        
            let api = new EcoVacsAPI(device_id, country, continent);
        
            api.connect(account_id, password_hash).then(() => {
                api.devices().then((devices) => {
                    let vacuum = devices[0];
                    let vacbot = new VacBot(api.uid, EcoVacsAPI.REALM, api.resource, api.user_access_token, vacuum, continent);
                    vacbot.on("ready", (event) => {
                        vacbot.run("batterystate");      
        
                        vacbot.on("BatteryInfo", (battery) => {
                            console.log("Battery level: %d\%", Math.round(battery*100));
                        });
                    });
                    vacbot.connect_and_wait_until_ready();
                });
            }).catch((e) => {
                console.error("Failure in connecting!");
            });
        });
        
        function httpGetJson(url) {
            return new Promise((resolve, reject) => {
                http.get(url, (res) => {
                    res.setEncoding('utf8');
                    let rawData = '';
                    res.on('data', (chunk) => { rawData += chunk; });
                    res.on('end', function(){
                        try {
                            const json = JSON.parse(rawData);
                            resolve(json);
                        } catch (e) {
                            reject(e);
                        }
                    });
                }).on('error', (e) => {
                    reject(e);
                });
            });
        }
        
        

        Doch leider bekam ich lediglich diverse Fehlermeldungen sowie einen ewig neustartenden JS-Adapter. Bei Bedarf kann ich die Logs gerne mal posten.

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          @abn0rm:

          Doch leider bekam ich lediglich diverse Fehlermeldungen sowie einen ewig neustartenden JS-Adapter. Bei Bedarf kann ich die Logs gerne mal posten. `
          Das wäre vermutlich hilfreicher, vielleicht ist es ja nur eine Kleinigkeit die hier fehlt.

          1 Reply Last reply Reply Quote 0
          • A
            abn0rm last edited by

            Soo - nun kann ich auch ein paar weitere Infos liefern 😉

            Anbei zwei Screenshots - einmal die NPM Pakete, sowie einmal der Log nachdem ich das Skript habe einmal durchlaufen lassen.

            Installiert ist übrigens Node 6.13.0.

            3583_js.jpg

            3583_log.jpg

            Beste Grüße und vielen Dank!

            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              Puhh, das sieht nach einer Inkompatibilität eines der 3rd-party-Module mit der installierten NodeJS-Version aus - oder ein Bug in NodeJS selbst?!

              Bei Google taucht der Fehler hier und da auf, aber bisher bin ich nicht besonders schlau geworden.

              Edit: Ok, hier ist das Problem:

              https://github.com/joostth/sucks.js/blo … ex.js#L464

              domain scheint eine reservierte Eigenschaft der EventEmitter-Klasse zu sein.

              1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer last edited by

                Hab dort mal ein Issue & PR erstellt: https://github.com/joostth/sucks.js/issues/2

                AlCalzone created this issue in joostth/sucks.js

                closed The `domain` property collides with the same property on `EventEmitter`, causing a crash #2

                1 Reply Last reply Reply Quote 0
                • A
                  abn0rm last edited by

                  Wow! Herzlichen Dank für deine Bemühungen! 🙂

                  Na, da bin ich ja mal gespannt 🙂

                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    Der PR wurde soeben gemerged, jetzt heißt es auf eine neue Version des Pakets zu warten.

                    Edit:
                    > Thanks for posting the issue and providing the related fix in the pull request. Fix is included in v0.0.4 now available on npm.

                    1 Reply Last reply Reply Quote 0
                    • A
                      abn0rm last edited by

                      Super - ich werde heute Nachmittag direkt mal testen.

                      Herzlichen dank für eine Bemühungen! 🙂

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      749
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      2
                      9
                      1592
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo