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