Page 1 sur 1
Parser un json avec jq
Publié : 02 déc. 2016, 13:41
par rapinou
Bonjour,
Afin d'améliorer mon script chauffage pour prendre en compte la température actuelle (les jours froid il faut plus de temps pour la montée en température intérieure), je cherche à récupérer les infos des planning enregistrées dans Domoticz. Mais je bloque sur une partie, au moment de parser le json des timers avec jq.
Avec le script suivant :
Code : Tout sélectionner
#! /bin/bash
planning=$(curl -s "http://192.168.0.38:8080/json.htm?type=schedules" | jq -r '.result[]')
echo $planning
J'obtiens les résultats de tous les timers.
Mais comme j'ai plusieurs interrupteurs avec planning, je voudrais les trier dans un premier temps pour un interrupteur spécifique ("DeviceRowID" : 15).
J'ai beau éplucher le manuel (
https://stedolan.github.io/jq/manual/), je ne trouve pas la bonne syntaxe.
Si quelqu'un peut m'aider
Merci.
Re: Parser un json avec jq
Publié : 02 déc. 2016, 14:14
par jackslayter
Re: Parser un json avec jq
Publié : 02 déc. 2016, 14:32
par rapinou
Merci jackslayter.
J'avais vu le wiki, mais apparemment cette commande sort tous les timers de tous les devices.
J'ai essayé en remplaçant "device" par le nom de mon interrupteur ou par son ID, ça ne fonctionne pas.
Re: Parser un json avec jq
Publié : 02 déc. 2016, 14:36
par jackslayter
ah merde je croyais que ça marchait comme ça
Re: Parser un json avec jq
Publié : 02 déc. 2016, 15:03
par rapinou
Bon, j'ai trouvé une solution apparemment.
Code : Tout sélectionner
#! /bin/bash
planning=$(curl -s "http://192.168.0.38:8080/json.htm?type=schedules" | jq '.result[] | select(.DeviceRowID | contains(15))')
echo $planning | jq '.ScheduleDate'
Ca me sort :
Code : Tout sélectionner
"2016-12-03 07:00:00"
"2016-12-03 08:00:00"
"2016-12-03 09:00:00"
"2016-12-03 12:00:00"
"2016-12-03 13:00:00"
"2016-12-02 18:15:00"
"2016-12-02 23:00:00"
"2016-12-02 23:00:00"
Maintenant il faut que je trouve comment trier les timers des jours de semaines et ceux du weekend ("days: 256" et "days: 512" dans le json) suivant qu'on est le weekend ou non (en rajoutant une condition avec "and" peut-être ?).
Puis ressortir uniquement l'heure la plus proche de l'heure actuelle. On va y arriver ^^
Re: Parser un json avec jq
Publié : 03 déc. 2016, 15:39
par rapinou
Je bloque :/
J'arrive bien à sortir les timers voulus avec le script suivant :
Code : Tout sélectionner
#! /bin/bash
timers=$(curl -s "http://192.168.0.38:8080/json.htm?type=schedules" | jq '.result[] | select((.DeviceRowID | contains (15)) and (.Level | contains(10)))' | jq '.ScheduleDate' | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/')
echo -e "Timers:\n$timers"
date_serveur=$(curl -s "http://192.168.0.38:8080/json.htm?type=command¶m=getSunRiseSet" | jq -r '.ServerTime')
echo -e "Date serveur:\n$date_serveur"
Réponse :
Code : Tout sélectionner
Timers:
2016-12-04 07:00:00
2016-12-04 09:00:00
2016-12-04 12:00:00
2016-12-03 18:15:00
Date serveur:
2016-12-03 15:31:37
Mais je n'arrive pas à ne garder que le timer le plus proche de la date serveur.
Quelqu'un d'inspiré svp ?
Re: Parser un json avec jq
Publié : 03 déc. 2016, 17:13
par patrice
Bonjour
Si ça peut aider : jq à une option --sort-keys pour trier , regarde si ça s applique à ton cas
et puis un sort-order [ton id) ou qq chose comme cela.
Envoyé de mon PULP 4G en utilisant Tapatalk
Re: Parser un json avec jq
Publié : 04 déc. 2016, 01:02
par rapinou
Merci Patrice.
Je n'ai pas réussi à comprendre comment fonctionnait exactement --sort-keys, mais j'ai quand même trouvé une solution en convertissant les dates en timestamp et en ne récupérant que le plus petit avec 'min'.
J'avais justement besoin de convertir la date en timestamp pour la suite du script afin de calculer un delta avec la date serveur donc c'est parfait.
J'ai bientôt fini mon script, je le partagerais ici une fois mis au propre si ça peut intéresser quelqu'un.
Re: Parser un json avec jq
Publié : 04 déc. 2016, 20:23
par rapinou
Script terminé, je l'ai partagé ici :
https://easydomoticz.com/forum/viewtopi ... =17&t=2922.
Merci de votre aide
