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/

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 :

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

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/

Domoticz et Windows : Les scripts liés aux Action On/Action Off

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

Je voudrais tordre le cou ici à une légende Domoticz qui dit que les scripts Windows ne peuvent être utilisés dans les champs Action ON et Action OFF d’un switch Domoticz.Rappel
Les champs Action On et Action Off sont présent dans les interrupteurs Domoticz (réels et virtuels) et permettent de déclencher une action au basculement à ON/à OFF de cet interrupteur.

Action_On_Off

Action_On_Off_2

N’oubliez pas que vous pouvez créer autant d’interrupteurs virtuels que nécessaire.

Domoticz sous Windows

L’installation par défaut de Domoticz s’est faite dans le dossier C:\Program Files (x86)\Domoticz.

Il y a un sous dossier nommé « scripts » destiné à recevoir nos scripts. Créez vous un sous dossier pour y entreposer vos batchs.

Les champs Action ON/Action OFF

La syntaxe est la suivante avec le mot clé  script://

script://chemin_jusqu’au_fichier_batch_depuis_le_dossier_ C:\Program Files (x86)\Domoticz_séparé_par_antislash.

(celui dans ce sens \ 😛 ).

 

Sachant que j’ai un fichier batch nommé ie.bat situé dans le dossier scripts puis mes_batch (scripts\mes_batch\ie.bat)

Le action ON/OFF sera :

script://scripts\mes_batch\ie.bat

batch_windows

Autre exemple :

script://scripts\powershell\sms.bat
  • Le mot clé est donc script://
  • Il n’y a que 2 slashes
  • Il ne semble pas que l’on puisse lancer des scripts situés ailleurs que dans le chemin de Domoticz (pas trouvé)

 

Voila , c’était un pause récréative avant de parler des powershell dans les Action ON.

 

Résultat de recherche d'images pour "c'est la recre"

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

Domoticz et Windows : Les scripts powershell, partie 1

Parent pauvre de ce blog : Windows™.

Bien qu’il ne me semble pas écologiquement responsable de faire tourner un PC 24/24 7/7 pour ouvrir et fermer quelques volets roulants, je vous laisse la responsabilité de votre choix, et je vous tiens personnellement responsable de l’augmentation de température terrestre.

rech_clim

 

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.

 

Domoticz sous Windows

L’installation par défaut de Domoticz s’est faite dans le dossier C:\Program Files (x86)\Domoticz.

Comme sur le Raspberry il existe un dossier nommé « scripts » destiné à recevoir nos scripts.

Pour structurer au mieux , je vous propose de créer dans ce dossier scripts un nouveau dossier nommé « powershell » qui recevra nos réalisations.

Powershell, trop long à écrire, sera ici abrégé en PS.

 Quels outils utiliser ?

Le simple bloc note de  Windows suffit, toutefois je ne peux que vous encourager à utiliser l’outil intégré à Windows : Powershell ISE.

Présent  sous Windows 7 (recherchez dans les Accessoires), il à curieusement disparu des menus Windows 8 mais il suffira de créer un raccourci sur le bureau de powershell_ise.exe qui se trouve dans  C:\Windows\System32\WindowsPowerShell\v1.0

C’est un outil  plutôt bien pensé et pratique (copier/coller, débogage, command browser, tabs multiples…).

Powershell ISE en 2 images

Voici à quoi ressemble PS_ISE, :

  • 1 zone pour écrire nos scripts,
  • la partie bleue en bas affiche le résultat du script,
  • la partie de droite est une vraie aide pour la rédaction de scripts car souvent un assistant nous guide pour l’écriture de l’instruction choisie.

ps_ise_1

Le script est lancé par un clic sur la flèche verte du haut, les erreurs sont affichées en rouge en bas.

ps_ise_error

Premier script

 

Je vous propose de faire un script qui copie tous les dossiers de Domoticz dans un autre emplacement afin de réaliser une sauvegarde de nos fichiers.

Lire la suite

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

Les tables Domoticz

sqlite

Nous avions vu précédemment l’utilisation d’un outil de gestion de base de donnée SQLite

Cette fois ci explorons la base de données Domoticz à la découverte de ses tables, colonnes, liens entre tables…

Bien entendu cette liste n’est pas exhaustive.

La première table à observer est DeviceStatus

DeviceStatus

Cette table contient la liste des périphériques du menu « Dispositifs »

Je ne vais détailler ici que les champs qui me semblent importants :

Nom Rôle
Id C’est le fameux Idx Domoticz
Name Le nom que vous avez donné à ce matériel
Used 1 si il est utilisé, 0 sinon
BatteryLevel Le niveau de batterie
nValue la nValue (souvent 0) voir API JSON
sValue Les sValue, les valeurs reçues séparées par un ; Voir API JSON
LastUpdate La dernière fois que l’on à vu ce matériel AAAA-MM-JJ HH:MM:SS (2016-01-12 08:04:49)

On y retrouve aussi, le delta de correction de température, le flag de protection ….

Cette table est importante dans la mesure ou elle contient toutes les caractéristiques de nos périphériques tels que les Noms, la date de dernière mise à jour.

Toutes les autres tables ,sont des tables des mesures et ne contiennent que des Idx et les valeurs brutes mesurées ainsi que la date (simplification inside), le mon du matériel n’y figure pas par exemple.

Ce qui signifie que si nous voulons afficher le nom du matériel nous devrons toujours aller le chercher dans la table DeviceStatus par l’intermédiaire de son Idx.

En SQL il s’agit de faire une jointure entre deux tables liées entres elles par un point commun ici le Idx nommé Id dans la table DeviceStatus ( 🙄 )

L’instruction à utiliser est soit un WHERE soit JOIN ON. J’utiliserai ici JOIN ON qui me semble plus compréhensible.

Exemple :

SELECT Name, Value3,Date FROM Multimeter JOIN DeviceStatus ON Multimeter.DeviceRowId=DeviceStatus.id order by Date

Explication : Je vais chercher Value3, Date dans la table Multimeter et je JOIN la table DeviceStatus pour aller chercher ce qui est dedans à savoir Name par intermédiaire du DeviceRowId de Multimeter qui est le même que le id  de la table DeviceStatus.

Remarquez que on va chercher la colonne DeviceRowId dans la table Multimeter par un nom_de_la_table.nom_de_la_colonne (Multimeter.DeviceRowID) de même pur Id de DeviceStatus.

Cette requête produit le même résultat de sortie.

SELECT Name, Value3,Date FROM Multimeter, DeviceStatus where DeviceRowId=DeviceStatus.id

N.B Les requêtes SQL sont sensibles à la casse des caractères.

 Quelques autres tables

Lire la suite

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