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?

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, 17:42

djo074 a écrit :
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
      
En regardant comme ça (depuis mon tel), je ne vois pas d'erreurs de syntaxe.

Je pencherai plutôt pour une erreur sur le virtuel ou son appel...
car ton symptôme laisse penser que les positions ne sont pas envoyées à l'aspirateur...
Tu pourrais nous faire voir tes commandes action et infos du Virtuel ?
Je soupçonne que le problème vient de là... ;)
ßê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

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

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

Message par skyline6951 » 05 avr. 2019, 18:55

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.
@+
Merci pour l'info. Il faut que je me penche sur la question sérieusement pour choisir entre Google Home ou Alexa

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, 19:10

Lacer a écrit :
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)
non, non, un seul scénario suffit pour toutes les interactions. Suffit juste de bien le configurer. Chose que je n'ai pas encore pris le temps de faire pour l'aspirateur.
Mais ce qui me rebute, c'est déjà qu'il faut dire "ok google" . Je trouve ça très laid ! Je trouve "alexa" plus sympa et plus intime comme mot clé.
S'il faut rajouter un autre mot clé "jeedom", "max" ou "toto" :shock: , comme tu dis c'est au choix, mais obligatoire. Donc, pas pour moi.

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

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

Message par skyline6951 » 05 avr. 2019, 19:17

Patrick a écrit :
22 mars 2019, 15:17
En fait, chaque rafraichissement de l'info suppose d'aller interroger le serveur pour récupérer le statut, donc par défaut le Refresh se fait automatiquement une fois par minute, mais on peut si besoin le lancer manuellement...

Par exemple, on peut accélérer les Refresh lorsque qu'on vient de lancer le robot afin d'être averti plus rapidement de la fin de sa mission :
screenshot.603.png
Salut Patrick,

L'accélération du rafraichissement de l'état du robot est la dernière étape pour moi (avant l'assistant vocal :-) ). Le screenshot si dessus (page12) est un scenario dédié qui ne fait que ça? La condition pour lancer ce scenario est l'état du robot j'imagine. Le screenshot du scenario est complet ou il y a d'autres petites choses/améliorations que l'on ne voit pas?

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

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

Message par skyline6951 » 05 avr. 2019, 19:20

JPLP a écrit :
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 !
C'est parti en favoris pour moi aussi si je choisis GH. Merci pour le lien

Rvitch
Actif
Messages : 683
Inscription : 21 juin 2016, 10:31

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

Message par Rvitch » 05 avr. 2019, 19:49

skyline6951 a écrit :
JPLP a écrit :
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 !
C'est parti en favoris pour moi aussi si je choisis GH. Merci pour le lien
Vous n'avez pas à passer pas iftt pour faire ça.
Il suffira de partager la commande "passe l'aspirateur dans le salon" dans le plugin Google smart home de jeedom.
Pour la lancer, soir dire ok Google lance nom du scénario ou autre moyen créer une routine Gh avec le déclencheur vocal voulut.
C'est très simple et user friendly.

Envoyé de mon Mi Note 3 en utilisant Tapatalk


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, 20:42

skyline6951 a écrit :
05 avr. 2019, 19:17
Patrick a écrit :
22 mars 2019, 15:17
En fait, chaque rafraichissement de l'info suppose d'aller interroger le serveur pour récupérer le statut, donc par défaut le Refresh se fait automatiquement une fois par minute, mais on peut si besoin le lancer manuellement...

Par exemple, on peut accélérer les Refresh lorsque qu'on vient de lancer le robot afin d'être averti plus rapidement de la fin de sa mission :
screenshot.603.png
Salut Patrick,

L'accélération du rafraichissement de l'état du robot est la dernière étape pour moi (avant l'assistant vocal :-) ). Le screenshot si dessus (page12) est un scenario dédié qui ne fait que ça? La condition pour lancer ce scenario est l'état du robot j'imagine. Le screenshot du scenario est complet ou il y a d'autres petites choses/améliorations que l'on ne voit pas?
En fait, ce bloc est à ajouter dans ton scénario juste après ta commande qui envoi l'aspi faire son boulot (exemple: #[Séjour][R2D2][CleanZone]#)...

Bien sur il faut déjà que tu définisses le texte de la condition par rapport à ce que tu veux faire...
file.png
file.png (37.32 Kio) Consulté 1417 fois
Ce que fait ce bloc :

il lance ce bloc "DANS" immédiatement (car 0min) MAIS en mode asynchrone, un peu comme un autre scénario indépendant (autrement dit, tout ce qui suit ce bloc sera exécuté normalement sans attendre ce qui se passe dans ce bloc).

Pendant que le reste de ton scénario continue, ce bloc va faire une boucle (120 fois dans mon exemple, mais à adapter pour chaque cas/zone).
  • et à chaque itération
    • il regarde SI( le statut== "Je me dirige vers la cible")
      (car la moi je voulait trouver le moment ou il sera arrivé sur zone)
    • SI ma condition est VRAI, c'est que le robot est encore en chemin !
    • ALORS, je rafraichit les état de l'aspi,
      et j’attends pendant 10 secondes maximum au cas ou que l'état devienne différent de "Je me dirige vers la cible" pendant ces 10 sec
      • si ça arrive : je passe à l'itération suivante,
        mais comme mon premier SI() sera donc désormais faux, cela va vidé en une seconde toutes mes itérations restante (car je ne passerai plus par la commande WAIT et je finirai par ma commande remove_inat (qui va stopper mon bloc "DANS") car l’évènement que j’attendais (CaD que le statut ne soit plus "je me dirige vers la cible") est enfin arrivé !!!
  • sinon, au bout de 10 seconde, je vais de nouveau reprendre le contenu de mon SI, Rafraichir et attendre maxi 10 sec, etc...
ßê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

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

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

Message par skyline6951 » 05 avr. 2019, 21:41

Merci pour ces explications qui viennent confirmer mon analyse.
Ça ne pose pas problème je pense de mettre plusieurs "Dans" à la suite.

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, 23:13

Bonsoir,
A Jplp, je trouve dommage de faire un choix sur le fait de dire Alexa ou ok google, et je pense que l'on pourra changer ce ok google. L'un de mes fils a eu Alexa et la rendue puis la freebox delta avec Alexa et la rendue aussi, il trouve que la Google Home comprend bien mieux. Mais chacun est libre de son choix.
A Rvitch, ta google home doit être intégrée à Jeedom pour faire ce que tu dis ? La mienne ne l'est pas encore.
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

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

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

Message par JPLP » 06 avr. 2019, 09:14

Lacer a écrit :
05 avr. 2019, 23:13
Bonsoir,
A Jplp, je trouve dommage de faire un choix sur le fait de dire Alexa ou ok google, et je pense que l'on pourra changer ce ok google. L'un de mes fils a eu Alexa et la rendue puis la freebox delta avec Alexa et la rendue aussi, il trouve que la Google Home comprend bien mieux. Mais chacun est libre de son choix.
Oui, je suis bien d'accord. C'est bien pour ça que j'ai choisi la google home :)
Lacer a écrit :
05 avr. 2019, 23:13
A Rvitch, ta google home doit être intégrée à Jeedom pour faire ce que tu dis ? La mienne ne l'est pas encore.
Ce serait plutôt l'inverse : Il faut que ton jeedom soit intégré à GH.

PS : je pense qu'on s'égare un peu du sujet : Aspirateur Roborock S50 => définir les zones de la maison? :D

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

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

Message par Lacer » 06 avr. 2019, 10:51

Bonjour,
Tu as raison, même si c'est pour commander au S50 d'aspirer certaines zones.
Je t'envoie un mp car je ne comprends pas quand tu dis jeedom intégré à GH
Bon week-end.
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 » 08 avr. 2019, 09:26

Patrick a écrit :
05 avr. 2019, 17:42
djo074 a écrit :
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
      
En regardant comme ça (depuis mon tel), je ne vois pas d'erreurs de syntaxe.

Je pencherai plutôt pour une erreur sur le virtuel ou son appel...
car ton symptôme laisse penser que les positions ne sont pas envoyées à l'aspirateur...
Tu pourrais nous faire voir tes commandes action et infos du Virtuel ?
Je soupçonne que le problème vient de là... ;)
Bonjour Patrick,
Merci pour ta réponse,
Voici mon virtuel
Image
http://bit.ly/2OYELhk
Et les blocs actions dans le scénario, après le script ci-dessus:
Image
http://bit.ly/2OWru91

Je ne saisis pas bien comment les coordonnées sont envoyées au virtuel, pour etres reprises dans le scénario.

Merci encore.

Djo

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 » 08 avr. 2019, 10:19

djo074 a écrit :
08 avr. 2019, 09:26
Patrick a écrit :
05 avr. 2019, 17:42
djo074 a écrit :
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
      
En regardant comme ça (depuis mon tel), je ne vois pas d'erreurs de syntaxe.

Je pencherai plutôt pour une erreur sur le virtuel ou son appel...
car ton symptôme laisse penser que les positions ne sont pas envoyées à l'aspirateur...
Tu pourrais nous faire voir tes commandes action et infos du Virtuel ?
Je soupçonne que le problème vient de là... ;)
Bonjour Patrick,
Merci pour ta réponse,
Voici mon virtuel
Image
http://bit.ly/2OYELhk
Et les blocs actions dans le scénario, après le script ci-dessus:
Image
http://bit.ly/2OWru91

Je ne saisis pas bien comment les coordonnées sont envoyées au virtuel, pour etres reprises dans le scénario.

Merci encore.

Djo
.

Bon, déjà commence par enlever les espaces que tu as mis dans tes zones :

FAUX :

Code : Tout sélectionner

$coordonnees['SEJOUR'][] = "20700, 25000, 25900, 30900, 1";
BON :

Code : Tout sélectionner

$coordonnees['SEJOUR'][] = "20700,25000,25900,30900,1";
Mon petit doigt me dit que ton aspirateur appréciera plus :lol: :D

Sinon le principe est le suivant :
  • Tu cliques sur ton bouton Virtuel "séjour"
  • cela va changer le contenu de ORDRE qui va maintenant contenir "SEJOUR"
  • ce changement de ORDRE va déclencher le scénario
  • Le scénario exécute le bloc code et va lire (au début du script) le contenu des paramètres définis actuellement dans le virtuel (initialisation des variables $rotation, $centre_x, $centre_Y)
  • il va aussi initialiser le contenu de ORDRE (vers la fin du scénario), Il dispose maintenant de toutes les infos pour lancer les fonctions
  • donc il exécute la fonction : $newpos = generer($coordonnees,$job,$rotation,$centre); (et les coordonnées corrigées sont maintenant dans $newpos)
  • pour finir, il stocke $newpos (les coordonnées) dans le Virtuel pour que ce soit plus simple de les utiliser dans tes autres blocs de ton scénario (qui ne sont pas des bloc Code)...
  • FIN de la partie code ;)
ßê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

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

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

Message par djo074 » 08 avr. 2019, 16:21

Patrick a écrit :
08 avr. 2019, 10:19
djo074 a écrit :
08 avr. 2019, 09:26
Patrick a écrit :
05 avr. 2019, 17:42

En regardant comme ça (depuis mon tel), je ne vois pas d'erreurs de syntaxe.

Je pencherai plutôt pour une erreur sur le virtuel ou son appel...
car ton symptôme laisse penser que les positions ne sont pas envoyées à l'aspirateur...
Tu pourrais nous faire voir tes commandes action et infos du Virtuel ?
Je soupçonne que le problème vient de là... ;)
Bonjour Patrick,
Merci pour ta réponse,
Voici mon virtuel
Image
http://bit.ly/2OYELhk
Et les blocs actions dans le scénario, après le script ci-dessus:
Image
http://bit.ly/2OWru91

Je ne saisis pas bien comment les coordonnées sont envoyées au virtuel, pour etres reprises dans le scénario.

Merci encore.

Djo
.

Bon, déjà commence par enlever les espaces que tu as mis dans tes zones :

FAUX :

Code : Tout sélectionner

$coordonnees['SEJOUR'][] = "20700, 25000, 25900, 30900, 1";
BON :

Code : Tout sélectionner

$coordonnees['SEJOUR'][] = "20700,25000,25900,30900,1";
Mon petit doigt me dit que ton aspirateur appréciera plus :lol: :D

Sinon le principe est le suivant :
  • Tu cliques sur ton bouton Virtuel "séjour"
  • cela va changer le contenu de ORDRE qui va maintenant contenir "SEJOUR"
  • ce changement de ORDRE va déclencher le scénario
  • Le scénario exécute le bloc code et va lire (au début du script) le contenu des paramètres définis actuellement dans le virtuel (initialisation des variables $rotation, $centre_x, $centre_Y)
  • il va aussi initialiser le contenu de ORDRE (vers la fin du scénario), Il dispose maintenant de toutes les infos pour lancer les fonctions
  • donc il exécute la fonction : $newpos = generer($coordonnees,$job,$rotation,$centre); (et les coordonnées corrigées sont maintenant dans $newpos)
  • pour finir, il stocke $newpos (les coordonnées) dans le Virtuel pour que ce soit plus simple de les utiliser dans tes autres blocs de ton scénario (qui ne sont pas des bloc Code)...
  • FIN de la partie code ;)


Merci pour ta patience Patrick... J'ai corrigé, mais cela ne marche pas encore. :cry:
La seule différence est que le virtuel, affiche "AUCUN" au retour des coordonnées, contre rien auparavant.
voici le log:

Code : Tout sélectionner

[2019-04-08 16:12:47][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Informatique][Aspirateur_clean_zones][ordre].
[2019-04-08 16:12:47][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-04-08 16:12:47][SCENARIO] Exécution d'un bloc code
[2019-04-08 16:12:47][SCENARIO]  - ----------------------------------------
[2019-04-08 16:12:47][SCENARIO]  - - Framework sc v0.97l                  -
[2019-04-08 16:12:47][SCENARIO]  - - Vos scenarios en PHP                 -
[2019-04-08 16:12:47][SCENARIO]  - - by dJuL                                -
[2019-04-08 16:12:47][SCENARIO]  - ----------------------------------------
[2019-04-08 16:12:47][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2019-04-08 16:12:47][SCENARIO]  - - - 
[2019-04-08 16:12:47][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG INACTIF (prod) */
[2019-04-08 16:12:47][SCENARIO]  - - - 
[2019-04-08 16:12:47][SCENARIO] Unsupported operand types
[2019-04-08 16:12:47][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "SEJOUR"  ] = Vrai
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-04-08 16:12:48][SCENARIO] Exécution de la commande [Séjour][robot][CleanZone] avec comme option(s) : {"background":"0","title":"","message":"AUCUN"}
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "TABLE_MANGER"  ] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "SDB"  ] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "CUISINE"  ] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "CHAMBRE" ] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "TABLE _&_CUISINE"] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 16:12:48][SCENARIO] Evaluation de la condition : ["SEJOUR" == "ASPIRER_TOUT"] = Faux
[2019-04-08 16:12:48][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 16:12:48][SCENARIO] Fin correcte du scénario
Je comprends pas...
Merci encore.
Djo

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 » 08 avr. 2019, 16:54

tu as une erreur déjà au début de ton log :

Code : Tout sélectionner

[2019-04-08 16:12:47][SCENARIO] Unsupported operand types
Fais moi voir un screen du début de ton scénario, est-ce que tu as fait un truc du genre = au lieu == sur un if, ou un truc dans le genre dans ton scénario ?
ßê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 » 08 avr. 2019, 17:06

Tiens, comme tu as SC, remplace aussi temporairement dans ton bloc code cette ligne :

Code : Tout sélectionner


$newpos = generer($coordonnees,$job,$rotation,$centre);

par ces lignes :

Code : Tout sélectionner

$sc->message(date()."JOB=$job,\n ROTATION=$rotation,\n CENTRE=" . print_r($centre,1) );
$newpos = generer($coordonnees,$job,$rotation,$centre);
$sc->message(date()."$job, $rotation, $centre_x,  $centre_y,  POSITION de la zone [$job] = ".$newpos);
Copie ici les messages après avoir lancer ton scénario, Comme ça on verra mieux ce qui ce passe... ;)

Je m'interroge aussi sur ta commande info "ordre" dans ton virtuel... un screen STP ?
ßê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

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

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

Message par djo074 » 08 avr. 2019, 17:16

Patrick a écrit :
08 avr. 2019, 17:06
Tiens, comme tu as SC, remplace aussi temporairement dans ton bloc code cette ligne :

Code : Tout sélectionner


$newpos = generer($coordonnees,$job,$rotation,$centre);

par ces lignes :

Code : Tout sélectionner

$sc->message(date()."JOB=$job,\n ROTATION=$rotation,\n CENTRE=" . print_r($centre,1) );
$newpos = generer($coordonnees,$job,$rotation,$centre);
$sc->message(date()."$job, $rotation, $centre_x,  $centre_y,  POSITION de la zone [$job] = ".$newpos);
Copie ici les messages après avoir lancer ton scénario, Comme ça on verra mieux ce qui ce passe... ;)

Je m'interroge aussi sur ta commande info "ordre" dans ton virtuel... un screen STP ?


Alors,
voici le screen du scénario avant la modif ci dessus:
Image
http://bit.ly/2uPt6bk

et voici le log apres la modif que tu as indiqué

Code : Tout sélectionner

[2019-04-08 17:10:19][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Informatique][Aspirateur_clean_zones][ordre].
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-04-08 17:10:19][SCENARIO] Exécution d'un bloc code
[2019-04-08 17:10:19][SCENARIO]  - ----------------------------------------
[2019-04-08 17:10:19][SCENARIO]  - - Framework sc v0.97l                  -
[2019-04-08 17:10:19][SCENARIO]  - - Vos scenarios en PHP                 -
[2019-04-08 17:10:19][SCENARIO]  - - by dJuL                                -
[2019-04-08 17:10:19][SCENARIO]  - ----------------------------------------
[2019-04-08 17:10:19][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2019-04-08 17:10:19][SCENARIO]  - - - 
[2019-04-08 17:10:19][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG INACTIF (prod) */
[2019-04-08 17:10:19][SCENARIO]  - - - 
[2019-04-08 17:10:19][SCENARIO]  - ACTION MESSAGE: Ajout d'un message dans le centre de message
[2019-04-08 17:10:19][SCENARIO]  - ACTION MESSAGE - message: 'JOB=SEJOUR,
ROTATION=0,
CENTRE=Array
(
[0] => 25900
[1] => 25500
)'
[2019-04-08 17:10:19][SCENARIO] Unsupported operand types
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "SEJOUR"  ] = Vrai
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-04-08 17:10:19][SCENARIO] Exécution de la commande [Séjour][robot][CleanZone] avec comme option(s) : {"background":"0","title":"","message":"AUCUN"}
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "TABLE_MANGER"  ] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "SDB"  ] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "CUISINE"  ] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "CHAMBRE" ] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "TABLE _&_CUISINE"] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 17:10:19][SCENARIO] Evaluation de la condition : ["SEJOUR" == "ASPIRER_TOUT"] = Faux
[2019-04-08 17:10:19][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 17:10:19][SCENARIO] Fin correcte du scénario
Meme probleme si centre x et y à 0

[edit]
Et le virtuel:

Image
http://bit.ly/2OXCVx4


Et merci, merci, merci! :D

Djo

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 » 08 avr. 2019, 17:35

Remplace le code modifié par celui-ci...

Code : Tout sélectionner

$sc->message(date()."JOB=[$job],\n ROTATION=[$rotation],\n CENTRE=" . print_r($centre,1) );
$newpos = generer($coordonnees,$job,$rotation,$centre);
$sc->message(date()."$job, $rotation, $centre_x,  $centre_y,  POSITION de la zone [$job] = ".$newpos);
ßê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

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

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

Message par djo074 » 08 avr. 2019, 21:41

Patrick a écrit :
08 avr. 2019, 17:35
Remplace le code modifié par celui-ci...

Code : Tout sélectionner

$sc->message(date()."JOB=[$job],\n ROTATION=[$rotation],\n CENTRE=" . print_r($centre,1) );
$newpos = generer($coordonnees,$job,$rotation,$centre);
$sc->message(date()."$job, $rotation, $centre_x,  $centre_y,  POSITION de la zone [$job] = ".$newpos);
Bahhhh, tout pareil:

Code : Tout sélectionner

[2019-04-08 21:36:40][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Informatique][Aspirateur_clean_zones][ordre].
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-04-08 21:36:40][SCENARIO] Exécution d'un bloc code
[2019-04-08 21:36:40][SCENARIO]  - ----------------------------------------
[2019-04-08 21:36:40][SCENARIO]  - - Framework sc v0.97l                  -
[2019-04-08 21:36:40][SCENARIO]  - - Vos scenarios en PHP                 -
[2019-04-08 21:36:40][SCENARIO]  - - by dJuL                                -
[2019-04-08 21:36:40][SCENARIO]  - ----------------------------------------
[2019-04-08 21:36:40][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2019-04-08 21:36:40][SCENARIO]  - - - 
[2019-04-08 21:36:40][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG INACTIF (prod) */
[2019-04-08 21:36:40][SCENARIO]  - - - 
[2019-04-08 21:36:40][SCENARIO]  - ACTION MESSAGE: Ajout d'un message dans le centre de message
[2019-04-08 21:36:40][SCENARIO]  - ACTION MESSAGE - message: 'JOB=[TABLE_MANGER],
ROTATION=[0],
CENTRE=Array
(
[0] => 0
[1] => 0
)'
[2019-04-08 21:36:40][SCENARIO] Unsupported operand types
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "SEJOUR"  ] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "TABLE_MANGER"  ] = Vrai
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-04-08 21:36:40][SCENARIO] Exécution de la commande [Séjour][robot][CleanZone] avec comme option(s) : {"background":"0","title":"","message":"AUCUN"}
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "SDB"  ] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "CUISINE"  ] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "CHAMBRE" ] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "TABLE _&_CUISINE"] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-04-08 21:36:40][SCENARIO] Evaluation de la condition : ["TABLE_MANGER" == "ASPIRER_TOUT"] = Faux
[2019-04-08 21:36:40][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-04-08 21:36:40][SCENARIO] Fin correcte du scénario
--
Merci,

Djo

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 » 08 avr. 2019, 21:57

Dans ton appel à rotate, entre les 2 paramètres, tu as un point au lieu d'une virgule :

list($xa, $ya) = rotate ($zone[0],$zone[1],$rotation,$centre);

Répondre

Revenir vers « [Plugin Tiers] Xiaomi Home »

Qui est en ligne ?

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