NEWS
Ecovacs Deebot Vacuum //NPM Package Verfügbar! Python Library
-
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
-
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.
-
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. -
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.
Beste Grüße und vielen Dank!
-
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 derEventEmitter
-Klasse zu sein. -
Hab dort mal ein Issue & PR erstellt: https://github.com/joostth/sucks.js/issues/2
-
Wow! Herzlichen Dank für deine Bemühungen!
Na, da bin ich ja mal gespannt
-
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.
-
Super - ich werde heute Nachmittag direkt mal testen.
Herzlichen dank für eine Bemühungen!