-
Compteur de contenus
906 -
Inscription
-
Dernière visite
-
Jours gagnés
17
Tout ce qui a été posté par Fredmas
-
Ca y est ! A force de relire et faire des exercices cérébraux pour comprendre la dynamique et ton message, je viens d'être éclairé, ou plutôt Laserifié Maintenant que j'ai compris sa lecture, on verra si j'arrive à le réutiliser dans une autre situation ou un autre QA en écriture seul comme un grand
-
Donc si j'ai bien compris cette réponse et toutes nos discussions précédentes : #1. Soit on l'affecte à l'objet QuickApp, et dans ce cas net.HTTPClient() est accessible partout dans le QA (et donc publiée et accessible depuis l'extérieur du QA) function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient() end function myFunction(self) self.http:request(...) end #2. Soit on l'affecte à une variable locale, et dans ce cas net.HTTPClient() est accessible uniquement dans le fichier en cours local http = net.HTTPClient() function QuickApp:onInit() self:debug("onInit") end function myFunction(self) http:request(...) end #3. Soit on l'affecte à une variable globale, et dans ce cas net.HTTPClient() est accessible dans tous les fichiers du QA function QuickApp:onInit() self:debug("onInit") http = net.HTTPClient() end function myFunction(self) http:request(...) end Solution #1 intéressante pour disposer de la variable http dans tout le QA Solution #2 intéressante pour limiter au minimum la portée de la variable http Solution #3 par facilité mais avec une portée globale Pour l'instant j'utilise la version #1 comme tu l'as proposé d'ailleurs
- 58 réponses
-
Purée ça fonctionne Merci Pas encore tout compris, mais ça fonctionne Oui, je viens de relire au moins 10 fois, et je continue OK merci beaucoup. Je vais prendre le temps de lire ces 2 sujets à tête reposée ce soir Compris, je viens de regarder. Pour ne pas polluer ce topic et mélanger tous les sujets, dans ce cas si besoin je questionnerai directement sur l'autre sujet
-
#5 Question 5 : appeler une fonction B et attendre son résultat pour l'utiliser au sein d'une fonction A avant de continuer la suite du code du QA Dans une fonction A dans un QA j'appelle une autre fonction B, mais j'ai besoin d'attendre le résultat de cette autre fonction B avant de continuer à dérouler le reste de la fonction A. Comment coder "proprement" pour que la ligne de 17 attende l'exécution et le résultat d'une fonction appelée à la ligne de code 16 ? Dans mes premiers essais la ligne après l'appel de la fonction B se déroule avant d'avoir terminé la fonction B et de connaître son résultat dont j'ai besoin pour continuer Par exemple : function QuickApp:onInit() self:debug("onInit") jsonTableCurrent = {} end function currentData() print("This function is checking regularly current meteo") local http = net.HTTPClient() --blabla jsonTableCurrent = json.decode(response.data) end function mainCode(self) self:debug("This function is checking regularly the meteo for prevision") currentData() self:debug(jsonTableCurrent.name) end Dans cet exemple, dans mainCode(self), la ligne "self:debug(jsonTableCurrent.name)" s'exécute avant d'avoir terminé d'exécuter la fonction "currentData()" de la ligne précédente. Donc comment faire pour ne pas exécuter "self:debug(jsonTableCurrent.name)" tant que "currentData()" n'est pas terminé ? J'ai bien pensé et essayé un setTimeout d'1s (et ça fonctionne très bien) : function mainCode(self) self:debug("This function is checking regularly the meteo for prevision") currentData() fibaro.setTimeout(1000, function() self:debug(jsonTableCurrent.name) end) end mais je ne trouve pas cela propre. En plus si ma fonction"currentData()" devait exceptionnellement prendre plus de temps que d'habitude et dépasser ma valeur dans setTimeout, mon QA planterait. Je préfèrerais une solution permettant simplement d'attendre réellement la fin de "currentData()" avant de passer à la ligne suivante C'est peut-être tout bête, mais je n'ai pas trouvé après relu plusieurs doc
-
Donc tu as trouvé et ça fonctionne désormais ?
-
Alors j'ai bien un DoorBird depuis quelques années, mais j'utilise mon propre QA tout simple pour piloter le relai du portail. Je n'ai pas installé ce QA qui est très complet mais dont je n'ai pas réellement le besoin, en tout cas pour l'instant. Ton message ressemble à une interprétation d'un code erreur que MAM78 aurait traduit par un message plus explicite. As-tu bien complété les variables ? Adresse, user, mot de passe, etc. Ton portier est bien en adresse IP fixe sur ton réseau ?
-
Ok merci pour l’explication. Ca allège l’écriture
-
Je viens de me rendre compte (pas sur HC2, mais HC3/HC3L) que : print(os.date("%H:%M", os.time())) donne 19:18 et que : print(os.date("%H:%M")) donne également 19:18 Du coup, je ne comprends pas bien la différence, et surtout ce qui est le plus propre à utiliser dans nos codes...
-
Pour cela il faudrait décrire un peu plus ce qui ne fonctionne pas chez toi dans ce QA
-
Arrêtes, tu me tentes là
-
Nouveau projet pour ma maison et nouveau sur le forum.
Fredmas a répondu à un(e) sujet de DamienC21 dans Nouveau ? Présentez-vous
Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire Ton kit de lancement semble déjà pas mal fourni -
Tu as raisons, mais je ne saurais même pas comment l'utiliser pour l'instant... J'aime comprendre, j'adore en fait (mais ça tu l'as bien compris depuis le temps), mais je fais aussi confiance tant que je sais comment m'en servir Comme tu le dirais mieux que moi, je pense toujours à la maintenance en cas de problème... oui c'est un peu un passe-temps entre 2 bricolages de rénovation Ca je ne sais pas, mais déjà ce que je lis de ton "tools" est bien plus évolué que mes pauvres petits if, then, else, end... Mais bon, partant uniquement des modes blocs HCL depuis fin 2014, déjà je n'ai plus de variables "persistantes" (au sens onglet variables box), quasiment plus aucunes scènes et que des QA... donc j'avance petit à petit grâce à vous et mes heures de lecture...
-
Je viens de télécharger ton fichier "tools : Library - tools v2.12.lua" et l'ouvrir dans un Note histoire de voir Mais oh punaise, je ne m'attendais pas à avoir autant de lignes à ligne et déchiffrer Mais c'est bien, ça me renvoie à mon niveau et le reste à apprendre pour progresser
-
Merci @Lazer Je comprends tes différents niveaux d'importance. Histoire de faire propre, je prendrai le temps de formater correctement mes "print" et autres "debug" dans mes QA Bien que je l'ai peut-être déjà lu quelque part et oublié ensuite, tu éveilles ma curiosité avec ton "tools" Est-il partagé et trouvable dans le forum ?
-
#4 Question 4 : définir correctement la méthode de débogage dans la console d'un QA Cette fois, rien de bien compliqué, c'est davantage une question "café-philo" à propos des bonnes pratiques. Après avoir lu le sujet rédigé par @Krikroff et du coup relu le manuel Quick Apps de Fibaro , il me reste quelques doutes quand au choix des différentes méthodes de de débogage dans la console d'un QA. En fait je ne sais pas vraiment quand il vaut mieux utiliser "debug, "trace", "warning", "error" ou simplement "print". Je crois avoir compris que la seule différence concerne l'identification et la recherche de messages dans la console via les filtres, mais je passe peut-être à côté de quelque chose ou simplement de bonnes pratiques. Sans savoir l'expliquer, depuis le début que je code en LUA avec Fibaro (c'est à dire quelques mois seulement ) j'ai pris l'habitude d'utiliser tout simplement des "print", mais peut-être n'est-ce pas le mieux dans un QA. Et j'ai pris par exemple l'habitude de toujours mettre des "print" quand je vérifie des conditions dans mon QA qui tourne en boucle, afin de savoir quels tests sont en cours de vérification et savoir ceux qui tournent et ne tournent pas en boucle. De votre côté, vous utilisez quoi ? principalement self:debug ? Ou avez-vous des règles de codage bien établies permettant de naviguer entre les différentes méthodes de débogage à disposition ?
-
Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire
-
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
Merci, c'est noté. Je ne savais pas -
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
So easy... Thanks -
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
I have a solution, but not so nice from my point of view... local function setView(elm,fmt,...) self:updateView(elm,"text",string.format(fmt,...)) end for i=1,5 do local m = data[i] setView( "labelday"..i, "Humidity is %s%s", m.humidity,"%" ) end -
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
@Kana-chan @jang Thank you for your answers both One question: if we want to keep a "%" as a string printed in the text, how can we do? The best is a clear example How to modify the code below to have this result "Humidity is 50%" in the label? local function setView(elm,fmt,...) self:updateView(elm,"text",string.format(fmt,...)) end for i=1,5 do local m = data[i] setView( "labelday"..i, "Humidity is %s", m.humidity ) end Is there a special caracter to write before the % I want to print in the label? -
Quick App - Météo WeatherBit v1.3
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
Salut @couillerot et @CatTrack, Je comprends la modification proposée ci-dessous : Par contre si vous avez modifié le code avec la citation ci-dessus, du coup nous sommes d'accord qu'après il n'est plus nécessaire de tester si tempid est > 0 puisque fibartemp n'est plus nil. Et donc ce code : ---- Récupération des 2 varaibles température / Humidity ---- tempid = self:getVariable("temp_id") humid = self:getVariable("humidity_id") fibartemp = fibaro.getType(tonumber(tempid)) fibarhumid = fibaro.getType(tonumber(humid)) ---- Température ---- if tostring(tempid) > tostring("0") and fibartemp == tostring("com.fibaro.temperatureSensor") then temp = fibaro.getValue(tonumber(tempid), "value") roomnametemp = fibaro.getRoomNameByDeviceID(tonumber(tempid)) else temp = jsonTable.data[1].app_temp roomnametemp = tostring("WeatherBit") end ---- Humidité ---- if tostring(humid) > tostring("0") and fibarhumid == tostring("com.fibaro.humiditySensor") then humidite = fibaro.getValue(tonumber(humid), "value") roomnamehum = fibaro.getRoomNameByDeviceID(tonumber(humid)) else humidite = jsonTable.data[1].rh roomnamehum = tostring("WeatherBit") end Devient ce code si je t'ai bien suivi, puisque tant que nous n'affectons rien à fibartemp sa valeur est nil : ---- Récupération des 2 varaibles température / Humidity ---- tempid = self:getVariable("temp_id") humid = self:getVariable("humidity_id") if tempid > 0 then fibartemp = fibaro.getType(tempid) end if humid > 0 then fibarhumid = fibaro.getType(humid) end ---- Température ---- if fibartemp == tostring("com.fibaro.temperatureSensor") then temp = fibaro.getValue(tempid, "value") roomnametemp = fibaro.getRoomNameByDeviceID(tempid) else temp = jsonTable.data[1].app_temp roomnametemp = tostring("WeatherBit") end ---- Humidité ---- if fibarhumid == tostring("com.fibaro.humiditySensor") then humidite = fibaro.getValue(humid, "value") roomnamehum = fibaro.getRoomNameByDeviceID(humid) else humidite = jsonTable.data[1].rh roomnamehum = tostring("WeatherBit") end -
Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire
-
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
Grâce à ces lignes de codes., je découvre le fonctionnement de 2 nouveaux trucs : #1 Je pense que ça veut dire autant de paramètres et d'arguments à suivre dans l'appel de la fonction. #2 Je pense que ça remplace le "%s" par les paramètres à suivre et dans l'ordre. Par exemple string.format("%s %q", "Hello", "Lua User !") ==> Hello "Lua user!" Mais du coup je ne comprends pas pourquoi il manque les 3 "%s" correspondant à "m.precipday, m.snowday ,m.windspeed* 3.6". Ca a l'air d'être comme si le %.1f du format suffisait à la place du %s ??? Je viens de chercher dans plusieurs doc pour "apprendre" à m'en servir, mais je ne trouve pas tout Ai-je bien compris le fonctionnement ? -
Quick App - Gestionnaire d'Événements Automatique - GEA pour HC3
Fredmas a répondu à un(e) sujet de Lazer dans Quick App Developpeur
Ca je ne le savais pas, et comme lire "oui" ou "non" dans mes variables je m'en cogne pas mal, le but étant que ça fonctionne tout seul de toute façon, par principe "de mieux" coder je vais regarder comment modifier les variables de mes QA quand je le peux Merci @Lazer -
Quick App - Prévisions Météo WeatherBit v1.2
Fredmas a répondu à un(e) sujet de couillerot dans Quick App Developpeur
Thank you for your alternative proposal @jang As usual, I remember discussions about intervalRunner, you give us some « food » for the opportunity to think, learn and improve. At least for newbie like me in QA and LUA