J'ai passé un peu de temps pour faire marcher des shells ou des scripts LUA lancés par les actions sur un device virtuel de type switch ou selector.
Je voulais mettre à jour des devices virtuels immédiatement en fonction de l'action sur un autre device virtuel.
Exemple, couper l'automation des volets quand un switch virtuel de sécurité était activé.
Je partage ici les notes de mes trouvailles perso et sur internet ainsi qu'un fichier de fonctions LUA utilisant des commandes curl avec l'API JSON de Domoticz utilisables dans ce contexte
...au cas où ça peut aider.
Juste une question. J'ai trouvé des exemples où les commandes curl sont lancée en arrière plan avec un '&'.
Je n'en ai pas mis dans mes fonctions car je n'ai pas vu de différence avec ou sans.
Peut être pour des exécuter des commandes longues ?
Exécution d'un shell défini dans les champs 'On Action', 'Off Action', 'Selector Action', etc
Setup pour un environnement UNIX (RaspberrtyOS)
- Coder l'appel au shell ou au script dans les champs actions des devices :
- Ex : script:///home/pi/domoticz/scripts/lua/Actions/test.lua <arg> .
- Dans un script LUA l'argument <arg> est récupéré dans arg[1].
- Donner les droits 755 au fichier.
- 1ère ligne (she-bang) :
Pour un shell : #!/bin/bash
Pour un script LUA : #!/usr/bin/lua
- Optionnel : Enregistrer le fichier au format UNIX.
Restrictions
1) Les tables de l’environnement Domoticz ne sont pas accessibles. L'appel direct aux commandes style otherdevice, etc, ne marche pas.
2) Les entités Domiticz sont accessibles par des commandes curl appelant l'API JSON de Domoticz.
ex: /usr/bin/curl -m 8 "http://192.168.1.21:8080/json.htm?type=devices&rid=51
Les paramètres -u <id:pwd> de la commande curl sont optionnels selon le setup de la sécurité dans Domoticz.
Debug
erreur 32256 : donner droits 755 au fichier.
erreur 512: ajouter shebang, sauvegarder au format UNIX.
erreur 256 : erreur dans le script (syntax,..). Lancer le script en ligne de commande pour voir si messages d'erreur.
Exemple de script LUA
Code : Tout sélectionner
#!/usr/bin/lua
-- Script appelé par les 'Selector Action' pour les modes d'automation des volets
-- script:///home/pi/domoticz/scripts/lua/Scripts_Action/Selector_Mode_Volets_Etage.lua <arg>
-- <arg> = Désignation du grope de volets, >Etage> ou <Rdc>
-- Actions :
-- Pour les modes 'Manuel' (10) et 'Jour/Nuit' (20) :
-- Supprime la variable BioClim_Volets_<arg>.
------------------------------------------
--
-- Chargement des packages
--
------------------------------------------
package.path = '/home/pi/domoticz/scripts/lua/Functions_curl.lua;' .. package.path
require("Functions_curl.lua")
------------------------------------------
--
-- Main Program
--
------------------------------------------
-- Récupération de l'argument passé au script LUA.
LUA_arg_1 = arg[1]
-- Log("Arg: " .. LUA_arg_1, 4)
Selector = Dev_Get_Data('Mode Volets ' .. LUA_arg_1,'Level')
if (Selector < 20)
then
Var_Delete_By_Name("BioClim_Volets_" .. LUA_arg_1)
end
Code : Tout sélectionner
#!/bin/bash
#
# Commande curl pour récupérer les données JSON d'un device.
# Le paramètre -u <id:pwd> de la commande curl est optionnel.
/usr/bin/curl -m 8 "http://192.168.1.14:8080/json.htm?type=devices&rid=51"
#
# Exécution d'une commande curl pour mettre le device_idx 53 à 'Off'.
#
/usr/bin/curl -m 8 "http://127.0.0.1:8080/json.htm?type=command¶m=switchlight&idx=53&switchcmd=Off"
#
# Exécution d'une commande curl pour écrire la valeur 'Level' du device_idx 51 dans un fichier
# Retourne la valeur du champs 'Level' pour le device_idx 51" dans le fichier Level.txt
# Le paramètre -u <id:pwd> de la commande curl est optionnel.
#
/usr/bin/curl -m 8 "http://192.168.1.14:8080/json.htm?type=devices&rid=51" | jq .result[0].Level > ./Level.txt
#
# Exécution d'un script LUA à l'interieur d'un shell
# Résultat dans /home/pi/domoticz/Test/pgm_lua.txt.
# {
# "status" : "OK",
# "title" : "SwitchLight"
# }
lua /home/pi/domoticz/scripts/lua/test.lua > ./Test/pgm_lua.txt
exit 0