Voyons ici un exemple d’illustration des scripts Powershell (PS) avec un exemple basé sur la récupération de la couleur du tarif TEMPO EDF et son affectation à un Widget Texte de Domoticz.
Il ne s’agit que de la transposition de cet article ci destiné au Raspberry sous Linux en PS Windows.
Rappels
domogeek.entropialux.com met à notre disposition un jeu d’API permettant de recevoir une foule de choses utiles pour piloter notre domotique.
Comme :
- savoir si en zone C on est en vacances !
- si nous sommes en Week End,
- récupérer la géolocalisation d’une ville,
- le tarif EJP EDF,
- le tarif Tempo EDF,
- la liste des fêtes du calendrier,
- les levers et couchers du soleil,
- l’état de vigilance Méteo France (jaune,rouge orange pour chaque risque) …
C’est parfaitement documenté, hyper clair, simple : le bonheur !
Principe
En appelant une simple url bien formatée on reçoit en retour la réponse attendue.
La documentation nous dit que
http://domogeek.entropialux.com/tempoedf/now nous renvoie ‘bleu’
que
http://domogeek.entropialux.com/tempoedf/now/json nous renvoie {« tempocolor »: « bleu »}
Il suffira donc de récupérer cette valeur et de l’affecter à un widget texte Domoticz.
A noter que la couleur du lendemain peut être obtenue par http://domogeek.entropialux.com/tempoedf/tomorrow/json.
Coté Domoticz
Il faudra créer un widget virtuel TEXTE et récupérer son idx dans les dispositifs.
Le script PS
Comme d’habitude adaptez la partie des paramètres à votre configuration , user et pass restent à vide si vous n’avez pas authentification dans votre Domoticz, et adaptez l’idx à celui du widget texte.
Le debug à 1 affiche quelques valeurs d’url et de variables.
#---PARAMETRES----------------------- # --- les adresses Domoticz user/pass et l'idx à activer -------- $domoticz="http://127.0.0.1:8080" $user="" $pass="" $idx="8" #------------------------------------------ $url_domogeek="http://domogeek.entropialux.com/tempoedf/now/json" # -----debug a 1 pour afficher qq messages, 0 sinon ---- $debug=1 #------------------------------ #--- FIN DES PARAMETRES----------------------- #--- Fonction d'ecriture en vers Domoticz via url------------------- function majdomoticz { # ----- LEs url pour ecriture dans un widget texte DZ ---- $url1="/json.htm?type=command¶m=udevice&idx="+$idx $url2="&svalue="+$tempo_dgeek $urldz=($domoticz+$url1+$url2) #------------------------------ $pair = "${user}:${pass}" $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair) $base64 = [System.Convert]::ToBase64String($bytes) $basicAuthValue = "Basic $base64" $headers = @{ Authorization = $basicAuthValue } #------------------------------ #Invoke the web-request avec les headers d'authentification #$json=Invoke-WebRequest -uri $urldz -Headers $headers try { $json=Invoke-WebRequest -uri $urldz -Headers $headers } catch { $_.Exception.Response.StatusCode.Value__ if ($_.Exception.Response.StatusCode.Value__-eq 201) {write-host "erreur authentification user/pass"} } # recup reponse JSON $infos_json = ConvertFrom-Json -InputObject $json #recuperation depuis $infos_json avelc 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 retrourné="$Val_Retour} } #--- Fonction d'interrogation de L'API domogeek et recup de la couleur dans $tempo_dgeek ------------ # ou d'une erreur eventuelle si on accede pas au site web function tempo_domogeek { try { $dgeek_json=Invoke-WebRequest -uri $url_domogeek} catch { $_.Exception.Response.StatusCode.Value__ if ($_.Exception.Response.StatusCode.Value__ -eq 404) {write-host "erreur 404: acces au site web"} } Try { $infos_dgeek = ConvertFrom-Json -InputObject $dgeek_json $tempo_dgeek=$infos_dgeek.tempocolor } Catch { $tempo_dgeek="Erreur domogeek" } if ($debug-eq 1) { write-host "la réponse de domogeek est :"$infos_dgeek write-host "la couleur du jour est: "$tempo_dgeek } return $tempo_dgeek } #--------------------------------------- $tempo_dgeek=tempo_domogeek majdomoticz
Enregistrez ce script dans votre dossier de travail de vos scripts Domoticz , vérifiez avec Powershell ISE (voir articles précédents), le bon fonctionnement de celui ci.
Lancement du script via le planificateur de tâches Windows
J’ai expliqué en détail les manips dans un autre billet concernant le planificateur de tâches
En résumé on crée un fichier .bat de ce type
Powershell.exe -WindowStyle hidden -nologo -executionpolicy remotesigned -Command "& 'C:\Program Files (x86)\Domoticz\scripts\powershell\recup-tempo.ps1'"
qui, on le voit, appelle le fichier powershell ci-dessus
Et on lance le fichier bat à intervalles réguliers via le planificateur de tâches, typiquement une fois par jour suffit.