recupere valeur json et update device via jq

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
QcVictor
Messages : 77
Inscription : 17 janv. 2015, 14:52

recupere valeur json et update device via jq

Messagepar QcVictor » 11 juin 2018, 17:13

Je tente de mettre a jour un virtual device via un url qui me génère un json qui ressemble a cela :

Code : Tout sélectionner

{"attributes": {"friendly_name": "HydroQuebec Period mean daily consumption", "icon": "mdi:flash", "unit_of_measurement": "kWh"}, "entity_id": "sensor.hydroquebec_period_mean_daily_consumption", "last_changed": "2018-06-11T09:24:30.261177+00:00", "last_updated": "2018-06-11T09:24:30.261177+00:00", "state": "89.3"}

La valeur que je veut attraper est 89.3 en suivant le tuto jq j'arrive bien a la récupéré la valeur

Code : Tout sélectionner

pi@DomoticzTest:~$ curl -s "http://10.0.0.14:8123/api/states/sensor.hydroquebec_period_mean_daily_consumption"| jq -r .state
89.3
Maintenant je patauge un peu entre utilisé http poller, un fichier bash/lua/python, bref comme vous l'aurez deviné suis pas top top dans les scripts, les exemples que je trouve sont souvent pour un on/off... bref any help :D

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


landaisbenj
Messages : 529
Inscription : 12 mars 2017, 19:24

Re: recupere valeur json et update device via jq

Messagepar landaisbenj » 12 juin 2018, 11:00

En lua tu peux parser le json facilement.

Indiquer que tu veux récupérer la donnée en exécutant ton curl, et ensuite traiter la donnée via json..
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway

QcVictor
Messages : 77
Inscription : 17 janv. 2015, 14:52

Re: recupere valeur json et update device via jq

Messagepar QcVictor » 12 juin 2018, 16:48

landaisbenj a écrit :En lua tu peux parser le json facilement.

Indiquer que tu veux récupérer la donnée en exécutant ton curl, et ensuite traiter la donnée via json..

Code : Tout sélectionner

#!/bin/bash
 
result=$(curl -s "http://192.168.1.82:8080/json.htm?type=devices&rid=35"| jq -r .result[].Status)
 
 
echo $result
 
if [ $result = "Open" ]
    then
     curl 'http://192.168.1.82:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=On&level=0'
 
elif [ $result = "Closed" ]
    then
          curl 'http://192.168.1.82:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=Off&level=0'
 
fi

En suivant cette exemple, quel est la syntaxe pour envoyer le résultat obtenu plutôt que le open/close ?

landaisbenj
Messages : 529
Inscription : 12 mars 2017, 19:24

Re: recupere valeur json et update device via jq

Messagepar landaisbenj » 12 juin 2018, 18:25

QcVictor a écrit :
landaisbenj a écrit :En lua tu peux parser le json facilement.

Indiquer que tu veux récupérer la donnée en exécutant ton curl, et ensuite traiter la donnée via json..

Code : Tout sélectionner

#!/bin/bash
 
result=$(curl -s "http://192.168.1.82:8080/json.htm?type=devices&rid=35"| jq -r .result[].Status)
 
 
echo $result
 
if [ $result = "Open" ]
    then
     curl 'http://192.168.1.82:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=On&level=0'
 
elif [ $result = "Closed" ]
    then
          curl 'http://192.168.1.82:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=Off&level=0'
 
fi

En suivant cette exemple, quel est la syntaxe pour envoyer le résultat obtenu plutôt que le open/close ?


Si tu recuperes ta valeur avec jq alors tu peux simplement modifier ton device avec cette valeur.
Si on reste sur le OPEN/CLOSE, il est contenu dans $result, qui se voit avec echo $result.
Du coup il suffit d'envoyer $result avec l'api JSON de domoticz.

Donc:
/json.htm?type=command&param=udevice&idx=IDX&nvalue=HUM&svalue=$result
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


QcVictor
Messages : 77
Inscription : 17 janv. 2015, 14:52

Re: recupere valeur json et update device via jq

Messagepar QcVictor » 12 juin 2018, 21:17

Ok voila le script

Code : Tout sélectionner

#!/bin/bash
result=$(curl -s "http://10.0.0.14:8123/api/states/sensor.hydroquebec_period_mean_daily_consumption"| jq -r .state)
 
 
echo $result
if [ $result = "Open" ]
    then
     curl 'http://10.0.0.18:8080/json.htm?type=command&param=udevice&idx=101&nvalue=0&svalue=$result;$result'
fi
mon virtual device est un electric
lorsque je l’exécute ça passe sans erreur
mais cela n'update pas la valeur dans le device, mais ça s'explique parce qu'il s'attend a voir open et vue que c'est un chiffre ...

jackslayter
Messages : 841
Inscription : 30 sept. 2014, 14:40
Localisation : RA38

Re: recupere valeur json et update device via jq

Messagepar jackslayter » 14 juin 2018, 11:02

dans un script lua :

Code : Tout sélectionner

commandArray = {}
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local config=assert(io.popen('/usr/bin/curl -m 5 http://10.0.0.14:8123/api/states/sensor.hydroquebec_period_mean_daily_consumption'))
local blocjson = config:read('*all')
config:close()
-- print (blocjson)
local jsonValeur = json:decode(blocjson)
stateS = jsonValeur.state
print (stateS)

return commandArray
Dernière édition par jackslayter le 14 juin 2018, 13:20, édité 1 fois.
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

landaisbenj
Messages : 529
Inscription : 12 mars 2017, 19:24

Re: recupere valeur json et update device via jq

Messagepar landaisbenj » 14 juin 2018, 13:13

QcVictor a écrit :mais cela n'update pas la valeur dans le device, mais ça s'explique parce qu'il s'attend a voir open et vue que c'est un chiffre ...


Ton script indique que si le result = open alors envoyer la valeur de $result;$result.

Vu que result est une valeur numérique elle ne sera jamais égale a open... Voila pourquoi elle n'enverra jamais les données...
Cette partie la ne sert a rien:
QcVictor a écrit :if [ $result = "Open" ]
    then
fi

Et pourquoi tu met $result;$result ?

jackslayter a écrit :pour stateS = jsonValeur.state[] essai avec [0] ou [1] si ça ne marche pas ou sans les []
pour naviguer dans ton json tu fait jsonValeur.state[].xxx.xxx suivant si il a un sous paragraphe (tu peux te servir du print (blocjson))


Mettre des crochets c'est quand il s'agit de liste. Dans son exemple "state" n'est pas une liste mais un objet. Pour traiter l'objet tu n'as pas besoin de crochet.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway

jackslayter
Messages : 841
Inscription : 30 sept. 2014, 14:40
Localisation : RA38

Re: recupere valeur json et update device via jq

Messagepar jackslayter » 14 juin 2018, 13:19

bien vu, je l'ai fait sur une base de script mais j'ai pas la même config
je modifie
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

QcVictor
Messages : 77
Inscription : 17 janv. 2015, 14:52

Re: recupere valeur json et update device via jq

Messagepar QcVictor » 15 juin 2018, 00:58

Code : Tout sélectionner

Error: EventSystem: in watt: [string "commandArray = {}..."]:8: attempt to index local 'jsonValeur' (a nil value)

Ça ne passe pas ! et comment fait ton après pour envoyer mettre a jour le virtual device ?

jackslayter
Messages : 841
Inscription : 30 sept. 2014, 14:40
Localisation : RA38

Re: recupere valeur json et update device via jq

Messagepar jackslayter » 15 juin 2018, 07:50

enlève les -- de la ligne -- print (blocjson)
si il y a rien ou une erreur regarde si tu as bien le fichier JSON.lua dans /home/pi/domoticz/scripts/lua/ sinon mets le bon chemin
sinon colle le résultat ici
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.



Revenir vers « Scripts lua,blocky, shell, python, perl, »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Google [Bot], Laulo77 et 4 invités