Recuperer resultat requete SQL dans un scenario

Bonjour,
Je cherche a recuperer la liste de mes scenarios (et leurs id) via un scenario (pour que cela soir dynamique)

J’arrive bien a faire la requete SQL avec adminer, et je souhaiterai obtenir le meme resultat dans un scenario.

Cela me permettrai d’interroger mon jeedom via sms ou pushbullet pour obtenir la liste des scenarios et les id, afin de pouvoir exectuer un id via l’API.

Est-ce possible ? En PHP sans doute via l’action code ? Mais comment recuperer le resultat afin que le scenario puisse me le retourner ?

Merci d’avance.
Bonne soirée

Yes tu peux avec les fonction du core elle même.
Tu peux même le traiter pour faire des lien d’exécution direct.

Cdt
Thibaut

Merci de ton retour, est il possible de détailler ta réponse ? J’ai beau cherché je ne trouve pas d’exemples…
Merci d’avance !

Bonjour,
Faire une requête sql directement est une très mauvaise idée.
Regardez plutôt la doc de l’api pour récupérer les scénarios: https://doc.jeedom.com/fr_FR/core/4.0/jsonrpc_api

Ou la doc du core, notamment la class scénario :
https://doc.jeedom.com/dev/phpdoc/4.0/

les requetes sont aussi dans l’api
https://jeedom.github.io/documentation/phpdoc/classes/DB.html


admettons que ta requete est :

SELECT id,name,isActive FROM `scenario`

que je passe dans configuration/bdd

volontairement je regroupe 2 lignes php pour une requete
je fixe une limite de 5 mais dans la requête tu peux avoir des variables php

se qui donne en scenario code

$sql = "SELECT id,name,isActive FROM `scenario` ";
// et 
 $sql = $sql."LIMIT 5";

$scenario->setLog("SQL = $sql");

$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {
  $d_name = $result['name'];
   $d_id = $result['id'];
  $d_Active = $result['isActive']=1?"activer":"non-activer";
  $scenario->setLog('le scenario portant le nom '.$d_name.' pour id : '.$d_id.' est '.$d_Active);
  } 

[2021-01-12 02:38:46][SCENARIO] Start : Scenario lance manuellement.
[2021-01-12 02:38:46][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-01-12 02:38:46][SCENARIO] Exécution d’un bloc code
[2021-01-12 02:38:46][SCENARIO] SQL = SELECT id,name,isActive FROM scenario LIMIT 5
[2021-01-12 02:38:46][SCENARIO] le scenario portant le nom Lever/Coucher Soleil pour id : 4 est activer
[2021-01-12 02:38:46][SCENARIO] le scenario portant le nom Lever pour id : 5 est activer
[2021-01-12 02:38:46][SCENARIO] le scenario portant le nom Coucher pour id : 6 est activer
[2021-01-12 02:38:46][SCENARIO] le scenario portant le nom Coucher +15 pour id : 12 est activer
[2021-01-12 02:38:46][SCENARIO] le scenario portant le nom Portes pour id : 13 est activer
[2021-01-12 02:38:46][SCENARIO] Fin correcte du scénario

mais @Mips à raison si tu peux te passer de cette façon de faire
j’avais envie de tester. « et voir »
pouquoi :
pour moi les cmd api jeedom utilise cette cmd db « base de données »
mais avec des sécurités. même si ce n’est que de la lecture de bdd.

1 « J'aime »

Ce n’est pas l’api ça mais les classes du core.
Bien sûr le core fait des requêtes et cette classe est utilisée par les classes de la couche au dessus : scénario, cmd, eqlogic etc et ce sont ces classes que du code doit utiliser et pas directement la couche db.

Même dans les plugins n’en ont pas besoin pour toutes les tables du core.

Le mieux reste d’utiliser l’api.

Au top ! Merci de vos réponses a tous.
J’ai tenté l’API JSON. La commande scenario::all retourne bien tout :slight_smile: je mettrai le formalisme car j’ai un petit peu galeré quand meme !

Reste a savoir comment je peux mettre ça en pratique, via le plugin script ? (Pour parser le resultat)

Merci !