Page 1 sur 1

Activer script LUA selon évènement

Publié : 17 sept. 2020, 22:01
par mattx38
Bonsoir,

Est-il possible d'activer et de désactiver un script LUA en fonction d'un événement ?
J'ai un script LUA qui vient récupérer les métriques d'un serveur d'impression 3D OctoPrint. J'aimerais que ce script soit désactivé quand OctoPrint est éteint et qu'il s’exécute quand le serveur est démarré.

Merci d'avance pour vos conseils.

Re: Activer script LUA selon évènement

Publié : 17 sept. 2020, 23:07
par boum
Non, ce n'est pas possible.
Cependant, il est facile de rajouter une condition au début du script pour empêcher l'exécution de continuer.

En dzVents :

Code : Tout sélectionner

return {
  on = {
    -- déclencheur
  },
  
  execute = function(domoticz, item)
    if not domoticz.devices('Octo').active then -- condition pour activer/désactiver le script
      return
    end
    
    -- reste du script
  end
}
En Lua classique :

Code : Tout sélectionner

if otherdevices['Octo'] ~= 'On' then -- condition
  return {}
end

-- reste du script
-- ...
Pour la condition, cela peut être l'état d'un dispositif, un variable utilisateur modifiée par un autre script…

Re: Activer script LUA selon évènement

Publié : 18 sept. 2020, 12:54
par Keros
Et tu peux grouper ça avec le plugin Ping (je ne me souviens plus du nom exact mais je crois qu'il est par défaut dans DomoticZ).
Ce plugin fait un ping sur des adresses IP et gère un device : ON quand la connexion peut être faite & OFF quand il as perdu la connexion.

En pinggant l'IP de ton Octoprint, tu peux savoir s'il est allumé ou pas.

Il existe un plugin DomoticZ pour Octoprint. Je pense que tu peux y retrouver des infos comme le statut d'impression, etc (je ne l'ai pas testé).

Re: Activer script LUA selon évènement

Publié : 20 sept. 2020, 22:28
par mattx38
Merci à tous les deux.

J'ai essayé d'ajouter le script au début de mon script LUA, mais ça ne change rien.
Ca m'écrit toujours : "Status: EventSystem: Script event triggered: Octoprint-LUA" dans les logs, même quand le serveur OctoPrint est éteint.

Sinon, j'ai bien mis en place le ping du serveur.
Je n'arrive pas à m'en servir pour adapter le script.

Re: Activer script LUA selon évènement

Publié : 21 sept. 2020, 09:06
par oddali
Bonjour
Octoprint, qui pilote une imprimante 3D, s'exécute sur un Raspberry Pi qui est censé fonctionner en permanence, même si l'imprimante 3D est arrêtée.
Le ping sur l'IP du Pi ( :) )n'est donc pas une bonne piste.

Re: Activer script LUA selon évènement

Publié : 21 sept. 2020, 12:32
par Keros
mattx38 a écrit : 17 sept. 2020, 22:01 J'aimerais que ce script soit désactivé quand OctoPrint est éteint et qu'il s’exécute quand le serveur est démarré.
En lisant sa demande, je pense que la solution du ping sur le serveur répond au besoin.

Mattx38, avec le ping sur le serveur, tu dois avoir un device à On quand Octoprint est allumé et Off quand Octoprint est éteint. Tu as bien ce fonctionnement dans les interrupteurs de DomoticZ ?
Si ça fonctionne, alors utilises ce device dans la condition de ton script.

Re: Activer script LUA selon évènement

Publié : 21 sept. 2020, 23:06
par mattx38
Tout à fait.
Octoprint me sert uniquement à stopper l'imprimante une fois l'impression terminée, quand j'ai des travaux qui se terminent en pleine nuit par exemple. Du coup, le reste du temps, j'arrête le RPI.

Donc j'ai inscrit ceci :

Code : Tout sélectionner

if otherdevices ['OctoPrint'] ~= 'On' then -- condition
  return {}
 end

-- Use Lua -> Time
-- For displaying debug messages
debug=false
Et j'obtiens cela comme log :
Error: EventSystem: Lua script Octoprint-LUA did not return a commandArray

Re: Activer script LUA selon évènement

Publié : 22 sept. 2020, 10:09
par boum
mattx38 a écrit : 21 sept. 2020, 23:06 Tout à fait.
Octoprint me sert uniquement à stopper l'imprimante une fois l'impression terminée, quand j'ai des travaux qui se terminent en pleine nuit par exemple. Du coup, le reste du temps, j'arrête le RPI.

Donc j'ai inscrit ceci :

Et j'obtiens cela comme log :
Error: EventSystem: Lua script Octoprint-LUA did not return a commandArray
Dans les scripts Lua classiques, la première instruction devrait toujours être :

Code : Tout sélectionner

commandArray = {}
On nous ment, on nous spolie.
J'ai vérifié le code et je ne sais pas si ça a toujours été comme ça, mais le système d'événement n'en a rien à péter que l'on retourne commandArray, un nombre ou la tête à Toto. Il regarde le contenu de la variable globale commandArray.
Ce message d'erreur est un mensonge ! ^^

Re: Activer script LUA selon évènement

Publié : 22 sept. 2020, 12:24
par Keros
Utilise la fonction de création de script dans Paramètres / Plus d'options / Évènements. Cela te créera la syntaxe de base pour tes scripts.

Tu trouveras plus d'info pour débuter en programmation dans ma signature.