[LUA] Bibliothèque de fonctions

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: bibliothèque de fonctions pour scripts LUA

Message par papoo »

non j'ai confondu dzvents et lua
comme tu l'as remarqué c'est du dzvents
vais l'adapter en lua
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: bibliothèque de fonctions pour scripts LUA

Message par papoo »

la fonction lua :

Code : Tout sélectionner

function telegram(msg)
commandArray[#commandArray+1] = {['OpenURL'] = 'https://api.telegram.org/bot'..TELEGRAM_API_key..'/sendMessage?chat_id='..chat_ID .. '&text=' .. msg}
end
j'ai modifié mon message précédent pour que l'on ne puisse pas se tromper
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message par vil1driver »

bien pratique ;) merci
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message par landaisbenj »

Hello.

Je tente de créer cette fonction:

Code : Tout sélectionner

function makeVariable(name,value)
	local url = 'curl '..domoticzURL..'/json.htm?type=command&param=saveuservariable&vname='..url_encode(name)..'&vtype=2&vvalue='..url_encode(value)
	local output = json:decode(os.capture(url, false))
	if output.status=="Variable name already exists!" then
	    log('Variable existante',debug)
	    local url = 'curl '..domoticzURL..'/json.htm?type=command&param=updateuservariable&vname='..url_encode(name)..'&vtype=2&vvalue='..url_encode(value)
	    local output = json:decode(os.capture(url, false))
	    if output.status=="Ok" then
	        log('Mise a jour variable existante')
        else
            error('Mise a jour de variable existante impossible')
        end
    elseif output.status=="Ok!" then
        log('Creation de variable avec les parametres')
    else
        error('Creation de variable impossible')
    end
end
Sauf qu'il a pas l'air d’apprécier le io.popen d'os.capture avec l'api.
Apres recherche il n'aime pas attendre:

Code : Tout sélectionner

script = ' [Test] ' ; commandArray={}
if devicechanged['Bouton Test']=='On' then
print('\n--------------------------------------------- '..script..' --------------------------------------------------------')

print('Debut de test')
os.execute( 'curl "http://192.168.0.38:8080/json.htm?type=command&param=updateuservariable&vname=Libre1&vtype=2&vvalue=TEST1"' )
print('Fin de test')
end
return commandArray
Me retour ca:
--------------------------------------------- [Test] --------------------------------------------------------
2018-03-21 09:23:04.426 dzVents: Debut de test
2018-03-21 09:23:14.424 Error: EventSystem: Warning!, lua script *** LUA: Test has been running for more than 10 seconds

On dirait que la reponse se fait trop attendre vu que je retir le &. Le script tourne plus de 10s et donc plante. Une idée d'ou ça peut provenir ? Ou comment je pourrais éviter l'attente tout en ayant la réponse ?

Pour info si je la test en ligne de commande depuis le pi, la réponse est immédiate. C'est étonnant que la commande via domoticz plante... :?:
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message par vil1driver »

pourquoi ne pas simplement tester l’existence de la variable directement ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message par landaisbenj »

Par ce que je ne sais pas comment faire :D ?
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message par vil1driver »

regarde à la fin de modules.lua, la fonction compute, un teste y est effectué avant de créer ou non les variables utiles à la fonction
Dernière modification par vil1driver le 21 mars 2018, 15:39, modifié 1 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message par landaisbenj »

A ok. Donc c'est bien ce que j'avais voulu faire au debut:

Code : Tout sélectionner

if uservariables['Test'] == nil then 
Mais si la variable est créé et vide ?
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message par vil1driver »

vide n'est pas inexistant (nil)

de plus ce n'est pas permis
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message par landaisbenj »

A ok ?? Il me semblait avoir faire le test, j'avais du me trompé dans le nom de la variable. Du coup ca fonctionne bien merci.
Par contre j'arrive a faire une variable vide:

Code : Tout sélectionner

commandArray['Variable:Libre3']=''
Capture.PNG
Capture.PNG (3.62 Kio) Consulté 7555 fois
Bien merci pour la precision en tout cas je vais pouvoir avancer !!!

[EDIT] Bon ca n'empeche pas que le script crash si je fais l'os.execute mais j'ai ouvert un post sur le fofo us...
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Répondre