J'ai eu une erreur hier : coincé dans la ficelle d'un ballon et la carte n'a pas tournée pour la partTheking31 a écrit :Au final je pense que chaque erreur de l'aspi génére le recalcul de la carte !
Envoyé de mon Pixel 3 en utilisant Tapatalk
J'ai eu une erreur hier : coincé dans la ficelle d'un ballon et la carte n'a pas tournée pour la partTheking31 a écrit :Au final je pense que chaque erreur de l'aspi génére le recalcul de la carte !
Tout a fait d'accord.toma a écrit :J'ai eu une erreur hier : coincé dans la ficelle d'un ballon et la carte n'a pas tournée pour la partTheking31 a écrit :Au final je pense que chaque erreur de l'aspi génére le recalcul de la carte !
Envoyé de mon Pixel 3 en utilisant Tapatalk
viewtopic.php?p=726355#p726355__pandi__ a écrit :Bonjour à tous,
mon nettoyage de zone fonctionne parfaitement. Je pilote le tout avec la google home. C'est vraiment extra.
Par contre ce matin, ma carte a tourné. Du coup, mes zones définies sont inopérantes.
Une solution ?
Merci
Ca ressemble à une carte qui a tourné ça non ? Dans Mi Home rien d'anormal ?
Je ne pense pas qu'il s'agisse d'une rotation de la carte car lorsque je lance un GoThere avec les points bas-gauche ou haut-droit de ma zone, il va au bon endroit... C'est la fonction CleanZone qui ne marche plus correctement chez moi et je ne vois pas ce que j'ai bien pu faire pour qu'elle ne fonctionne plus... Au début elle marchait très bien. Sinon sur Mi Home il n'y a rien de changé.
Je reviens avec de bonne nouvelle!!!! Ça marche enfin!!!chboc85 a écrit : ↑23 mai 2019, 08:59Je ne pense pas qu'il s'agisse d'une rotation de la carte car lorsque je lance un GoThere avec les points bas-gauche ou haut-droit de ma zone, il va au bon endroit... C'est la fonction CleanZone qui ne marche plus correctement chez moi et je ne vois pas ce que j'ai bien pu faire pour qu'elle ne fonctionne plus... Au début elle marchait très bien. Sinon sur Mi Home il n'y a rien de changé.
Je pense que je vais supprimer la carte de Mi home est relancer mon aspirateur pour qu'il régénère la carte au complet et repartir sur une carte "neuve", suite a cela redéfinir mes zones a partir de cette "nouvelle" carte.
J'ai effectivement deux murs virtuel depuis le début et la carte n'a jamais tournée chez moi.... Un rapport ou pas je sais pas ....mounik34 a écrit :Pour la rotation de la carte : depuis que j'ai rajouté un mur virtuel (v2) la carte n'a jamais plus changée/tournée! Essayez de mettre un mur (meme en dehors de la carte ....
Code : Tout sélectionner
------------------------------------
[2019-05-27 18:16:03][SCENARIO] Start : Scenario lance manuellement.
[2019-05-27 18:16:04][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-05-27 18:16:04][SCENARIO] Exécution d'un bloc code
[2019-05-27 18:16:04][SCENARIO] syntax error, unexpected ':'
[2019-05-27 18:16:04][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-05-27 18:16:04][SCENARIO] Evaluation de la condition : ["" == "ASPI_CHAMBRE"] = Faux
[2019-05-27 18:16:04][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-05-27 18:16:04][SCENARIO] Fin correcte du scénario
Code : Tout sélectionner
$coordonnees = array();
$coordonnees['ASPI_CHAMBRE'][] = "21000,22000,25000,25500,1";
$coordonnees['ASPI_SALON'][] = "25000,24000,30000,30500,1";
$coordonnees['ASPI_CUISINE'][] = "22300,28500,23950,31000,1";
$coordonnees['ASPI_POUBELLE'][] = "23000,27500";
//Récupération des paramètres stockés dans le virtuel
//Rotation relative de la carte == Lors de la création initiale des zones
$cmd = cmd: :byString("#[Aucun][Info_aspi][rotation_map]#");
$rotation = $cmd->execCmd();
//centre X de la carte:
$cmd = cmd: :byString("#[Aucun][Info_aspi][centre_x]#");
$centre_x = $cmd->execCmd();
//centre Y de la carte
$cmd = cmd: :byString("#[Aucun][Info_aspi][centre_y]#");
$centre_x = $cmd->execCmd();
$centre = array($centre_x,$centre_y); //centreX,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)
{ // 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("#[Aucun][Info_aspi][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és :
$newpos = generer($coordonnees,$job,$rotation,$centre);
// et on sauve ces coordonnées dans notre virtuel (pour qu'ils soient exploitables hors de notre bloc de code)
$cmd = cmd::byString("#[Aucun][Info_aspi][coordonnees]#");
$cmd->event($newpos);
Salut,splog22780 a écrit : ↑27 mai 2019, 18:32Bonjour,
J'ai relu le code de mon scénario mais je ne vois pas où se trouve l'erreur...
Est ce qu'il serait possible de me dire où se trouve l'erreur?Code : Tout sélectionner
$coordonnees = array(); $coordonnees['ASPI_CHAMBRE'][] = "21000,22000,25000,25500,1"; $coordonnees['ASPI_SALON'][] = "25000,24000,30000,30500,1"; $coordonnees['ASPI_CUISINE'][] = "22300,28500,23950,31000,1"; $coordonnees['ASPI_POUBELLE'][] = "23000,27500"; //Récupération des paramètres stockés dans le virtuel //Rotation relative de la carte == Lors de la création initiale des zones $cmd = cmd: :byString("#[Aucun][Info_aspi][rotation_map]#"); $rotation = $cmd->execCmd(); //centre X de la carte: $cmd = cmd: :byString("#[Aucun][Info_aspi][centre_x]#"); $centre_x = $cmd->execCmd(); //centre Y de la carte $cmd = cmd: :byString("#[Aucun][Info_aspi][centre_y]#"); $centre_x = $cmd->execCmd(); $centre = array($centre_x,$centre_y); //centreX,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) { // 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("#[Aucun][Info_aspi][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és : $newpos = generer($coordonnees,$job,$rotation,$centre); // et on sauve ces coordonnées dans notre virtuel (pour qu'ils soient exploitables hors de notre bloc de code) $cmd = cmd::byString("#[Aucun][Info_aspi][coordonnees]#"); $cmd->event($newpos);
Merci d'avance
Code : Tout sélectionner
------------------------------------
[2019-05-28 13:57:46][SCENARIO] Start : Scenario lance manuellement.
[2019-05-28 13:57:46][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-05-28 13:57:46][SCENARIO] Exécution d'un bloc code
[2019-05-28 13:57:46][SCENARIO] syntax error, unexpected ':'
[2019-05-28 13:57:46][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-05-28 13:57:46][SCENARIO] Evaluation de la condition : ["" == "ASPI_CHAMBRE"] = Faux
[2019-05-28 13:57:46][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-05-28 13:57:46][SCENARIO] Fin correcte du scénario
Code : Tout sélectionner
$coordonnees = array();
$coordonnees['ASPI_CHAMBRE'][] = "21000,22000,25000,25500,1";
$coordonnees['ASPI_SALON'][] = "25000,24000,30000,30500,1";
$coordonnees['ASPI_CUISINE'][] = "22300,28500,23950,31000,1";
$coordonnees['ASPI_POUBELLE'][] = "23000,27500";
//Récupération des paramètres stockés dans le virtuel
//Rotation relative de la carte == Lors de la création initiale des zones
$cmd = cmd::byString("#[Aucun][Info_aspi][rotation_map]#");
$rotation = $cmd->execCmd();
//centre X de la carte:
$cmd = cmd::byString("#[Aucun][Info_aspi][centre_x]#");
$centre_x = $cmd->execCmd();
//centre Y de la carte
$cmd = cmd::byString("#[Aucun][Info_aspi][centre_y]#");
$centre_x = $cmd->execCmd();
$centre = array($centre_x,$centre_y); //centreX,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)
{ // 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("#[Aucun][Info_aspi][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és :
$newpos = generer($coordonnees,$job,$rotation,$centre);
// et on sauve ces coordonnées dans notre virtuel (pour qu'ils soient exploitables hors de notre bloc de code)
$cmd = cmd::byString("#[Aucun][Info_aspi][coordonnees]#");
$cmd->event($newpos);
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 17 invités