Aller au contenu
jjacques68

variables dans requetes HTTP : Jeedom->HC2

Recommended Posts

Bonjour à tous, je me suis mis depuis peu à Jeedom en parallèle avec la HC2...

 

Je souhaite utiliser une variable "MaVariable" dans une requête d'un script Jeedom pour l'envoyer dans un Label d'un VD de la HC2.

Je précise que "MaVariable" est utilisée dans un scénario Jeedom et prend la valeur suivante {valeur1, valeur2, valeur3}.

 

Voici la requête en question :

http://192.168.x.y/api/callAction?deviceID=352&name=setProperty&arg1=ui.FromJeedom.value&arg2=variable(MaVariable)

et bien ça marche pas.

Si je remplace à la fin "variable(MaVariable)" par autre chose, ça marche !

 

Je pense que la syntaxe pour faire appel à la variable n'est pas bonne.

 

Vous avez une idée ?

 

PS : J'ai cherché et posté sur le forum Jeedom, mais ça semble plutôt très, très, très, très calme là-bas !

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

alors ma requête ci-dessus, est juste.

c'est le remplissage de ma variable qui posait problème.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @jjacques68

 

C'est à dire ? C'est le remplissage de ta variable côté Jeedom qui n'était pas fonctionnel ? 

Explique stp, pour ma culture Jeedom ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

oui c'est ça, la variable contenait des caractères spéciaux comme % ° / qui faisaient planter la chose.

 

Alors maintenant j'ai tout simplement changer la la manière de faire en ne faisant qu'appeler le script pour executer la requête.

Et c'est dans la requête que je construis ma chaine de caractères.

En fait je cherche à envoyer les valeurs d'un capteur de plante Bluetooth MiFlora vers un label d'un VD de la HC2.

 

Voici la requête envoyée par Jeedom -> HC2 :

http://192.168.2.38/api/callAction?deviceID=353&name=setProperty&arg1=ui.FromJeedom.value&arg2={#[Maison][Palmier][Humidité]# %25, #[Maison][Palmier][Température]# C, #[Maison][Palmier][Fertilisant]# uS/cm, #[Maison][Palmier][Luminosité]# lux, #[Maison][Palmier][Batterie]# %25}

Et voici le retour dans le label :

{36 %, 24.8 C, 38 uS/cm, 382 lux, 87 %}

Donc ça marche très bien :)

 

MAIS MAINTENANT je bloque sur la manière d'exploiter ces données dans la HC2 !!!!!!

 

Je souhaite tout simplement lire les valeus une par une pour les insérer dans les labels correpsondant !

Et je tourne en rond ;) avec la boucle for, pairs, ipairs json.encode, json.decode !!!! rien ne passe !!

 

tu as une idée ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, ok compris. Pas d'idée encore lol mais à mon avis t es obligé de jouer avec les pattern et string.find pour la virgule...
Ou alors plus simple, depuis jeedom tu mets directement chaque valeur dans le bon label :-)

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

pfffff :(

 

j'utilise ça :

local MaTable = fibaro:getValue(fibaro:getSelfId(), "ui.FromJeedom.value")
fibaro:debug(MaTable)

for k,v in pairs(json.decode(MaTable)) do
  fibaro:debug(v)
end

 

et j'ai ce message d'erreur :

 

[DEBUG] 18:56:05: {36%,24.8C,38uS/cm,382lux,87%}
[ERROR] 18:56:05: line 17: Expected object key string but found T_NUMBER at character 2


J'utilise exactement la même méthodepour envoyer des donnée depuis mon IPX et ça fonctionne !!!

Je me demande si ma chaine de caractère est bien formatée !!!

Partager ce message


Lien à poster
Partager sur d’autres sites

enfait je crois que je ne me trouve pas avec un tableau, mais avec une simple chaine de caractères !!!

car si je fais fibaro:debug(Matable[2]), il m'affiche rien !!

Partager ce message


Lien à poster
Partager sur d’autres sites

alors après des heures de recherches, j'ai fini par trouvé. Mais alors quelle galère !!! :(

C'est clairement une chaine de caractères et non un tableau.

Donc je crée un tableau à partir de ma chaine de caractère...

local MaChaine = fibaro:getValue(fibaro:getSelfId(), "ui.FromJeedom.value") --la chaine = "35 %,23.1 C,34 uS/cm,285 Lux,86 %"
local MesValeurs={} --mon nouveau tableau de valeur

--je remplis mon nouveau tableau
MaChaine:gsub("([^,]+)", function(valeur) MesValeurs[#MesValeurs+1]=valeur end)

--je remplie mes labels
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Hum.value", MesValeurs[1])
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Tmp.value", MesValeurs[2])
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Frt.value", MesValeurs[3])
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Lum.value", MesValeurs[4])
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Bat.value", MesValeurs[5])

explications : 

MaChaine:gsub("([^,]+)", function(valeur) MesValeurs[#MesValeurs+1]=valeur end)

MaChaine:gsub("pattern", "fonction exécutée sur chaque item de MaChaine séparés par le pattern")

 

ici, la fonction me remplit mon tableau MesValeurs avec "valeurs" qui sont les items trouvés dans MaChaine

 

"pattern" est la chaine qui fait office de séparateur : ([^,]+)

() = un ensemble de caractères

[^,] = il faut éviter la virgule (mon séparateur)

+ = parcourir les item jusqu'au prochain séparateur

 

Voilà ce que j'ai compris. Si je me trompe dite le moi !!!!

C'est la MMMMEEEEERRRRR....... ces chaines de caractères !

 

et au final, je me rend compte que ce code est dans un mainloop d'un VD,

donc executé toutes les 3 secondes,

et que en fait ça sert à rien,

car la jeedom envoie les infos que toutes les heures !!! :13:

 

et j'en ai mare :(

 

J'ai plus d'idées...

 

Il y a 2 heures, pepite a dit :

Ou alors plus simple, depuis jeedom tu mets directement chaque valeur dans le bon label :-)

pas bête du tout et plus simple, mais ça veut dire que je peux envoyer qu'un valeur à la fois et que donc je vais de voir faire un sacré paquet de script...

dommage que le script jeedom me renvoie pas une table json dans la requete !!!

 

Mais c'est étrange parce que j'utilise la même chose avec mon IPX :

/api/callAction?deviceID=329&name=setProperty&arg1=ui.Alarme.value&arg2={AlarmeCounter:$C2%,+IpxIn2:$I2}}

Et j'applique sans problème un json.decode sur le label !!!!

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 6 minutes, jjacques68 a dit :

et au final, je me rend compte que ce code est dans un mainloop d'un VD,

donc executé toutes les 3 secondes,

et que en fait ça sert à rien,

car la jeedom envoie les infos que toutes les heures !!! :13:

une solution à ça :

 

mettre le code dans une scène, déclenchée sur modification du label FromJeedom, et mise à jour des autres label par la scène.

 

mais alors le chemin de dingue !!!!!!

 

1. Scénario Jeedom pour déclencher une fois par heure le script Jeedom

|

2. Script Jeedom qui envoie les infos du MiFlora dans un Label d'un VD de la HC2

|

3. Scène HC2 qui se déclenche sur le changement du label

|

4. retour vers le VD pour mettre à jour les labels concernés

|

5. exécution par la scène de la HC2 de notifications du style arrosage, batterie, ...

|

6. un paquet de clope fumée pendant ce temps là...

 

hahaha !!! la mixité des systèmes domotiques !!!! pas mal !!!! :16:

je (on) suis (est) un peu sado sur les bords quand même :) 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon j'avance et me rend compte d'un soucis provenant des infos envoyées de Jeedom avec les tables json.

 

Je sais pas si je fais bien mais j'ouvre un nouveau topic sur le sujet...

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

×