Page 1 sur 1

[LUA] ordre appels OpenURL

Publié : 27 mars 2021, 23:21
par tmunzer
Bonjour,

Après un log moment (+/- deux ans!) je me suis décidé à faire une maj de mon domoticz en Version: 2020.2 (build 13119). Je rencontre un souci dans un script lua interne qui fonctionnait sans souci, il me permet de de mettre à jour un lcd2004 sur un esp8266 tournant sous espEasy en utilisant plusieurs appels d'OpenURL. Dans mon ancienne version avec le code suivant (je met juste le nécessaire)

Code : Tout sélectionner

commandArray[1]={['OpenURL'] = baseurlESPEasy..'CMD,clear' }
        commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',1,1,"'..space..space..jour..'"'}
    
        if (modo == 0) then 
            commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',2,1,"'..space..space..space..'DNS'..space..space..space..space..space..space..twopoints..space..otherdevices["Dns Resolution"]..'"'}
            commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',3,1,"'..space..space..space..'Internet'..space..twopoints..space..otherdevices["Google"]..'"'}
            commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',4,1,"'..space..space..space..'Serveur'..space..space..twopoints..space..otherdevices["Tatooine"]..'"'}

Les OpenUrl se faisaient systématiquement dans l'ordre, depuis la maj, c'est au hasard... et donc l'effacement du lcd qui doit obligatoirement être fait en premier arrive n'importe quand.

Je viens de passer un bon moment à chercher sans trouver de solution (si ce n'est de zapper l'effacement et d'envoyer 4 lignes de 20 caractères!!!). Si quelqu'un a une idée pour forcer une exécution synchrone ? Si possible en restant en script LUA interne.

Re: [LUA] ordre appels OpenURL

Publié : 28 mars 2021, 06:44
par denis_brasseur
Une chose saute aux yeux dans ton code, la première ligne :
commandArray[1]={['OpenURL'] = baseurlESPEasy..'CMD,clear' }
alors que pour les autres commandArray :
commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',1,1,"'..space..space..jour..'"'}
Ton anomalie se situant à l'effacement, il y a certainement un rapport avec la syntaxe de cette ligne, ta deuxième ligne écrasant ta première.

Re: [LUA] ordre appels OpenURL

Publié : 28 mars 2021, 16:34
par tmunzer
@denis_brasseur
Merci de ta réponse, mais ton analyse est inexacte.

Ma syntaxe est bonne. Le problème tient à ce que dans la version actuelle de Domoticz, contrairement à la version antérieure que j'utilisais, les différents appels d'OpenURL sont lancés de manière asynchrone. On a donc un résultat non déterministe, le premier appel qui efface le lcd2004 peut être exécuté par le serveur ESP Easy avant ou après les autres appels qui écrivent du texte. L'affichage est donc aléatoire, parfois le Clear est exécuté en premier et j'obtiens le résultat souhaité, mais s'il est exécuté après les autres.. le texte affiché par les OpenURL précédents est effacé.

Re: [LUA] ordre appels OpenURL

Publié : 28 mars 2021, 20:02
par tmunzer
Ayant demandé par ailleurs chez nos amis anglophone j'ai eu une réponse, on peut spécifier un délai avec une syntaxe de la forme suivante :

Code : Tout sélectionner

        commandArray[1]={['OpenURL'] = baseurlESPEasy..'CMD,clear'..' AFTER 0'}
        commandArray[#commandArray + 1]={['OpenURL'] = baseurlESPEasy..',1,1,"'..space..space..jour..'"'..' AFTER 0.2'}
Je ne retrouve pas exactement le fonctionnement antérieur synchrone (l'ordre d'exécution des appels était garanti) mais avec cette syntaxe dans 90% des cas c'est dans le bon ordre.

Cette solution est acceptable uniquement car il s'agit d'affichage et donc sans conséquence, si la première action changeait par exemple d'état un relais ce serait une autre histoire.

Re: [LUA] ordre appels OpenURL

Publié : 28 mars 2021, 21:25
par Keros
Tu as essayé ceci ? Il me semble que les actions sont exécutés au fur et à mesure, ce qui fait également gagner en réactivité.

Re: [LUA] ordre appels OpenURL

Publié : 31 mars 2021, 14:34
par tmunzer
Keros a écrit : 28 mars 2021, 21:25 Tu as essayé ceci ? Il me semble que les actions sont exécutés au fur et à mesure, ce qui fait également gagner en réactivité.
Merci, il faut que je regarde, mais c'est une solution pas très satisfaisante car elle oblige à passer par un appel à l'OS. J'aurais préféré pouvoir retrouver (même par le biais d'un paramètre supplémentaire) le comportement antérieur.

Re: [LUA] ordre appels OpenURL

Publié : 31 mars 2021, 15:56
par boum
Une autre possibilité serait de convertir les scripts en dzVents.
La function domoticz.openURL() permet de passer un callback qui déclenchera un script (ou le même script) une fois que la réponse HTTP est arrivée. Tu pourras sur ce déclencheur lancer la commande suivante.