Commandes en erreur 403

@PaTiTan il faut que tu m’expliques ce que c’est?

Mais le screen de mon premier post n’est pas suffisant : https://community.jeedom.com/uploads/default/original/3X/d/1/d117a8a0046b53923074817518452aa52c189f1b.png ?

Tu peux exporter le scénario sous forme de texte (voir ma souris en haut à droite

Voila le miens qui ne fonctionne pas, j’ai du louper quelque chose :

1 « J'aime »

Le scénario est beaucoup plus clair comme ça :+1:

Mais avant @PaTiTan, as-tu la même fin dans les logs du scénario que @monfiston ?

Voilà le scénario :

- Nom du scénario : Surveille Logs
- Objet parent : Garage
- Mode du scénario : schedule
    - Programmation : */5 * * * *



    
    ACTION
         
        SI time_between(variable(teslaNextToken,0), time_op(#time#, -1), time_op(#time#, 5)) != 1
        ALORS
             
            comment
         tag - Options : {"enable":"1","background":"0","name":"relanceDemonBientot","value":"1"}
        SINON
         
        SI variable(RebootTeslaDemon,0) == 0
        ALORS
             
            CODE
             (code) $plugin = 'tesla';
            $tags = $scenario->getTags();
            $msgs = log::get($plugin,0,-1);
            #$scenario->setLog("taille logs: ".count($msgs));
            $size = count($msgs);
            $delai = 120;
            $max = min($size, 20);
            # stocke la date actuelle
            $now = strtotime("now");
            # liste des logs à détecter
            $warningsToFind = [
              "[WARNING] : refreshToken: Impossible de se connecter au serveur Tesla",
              "Connexion impossible, vérifiez vos identifiants: 'token expired (401)"
              ];
            $warnCount = 0;
            $pattern = "/Le token qui expire le .* sera mis à jour le ([0-5][0-9]) ([0-2][0-9]) ([0-3][0-9]) ([0-1][0-9]) \*/i";
            for ($x = 0; $x < $max; $x++) {
              $msg = $msgs[$x];
              $dateTime = substr($msg, 1, 19);
              # convertit la date du message
              $timestamp = strtotime($dateTime);
              foreach ($warningsToFind as $key => $findme) {
                $pos = strpos($msg, $findme);
                if ($pos !== false) {
                  # warning trouvé, est-il récent?
                  if ($now - $timestamp < $delai) {
                    # arrivé il y a moins de 2 min
                    $warnCount++;
                  }
                  break;
                } else {
                  # cherche prochain refresh
                  $match = preg_match($pattern, $msg, $matches);
                  if ($match === 1 && !$tags['#nextTokenRefresh#']) {
                    $scenario->setLog("msg prochain refresh: ".$msg);
                    $tags['#nextTokenRefresh#'] = $matches['2'].$matches['1'];
                  }
                }
              }
            }
            $scenario->setLog("nombre warnings: ".$warnCount);
            # stocke s'il y a un problème
            $tags['#warning#'] = ($warnCount) > 3 ? 1 : 0;
            $scenario->setTags($tags);
            # copie les logs pour analyse
            if ($tags['#warning#']) {  
              $log = "";
              for ($x = min($size, $max + 15); $x >= 0; $x--) {
                $log = $log."\n->   ".$msgs[$x];
              }
              $scenario->setLog("logs: ".$log);
            }
             
            SI tag(warning,0) != 0
            ALORS
             (variable) Affectation de la variable : RebootTeslaDemon à 1
             message - Options : {"enable":"1","background":"0","message":"Plugin Tesla d\u00e9connect\u00e9"}
             (scenario) startsync de [Tesla][Voiture][Relance Démon Tesla]
             delete_variable - Options : {"enable":"1","background":"0","name":"RebootTeslaDemon"}
            SINON
             
            SI tag(nextTokenRefresh,0) != 0
            ALORS
                 
                SI tag(relanceDemonBientot,0) != 0
                ALORS
                     
                    SI variable(teslaNextToken,0) != tag(nextTokenRefresh)
                    ALORS
                     (variable) Affectation de la variable : teslaNextToken à tag(nextTokenRefresh)
                         
                        A tag(nextTokenRefresh)
                        FAIRE
                         (sleep) Pause de  : 20
                         (scenario) startsync de [Tesla][Voiture][Relance Démon Tesla]
                             
                            SI variable(nextTeslaNextToken,0) != 0
                            ALORS
                             (variable) Affectation de la variable : teslaNextToken à variable(nextTeslaNextToken)
                                 
                                A variable(nextTeslaNextToken)
                                FAIRE
                                 (sleep) Pause de  : 20
                                 (scenario) startsync de [Tesla][Voiture][Relance Démon Tesla]
                             delete_variable - Options : {"enable":"1","background":"0","name":"nextTeslaNextToken"}
                            SINON
                    SINON
                SINON
                 (variable) Affectation de la variable : nextTeslaNextToken à tag(nextTokenRefresh)
            SINON
        SINON

Oui oui les même :

J’essai ton scénario :slight_smile:

Je parle de la fin, après reprise des logs du plugin, il devrait y avoir quelque chose comme « Exécution d’un bloc élément… »

J’ai ceci en boucle :

Me suis planté, pour exporter c’est plutôt un template, icone juste à droite …
mettre un nom puis cliquer sur le « + », le sélectionner et le télécharger pour l’envoyer ici (.json à changer par .txt)

Car là sous forme de texte c’est un peu compliqué

@monfiston, je crois que n’a pris que le code PHP sans le scénario qu’il y a autour.

@PaTiTan, est-ce que le scénario qui redémarre le démon Tesla fonctionne correctement ?
Tu peux le voir en allant sur la page de config du plugin.

Sinon en ce qui concerne le partage du scénario, la vue template ou la capture écran semblent les meilleures options :slightly_smiling_face:

Enfin, je partageant, re-partageant je me rend compte que le premier SI semble faux, si je devat le réécrire je mettrai :

time_between(variable(teslaNextToken,0), time_op(#time#, -1), time_op(#time#, 5)) == 1

Du coup je me demande comment ça fait pour marcher chez moi :crazy_face:

1 « J'aime »

oui il démarre et compte bien le nombre de warning (ici 5 dans mon screen).

Je t’avoue que sur ce scénario, ne comprenant pas tout au code, j’ai fait du copier coller.
Mais je ne vois nul pars un commande de redémarrage du démon.

Je ne comprends cette remarque, dis-tu que tu vois pas de reboot du démon dans le code PHP partagé ? Si oui, en effet le PHP n’est là que pour extraire des infos des logs.

Je te parle du scénario qui redémarre le démon Tesla, soit « Reboot plugin Tesla ».

Sinon, en regardant tes logs je vois que l’exécution du scénario « Reboot plugin Tesla » est quasiment instantanée. As-tu un RPi5 ? (car sur mon Pi4B ça prenait environ 4s mais maintenant sur le RPi5 c’est aussi instantané :wink: )

Je ne vois qu’un problème au niveau du scénario « Reboot plugin Tesla ». Dans mon cas les erreurs se produisaient suite au refresh du token et un redémarrage du démon solutionnait le problème : les erreurs revenaient 8 heures plus tard.

A noter qu’un redémarrage c’est arrêt suivi d’un démarrage.

Peux-tu partager ton scénario « Reboot plugin Tesla » ?

Enfin je pense qu’on pollue ce fil de discussion avec mon scénario, j’en suis désolé :innocent:

dans mon scénario j’exécute seulement le 1° code PHP, mon scénario est vide sinon, pas de si, ou, et,…

s’il faut vraiment récréer tout ton scénario ce n’est vraiment pas évident avec une capture d’écran :crazy_face:

est ce que tu pourrais faire édition texte et le mettre sur le forum, ça permettrait de le dupliquer très facilement

Je viens de comprendre le template dont parlait @PaTiTan
Template_json.txt (69,7 Ko)

1 « J'aime »

Je suis sous proxmox avec un NUC10i7 (benchmark jeedom à 0.93059349060059)

C’est bien ce qu’il me semblait :slight_smile:

Donc le scénario « Reboot plugin Tesla » a une seule action, rebooter le demon ?
Donc il doit y avoir en tout 2scénario pour faire entièrement le job, celui qui check l’état du plugin et celui qui fait l’action de rebooter le plugin, c’est bien ça ?

oui mais le scénario qui reboote marche-t-il ?

c’est compliqué de suivre

il faut un ou 2 scénario?

j’ai pu mettre le template, et je voie qu’il y a un renvoie vers un autre scénario (redémarrage)

c’est quoi exactement le 2° scénario (template?)

HAHA bah c’était pas explicite donc il n’existe pas ^^

Le scénario de mon screen s’appelle « Reboot plugin Tesla » hahahaha.
Je lui change son nom et je fait un scénario « Reboot plugin Tesla » qui rebootera le demon.

1 « J'aime »

@3.14r
pour que ce soit plus clair pour tout le monde

peux tu synthétiser dans un seul post, tous les scénario qu’il faut mettre en place avec leur Template, et nous indiquez quand ils doivent être exécuté :wink:

Pour plus clareté :wink:

Le scénario qui surveille les logs est celui qu’on peut trouver dans ce post :

Il appelle, en tout 3 fois, le scénario « Relance Démon Tesla » qui devrait contenir un bloc CODE avec ceci :

$pluginId = "tesla";
$plugin = plugin::byId($pluginId);
$plugin->deamon_stop();
sleep(2);
$plugin->deamon_start(true);

Aussi il faut un niveau de log égal à Info ou Debug pour que les logs soient présents :wink:

2 « J'aime »

moi je compte 4 fois le scénario « Relance Démon Tesla »

Le premier est une erreur ça devrait être un envoi de message Signal… Arrêtons de polémiquer :crazy_face:

Bonjour
Ce fut compliqué à mettre en place, mais je confirme que ça fonctionne bien