Domoticz, Windows et Powershell piloter les équipements par script
Continuant l’écriture de quelques scripts Powserhell (PS) dans Domoticz, et après avoir vu les bases, découvrons ici comment utiliser le curl des Powershell pour envoyer des données vers Domoticz via l’API JSON et mettre à jour nos widgets du tableau de bord.
Bien entendu le format de l’API JSON est le même que l’on soit sous Linux ou Windows©, la page de référence se trouve ici http://www.domoticz.com/wiki/Domoticz_API/JSON_URL’s
L’utilisation de cette API à été détaillée ici à plusieurs reprise et juste pour rappel cela consiste à envoyer une chaine de caractères bien formatée vers l’adresse ip de Domoticz.
Page avec illustrations ici https://easydomoticz.com/manipuler-les-donnees-json-de-domoticz-en-shell/
Il faudra donc se munir de l’idx du périphérique que l’on veut valoriser et du formatage de la chaine à envoyer, en effet on ne pilote pas un interrupteur comme on pilote un widget de température.
Dans ce qui suit je vais prendre comme exemple l’activation d’un interrupteur.
Le script Powershell.
Voici le script PS , copiez le dans Powershell ISE, ajustez vos variables adresse de Domoticz, idx à activer , éventuels user/pass (laisser à vide si il n’y a pas d’authentification dans votre Domoticz), lancez le script par le flèche verte en haut de ISE et regardez les messages en rouge qui peuvent d’afficher en bas.
La variable debug à 1 affiche les url envoyées vers DZ et les messages de retour
# --- les adresses Domoticz user/pass et l'idx à activer -------- $domoticz="http://127.0.0.1:8080" $user="patrice" $pass="123456" $idx="3" #------------------------------------------ # -----debug a 1 pour afficher qq messages, 0 sinon ---- $debug=0 #------------------------------ #------------------------------ $pair = "${user}:${pass}" $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair) $base64 = [System.Convert]::ToBase64String($bytes) $basicAuthValue = "Basic $base64" $headers = @{ Authorization = $basicAuthValue } $url1="/json.htm?type=command¶m=switchlight&idx="+$idx $url2="&switchcmd=On" $urldz=($domoticz+$url1+$url2) #Invoke the web-request avec les headers d'authentification try { $json=Invoke-WebRequest -uri $urldz -Headers $headers } catch { $_.Exception.Response.StatusCode.Value__ if ($_.Exception.Response.StatusCode.Value__-eq 401) {write-host "erreur authentification user/pass"} } # recup reponse JSON $infos_json = ConvertFrom-Json -InputObject $json #recuperation depuis $infos_json avec les libelles Domoticz $Val_Retour=$infos_json.status if ($debug-eq 1) { Write-Host "url Domoticz=" $urldz Write-Host "message Json="$json Write-host "Status retourné="$Val_Retour}
Vous remarquerez que j’ai abandonné le « curl » au profit du Invoke-WebRequest plus canonique en Powershell.
Lancement régulier via planificateur de tâches
Bien entendu il faut utiliser le planificateur Windows pour lancer ce script à la fréquence souhaitée.