Closed brakc closed 7 years ago
Tu peux me donner le JSON tel que tu le reçois? Il y a une fonction intégrée à Jarvis que je n'ai pas encore documentée qui pourrais faire exactement ce que tu cherches.
Le voici:
{
ActTime: 1476629250,
ServerTime: "2016-10-16 16:47:30",
Sunrise: "07:47",
Sunset: "18:43",
result: [
{
AddjMulti: 1,
AddjMulti2: 1,
AddjValue: 0,
AddjValue2: 0,
BatteryLevel: 255,
CustomImage: 0,
Data: "23.3 C, 72 %",
Description: "",
DewPoint: "17.97",
Favorite: 0,
HardwareID: 13,
HardwareName: "Netatmo",
HardwareType: "Netatmo",
HardwareTypeVal: 54,
HaveTimeout: false,
Humidity: 72,
HumidityStatus: "Wet",
ID: "7EB2",
LastUpdate: "2016-10-16 16:33:05",
Name: "NETATMO - Extérieur T°",
Notifications: "false",
PlanID: "0",
PlanIDs: [
0
],
Protected: false,
ShowNotifications: true,
SignalLevel: "-",
SubType: "WTGR800",
Temp: 23.3,
Timers: "false",
Type: "Temp + Humidity",
TypeImg: "temperature",
Unit: 0,
Used: 1,
XOffset: "0",
YOffset: "0",
idx: "182"
}
],
status: "OK",
title: "Devices"
}
Ce n'est pas un json
valide les clés devraient aussi être entre guillemets. J'essaye quand même avec ca...
Malheureusement l'outil pour parser le JSON ne fonctionne pas à cause des guillements manquants sur les clés. En les rajoutant ca marcherait:
Tu peux corriger la source?
malheureusement non, c'est le format standard en sortie de Domoticz
Ou alors peut-être récupérer la données dans "Data"? puis reparser?
Bon sinon t'as la version quick & dirty, mais ca marche:
$> echo "$json" | sed -n 's#Temp: \([^,]*\),#\1#p'
23.3
Donc en gros:
*TEMPERATURE*==say "La température est de $(curl -s http://192.168.0.252:8080/json.htm?type=devices&rid=182 | sed -n 's#Temp: \([^,]*\),#\1#p') degrés"
Si tu parviens à faire corriger le JSON source, ou pour ceux qui tombent sur ce post et souhaitent parser proprement, utiliser jq
(dépendence de Jarvis):
*TEMPERATURE*==say "La température est de $(curl -s http://192.168.0.252:8080/json.htm?type=devices&rid=182 | jq -r ".result[0].Temp") degrés"
hummm presque: j'ai cette erreur
...
...
"Type" : "General",
"TypeImg" : "current",
"Unit" : 1,
"Usage" : "0.0 Watt",
"Used" : 0,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "681"
}
],
"status" : "OK",
"title" : "Devices"
} degrés
tts_engines/svox_pico/main.sh: ligne 23: /usr/bin/pico2wave: Liste d'arguments trop longue
Comment ca se fait que maintenant tu as des guillemets autour des clés 😄 pb de copier coller?
Essayes donc la version jq
dans ce cas:
*TEMPERATURE*==say "La température est de $(curl -s http://192.168.0.252:8080/json.htm?type=devices&rid=182 | jq -r ".result[0].Temp") degrés"
Tu peux la valider ici:
https://jqplay.org/
Filter: .result[0].Temp
JSON: ton JSON
Tu as raison, je t'ai renvoyé la 1ère fois le retour du browser. Via curl dans mon terminal tous est bon !!! merci pour le lien https://jqplay.org/, je vais pouvoir m'éclater ;-)
...et merci pour la soluce
A bientôt
Bonjour et merci pour cet excellent programme.
Voilà j'ai un petit souci. J'utilise Jarvis à la perfection couplé avec mon Domoticz. Les ordres Switch ON/OFF en json fonctionnent au top! Mais j'aimerais aller plus loin et récupérer des valeurs de certains capteurs pour les faire lire à Jarvis.
Malheuresement, il n'est pas possible en json de remonter par exemple juste que la température de la sonde. Le json remonte toutes les informations du capteur (température, humidité, statut, heure ...)
J'ai donc créer un petit script PHP qui ne me retourne que la température:
J'execute dans le terminal : "/usr/bin/php /home/pi/jarvis/scripts/temp.php" et j'ai bien ma valeur, top!
jarvis-commands configuré comme tel:
*TEMPERATURE*==say "la température extérieur est,
/usr/bin/php /home/pi/jarvis/scripts/temp.phpdegrés"
mais visiblement, cela ne fonctionne pas. Auriez-vous un petite idée svp?
Merci.
Fabrice.