Page 1 sur 1

Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 13 févr. 2015, 12:21
par Nicogluck
Bonjour à tous,

Ma demande peut sembler surprenante, mais j'essaie de résoudre un problème avec mon matériel.

Je dispose d'une carte de 16 relais IP de Sainsmart. La fabrication est correcte visuellement, mais il arrive que cette carte plante de temps en temps (plus aucune réaction à l'envoi des commandes HTTP pour activer les relais ou demander leur état). Les deux cartes que j'ai achetées ont la même maladie.
Seule solution : la débrancher puis la rebrancher. A l'heure où on essaie de tout automatiser, ça craint un max !! :x

Bref, je m'en sers pour piloter mes radiateurs via fils pilote, et j'utilise 2 relais pour chaque radiateur (pour gérer 3 ordres différents), donc j'envoie deux lignes HTTP pour commander un état spécifique d'un radiateur.
Je me dis que ce plantage peut probablement provenir du fait que les deux requêtes HTTP sont envoyées trop vite à la carte (quasiment en même temps).

J'en arrive à ma question : comment définir un délai entre deux commandes HTTP, dans mes scripts Blocky ?

Grand merci à tous pour vos précieuses réponses !
A part cette carte de relais, je ne sais pas comment gérer mes fils pilote (excepté IPX800).

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 13 févr. 2015, 12:57
par hobbe
Nicogluck a écrit :J'en arrive à ma question : comment définir un délai entre deux commandes HTTP, dans mes scripts Blocky ?
Personnellement, je ne sais pas :oops:

Mais je suis tombé là-dessus sur le forum anglophone : Sleep in blocky?

Sinon, en lua, il y ces méthodes.

Bon courage !

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 13 févr. 2015, 13:05
par vil1driver
salut,

il est possible de le faire en lua,
blocky je ne connais pas trop mais à mon avis si tu n'as pas trouvé le bon block, c'est que ce n'est pas possible.

j'ai envie de te conseiller de regarder comment transcrire ton blocky en script lua.
perso je le ferai en lua en tout cas.....

mais si tu préfère une solution graphique, ce que je te propose c'est de:
créer des interrupteurs virtuels (un pour chaque relai de ta carte ex:relai1, relai2..) dans l'interface
et mettre tes requêtes de commande http dans 'Action On:' 'Action Off:'et de définir le délai 'Sur le retard:' que tu souhaites,
puis créer des scènes correspondant aux ordres fil pilote (ex:scène confort-raditeur1 = relai1 On + relai2 Off)
depuis ton blocky tu appelles directement les scènes =)

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 13 févr. 2015, 13:54
par Nicogluck
A passer du temps sur Blocky et fouiner pour trouver des solutions, je me rends compte aussi qu'éviter les scripts, c'est aussi passer à côté d'innombrables possibilités.

Bon ben... j'ai plus qu'à me mettre les mains dans le cambouis !
A quand passe le bus pour la prochaine formation LUA ?

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 13 févr. 2015, 18:18
par vil1driver
lua n'est pas si compliqué une fois que l'on a les quelques commandes utiles en tête.

mais tant que blocky fait l'affaire, lua peut bien attendre =)

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 20 févr. 2015, 18:11
par Nicogluck
Ca y est, j'ai mis un pied dans le LUA... :-S
Je tâtonne mais ça avance.

En fouinant, j'ai trouvé la fonction luup.sleep (delay) en spécifiant une valeur en millisecondes.
Mais bon, trop facile...

Le terminal de Domoticz me renvoit :
" Error: .../domoticz/scripts/lua/script_device_dressingoff.lua:11: attempt to index global 'luup' (a nil value) "

Ca inspire quelqu'un ?
Je ne trouve pas la bonne syntaxe pour cette commande.

Merci.

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 20 févr. 2015, 20:41
par jackslayter
Moi j'ai arrêté les blocky (trop simple et compliqué a la fois et trop beugué)je suis passé au lua/bash , certes c'est un cap a passer mais après c'est que du bonheur

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 21 févr. 2015, 17:03
par hobbe
Nicogluck a écrit :Ca y est, j'ai mis un pied dans le LUA... :-S
Je tâtonne mais ça avance.

En fouinant, j'ai trouvé la fonction luup.sleep (delay) en spécifiant une valeur en millisecondes.
Mais bon, trop facile...

Le terminal de Domoticz me renvoit :
" Error: .../domoticz/scripts/lua/script_device_dressingoff.lua:11: attempt to index global 'luup' (a nil value) "

Ca inspire quelqu'un ?
Je ne trouve pas la bonne syntaxe pour cette commande.

Merci.
Non luup.sleep ne vient pas de LUA, c'est pour les box Vera je crois.

Essaye plutôt l'une des méthodes indiquées ici : http://lua-users.org/wiki/SleepFunction
(en fonction de ton OS)

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 27 févr. 2015, 19:00
par Nicogluck
Voilà ! Ca marche !

Pour ceux que ça intéresse, la fonction sleep détaillée comme ci-dessous fonctionne dans un script pour Domoticz :

function sleep(n)
if n > 0 then os.execute("ping -n " .. tonumber(n+1) .. " localhost > NUL") end
end


Pour les débutants (comme moi), il faut copier-coller ces 3 lignes en début de script puis insérer sleep(délai_en_secondes) où vous avez besoin d'une temporisation.

Re: Ajouter un délai entre deux commandes HTTP avec Blocky

Publié : 27 févr. 2015, 19:27
par vil1driver
À savoir qu'il y a un timeout sur le temps d'exécution des script lua.
Si le script met plus de 10s à s'exécuter, il sera stopé pour ne pas pénaliser l'exécution des autres en attente.

mais j'aurais plutôt utilisé la vraie commande sleep à la place de ping

Code : Tout sélectionner

function sleep(n)
  os.execute("sleep " .. tonumber(n))
end

commandArray = {}

sleep(5)

...