Bonjour,
Mon application arduino expédie une trame http GET vers un script situé dans un jeedom distant.
Lorsque l’application tourne sur le même réseau local que jeedom, ça fonctionne.
Si la requête envoyée en http concerne un script jeedom on/off de type Action elle est exécutée mais un script de type info ou Action devant retourner des données ne les retourne pas.
Les ports sur la freebox où se trouve l’application Arduino est le suivant:
IP destination: 192.168.0.140 (un esp8266 sur réseau local box Orange)
IP source: Toutes
Protocole: TCP
Port de début:49200 (on peut pas mettre moins)
Port de fin: 49200
Port de destination: 80
Précision: j’accède sans problème à mon serveur jeedom depuis un réseau distant.
Si je mets la même URL complète que l’application dans la barre d’adresse d’un navigateur distant, la réponse est FORBIDEN You don’t have permission to access this resource.
Sinon c’est une url de l’api jeedom que vous appelez? (Un get sur une commande jeedom?)
Réponse: Oui.
J’ai regardé dans les logs de jeedom:
INFO : Exécution de la commande [Aucun][script_001][BANG] avec les paramètres {« apikey »:« rrJYD7EXxxxxxFPpyvO3yXcO2O4M1Cc7x7 »,« type »:« cmd »,« id »:« 276 »}
Hello, si tu va dans Réglages / Système / Configuration tu as un onglet API et la tu pourras vérifier si les clefs API sont authorisé juste en local/désactivé/…
Référence : https://doc.jeedom.com/fr_FR/core/4.1/administration
Salut Mathieu,
J’ai regardé. Il n’y a que une seule clé API et elle est activée. Mais il n’est rien de spécifié pour les accès externes.
Merci quand même.
Jean.
Désolé, je ne pourrais t’aider plus, je ne vois pas exactement ce que tu essai de faire. Cela fait un moment que je n’ai plus touché aux arduino, mais j’ai retrouvé les fonctions que j’utilisais à l’époque si cela peux t’aider. Par contre j’accédait directement aux équipements je ne passait pas en plus par un autre script.
// ***************************************************************************************//
// - Network
String JeedomGet(String serveur, String api, String id) {
HTTPClient http;
TerminalAdd('d',"[HTTP] begin...");
// configure traged server and url
http.begin("http://" + serveur + "/core/api/jeeApi.php?apikey=" + api + "&type=cmd&id=" + String(id)); //HTTP get
TerminalAdd('d',"[HTTP] GET...");
TerminalAdd('d',"http://" + serveur + "/core/api/jeeApi.php?apikey=" + api + "&type=cmd&id=" + String(id));
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
TerminalAdd('d',"[HTTP] GET... code: "+String(httpCode));
} else {
TerminalAdd('d',"[HTTP] GET... failed, error: "+String(http.errorToString(httpCode).c_str()));
}
String payload = http.getString();
TerminalAdd('d',payload);
http.end();
return payload;
}
String JeedomSet(String serveur, String api, String id, String value) {
HTTPClient http;
TerminalAdd('d',"[HTTP] begin...");
// configure traged server and url
http.begin("http://" + serveur + "/core/api/jeeApi.php?type=virtual&apikey=" + api + "&id=" + id + "&value=" + value); //HTTP set
TerminalAdd('d',"[HTTP] SET...");
TerminalAdd('d',"http://" + serveur + "/core/api/jeeApi.php?type=virtual&apikey=" + api + "&id=" + id + "&value=" + value);
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
TerminalAdd('d',"[HTTP] SET... code: "+String(httpCode));
} else {
TerminalAdd('d',"[HTTP] SET... failed, error: "+String(http.errorToString(httpCode).c_str()));
}
http.end();
return "";
}
Pour la fonction TerminalAdd, c’était pour un afficheur que j’utilisais, pas la peine de les prendre en compte.
Je viens de sortir mes WIO du débaras et je viens de me rendre compte que mon sketch ne fonctionnait plus.
Après lecture de différents message dans community, cela est du au modification de sécurité venu avec la 4.2 (Introduction Jeedom 4.2 : la sécurité – Jeedom – Le Blog), donc voici une version modifié de la partie qui ne fonctionnait plus,
String JeedomSet(String serveur, String api, String id, String value) {
HTTPClient http;
TerminalAdd('d',"[HTTP] begin...");
// configure traged server and url
http.begin(serveur + "/core/api/jeeApi.php?plugin=virtual&type=event&apikey=" + api + "&id=" + id + "&value=" + value); //HTTP set
TerminalAdd('d',"[HTTP] SET...");
TerminalAdd('d',serveur + "/core/api/jeeApi.php?plugin=virtual&type=event&apikey=" + api + "&id=" + id + "&value=" + value);
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
TerminalAdd('d',"[HTTP] SET... code: "+String(httpCode));
} else {
TerminalAdd('d',"[HTTP] SET... failed, error: "+String(http.errorToString(httpCode).c_str()));
}
http.end();
return "";
}
Le lien à changer et il faut également utiliser la clef API du plugin, dans mon cas c’était le plugin virtual.
Pour ce qui est de l’accès interne ou externe, j’ai également un soucis actuellement, qui je pense est lié au HTTPS, par contre comme je n’utilise plus les Arduino, et que cela fonctionne pour mes script python, je n’ai pas cherché plus loin.