Aspirateur Ecovacs Deebot

Bonjour!
Voilà, j’ai récemment acquis un aspirateur robot Deebot Ecovacs D502, que je cherche a inclure dans jeedom. J’ai trouvé un début de piste ici:
https://www.jeedom.com/forum/viewtopic.php?t=37397
Et ici:

Mais la procédure du topic en question ne donne rien, ça ne fonctionne pas chez moi.
Sauriez vous s’il est possible de faire quelque chose, et éventuellement de dev un plugin svp?
Merci pour vos réponses!

Bonjour à tous,

Je me permets de reprendre le topic de @JohnDoe car je viens d’acquérir un aspirateur robot Deebot Ecovacs Ozmo T8 AIVI et je suis à la recherche d’un moyen de l’intégrer sur mon serveur Jeedom afin de pouvoir intéragir avec lors, par exemple, des scénarios.

J’ai aussi tenté d’utiliser la librairie « Sucks » mais lorsque je tente, par exemple, de lancer un programme de nettoyage de 10min, j’ai cette erreur :

trifly@debian:~/scripts/sucks$ sucks login
Ecovacs app email: xxx.xxx@gmail.com
Ecovacs app password:
your two-letter country code [fr]:
your two-letter continent code [eu]:
Config saved.
trifly@debian:~/scripts/sucks$ sucks clean 10
sleekxmppfs.basexmpp WARNING  fulljid property deprecated. Use boundjid.resource
performing clean command
Traceback (most recent call last):
  File "/home/trifly/.local/bin/sucks", line 10, in <module>
    sys.exit(cli())
  File "/home/trifly/.local/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/trifly/.local/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/trifly/.local/lib/python3.7/site-packages/click/core.py", line 1290, in invoke
    return _process_result(rv)
  File "/home/trifly/.local/lib/python3.7/site-packages/click/core.py", line 1224, in _process_result
    value = ctx.invoke(self.result_callback, value, **ctx.params)
  File "/home/trifly/.local/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/trifly/.local/lib/python3.7/site-packages/sucks/cli.py", line 219, in run
    vacbot.run(action.vac_command)
  File "/home/trifly/.local/lib/python3.7/site-packages/sucks/__init__.py", line 416, in run
    self.send_command(action.to_xml())
  File "/home/trifly/.local/lib/python3.7/site-packages/sucks/__init__.py", line 413, in send_command
    self.xmpp.send_command(xml, self._vacuum_address())
  File "/home/trifly/.local/lib/python3.7/site-packages/sucks/__init__.py", line 482, in send_command
    c.send()
  File "/home/trifly/.local/lib/python3.7/site-packages/sleekxmppfs/stanza/iq.py", line 235, in send
    raise IqError(result)
sleekxmppfs.exceptions.IqError: <iq type="error" to="ejlieqrbb9de592c@ecouser.net/237c3b6bb019a3ccb2f22e05                                                                                                                                   8e123bd4" from="96ed5bdf-f10e-4e81-8527-85e9727d9446@x5d34r.ecorobot.net/atom" id="fa72973e-7583-4030-83db                                                                                                                                   -8f87c71597e7-3"><error type="wait" code="404"><recipient-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-s                                                                                                                                   tanzas" /></error></iq>

^CException ignored in: <module 'threading' from '/usr/lib/python3.7/threading.py'>
Traceback (most recent call last):
  File "/usr/lib/python3.7/threading.py", line 1281, in _shutdown
    t.join()
  File "/usr/lib/python3.7/threading.py", line 1032, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.7/threading.py", line 1048, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):

Je me suis mis à la recherche d’autre librairies et suis tombé sur ce projet :

Après installation, la 1ère partie de connexion à mon compte ecovacs pour récupérer le token semble OK :

trifly@debian:~/scripts/ecovacs-deebot.js$ node ecovacs.js
Connected!

Toutefois, la 2nde partie concernant la connexion à l’aspirateur, j’ai quelques warnings donc une erreur d’authentification :

trifly@debian:~/scripts/ecovacs-deebot.js$ node ecovacs.js
(node:26565) UnhandledPromiseRejectionWarning: failure code 1004 (auth error) for call GetDeviceList and parameters {"auth":{"with":"users","realm":"ecouser.net","resource":"apirateu"}}
(node:26565) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:26565) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Connected!

Malgré cela, je ne sais pas trop si cela fonctionne car je ne sais pas trop comment, par la suite, utiliser les différents « shortcuts » possibles :

Si quelqu’un a déjà utilisé cette librairie JS ou s’il connait une autre manière de faire, je suis preneur :blush:

Merci à vous ! :slight_smile:

bonjour,
du nouveau sur le dev du plugin pour ce super ecovac deebot T8 AIVI ?
merci

Je vous propose un truc pour l’utiliser. Je n’ai pas encore pu le tester car j’ai un soucis avec NPM… mais vous pouvez essayer.

Après avoir installé le node ecovacs-deebot.js:

sudo npm install ecovacs-deebot
sudo git clone https://github.com/mrbungle64/ecovacs-deebot.js.git
cd ecovacs-deebot.js
sudo npm install

Je pense qu’un nouveau Script de type Action nommé « Nettoyage.php » dans le plug-in Script avec le code suivant devrait fonctionner. Attention à remplacer votre compte et mot de passe dans le script avant de le lancer.

<?php 
echo "Lancement du nettoyage...";
?>
<script type="text/javascript">
const ecovacsDeebot = require('ecovacs-deebot')
	, EcoVacsAPI = ecovacsDeebot.EcoVacsAPI
	, VacBot = ecovacsDeebot.VacBot
	, nodeMachineId = require('node-machine-id')
	, http = require('http')
	, countries = ecovacsDeebot.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 = api.getVacBot(api.uid, EcoVacsAPI.REALM, api.resource, api.user_access_token, vacuum, continent);
			vacbot.on("ready", (event) => {
				vacbot.run("BatteryState");
				vacbot.run("Clean");
				setTimeout(() => {
					vacbot.run("Stop");
					vacbot.run("Charge");
				}, 60000);
				
				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);
		});
	});
}
</script>

<?php
  echo "Nettoyage terminé !";
?>

Dites-moi si ça fonctionne. J’essaie d’arriver à installer ce module pour aller plus loin dans mes tests !

1 « J'aime »

j’ai donc commencé par ceci

sudo apt-get update
sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
A reboot might be necessary before executing the next command

sudo npm install canvas --unsafe-perm=true

puis

sudo npm install ecovacs-deebot
sudo git clone https://github.com/mrbungle64/ecovacs-deebot.js.git
cd ecovacs-deebot.js
sudo npm install

puis le script php

LOG JEEDOM:

[2020-12-13 16:36:16][DEBUG] : Execution de : php /var/www/html/plugins/script/data/Nettoyage.php 2>&1

Bonjour jeefib,
Je suis idiot, cette technique ne fonctionnera pas car il exécute le php en local du serveur sans exécuter le javascript inclus. Il faut trouver une technique pour exécuter simplement du javascript depuis jeedom sans créer de plugin. Je n’ai pas trouvé.

hello papabert,
la tu m’as deja perdu!!!
« exécute le php en local du serveur »
de quel server?

« javascript inclu » inclu dans le deebot?

comment ça fonctionne?
si demain ecovacs met la clé sous la porte,
l’appli est hs.
il nous reste l’api qui permets le dialogue en local(entre deebot et jeedom puis interface user?)
pour la config au 1er démarrage de deebot, le phone doit etre connecté en direct au wifi de deebot (mise a jour firmware) puis bascule sur le reseau wifi local.
de jeedom, on pourrait envoyer des requêtes directement à deebot?
pourquoi voit on sur les forums github l’identifiant et mot de passe ainsi que la region et pays à renseigner ?
c’est pour dialoguer avec server ecovacs?
mais en local, par api, normalement pas besoin?

ça fait beaucoup de questions, pcq j’essaie de comprendre.
j’avais moins de difficultées avec mon portier doorbird ou ma Pac daikin pour dialoguer par api. ecovacs est compliqué!
j’ai vu une piste, mais la aussi c’est pas clair, en passant par un home assitant (encore un rpi de + :slight_smile: )

J’avoue que c est galère d’intégrer son aspirateur ECOVACSHOME à Jeedom si quelqu un y arrive ce serait top

j’ai installe home assistant sur un autre rpi, j’ai bien l’ecovacs et ça fonctionne
maintenant je cherche à faire dialoguer jeedom et HA, problème je n’arrive pas à accéder à l’ip pour exploiter l’api avec requêtes http. erreur Autoriz 401…
j’ai écumé les forums uk, IT, DE (mdp=> jeton… )
rien à faire, je n’y arrive pas, il ne me donne pas l’acces à l’api par ip:port/api/
impossible d’accéder à L’api ou au reset api!!!

1 « J'aime »

ploufff :joy:
:thinking: