Probleme de Script

Bonjour
j’ai acheter des modules heatzy pour mes radiateurs, mais je n’arrive pas a trouver une solution pour les inclure sur mon jeedom.

le plugin heatzy ne fonctionne pas, le développement Ifttt est suspendu, du coup j’essaye via un script.
J’arrive à interroger https://euapi.gizwits.com/app/login.
via se script
curl -X POST --header ‹ X-Gizwits-Application-Id:c70a66ff039d41b4a220e198b0fcc8b3 › ‹ https://euapi.gizwits.com/app/login ›
j’ai bien un retour me disant qu’il manque le login et le mot de passe
{« error_message »:« form_invalid »,« error_code »:9015,« detail_message »:{« username »:["\u8fd9\u4e2a\u5b57\u6bb5\u662f\u5fc5\u586b\u9879\u3002"],« password »:["\u8fd9\u4e2a\u5b57\u6bb5\u662f\u5fc5\u586b\u9879\u3002"]}}

si je rajoute au script le login et le mot de passe
curl -X POST --header ‹ Content-Type: application/json › --header ‹ Accept: application/json › --header ‹ X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3 › -d ‹ { « username »: « email », « password »: « pass »} › ‹ https://euapi.gizwits.com/app/login ›

le message d’erreur est toujours le meme… :frowning:

Alors que si j’exécute ce script via mon terminal linux, j’ai un retour correct:
{« token »: « 2984b2fxxxxxxxxxx47491fcaa18f0fc », « uid »: « fcd6fde432ac4aef8xxxxxxxxxx8f474 », « expire_at »: 1999995216}

quelqu’un peut il m’aider, s’il vous plait?

Merci
dkvince

Bonjour,

Un petit ls -al dans le dossier du script s’il te plaît ?

Ainsi qu’un copier coller du script en question ? (bien remplacer tout login/mot de passe en dur)

Bonjour chris777c,
je ne suis pas au top au niveau des accès jeedom.
ma box la Jeedom Smart z-wave.
je ne sais pas comment faire la commande en dehors du plugin script. ce que j’ai fait et voici le resultat :

Evènement sur la commande [RDC][test heatzy][dfd] valeur : total 200 drwxrwxr-x 2 www-data www-data 4096 Apr 3 15:54 . drwxrwxr-x 15 www-data www-data 4096 Apr 6 2019 .. -rwxrwxr-x 1 www-data www-data 1402 Apr 3 15:49 cache.ajax.php -rwxrwxr-x 1 www-data www-data 17132 Apr 3 15:49 cmd.ajax.php -rwxrwxr-x 1 www-data www-data 3067 Apr 3 15:49 config.ajax.php -rwxrwxr-x 1 www-data www-data 2039 Apr 3 15:49 cron.ajax.php -rwxrwxr-x 1 www-data www-data 2918 Apr 3 15:49 dataStore.ajax.php -rwxrwxr-x 1 www-data www-data 12692 Apr 3 15:49 eqLogic.ajax.php -rwxrwxr-x 1 www-data www-data 1224 Apr 3 15:49 event.ajax.php -rwxrwxr-x 1 www-data www-data 3674 Apr 3 15:49 interact.ajax.php -rwxrwxr-x 1 www-data www-data 11801 Apr 3 15:49 jeedom.ajax.php -rwxrwxr-x 1 www-data www-data 1867 Apr 3 15:49 listener.ajax.php -rwxrwxr-x 1 www-data www-data 1629 Apr 3 15:49 log.ajax.php -rwxrwxr-x 1 www-data www-data 1850 Apr 3 15:49 message.ajax.php -rwxrwxr-x 1 www-data www-data 2226 Apr 3 15:49 migrate.ajax.php -rwxrwxr-x 1 www-data www-data 1419 Apr 3 15:49 network.ajax.php -rwxrwxr-x 1 www-data www-data 2223 Apr 3 15:49 note.ajax.php -rwxrwxr-x 1 www-data www-data 9249 Apr 3 15:49 object.ajax.php -rwxrwxr-x 1 www-data www-data 9389 Apr 3 15:49 plan.ajax.php -rwxrwxr-x 1 www-data www-data 7115 Apr 3 15:49 plan3d.ajax.php -rwxrwxr-x 1 www-data www-data 4425 Apr 3 15:49 plugin.ajax.php -rwxrwxr-x 1 www-data www-data 4386 Apr 3 15:49 repo.ajax.php -rwxrwxr-x 1 www-data www-data 2202 Apr 3 15:49 report.ajax.php -rwxrwxr-x 1 www-data www-data 14439 Apr 3 15:49 scenario.ajax.php -rwxrwxr-x 1 www-data www-data 5580 Apr 3 15:49 update.ajax.php -rwxrwxr-x 1 www-data www-data 10015 Apr 3 15:49 user.ajax.php -rwxrwxr-x 1 www-data www-data 7172 Apr 3 15:49 view.ajax.php

et mon script est le suivant :
curl -X POST --header ‹ Content-Type: application/json › --header ‹ Accept: application/json › --header ‹ X-Gizwits-Application-Id:c70a66ff039d41b4a220e198b0fcc8b3 › -d ‹ { « username »: « ‹ monemail › », « password »: « monmotdepasse », « lang »: « en » } › ‹ https://euapi.gizwits.com/app/login ›

merci
dkvince

en creusant j’ai fini par trouver ilfallait ajouter des \ a ma requête
{« username »:« username »,« password »:« password »}
j’ai le bon retour avec
{« token »: « 2984b2fxxxxxxxxxx47491fcaa18f0fc », « uid »: « fcd6fde432ac4aef8xxxxxxxxxx8f474 », « expire_at »: 1999995216}

mais voila j’aimerai pouvoir extraire du résultat de la commande 3 variables:

  • Token
  • Uid
  • expire_at

mais sous Jeedom je ne trouve pas le moyen de décomposer une chaine de caractère comme on pourrai trouver en VBA avec la fonction left(), right() ou encore InStr()

quelqu’un aurait il une idée?
Merci
dkvince

Bonjour

Je ne vais pas pouvoir aider beaucoup, mais cette partie m’interpelle:

Chez moi, le plugin Heatzy fonctionne très bien avec 4 boitiers. Je suis encore en V3, je ne sais pas si ce plugin est compatible V4, ni en quelle version tu es.
Mais si le plugin ne fonctionne pas, peut être y-a-t-il un problème chez toi?

Bonjour,

Tu peux passer par du code PHP dans un scenario :

$json = system("ton script CURL");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);

//{« token »: « 2984b2fxxxxxxxxxx47491fcaa18f0fc », « uid »: « fcd6fde432ac4aef8xxxxxxxxxx8f474 », « expire_at »: 1999995216}

if (!empty($json))
{
$findme   = 'expire_at';
$pos = strpos($json, $findme);
  
// Notez notre utilisation de ===.  == ne fonctionnerait pas comme attendu
// car la position de 'a' est la 0-ième (premier) caractère.
  if ($pos === false) {
      $scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoi  : ' .$json);
  }
  else
  {
      $obj = json_decode($json, TRUE);

      if (json_last_error() === JSON_ERROR_NONE) {

          $token = $obj['token'];
           $scenario->setLog('Token : ' . $token);
         $scenario->setData('token', $token); //pour récupérer dans variable
          $uid = $obj['uid'];
           $scenario->setLog('uid : ' . $uid );
          $scenario->setData('uid', $uid); //pour récupérer dans variable
          $expireAt = $obj['expire_at'];
          $scenario->setLog('expire_at : ' . $expireAt );
           $scenario->setData('expireAt', $expireAt); //pour récupérer dans variable
      } else {
          $scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
      } 
  }

Merci pour ton retour,
mais alors la j’ai comme un problème, je me rend compte que j’ai encore beaucoup de chose a apprendre.
je comprend ton script, mais je ne suis pas bien sur de bien comprendre ou je dois le mettre.
est ce que c’est dans un scenario bloc code?


et si oui comment récupérer les variables?
car quand j’exécute le script je ne retrouve rien dans les logs si ce n’est ;
[2020-04-06 21:33:31][SCENARIO] Start : Scenario lance manuellement.
[2020-04-06 21:33:31][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-06 21:33:31][SCENARIO] Exécution d’un bloc code
[2020-04-06 21:33:31][SCENARIO] Fin correcte du scénario
et dans
il n’y aaucune variable qui remonte

merci
dkvince

Oui c’est bien ça dans un bloc code,

J’ai mis à jour le code sur le post d’origine (a copier/coller à nouveau).

Pour écrire dans les logs et créer 3 variables : uid, token et expireAt que tu pourras utiliser dans le scénario

Merci, j’ai l’impression que ça me revoie une variable que je ne peux utiliser
j’ai essayé de decomposer :

$json = system(« curl -X POST -H "X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3" "content-type:x-www-form-urlencoded" ‹ https://euapi.gizwits.com/app/login › -d ‹ {"username":"email","password":"Pass"} ›; »);
$scenario->setData(‹ testvar ›, $json);

la variable renvoyée: testvar = [object Object]
Capture du 2020-04-07 22-26-11

je me demande si ce n’est pas un tableau

$json = system("curl -X POST --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' --header 'content-type:application/json' -d '{ "username":"email" ,"password":"Pass","lang":"en"}' 'https://euapi.gizwits.com/app/login' ");

Attention à la syntaxe (surtout les ’ et " ) et il en manquait un peu par rapport à ton exemple de départ

chris777c, tu es au top merci beaucoup. Ca fonctionne j’ai juste du modifier dans le script des \ juste avant les " .
encore merci, je peux continuer maintenant .

Bonjour,

Bonne nouvelle, tu peux écrire la syntaxe que tu as inscrite et cliquer sur solution pour les futures membres de la communauté, s’il te plaît ?

Pour bien écrire : utilise l’option Texte préformaté.

Voici le scenario qui permet de récupérer les infos de connexion qui permettra de récupérer les informations utiles a la gestion des modules headzy via le site gizwits.com

encore merci a @chris777c

$json = system("curl -X POST --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' --header 'content-type:application/json' -d '{ \"username\":\"email@email.com\" ,\"password\":\"motdepasse\",\"lang\":\"en\"}' 'https://euapi.gizwits.com/app/login' ");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);

if (!empty($json))
{
$findme   = 'expire_at';
$pos = strpos($json, $findme);
 
// Notez notre utilisation de ===.  == ne fonctionnerait pas comme attendu
// car la position de 'a' est la 0-ième (premier) caractère.
 if ($pos === false) {
     $scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoi  : ' .$json);
 }
 else
 {
     $obj = json_decode($json, TRUE);

     if (json_last_error() === JSON_ERROR_NONE) {

         $token = $obj['token'];
          $scenario->setLog('Token : ' . $token);
        $scenario->setData('token', $token); //pour récupérer dans variable
         $uid = $obj['uid'];
          $scenario->setLog('uid : ' . $uid );
         $scenario->setData('uid', $uid); //pour récupérer dans variable
         $expireAt = $obj['expire_at'];
         $scenario->setLog('expire_at : ' . $expireAt );
          $scenario->setData('expireAt', $expireAt); //pour récupérer dans variable
     } else {
         $scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
     } 
 }
}

cordialement
dkvince

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.