Utiliser le planificateur de Tâches Windows pour les scripts Powershell

Toujours à la découverte de Domoticz sous Windows voyons ici comme ajouter un script Powershell (ps1) dans le planificateur de tâches Windows pour en assurer l’exécution à intervalles réguliers.

Les script Powershell et le lanceur associé.

Nous avions vu dans un épisode précédent que pour permettre facilement de lancer un PS j’utilise un fichier en .bat du même nom qui contient tout ce qui faut pour que le PS se lance.

Exemple de fichier bat :

Powershell.exe -WindowStyle hidden  -nologo -executionpolicy remotesigned -Command "& 'C:\Program Files (x86)\Domoticz\scripts\powershell\Backup_Domoticz.ps1'"

C’est ce fichier bat qu’il faudra lancer via le planificateur.

Le planificateur.

Sachez que il faudra un compte d’administrateur possédant un mot de passe (les password vide ne sont pas acceptés par défaut)

Dans le panneau de configuration et dans les outils d’administration vous trouvez le planificateur de tâches.

planif_windows_1

Utilisez le menu à droite « Créer une tâche ».

Dans l’onglet Général

En :

  • 1 Nommons la tâche
  • 2 Autorisons nous à lancer le script même si il n’y à pas de session ouverte
  • 3 Donnons les droits maximaux à l’exécution du script .

planif_windows_2

Validons par « OK » puis dans l’écran qui suit :

planif_windows_3

  • Choisissiez tout en haut dans « Lancer la tâche » le « A l’heure programmée » (1) puis  la bonne fréquence (Une seule fois, Jour, Semaine , Mois).
  • Pour lancer la tâche toutes les X minutes chosissez « Chaque Jour »  (2)
  • Répétez la tâche toutes les 5 minutes (1,4…) et  « Indéfiniment » (3)
  • Éventuellement donnez une date de fin.

Validez puis allons dans l’onglet « Actions » (1)

planif_windows_4

  • Choisir « Démarrer un programme » vu que le reste est « déconseillé » !  (2)
  • Utiliser le bouton « Parcourir » pour aller chercher le script en .bat à lancer (3)
  • Validez et

 

  • Rendez vous dans l’écran des « Paramètres »   (1)
  • Cochez  « Exécuter la tâche des que ….  (2)
  • Décochez « Arrêter la tâche si elle s’exécute …. » (3) sinon ….

planif_windows_5

Validez tout ça

Windows vous demande de vous identifier avec votre mot de passe d’un compte administrateur.

Les mots de passe vide ne sont pas autorisés par défaut (sauf modifs dans la base de registre pour autoriser cela)

planif_windows_6

N.B Dans les actions on peut aussi indiquer comme ci-dessous :

Powershell.exe dans le programme à lancer et tous les paramètres qui sont dans le fichier en.bat sont passés dans les arguments y compris le chemin complet vers le fichier ps1.

-WindowStyle hidden  -nologo -executionpolicy remotesigned -Command "& 'C:\Program Files (x86)\Domoticz\scripts\powershell\Backup_Domoticz.ps1'"

 

planif_windows_8

Opération réussie !

 

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

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/

Domoticz Windows et Powershell : Envoyer un SMS via Free

Quelques articles existants:

https://easydomoticz.com/domoticz-et-windows-les-scripts-powershell-1

https://easydomoticz.com/domoticz-et-windows-les-scripts-powershell-2

permettent de vous familiariser avec l’écriture de scripts Powershell (PS) sous Windows et surtout leurs appels au sein des champs Action On/Action Off de Domoticz.

Voyons ici comment utiliser les service d’envoi de SMS de chez Free (accessibles aux abonnés uniquement) depuis Windows.

Un article ancien décrivait l’activation de ce service chez Free et il reste valable encore à ce jour.

Nous ne verrons ici que la partie script powershell spécifique à Windows.

Le Script Powershell.

Sous Linux, la commande  qui permet d’appeler une url se nomme curl.

En powershell, la commande  qui permet d’appeler une url se nomme curl aussi. :mrgreen:

Testons en ligne de commande powershell  en ouvrant tout d’abord une invite de commande DOS puis en tapant powershell

ps_1

Puis tapons

curl  "https://smsapi.free-mobile.fr/sendmsg?user=4745125&pass=DD44DCQQAECGH145541nWhNe&msg=Mon message !"

Un message arrive sur le téléphone, PS montre ceci  avec un StatusCode 200 OK:

ps_3Plaçons le bout de code dans un fichier smson.ps1, puis créons, comme nous l’avons vu dans un précédent article, un lanceur de ce ps1 en .bat.

Je crée donc un smson.bat dans mon dossier scripts/powershell qui contient :

Powershell.exe -WindowStyle hidden  -nologo -executionpolicy remotesigned -Command "& 'C:\Program Files (x86)\Domoticz\scripts\powershell\smson.ps1'"

J’ai pris l’habitude de nommer de la même façon le .ps1 et le .bat, cela simplifie le débogage.

L’interrupteur virtuel.

Si vous avez suivi les autres articles vous avez compris qu’il faut appeler le fichier .bat au sein du Action On/off de l’inter.ps_4

Certains 😛 souhaiteraient avoir la date et l’heure de l’envoi du SMS.

La commande est Get-Date

Le code PS devient :

$startTime = Get-Date
curl  "https://smsapi.free-mobile.fr/sendmsg?user=cx045511xsdg&pass=hjDdxxxfffggeessse&msg=Porte Ouverte à $startTime"

Ca marche pas !

Déjà un bon point de repère est l’ouverture de la fenêtre Powershell, si vous ne l’obtenez pas vérifiez les noms dans l’inter et dans le fichier .bat.

Testez vos scripts depuis PS_ISE  ou la ligne de commande en mode powershell et allant dans le répertoire des scripts pour lancer vos script.

Un lecteur me signale que  »

Pour les Utilisateurs sous Seven, ne pas oublier de mettre à jour NetFramework puis passer à la version Powershell 4
(La version 2 d’origine sous Seven ne connait pas la commande CURL.) »

Merci encore

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