Dans un premier temps, désolé mais je n’ai pas vraiment su classifier ce type de question. Si un modérateur pouvait me le dire, ce serait cool. Merci.
Voici donc ma question est en rapport avec le Json RPC (API).
Après avoir lu plusieurs fois la doc sur l’API Json, je n’arrive pas à générer correctement mon Json pour récupérer et modifier correctement une Variable.
Le contexte :
J’ai créé une variable « MaVariable » en passant par le menu « Outils → Variables ».
J’ai donc rempli ma variable avec une valeur, prenons « Oui ».
Je voudrais récupérer et modifier cette valeur de « MaVariable » avec l’API JsonRPC.
J’ai bien trouvé un exemple en API HTTP ( http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=variable&name=#NAME#&value=VALUE), mais je n’ai pas trouvé d’exemple pour générer correctement mon Json même après avoir lu la documentation API JsonRPC qui reste un peu confuse et très succincte pour moi.
Est-ce que quelqu’un pourrait me donner un exemple de Json pour récupérer ma variable « MaVariable » et un exemple pour la modifier ?
Je ne sais pas…
Disons que j’ai trouvé, dans la doc, qu’il fallait mettre un « type ».
Toujours dans la doc, il est noté entre parenthèses le cas d’un scénario avec : " "type" : "scenario" ". J’ai donc essayé avec « variable ».
Et puis, aussi, parce que je me suis référé également à l’API Http qui utilise " type=variable ", ce qui n’est pas une bonne idée effectivement.
Je vais donc essayé sans utiliser le « type ».
Je me pose aussi la question s’il faut utiliser « name » ou une autre clef.
Toujours dans l’API Htpp, il est utilisé " name=MaVariable "
Je me pose plein de question sur l’utilisation de cette méthode : est-ce que la doc est bien faite ? est-ce que la doc est suffisante ?, Est-ce que la doc parle bien de la récupération ou modification d’une variable créée dans l’interface ? etc…
Donc si quelqu’un a aussi une idée sur la manière de récupérer et modifier une variable dans le cadre général (API JsonRPC), cela serait intéressant.
si l’on s’en réfère au code du core, c’est bon ce que tu fais …
pour lire : &name=var_nom&type=variable
pour écrire : &name=var_nom&value='blabla'&type=variable
a priori value doit être passé vide ou pas (si j’en crois la fonction init()), pour lire la valeur, sinon s’il est non vide, il est stocké sous la rubrique ‹ scenario ›.
du coup comment fait-on pour l’effacer? je ne sais pas car avec cet accès tu ne peux pas écrire de valeur vide. le test va renvoyer comme si c’est vide.
voilà l’extrait de code du core :
if ($type == 'variable') {
log::add('api', 'debug', __('Demande API pour les variables', __FILE__));
if (init('value') == '') {
$dataStore = dataStore::byTypeLinkIdKey('scenario', -1, trim(init('name')));
if (is_object($dataStore)) {
echo $dataStore->getValue();
}
} else {
$dataStore = new dataStore();
$dataStore->setKey(trim(init('name')));
$dataStore->setValue(init('value'));
$dataStore->setType('scenario');
$dataStore->setLink_id(-1);
$dataStore->save();
}
die();
}
Oui, je suis d’accord avec toi.
Plus précisément :
si value est vide ou inexistante, alors nous sommes en mode lecture.
Si value est remplie on passe en mode écriture et la valeur est stockée.
Il en ressort pas moins que même si nous mettons « variable », la lecture et le stockage se fait sous « scenario » → pas clair.
Peu importe, je ne vais pas m’étendre sur le sujet car ce n’est pas trop la question puisque lorsque j’utilise l’API HTTP, tout fonctionne correctement et je peux écrire ou modifier la variable en question.
Mais lorsque j’utilise l’API JsonRPC cela ne fonctionne pas.
J’ai proposé une structure Json que j’ai faite en fonction de l’URL donnée en exemple pour l’API HTTP mais manifestement ma Structure Json ne fonctionne pas.
D’où ma question finalement de savoir si quelqu’un aurait une structure Json valable pour récupérer et modifier les variables.
J’ai fait les essais et j’espère que cela sera utile à d’autres.
La solution finale a donc été donnée par Phpvarious avec une petite précision : il faut bien utiliser « linkId » (l’avant dernière lettre est un i majuscule)