[LUA] ordre appels OpenURL

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
tmunzer
Messages : 4
Inscription : 27 mars 2021, 22:49

[LUA] ordre appels OpenURL

Message 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.
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: [LUA] ordre appels OpenURL

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
tmunzer
Messages : 4
Inscription : 27 mars 2021, 22:49

Re: [LUA] ordre appels OpenURL

Message 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é.
tmunzer
Messages : 4
Inscription : 27 mars 2021, 22:49

Re: [LUA] ordre appels OpenURL

Message 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.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] ordre appels OpenURL

Message 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é.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
tmunzer
Messages : 4
Inscription : 27 mars 2021, 22:49

Re: [LUA] ordre appels OpenURL

Message 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.
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: [LUA] ordre appels OpenURL

Message 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.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
Répondre