passer plus d'un argument dans call_delay

Programmation de la Vera

passer plus d'un argument dans call_delay

Messagede jaco » 28 Mar 2013, 06:43

Comment fait-on pour passer plus d'un argument dans call-delay (ou call_timer) ?
J'ai essayé plusieurs syntaxes, mais aucune n'aboutit au résultat désiré.

Code: Tout sélectionner
function ma_fonction(arg1, arg2)
  mail("arg1 = [" .. tostring(arg1) .. "], arg2 = [" .. tostring(arg2) .. "]")
end

luup.call_delay("ma_fonction", 5, "123, 456", true)

--> arg1 = [123, 456], arg2 = [nil] comme on pouvait s'y attendre mais ce n'est pas ce que je veux.

RETOUR EXPERIENCE PRODUITS (01/2013 Ă  aujourd'hui)
433MHz: Astrell: qques Telcos et plugs on/off (pour dépanner)
Z-Wave:
ContrĂ´leurs - Micasaverde: VeraLite, Remotec: ZURC-550 (zombie) + ZRC-100, Aeon Labs: DSA22 + Z-Stick S2
Emetteurs - Aeon Labs: DSB05, Fibaro: FGK + FGMS (récents)
RĂ©cepteurs - Fibaro: Wallplug FGWPE, Everspring (marque de merde): AN157 (tous morts) + AN158 + AD142 (tous morts), QEES: Reto shell, Aeon Labs: DSC08 + DSC13
Ampoules - Domitech: ZBULB (récents), Aeon Labs: ZW098 (récents)
Infrarouge:
USBUIRT, AIM: IR606Q, Ebode (marque de merde): PM28 (tous morts) + EXLED3 (tous morts)
Divers:
Raspberry Pi: modèle B, Cubieboard: version 2, Monster Cable: switch hdmi
Disques durs externes: Seagate (de 1 Ă  2 To), Freecom (300 Go)
Wiko: Cink Peax
Ampoules led dimmables: Philips (eq 40W Ă  eq 100W), Vision El (eq 60W), Osram (eq 75W)
Ampoules fluo dimmables: quelques marques testées dont Osram et Ikea (toutes inutilisables)
Internet: Orange Livebox
jaco
Dieu de domotique
 
Messages: 423
Inscription: 20 Jan 2013, 00:09
Localisation: Tours

Re: passer plus d'un argument dans call_delay

Messagede Shaigan » 28 Mar 2013, 07:24

Salut. Au pire tu passes dans ta fonction un seul argument qui serait un tableau de variables {arg1, arg2, etc...}

--
via Samsung Galaxy S avec Tapatalk
Aeon Labs : Multisensor (6), Compteur HEM3 | BeNext : Detecteur d'ouverture | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.3232) | Android : Nexus 4, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Avatar de l’utilisateur
Shaigan
Dieu de domotique
 
Messages: 621
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: passer plus d'un argument dans call_delay

Messagede jaco » 28 Mar 2013, 08:09

Shaigan a Ă©crit:Salut. Au pire tu passes dans ta fonction un seul argument qui serait un tableau de variables {arg1, arg2, etc...}

--
via Samsung Galaxy S avec Tapatalk


Déjà essayé, ça marche pas. Ou évidemment on peut toujours imaginer de programmer toutes les vérues possibles mais ça reste des vérues.

Merci qd mĂŞme
RETOUR EXPERIENCE PRODUITS (01/2013 Ă  aujourd'hui)
433MHz: Astrell: qques Telcos et plugs on/off (pour dépanner)
Z-Wave:
ContrĂ´leurs - Micasaverde: VeraLite, Remotec: ZURC-550 (zombie) + ZRC-100, Aeon Labs: DSA22 + Z-Stick S2
Emetteurs - Aeon Labs: DSB05, Fibaro: FGK + FGMS (récents)
RĂ©cepteurs - Fibaro: Wallplug FGWPE, Everspring (marque de merde): AN157 (tous morts) + AN158 + AD142 (tous morts), QEES: Reto shell, Aeon Labs: DSC08 + DSC13
Ampoules - Domitech: ZBULB (récents), Aeon Labs: ZW098 (récents)
Infrarouge:
USBUIRT, AIM: IR606Q, Ebode (marque de merde): PM28 (tous morts) + EXLED3 (tous morts)
Divers:
Raspberry Pi: modèle B, Cubieboard: version 2, Monster Cable: switch hdmi
Disques durs externes: Seagate (de 1 Ă  2 To), Freecom (300 Go)
Wiko: Cink Peax
Ampoules led dimmables: Philips (eq 40W Ă  eq 100W), Vision El (eq 60W), Osram (eq 75W)
Ampoules fluo dimmables: quelques marques testées dont Osram et Ikea (toutes inutilisables)
Internet: Orange Livebox
jaco
Dieu de domotique
 
Messages: 423
Inscription: 20 Jan 2013, 00:09
Localisation: Tours

Re: passer plus d'un argument dans call_delay

Messagede vosmont » 28 Mar 2013, 08:44

Une solution est d'encoder les paramètres en json (la bibliothèque json est disponible avec le plugin "google calendar"):

Code: Tout sélectionner
local json = require("json")

function myFunc (encodedParams)
  local params = json.decode(encodedparams)
 
  -- params.arg1 == "val1"
end

local params = {
  arg1 = "val1",
  arg2 = "val2" 
}
luup.call_delay("myFunc", 5, json.encode(params))



ça vient d'un script de psykokwak :
http://www.touteladomotique.com/forum/viewtopic.php?f=80&t=9558

A noter que le dernier paramètre de "luup.call_delay" pour le lancement asynchrone n'est plus obligatoire.

Systèmes domotique: VeraEdge / openLuup / Jeedom
Protocoles domotique: Zwave / RFPlayer (433/868Mhz) / ZigBee (ZiGate) / Edisio / MQTT
Plugins Vera : https://github.com/vosmont
RĂ©seau : Ubiquiti ERX + UAP / Synology (+Docker Unifi)
vosmont
Dieu de domotique
 
Messages: 635
Inscription: 24 AoĂ» 2012, 11:43
Localisation: Nantes

Re: passer plus d'un argument dans call_delay

Messagede jaco » 28 Mar 2013, 14:35

vosmont a écrit:Une solution est d'encoder les paramètres en json (la bibliothèque json est disponible avec le plugin "google calendar"):

Code: Tout sélectionner
local json = require("json")

function myFunc (encodedParams)
  local params = json.decode(encodedparams)
 
  -- params.arg1 == "val1"
end

local params = {
  arg1 = "val1",
  arg2 = "val2" 
}
luup.call_delay("myFunc", 5, json.encode(params))



ça vient d'un script de psykokwak :
http://www.touteladomotique.com/forum/viewtopic.php?f=80&t=9558

A noter que le dernier paramètre de "luup.call_delay" pour le lancement asynchrone n'est plus obligatoire.


Bon finalement sur ce coup-là, je n'ai plus besoin d'appel différé mais je garde la solution en mémoire. Ca peut servir. C'est quand même un peu lourd d'être obligé de faire appel à une bibliothèque spécifique pour un truc aussi simple. J'estime que c'est quasimment un bug de Luup. Si Luup était mieux programmé, une syntaxe de ce style pourrait suffire [["arg1", "arg2"]] ou effectivement passer un tableau de valeurs comme dit Shaigan.

Alors que lĂ  pour retomber sur ses pieds, il faut imaginer une architecture de ce style si je ne m'abuse:

function vraie_fonction(arg1, arg2, arg3, etc)
{
je fais des trucs utiles
}

function intermediaire(parametres)
{
arg1, arg2, arg3, etc = decode(parametres)
vraie_fonction(arg1, arg2, arg3, etc)
}

call_delay("intermediaire", 5, "chaine d'aruments", true)

J'ai même esaayé une syntaxe du même style que celle de call_action mais ça marche pô non plus.

Merci Vosmont.

Est-ce que ce ne serait pas une évolution qu'il faudrait réclamer à micasa ?
RETOUR EXPERIENCE PRODUITS (01/2013 Ă  aujourd'hui)
433MHz: Astrell: qques Telcos et plugs on/off (pour dépanner)
Z-Wave:
ContrĂ´leurs - Micasaverde: VeraLite, Remotec: ZURC-550 (zombie) + ZRC-100, Aeon Labs: DSA22 + Z-Stick S2
Emetteurs - Aeon Labs: DSB05, Fibaro: FGK + FGMS (récents)
RĂ©cepteurs - Fibaro: Wallplug FGWPE, Everspring (marque de merde): AN157 (tous morts) + AN158 + AD142 (tous morts), QEES: Reto shell, Aeon Labs: DSC08 + DSC13
Ampoules - Domitech: ZBULB (récents), Aeon Labs: ZW098 (récents)
Infrarouge:
USBUIRT, AIM: IR606Q, Ebode (marque de merde): PM28 (tous morts) + EXLED3 (tous morts)
Divers:
Raspberry Pi: modèle B, Cubieboard: version 2, Monster Cable: switch hdmi
Disques durs externes: Seagate (de 1 Ă  2 To), Freecom (300 Go)
Wiko: Cink Peax
Ampoules led dimmables: Philips (eq 40W Ă  eq 100W), Vision El (eq 60W), Osram (eq 75W)
Ampoules fluo dimmables: quelques marques testées dont Osram et Ikea (toutes inutilisables)
Internet: Orange Livebox
jaco
Dieu de domotique
 
Messages: 423
Inscription: 20 Jan 2013, 00:09
Localisation: Tours

Re: passer plus d'un argument dans call_delay

Messagede bozo-merlin » 28 Mar 2013, 17:53

J'ai jamais pensé à faire passer un liste, ça aurait été plus simple.

J'ai construit un string séparé par des lettres, genre IDvolet.."Q"..DIMvolet.."K".. ... et ensuite dans la fonction je fais du string.find et autre pour retrouver mes variables.
Ca a été bien lourd dans la tete (bcp moins dans le code), mais au final c'est fiable quand meme, le "or" fait le taff génériquement pour les volets, les radiateurs, ...
VeraLite 1.5.622
Fibaro FGR221 - FGS221 - FGD211 - ByPass - FGK10x - FGWP101
Everspring ST814 - AN157 - AN158 - SM103
Aeon Labs DSB05
Vision ZM1702
Zwave>Me 05443
Eurotronnics StellaZ

PCduino - MyVERA SQL HighChart
RaspberryPi - Domoticz ZstickS2 1wire WeatherUnderground - RaspBMC
IPX800v3
Eaton 1200
bozo-merlin
Dieu de domotique
 
Messages: 587
Inscription: 25 Nov 2012, 14:45
Localisation: NPdC


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique