Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Aspirateur Roborock S50 => définir les zones de la maison?

JPLP
Timide
Messages : 207
Inscription : 22 nov. 2017, 13:28

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par JPLP » 03 avr. 2019, 17:03

agasi34 a écrit :
03 avr. 2019, 13:03
PS : si je comprends bien, à chaque rotation de map, il faut donc mettre à jour les valeurs rotation map, centre x et y ?
Non, le centre_x et centre_y ne sont normalement pas à modifier quand ils sont bien indiqués.
Mais, il ne sont pris en compte que le jour de ta première rotation.

Donc tu peux ne te rendre compte des mauvaises coordonnées du centre que plusieurs semaines après la mise en place du script. C'est ce qui m'est arrivé ;)

Par contre, j'ai détecté une anomalie (qui n'est pas du ressort de ce script, puisque sur l'appli c'est pareil) : Quand ta carte tourne de 45° par exemple. Car du coup tes zones de nettoyage ne peuvent plus correspondre avec les mûrs de tes pièces.
Mais ça doit déjà être le cas pour toutes les maisons qui ne sont pas carrées et/ou dont les mûrs ne sont pas parallèles et perpendiculaires...

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 03 avr. 2019, 18:14

Non, seulement l'angle de rotation...
les centres tu n'a besoin de les ajuster qu'une fois (après ta première rotation)...
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 03 avr. 2019, 18:28

Bonjour,
Est il possible de débugger le script dans le bloc code ?
J'ai commencé par copier bêtement ce script et comme ça ne marche pas j'ai essayé de comprendre. Je comprends un peu mieux mais en débuggant ce serait encore mieux et je comprendrai peut être pourquoi les coordonnées ne s'affichent pas dans le virtuel.
Sinon ça fonctionne parfaitement sans le script en mettant les zones directement dans le scénario.
Mais j'aimerai comprendre ce langage php
@+
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 03 avr. 2019, 19:12

Lacer a écrit :
03 avr. 2019, 18:28
Bonjour,
Est il possible de débugger le script dans le bloc code ?
J'ai commencé par copier bêtement ce script et comme ça ne marche pas j'ai essayé de comprendre. Je comprends un peu mieux mais en débuggant ce serait encore mieux et je comprendrai peut être pourquoi les coordonnées ne s'affichent pas dans le virtuel.
Sinon ça fonctionne parfaitement sans le script en mettant les zones directement dans le scénario.
Mais j'aimerai comprendre ce langage php
@+
Je ne comprends pas bien ta question, est-ce que tu veux savoir si on peut avoir un retour sur les éventuelles erreurs ?

En fait les bloc codes sont exécutés par Jeedom via une commande eval(), donc du coup pas énormément de retours...
Le mieux c'est de regarder les logs , principalement: "http.error", "scenario_element" et "scenario_execution"
Après, si tu utilises le framework SC, tu peux avoir un peu plus d'infos de debug, mais bon ça reste light...

La première chose c'est déjà de rechercher et supprimer toutes les erreurs de syntaxe...

Maintenant, si tu as des questions précises sur le contenu du script, je peux toujours y répondre et tenter de t'expliquer pourquoi je l'ai construit comme ça, et t'éclairer sur les points qui te semblent obscurs... :P
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

maxime079
Timide
Messages : 20
Inscription : 08 mars 2019, 11:38

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par maxime079 » 03 avr. 2019, 21:33

Patrick a écrit :
03 avr. 2019, 11:29
maxime079 a écrit :
02 avr. 2019, 22:17
Patrick a écrit :
02 avr. 2019, 08:23
Fait nous voir comment tu as configuré les commandes de ton virtuel, et la liste de tes zones.
Ce sera plus facile pour t'aider... ;-)
Mise à jour : mon aspirateur se lance bien , fait 20 cm , ne m'indique pas la zone ciblée sur l'appli ... faut que je teste avec une zone plus proche :)

Ca m'embête de faire mon assister , et j'aimerai comprendre mon erreur certainement tout c***e :)

(...)
Alors déjà, merci de mettre ton code dans un bloc code pour poster (c'est plus facile à lire) , c'est le bouton avec le symbole </>
En fait tu as fait de nombreuses erreurs dans ton code :
  • function rorate($x,$y, $angle,$centre)
  • function rorate($x,$y, $angle,$centre) (
  • function generer($coordonnees,$quoi,$roration,$centre)
  • return array(round($x), round($y)); => il manque à la ligne suivante l'accolade de fin de fonction !!!
  • $coord=array());
Bon, après j'ai pas regardé dans le détail, mais corrige déjà ça et dis-nous si ça va pas mieux après ... :P
Bonne nouvelle , j'ai relu le script et effectivement j'avais fait des erreurs de saisies ( pas bon de faire du code dans le noir sans lunette ^^ ) .
Je vais donc ensuite faire des combinaison de zones :)

Petite question : je suis avec le V1 , donc pas de zones interdites ni murs virtuels . Ma question est possible d'avoir un script qui simule la commande mur virtuelle ou zone interdite ? Ou bien , je dois la jouer à l'inverse en faisant mon découpage de zones en contourant ces zones interdites ?

Ps : je t'ai fait une petite dotation paypal de 50 € pour le travail et t'encourager pour les prochains tuto/plugin ... :)

skyline6951
Timide
Messages : 65
Inscription : 05 sept. 2017, 13:38

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par skyline6951 » 03 avr. 2019, 23:16

Patrick a écrit :
03 avr. 2019, 18:14
Non, seulement l'angle de rotation...
les centres tu n'a besoin de les ajuster qu'une fois (après ta première rotation)...
Bonjour Patrick,

Tout d'abord, je voulais te dire un grand bravo pour le travail monstrueux que cela a du te demander. Et un deuxième "awards" pour l'avoir partager et de prendre le temps d'aider les personnes qui tentent de mettre en place ta solution (comme moi :-)). Là, je crois que tu me vois venir à 10000...

J'ai suivi ton tuto posté sur le blog de Sarakha63 mais j'ai quelques points que je ne comprends pas. Je n'ai jamais eu de rotations de carte mais au cas ou ça arriverait, j'ai mis en place tout le code. Si j'ai bien compris, tant que la variable "rotation map" dans ton virtuel (pour reprendre tes noms) reste à 0, le programme "rotate" qui met à jours les coordonnées en fonction de l'angle ne se lance pas, c'est bien ça?

Étant donnée que je n'ai pas eu de rotation encore, les variable centre_x et centre_y peuvent rester à zéro.

Aussi, juste pour mon information, si je mets 25000,25000 en coordonnée, je ne me trouve pas sur ma base mais à environ 50cm à gauche et 20cm en haut. J'ai vu dnas les précédent post qu'il fallait prendre en compte la largeur de la base et du robot mais même avec cela, je ne me trouve toujours pas sur la base. Ma base se trouve à 25500,24800 environ. Ma question est de savoir ce qu'il faudra mettre en cas de rotation. C'est cette partie que je n'ai pas compris surtout.

Merci encore pour ton travail et partage.

Ps: je n'ai pas encore investi dans Alexa mais l'idée de piloter le robot pour aller nettoyer une zone par la voix pourrait me faire accélérer la réflexion. Si à l'occasion, tu peux expliquer de manière même succincte l'interaction/mise en place avec Alexa, je suis preneur.

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 03 avr. 2019, 23:28

Patrick,
C'est ça, déjà au moment de la compilation (ça s'appelle sûrement autrement pour le php) pour les erreurs de syntaxe et à l'exécution. J'ai recopié texto ton code en changeant le nom du virtuel et vérifié plusieurs fois sans trouver d'erreur. Cette vérification ne m'apprend rien alors qu'un affichage des erreurs me permettrait de mieux comprendre ce que tu as fait et c'est la moindre des choses vu le travail réalisé.
J'ai mis tous les logs à "debug" mais je ne vois rien de particulier, peux tu me préciser où je dois configurer correctement les logs ?
Dans le virtuel je vois bien l'ordre passé mais pas les coordonnées. J'ai vu que la commande print_r() (je crois), permettait d'afficher le contenu des variables, mais je n'ai pas compris comment.
C'est quoi le framework SC et comment l'utiliser ?
Je vais revérifier la syntaxe en tenant compte des commentaires à ce sujet mais je préférerais comprendre.
Merci pour le job !
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 03 avr. 2019, 23:45

maxime079 a écrit :
03 avr. 2019, 21:33
pas mieux après ... :P

Bonne nouvelle , j'ai relu le script et effectivement j'avais fait des erreurs de saisies ( pas bon de faire du code dans le noir sans lunette ^^ ) .
Je vais donc ensuite faire des combinaison de zones :)

Petite question : je suis avec le V1 , donc pas de zones interdites ni murs virtuels . Ma question est possible d'avoir un script qui simule la commande mur virtuelle ou zone interdite ? Ou bien , je dois la jouer à l'inverse en faisant mon découpage de zones en contourant ces zones interdites ?

Malheureusement non, ce n'est pas possible...
Ta logique d'éviter les zones interdites est la bonne stratégie...
Tu peux faire des zones complexes en prenant pour exemple la zone "couloir" de mon tuto... ;-)

Ps : je t'ai fait une petite dotation paypal de 50 € pour le travail et t'encourager pour les prochains tuto/plugin ... :)
Merci Maxime ! :D :D :D
très sympa ;-)
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 04 avr. 2019, 00:21

skyline6951 a écrit :
03 avr. 2019, 23:16
(...)
j'ai quelques points que je ne comprends pas. Je n'ai jamais eu de rotations de carte mais au cas ou ça arriverait, j'ai mis en place tout le code. Si j'ai bien compris, tant que la variable "rotation map" dans ton virtuel (pour reprendre tes noms) reste à 0, le programme "rotate" qui met à jours les coordonnées en fonction de l'angle ne se lance pas, c'est bien ça?
Pour être précis, j'ai fait un raccourci de langage :-)
En réalité on appelle bien la fonction rotate(),
Sauf qu'elle ne fait pratiquement rien si l'angle de rotation est à zéro.
Elle retourne juste les coordonnées sans les modifier...
Étant donnée que je n'ai pas eu de rotation encore, les variable centre_x et centre_y peuvent rester à zéro.
Non, par défaut t'es centres X et Y devraient être à 25000.
Aussi, juste pour mon information, si je mets 25000,25000 en coordonnée, je ne me trouve pas sur ma base mais à environ 50cm à gauche et 20cm en haut. J'ai vu dnas les précédent post qu'il fallait prendre en compte la largeur de la base et du robot mais même avec cela, je ne me trouve toujours pas sur la base. Ma base se trouve à 25500,24800 environ. Ma question est de savoir ce qu'il faudra mettre en cas de rotation. C'est cette partie que je n'ai pas compris surtout.
Après la première rotation de la carte, tu devras :
  • changer l'angle de rotation en conséquence
  • lancer un nettoyage sur une zone (tant qu'à faire prend la plus complexe, tu te rendras mieux compte des éventuels décalages),
  • et ajuste tes centres jusqu'à ce qu ta zone corresponde bien à ce que tu avais avant la rotation.
Pour les prochaines rotations, tu n'auras plus qu'à changé l'angle car ton centre sera déjà ajusté !
(...)
Ps: je n'ai pas encore investi dans Alexa mais l'idée de piloter le robot pour aller nettoyer une zone par la voix pourrait me faire accélérer la réflexion. Si à l'occasion, tu peux expliquer de manière même succincte l'interaction/mise en place avec Alexa, je suis preneur.
Pourquoi pas, mais le tuto sera encore plus compliqué et long que celui ci (j'utilise Node-Red pour faire ça... ). :lol:
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 04 avr. 2019, 00:34

Lacer a écrit :
03 avr. 2019, 23:28
Patrick,
C'est ça, déjà au moment de la compilation (ça s'appelle sûrement autrement pour le php) pour les erreurs de syntaxe et à l'exécution. J'ai recopié texto ton code en changeant le nom du virtuel et vérifié plusieurs fois sans trouver d'erreur. Cette vérification ne m'apprend rien alors qu'un affichage des erreurs me permettrait de mieux comprendre ce que tu as fait et c'est la moindre des choses vu le travail réalisé.
J'ai mis tous les logs à "debug" mais je ne vois rien de particulier, peux tu me préciser où je dois configurer correctement les logs ?
Dans le virtuel je vois bien l'ordre passé mais pas les coordonnées. J'ai vu que la commande print_r() (je crois), permettait d'afficher le contenu des variables, mais je n'ai pas compris comment.
C'est quoi le framework SC et comment l'utiliser ?
Je vais revérifier la syntaxe en tenant compte des commentaires à ce sujet mais je préférerais comprendre.
Merci pour le job !
Pour SC, fait simplement une recherche sur le forum et tu trouveras des réponses pour l'installer et t'en servir (mais mieux vaut avoir déjà de bonnes bases en PHP) ...
Pour ton code, montre moi ce que tu as fait, je te dirai si je vois des erreurs de syntaxe ou autres...
;-)
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 04 avr. 2019, 18:16

Bonjour Patrick,
Voici mon script, l'ordre s'affiche dans le virtuel mais pas les coordonnées. J'ai ce message dans le log "syntax error, unexpected ';', expecting ',' or ')'" mais je ne vois pas où c'est. La condition qui correspond au bouton du virtuel sur lequel j'ai cliqué est bien vérifiée.
je ne connais rien en php mais je vais quand même regarder SC
Merci

// SCRIPT DE CONTOURNEMENT DES PROBLEMES DE ROTATION DE CARTE
// définition des zones (CleanZone) et des positions sur la carte (GoThere) :
$coordonnees = array();
$coordonnees['Max_null'][] = "";
$coordonnees['Max_chambre_parents'][] = "12300,28500,15400,32100,1";
$coordonnees['Max_sdb_parents'][] = "13200,25800,16100,28400,1";
// Des coordonnees GoThere :
$coordonnees['Bureau'][] = "20000,31000";
// Zones regroupement plusieurs autres zone :
/* NE PAS MODIFIER DESSOUS */

// Récupération des paramètres stockés dans le virtuel :
// rotation relative de la carte == 0 lors de la création initiale des zones
$cmd = cmd::byString("#[Maison][Virtuel Roborock][rotation_map]#");
$rotation = $cmd->execCmd();
// centre X de la carte :
$cmd = cmd::byString("#[Maison][Virtuel Roborock][centre_x]#");
$centre_x = $cmd->execCmd();
// centre Y de la carte :
$cmd = cmd::byString("#[Maison][Virtuel Roborock][centre_y]#");
$centre_y = $cmd->execCmd();
$centre = array($centre_x,$centre_y); // centre X, Y de la carte (25000,25000)

function rotate($x,$y, $angle,$centre) {
if($angle == 0)
{
// ajustement facultatif du centre par défaut en cas de léger déplacement de la base :
$x = $x - 80;
$y = $y + 80;
return array($x,$y);
}
$angle *= M_PI / 180;
$xM = $x - $centre[0];
$yM = $y - $centre[1];
$x = $xM * cos($angle) + $yM * sin($angle) + $centre[0];
$y = - $xM * sin($angle) + $yM * cos($angle) + $centre[1];
return array(round($x), round($y));

}

function generer($coordonnees,$quoi,$rotation,$centre)
{
if( count($coordonnees[$quoi])<1 ) return "AUCUN";
$zonedef=array();
foreach($coordonnees[$quoi] as $lazone)
{ // pour chaque zone
$zone=explode(',', $lazone);
$coord=array();
list( $xa , $ya ) = rotate($zone[0],$zone[1],$rotation,$centre; // Renvoi position debut array(x,y)
if( $zone[2] > 0 )
{ // Clean zone
list( $xb , $yb ) = rotate($zone[2],$zone[3],$rotation,$centre); // renvoi position fin array(x,y)
if( $xa < $xb )
{
$coord[0] = $xa;
$coord[1] = 0;
$coord[2] = $xb;
}
else{
$coord[0] = $xb;
$coord[1] = 0;
$coord[2] = $xa;
}
if( $ya < $yb )
{
$coord[1] = $ya;
$coord[3] = $yb;
}
else{
$coord[1] = $yb;
$coord[3] = $ya;
}
$coord[4]=$zone[4];
$zonedef[]='['.implode(',',$coord).']';
}
else{ // Gothere
$zonedef[] = $xa . "," . $ya;
}
}
return implode(',',$zonedef);
}

$cmd = cmd::bystring("#[Maison][Virtuel Roborock][Ordre]#");
$job = $cmd->execCmd(); // contient le nom de la zone ou position demandée (tel que défini dans notre tableau)

// on génère les coordonnées corrigées :
$newpos = generer($coordonnees,$job,$rotation,$centre);

// et on sauve ces coordonnées dans notre virtuel (pour qu'ils soient expoitables hors de notre bloc de code)
$cmd = cmd::byString("#[Maison][Virtuel Roborock][coordonnees]#");
$cmd->event($newpos);

// FIN DU SCRIPT
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

Avatar de l’utilisateur
noodom
Actif
Messages : 982
Inscription : 13 juil. 2014, 17:25
Contact :

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par noodom » 04 avr. 2019, 18:26

@Lacer,

- il manque une parenthèse pour l'appel à rotate : list( $xa , $ya ) = rotate($zone[0],$zone[1],$rotation,$centre); // Renvoi position debut array(x,y)
- j'éviterais les espaces pour la concaténation ici (pas forcément gênant) : $zonedef[] = $xa . "," . $ya;
- mettre un S majuscule pour byString : $cmd = cmd::byString("#[Maison][Virtuel Roborock][Ordre]#");

PS : tu devrais mettre ton code dans une balise code (bouton </> en mode éditeur avancé) pour nous faciliter la lecture ;)

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 04 avr. 2019, 18:45

Bon sang, tu as l'oeil !!!

C'était la parenthèse, le S majuscule ne change rien.

J'ai bien les coordonnées qui s'affichent dans le virtuel.

Encore merci
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

skyline6951
Timide
Messages : 65
Inscription : 05 sept. 2017, 13:38

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par skyline6951 » 04 avr. 2019, 20:53

Patrick a écrit :
04 avr. 2019, 00:21
skyline6951 a écrit :
03 avr. 2019, 23:16
(...)
j'ai quelques points que je ne comprends pas. Je n'ai jamais eu de rotations de carte mais au cas ou ça arriverait, j'ai mis en place tout le code. Si j'ai bien compris, tant que la variable "rotation map" dans ton virtuel (pour reprendre tes noms) reste à 0, le programme "rotate" qui met à jours les coordonnées en fonction de l'angle ne se lance pas, c'est bien ça?
Pour être précis, j'ai fait un raccourci de langage :-)
En réalité on appelle bien la fonction rotate(),
Sauf qu'elle ne fait pratiquement rien si l'angle de rotation est à zéro.
Elle retourne juste les coordonnées sans les modifier...
Étant donnée que je n'ai pas eu de rotation encore, les variable centre_x et centre_y peuvent rester à zéro.
Non, par défaut t'es centres X et Y devraient être à 25000.
Aussi, juste pour mon information, si je mets 25000,25000 en coordonnée, je ne me trouve pas sur ma base mais à environ 50cm à gauche et 20cm en haut. J'ai vu dnas les précédent post qu'il fallait prendre en compte la largeur de la base et du robot mais même avec cela, je ne me trouve toujours pas sur la base. Ma base se trouve à 25500,24800 environ. Ma question est de savoir ce qu'il faudra mettre en cas de rotation. C'est cette partie que je n'ai pas compris surtout.
Après la première rotation de la carte, tu devras :
  • changer l'angle de rotation en conséquence
  • lancer un nettoyage sur une zone (tant qu'à faire prend la plus complexe, tu te rendras mieux compte des éventuels décalages),
  • et ajuste tes centres jusqu'à ce qu ta zone corresponde bien à ce que tu avais avant la rotation.
Pour les prochaines rotations, tu n'auras plus qu'à changé l'angle car ton centre sera déjà ajusté !
(...)
Ps: je n'ai pas encore investi dans Alexa mais l'idée de piloter le robot pour aller nettoyer une zone par la voix pourrait me faire accélérer la réflexion. Si à l'occasion, tu peux expliquer de manière même succincte l'interaction/mise en place avec Alexa, je suis preneur.
Pourquoi pas, mais le tuto sera encore plus compliqué et long que celui ci (j'utilise Node-Red pour faire ça... ). :lol:
Merci pour ton retour.

Si la fonction rotate ne fait rien à part retourner les coordonnées si l'angle est à 0, ce n'est pas grave si centre_x et centre_y sont à zéro. J'ai lancé un nettoyage et la zone est bonne. Je ne comprends donc pas pourquoi il faut mettre 25000 par défaut du coup. C'est pour que si l'on met un angle, les coordonnées de la base ne soient pas très loin de la réalité?

Comme je te l'ai expliqué, dans mon cas, la base se trouve à 25500,24800. Il ne faudra pas plutôt que je met ces valeurs par défaut ou c'est vraiment 25000 et 25000?

Pour Alexa, je pensais que l’implémentation avec le plugin alexa rendait la tâche "facile". Je me trompe peut-être vu que je ne l'ai pas fait. Et pourquoi utiliser Node-Red (que je ne connais pas du tout) plutôt que le plugin Alexa?

Enfin, j'ai lancé un nettoyage complet de la maison pour tester. Le robot n'a pas fait toutes les zones. La maison est composé de 9 zones. Le robot s'est arrêté après la 5ième. Y-a-t-il une limitation quand l'on créer une zone en regroupant d'autres zones précédemment créées via coordonnées? Voici la définition de mes zones pour illustration.

Code : Tout sélectionner

$coordonnees['Nono_SAM'][]="19250,26300,23300,32000,1";
$coordonnees['Nono_CUISINE'][]="23100,24750,26950,27800,1";
$coordonnees['Nono_SALON'][]="19250,22650,23800,26800,1";
$coordonnees['Nono_TAPIS'][]="20850,24150,23200,25750,2";
$coordonnees['Nono_POELE'][]="20700,22650,23800,24200,2";
$coordonnees['Nono_ENTREE&WC'][]="23850,22450,27400,24750,1";
$coordonnees['Nono_COULOIR'][]="22950,18750,23900,22750,1";
$coordonnees['Nono_CH_VERT'][]="19250,19600,23000,22750,1";
$coordonnees['Nono_CH_SARAH'][]="19250,16600,23450,19700,1";
$coordonnees['Nono_CH_PARENTS'][]="23450,16700,27500,20200,1";
$coordonnees['Nono_SDB'][]="23900,20250,26600,21800,1";
//Définition des coordonnées GoThere:
$coordonnees['Nono_POUBELLE'][]="26700,25950";
//Définition des zones regroupant plusieurs autres zones:
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_SAM'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_CUISINE'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_SALON'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_ENTREE&WC'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_COULOIR'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_CH_VERT'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_CH_SARAH'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_CH_PARENTS'][0];
$coordonnees['Nono_MAISON'][]=$coordonnees['Nono_SDB'][0];

JPLP
Timide
Messages : 207
Inscription : 22 nov. 2017, 13:28

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par JPLP » 04 avr. 2019, 22:07

skyline6951 a écrit :
04 avr. 2019, 20:53
Enfin, j'ai lancé un nettoyage complet de la maison pour tester. Le robot n'a pas fait toutes les zones. La maison est composé de 9 zones. Le robot s'est arrêté après la 5ième. Y-a-t-il une limitation quand l'on créer une zone en regroupant d'autres zones précédemment créées via coordonnées? Voici la définition de mes zones pour illustration.
J'ai remarqué aussi. 5 c'est max, comme sur l'appli mihome.

Avatar de l’utilisateur
Patrick
Helper
Messages : 1029
Inscription : 29 août 2014, 15:21
Localisation : Savoie

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Patrick » 05 avr. 2019, 07:50

skyline6951 a écrit :
04 avr. 2019, 20:53

Merci pour ton retour.

Si la fonction rotate ne fait rien à part retourner les coordonnées si l'angle est à 0, ce n'est pas grave si centre_x et centre_y sont à zéro. J'ai lancé un nettoyage et la zone est bonne. Je ne comprends donc pas pourquoi il faut mettre 25000 par défaut du coup. C'est pour que si l'on met un angle, les coordonnées de la base ne soient pas très loin de la réalité?

Comme je te l'ai expliqué, dans mon cas, la base se trouve à 25500,24800. Il ne faudra pas plutôt que je met ces valeurs par défaut ou c'est vraiment 25000 et 25000?
La seule vraie contrainte, c'est d'avoir des centres différents de zéro pour éviter de provoquer un plantage du script car en informatique les divisions par zéro sont interdites...
Donc, si tu ne connais pas la position de la base tu mets 25000, sinon tu mets la position que tu as identifié.
Il te sera toujours possible de l'ajuster après ta première rotation si besoin... ;-)
skyline6951 a écrit :
04 avr. 2019, 20:53
Pour Alexa, je pensais que l’implémentation avec le plugin alexa rendait la tâche "facile". Je me trompe peut-être vu que je ne l'ai pas fait. Et pourquoi utiliser Node-Red (que je ne connais pas du tout) plutôt que le plugin Alexa?
Possible, mais je n'ai pas testé le plugin alexa car il n'était pas disponible quand j'ai intégré la reconnaissance vocale dans ma domotique. :-)
ßêta-Testeur / Développeur plugin / Modérateur du Forum EnOcean

En domotique ou en informatique, il n'y a pas de problème, mais seulement des solutions à trouver...
Pour contribuer au développement des plugins et tutos : Paypal

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 05 avr. 2019, 16:38

Bonjour,
Pour info, j'utilise la google home pour commander le roborock.
la google home n'est pas intégrée à jeedom et j'utilise une seule applet ifttt pour transmettre toutes les interactions définies dans jeedom. Je peux dire : "ok google, jeedom, aspire la cuisine", jeedom (ou autre chose défini dans l'applet) sert à dire à google qu'il doit passer l'ordre à jeedom qui lance l'interaction "aspire la cuisine".
Il est peut être possible de faire ce genre de chose avec alexa.
@+
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

djo074
Timide
Messages : 50
Inscription : 19 janv. 2018, 14:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par djo074 » 05 avr. 2019, 16:45

Bonjour à tous,
Après de nombreuses relectures de mon bloc code, je n'arrive toujours pas a trouver mon erreur, qui fait que mon robot, décolle de la base, mais après 2 sec déclare qu'il a aspiré la zone et se remet sur sa base. les coordonnées du code ne sont pas non plus remontées au virtuel pour affichage.
Je vous soumet mon code pour qu'une âme charitable et surtout plus douée que moi y jette un oeil!
Merci
Djo.

Code : Tout sélectionner

//SCRIPT de contournement des problemes de rotations de cartes
//définition des zones (CleanZone) et des positions sur la carte (GoThere) : 
$coordonnees = array();
$coordonnees['NULL'][] = "";
$coordonnees['SEJOUR'][] = "20700, 25000, 25900, 30900, 1";
$coordonnees['TABLE_MANGER'][] = "22500, 28500, 25900, 30900, 1";
$coordonnees['SDB'][] = "18000, 25000, 19700, 28800, 1";
$coordonnees['CUISINE'][] = "21900, 31300, 24500, 34700, 1";
$coordonnees['CHAMBRE'][] = "17850, 32350, 20500, 35500, 1";

// zones regroupements plusieures autres zones : 
$coordonnees['REPAS'][] = $coordonnees['TABLE_MANGER'][0];
$coordonnees['REPAS'][] = $coordonnees['CUISINE'][0];
$coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['SEJOUR'][0];
$coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['SDB'][0];
$coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['CUISINE'][0];
$coordonnees['APPARTEMENT_FULL'][] = $coordonnees['SEJOUR'][0];
$coordonnees['APPARTEMENT_FULL'][] = $coordonnees['SDB'][0];
$coordonnees['APPARTEMENT_FULL'][] = $coordonnees['CUISINE'][0];
$coordonnees['APPARTEMENT_FULL'][] = $coordonnees['CHAMBRE'][0];
/*NE PAS MODIFIER DESSOUS*/

// Récupération des parametres stockés dans le virtuel:
	//rotation relative de la carte == 0 lors de la création initiale des zones
$cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][rotation_map]#");
$rotation = $cmd->execCmd();
// centre X de la carte : 
$cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][centre_x]#");
$centre_x = $cmd->execCmd();
// centre Y de la carte : 
$cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][centre_y]#");
$centre_y = $cmd->execCmd();
$centre = array($centre_x,$centre_y); // centre X,Y de la carte (25000,25000)

function rotate($x,$y,$angle,$centre) {
  if($angle ==0)
  	{
    //ajustement facultatif du centre par défaut en cas de léger déplacement de la base :
    //$x = $x - 80;
    //$y = $y + 80;
    return array($x,$y);
  	}
  $angle *= M_PI / 180;
  $xM = $x - $centre[0];
  $yM = $y - $centre[1];
  $x = $xM * cos($angle) + $yM * sin($angle) + $centre[0];
  $y = - $xM * sin($angle) + $yM * cos($angle) + $centre[1];
  return array(round($x), round($y));
  
}

function generer($coordonnees,$quoi,$rotation,$centre)
	{
  	if(count($coordonnees[$quoi])<1) return "AUCUN";
  	$zonedef=array();
  	foreach($coordonnees[$quoi] as $lazone)
    	{ //pour chaque zone
      	$zone=explode(',', $lazone);
      	$coord=array();
      	list($xa , $ya) = rotate($zone[0].$zone[1],$rotation,$centre); //renvoi position début array(x,y)
      	if($zone[2] > 0)
        	{ //cleanZone
          	list($xb , $yb) = rotate($zone[2],$zone[3],$rotation,$centre); //renvoi position fin array(x,y)
          	if($xa < $xb)
            	{
              	$coord[0] = $xa;
              	$coord[1] = 0;
              	$coord[2] = $xb;
            	}
          	else{
              	$coord[0] = $xb;
              	$coord[1] = 0;
              	$coord[2] = $xa;
            	}
          	if($ya < $yb)
            	{
              	$coord[1] = $ya;
              	$coord[3] = $yb;
            	}
          	else{
              	$coord[1] = $yb;
              	$coord[3] = $ya;
            	}
          	$coord[4] = $zone[4];
          	$zonedef[] = '['.implode(',',$coord).']';
       	 	}
      	else{  //GoThere
          	$zonedef[] = $xa . "," . $ya;
        	}
    	}
  	return implode(',',$zonedef);
	}

$cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][ordre]#");
$job = $cmd->execCmd(); //contient le nom de la zone ou position demandée (tel que défini dans le tableau)

// on génere les coordonnées corrigées :
$newpos = generer($coordonnees,$job,$rotation,$centre);

// et on sauve ces coordonnées dans notre virtuel (pour qu'elles soient exploitables hors de notre bloc de code)
$cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][coordonnees]#");
$cmd->event($newpos);

//FIN DU SCRIPT
      

JPLP
Timide
Messages : 207
Inscription : 22 nov. 2017, 13:28

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par JPLP » 05 avr. 2019, 16:51

Lacer a écrit :
05 avr. 2019, 16:38
Bonjour,
Pour info, j'utilise la google home pour commander le roborock.
la google home n'est pas intégrée à jeedom et j'utilise une seule applet ifttt pour transmettre toutes les interactions définies dans jeedom. Je peux dire : "ok google, jeedom, aspire la cuisine", jeedom (ou autre chose défini dans l'applet) sert à dire à google qu'il doit passer l'ordre à jeedom qui lance l'interaction "aspire la cuisine".
Il est peut être possible de faire ce genre de chose avec alexa.
@+
Pour info, moi, j'utilise l’excellent tuto suivant : viewtopic.php?f=59&t=40578
Il permet d'utiliser les interactions via IFTTT sans dire "Ok google, jeedom..." que je trouve rédhibitoire !
Donc je peux dire "Ok google, allume le salon et le couloir et éteins la télé" . Tout se fait en même temps, et là... je trouve ça classe !
Reste plus qu'à le modifier pour dire "Passe l'aspi dans le bureau et la cuisine" pour que ce soit parfait !

Lacer
Timide
Messages : 56
Inscription : 24 nov. 2017, 17:59

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Message par Lacer » 05 avr. 2019, 17:26

J'ai dit "jeedom" pour être plus compréhensible car cette applet unique permet de transmettre n'importe quelle interaction mais l'inconvénient est de dire l'un des trois mots clés définis dans cette applet. J'ai bien noté le lien du tuto, mais j'ai l'impression qu'il faut créer une applet par interaction, non ?
Mais mon roborock s'appelle Max et je dis "ok google, Max aspire la cuisine".
Et je viens de créer une interaction pour dire : "ok google, Max passe l'aspi dans le bureau et la cuisine" et je l'ai fait avant toi, Na ! Et comme Max c'est un bon petit soldat, il y va.
Je rigole (pas trouvé l'émoticône)
But : piloter la maison à la voix
Groupe FB "club domotique Lyon" pour infos
Thermostat sur PAC réversible
Google Home et Sonoff, IFTTT, relais electrodragon
Jeedom sur Raspberry Fibaro commandé avec une seule commande IFTTT et interactions

Répondre

Revenir vers « [Plugin Tiers] Xiaomi Home »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités