Windows, Domoticz et Powershell : Utiliser JSON pour récupérer des données

Voici un nouvel article concernant l’utilisation de scripts Powershell destinés à Domoticz.

Je souhaite vous présenter ici la récupération de données issues de l’API Domoticz au format JSON.

Vous savez que en interrogeant Domoticz pour un matériel donné (par son idx) , renvoie une série de valeurs spécifiques à ce matériel.

Exemple : »http://192.168.1.81:8080/json.htm?type=devices&rid=126″ me renvoie les caractéristiques du matériel 126 au format JSON tel que ci dessous.

On voit Sunrise, Sunset, puis dans le bloc commençant par result BatteryLevel, Data, idx….

{
   "ActTime" : 1453670702,
   "ServerTime" : "2016-01-24 22:25:02",
   "Sunrise" : "08:29",
   "Sunset" : "17:56",
   "result" : [
      {
         "AddjMulti" : 1.0,
         "AddjMulti2" : 1.0,
         "AddjValue" : 0.0,
         "AddjValue2" : 0.0,
         "BatteryLevel" : 255,
         "CustomImage" : 0,
         "Data" : "8.63%",
         "Description" : "",
         "Favorite" : 1,
         "HardwareID" : 12,
         "HardwareName" : "Motherboard",
         "HardwareType" : "Motherboard sensors",
         "HardwareTypeVal" : 23,
         "HaveTimeout" : false,
         "ID" : "0000044C",
         "Image" : "Computer",
         "LastUpdate" : "2016-01-24 22:24:32",
         "Name" : "Memory Usage",
         "Notifications" : "false",
         "PlanID" : "0",
         "PlanIDs" : [ 0 ],
         "Protected" : false,
         "ShowNotifications" : true,
         "SignalLevel" : "-",
         "SubType" : "Percentage",
         "Timers" : "false",
         "Type" : "General",
         "TypeImg" : "hardware",
         "Unit" : 1,
         "Used" : 1,
         "XOffset" : "0",
         "YOffset" : "0",
         "idx" : "126"
      }
   ],
   "status" : "OK",
   "title" : "Devices"
}

Ce que nous allons voir ici est la récupération via powershell de ces valeurs dans des variables.

Je veux donc récupérer Sunrise, BatteryLevel , Data et idx dans 4 variables.

Le script powershell

# indiquer ici l'url à interroger
$url="http://192.168.1.81:8080/json.htm?type=devices&rid=126"
$json=Invoke-WebRequest $url

#------------- # affiche les val json brutes
#decommentez la ligne ci-dessous pour voir les données recues de Domoticz
#Write-Host $json
#-------------

#------------- 
# Mettre les donnés dans $info_json, l'objet $json est converti 

$infos_json = ConvertFrom-Json -InputObject $json

#recuperation depuis $infos_json avec les libelles du JSON Domoticz

$Val_Sunrise=$infos_json.Sunrise
$Val_idx=$infos_json.result.idx
$Val_Batterie= $infos_json.result.BatteryLevel
$Val_Data= $infos_json.result.Data
Write-host $Val_Sunrise,$Val_idx,$Val_Batterie,$Val_Data

Une fois récupéré notre objet JSON dans $infos_json on va juste chercher la valeur souhaitée par appel de $infos_json.libelle_de_la _clé_JSON

Attention il faut absolument respecter la casse et l’orthographe des libelles renvoyés par Domoticz.

$infos_json.Sunrise
$infos_json.result.idx
$infos_json.result.BatteryLevel
$infos_json.result.Data

Remarquez que on va chercher idx, Data et BatteryLevel dans result.xxxx contrairement au champ Sunrise car ces 3 champs sont dans le pavé nommé result  dans le JSON renvoyé par Domoticz.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/