Windows, Powershell : Envoyer des données vers Domoticz

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.

Résultat de recherche d'images pour "powershell script"

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

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.

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

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 :

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.

 

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….

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

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.

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

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 :

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 :

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/

Domoticz et Windows : Les scripts powershell, partie 2

Les utilisateurs de Domoticz sous Windows seront sans doute heureux (?) de trouver ici quelques articles concernant l’écriture de scripts sous Windows™.

Partant de l’idée que vous êtes nombreux à utiliser des Windows 7/8/9/10 je vais utiliser le langage Powershell qui est présent pour ces versions.

Les Vieux XP installeront les Powershell 2 comme expliqué ici http://syskb.com/comment-installer-et-executer-powershell-sur-un-systeme-windows/

Il ne s’agit pas ici de faire un cours de powershell mais de découvrir quelques fonctions utiles au travers d’exemples pratiques.

Bon c’est ici que ça va se compliquer un peu, non pas pour la rédaction des scripts Powershell dont la doc est dispo partout sur Internet , mais pour autoriser le lancement de ces scripts par Domoticz.

La méthode décrite ici est purement empiriquement issue de mes tests, succès, échecs.

Je suis à l’écoute de toutes vos remarques sur la technique en question.

Objectif

Pouvoir lancer un script Powershell via des action On/Action Off d’un interrupteur virtuel.

Création d’interrupteurs virtuels

Depuis le menu « Réglages » et « Matériel » ajouter le matériel virtuel, littérature ici. et en l’occurrence nous aurons juste besoin d’un interrupteur pour lancer notre script manuellement par un clic (ou de le programmer à intervalles régulier via le planning du bouton).

Affectation d’un script à un Action On/off

Un billet récent en expliquait la technique , info ici https://easydomoticz.com/domoticz-et-windows-scripts_et_action_on_action_off/

Il faut utiliser script://scripts\powershell\Backup_Domoticz.ps1

La commande Domoticz est script:// puis on indique le chemin vers le fichier batch, les dossiers sont séparés par des antislashes.

l tendance naturelle serait de mettre script://scripts\powershell\Backup_Domoticz.ps1

ps_script_domoticz

Ceci ne fonctionne pas.

On voit effectivement une fenêtre Powershell s’ouvrir puis un message d’erreur qui s’affiche nous informe (ça dure 1/4 de seconde) qu’ il y a une erreur dans le chemin du fichier. En effet powershell va chercher le fichier Backup_Domoticz.ps1 dans C:\Program Files (x86)\Domoticz et comme il y a une espace dans le nom du dossier , ca coince.

Le remède

après moult tests, la solution miracle fut de créer un .bat qui appelle le .ps1

Le contenu du fichier .bat lanceur est le suivant :

On appelle Powershell en lui donnant le droit d’exécution de scripts et on lance la commande vers  C:\Program Files (x86)\Domoticz\scripts\powershell\Backup_Domoticz.ps1 en utilisant l’esperluette (j’adore) pour échapper les caractères espace.

Vous remarquerez que j’en ai profité pour essayer de masquer la fenêtre Powershell qui s’affiche systématiquement  par un nologo et WindowsStyle hidden mais sans succès, si vous savez pourquoi n’hésitez pas!

Je mets tous ça dans un fichier Backup_Domoticz.bat puis dans mon interrupteur je lance

ps_script_domoticz3

Conclusion

Quoique fastidieuse , la technique d’avoir systématiquement deux fichiers (un lanceur .bat et le script .ps1 lui même) permet vraiment d’apporter un plus à nos (vos)  install Domoticz sous Windows et d’atteindre un niveau de scripting qui est équivalent à celui du Raspberry.

Une bonne solution donc à adopter

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