Aller au contenu

MAM78

Membres confirmés
  • Compteur de contenus

    2 516
  • Inscription

  • Dernière visite

  • Jours gagnés

    28

Tout ce qui a été posté par MAM78

  1. MAM78

    Comparaison binaire en LUA

    Pour toi, mais ce n'est pas mon cas. CQFD.
  2. MAM78

    Comparaison binaire en LUA

    Pas totalement, au départ peut-être mais aujourd'hui tu as au moins 3 ans d'avance sur moi En ce qui me concerne, mon niveau de math et de logique ne m'auraient en aucun cas permit d'écrire le code de la fonction BitAND ci-dessous : local function bitAND(a, b) local p,c=1,0 while a and a>0 and b and b>0 do local ra,rb=a%2,b%2 if ra+rb>1 then c=c+p end a,b,p=(a-ra)/2,(b-rb)/2,p*2 end return c end Comme quoi, nous ne sommes pas tous à égalité en LUA ou autres languages
  3. MAM78

    Comparaison binaire en LUA

    J'ai un passé de développement, mais jamais en LUA, donc là j'apprends. J'ai probablement des réflexes qui dates un peu . Mais tu sais, on part tous de 0 un jour. Rien est inné tout s'apprend avec le temps, même si l'on a chacun nos limites . Je suis actuellement sur un DEV qui capitalise beaucoup sur tes bouts de codes. Je le mettrais évidement à disposition des membres du forum en espérant qu'il soit utile et complémentaire à ce qui existe déjà. A suivre dans un prochain nouveau TUTO, ..........
  4. MAM78

    Comparaison binaire en LUA

    Ok, je pense avoir compris tout seul comme un grand si la fonction retour un nombre > 0 c'est vrai. Comme dit l'adage, on n'est jamais si bien servi que par soi-même ou aide toi le ciel t'aidera Mais le ciel, ce n'est pas un dieu du forum j'en suis pas encore là.
  5. MAM78

    Comparaison binaire en LUA

    Désolé, je sens un agacement dans tes retours ces derniers temps. Effectivement, je n'ai pas ton expertise, c'est pourquoi j'y fais appel comme aux autres membres du forum. Mais quoi qu'il en soit, j'essaye toujours d'apprendre des autres et je partage autant que possible ma production et mon expérience. Sur le forum, j'ai rien trouvé sur BitAND et sur Google pas mieux. Pourtant, j'ai beau chercher, probablement très mal, mais pour le moment je ne comprends pas comment utiliser la fonction BitAND dans le cadre de mon besoin. Mon besoin me semblait relativement simple, c'est de pouvoir comparer 2 valeurs et savoir si la comparaison binaire est true ou false. J'entends : 1 and 1 => true 2 and 1 => false 3 and 1 => true 4 and 1 => false 4 and 2 => false ... Si quelqu'un à le courage de m'aider, merci d'avance
  6. Le rachat c'est par Nice ou CAME ou c'est la même chose. J'ai rien trouvé sur le NET sur un rachat par CAME ?
  7. MAM78

    Comparaison binaire en LUA

    Décidément, je suis vraiment un neuneu Je n'arrive pas à utiliser ton code. Ceci mon test : -- Convert Decimal to Bits, most significant first toBits = function(num, bits) bits = bits or select(2, math.frexp(num)) local t = {} -- will contain the bits local b for b = bits, 1, -1 do t[b] = math.fmod(num, 2) num = (num - t[b]) / 2 end if #t == 0 then t = {0} end return table.concat(t) end BitAND = function (a,b)--Bitwise and local p,c=1,0 while a>0 and b>0 do local ra,rb=a%2,b%2 if ra+rb>1 then c=c+p end a,b,p=(a-ra)/2,(b-rb)/2,p*2 end return c end a=toBits(1,8) b=toBits(3,8) fibaro:debug("aaa"..a.."aaa") fibaro:debug("bbb"..b.."bbb") fibaro:debug("***"..bitAND(a, b).."***") if bitAND(a, a) then fibaro:debug("xxx") else fibaro:debug("zzz") end J'obtiens ça : [DEBUG] 19:20:37: nil [DEBUG] 19:20:37: Nom :{"pathAuth":"auth.cgi","435":{},"SceneID":105,"pathCamera":"entry.cgi","434":{},"pathRecord":"entry.cgi"} [DEBUG] 19:20:37: 2018-12-18 19:20:37.355146 [ fatal] Unknown exception: /opt/fibaro/scenes/106.lua:18: bad argument #1 to 'pairs' (table expected, got string) C'est quoi STP le problème ?
  8. MAM78

    Comparaison binaire en LUA

    Merci tu es un chef, ça fait une heure que je cherche. J'imaginais que cela était intégré de base dans le language comment par exemple en VB.
  9. J'ai une donnée qui contient un variable "A" de type binaire pouvant contenir les valeurs suivantes, sachant que ces valeurs peuvent être combinées : 1 2 4 8 ... Je cherche comment en LUA est-ce que l'on fait pour faire une comparaison binaire du type : si A contient 3 cela veut dire que la comparaison binaire est vraie pour 1 et 2 si A contient 4 cela veut dire que la comparaison binaire est vraie pour 4 si A contient 12 cela veut dire que la comparaison binaire est vraie pour 4 et 8 si A contient 7 cela veut dire que la comparaison binaire est vraie pour 1, 2 et 4 ... Quelle est la syntaxe en LUA pour faire le test de comparaison binaire ?
  10. MAM78

    Localisation GPS

    merci @Nico, pour le moment je cherche juste savoir si tous les membres de la famille ont quitté la maison ou si l'un des membres est de retour pour l'utiliser dans différents scénarios. Je me demandais juste si selon les applications : le calcul du positionnement était plus ou moins fiable selon les App ? la consommation est plus ou moins importante sur la batterie du téléphone ? Il y en a tellement qu'il doit forcement y avoir des différences entre toutes ces App présente sur mon téléphone : App Fibaro, App Ifttt, App Google Home (Google), App Alexa (Amazon), App Maison (Apple) App Raccourcis (Apple), App DS CAM (Synology), App Cleaner (Robot Roomba), App Hue (Philips), App Facebook, Et j'en oublis probablement Sachant que certaine permettent également d'associer une détection de présence lorsque le téléphone est connecté sur réseau Wifi.
  11. MAM78

    Localisation GPS

    Je rebondi sur la question, pour vous qu'elle la meilleurs application pour faire de la géolocalisation sur un téléphone (iPhone et Androïd) avec détection d'arrivée et sortie d'une zone. App Fibaro, App Google App Alexa, ...
  12. MAM78

    net.HTTPClient()

    Comme indiqué ci-dessus c'est ce que j'ai fait
  13. Est-ce que l'un de vous aurait une scène (utilitaire) qui permet de lire un variable globale que son contenu est de type tableau et quelque soit le nombre de niveau dans la structure du tableau. Je pourrais l'écrire moi-même, mais j'avoue que si c'est déjà fait autant que cela me serve Merci d'avance.
  14. MAM78

    net.HTTPClient()

    C'est effectivement ce que j'ai vu. C'est génial. Mais je n'ai pas trouvé l'existence d'une remonter vers la scène d'une désignation du Label du VD qu'il convient de modifier en fonction de l'action effectuée qui a été exécuté avec succès. J'ai donc ajouté dans le passage de paramètres entre le VD et la Scène, un nom de Label optionnel sur lequel il convient de répercuter le résultat de l'action réalisée comme par exemple le changement d'un statut qui doit être visible sur le VD si celui-ci à bien été traité par la Scène.
  15. MAM78

    net.HTTPClient()

    C'est bon j'ai enfin réussi à comprendre l'enchainement des appels successifs à getAPI dans les fonctions (actions) de ta scène avec leur principe de CallBack. Après ça, j'aurais plus qu'a instancier mes différentes actions associées aux VD. Mais avant ça il faut encore comprendre comment tu remontes le résultat de tes fonction (action) dans les labels des VD. Merci encore pour ton aide
  16. MAM78

    net.HTTPClient()

    Tout ce que tu viens de dire je l'avais bien compris. Et c'est bien sur tes VD et ta Scène MusicCast que je capitalise. J'ai garder la logique d'ensemble. Dans ton code MusicCast tu n'utilises pas non plus le Main Loop des VD pour solliciter l'API. Tout est dans ta scène et c'est bien ça que je cherche à reproduire. Mettre tout le code concernant l'API dans la Scène. Mon questionnement vient en fait sur l'écriture d'une fonction (Action) dans la scène, lorsque celle-ci nécessite des appels à l'API en cascade à l'intérieur de celle-ci. Cf. les différentes étapes du traitement que j'exposais précédemment, dont chacune des étapes doit correspond re à une fonction afin de pouvoir utiliser le mécanisme de callback pour connaitre le résultat de la fonction (étape). Effectivement, de part le mécanisme de traitement asynchrone, c'est difficile à expliquer. Merci néanmoins pour tes explications précieuses
  17. MAM78

    net.HTTPClient()

    J'ai un peu de mal à comprendre comment organiser le code pour executer l'enchainement suivant chaque fois que la scène est appelée par une action. On se connect au serveur pour récupérer des paramètres de l'API nécessaire pour se connecter au serveur, si la requête est bone, on passe au point 2 On se reconnect au serveur via un ID de connection stocker dans une VG mais que celui-ci ne fonctionne pas/plus ou qu'il n'est pas encore renseigné dans la VG l'on passe au point 2.1 sinon au point 3 On se reconnect au serveur via un login et mot de passe pour obtenir un nouvel ID qui est stocker dans une VG On se reconnect au serveur serveur via l'ID et les paramètres de l'API et l'on execute une requête pour soit : (En fait mon action demandé pas le VD) obtenir des infos de l'API executer d'une fonction de lAPI modère une propriété de l'API Sachant que les paramètre de l'API peuvent changer dans le temps, idem pour l'ID, il peut ne plus être valable après un certain temps. Autant les paramètre d'API, je pourrais les charger dans une VG depuis le main des VD puisqu'il n'est pas nécessaire de s'identifier sur le serveur pour obtenir ces paramètres. Mais pour l'ID je souhaiterais éviter de devoir mettre dans chacun des mes VD mon login et mot de passe pour générer un nouvel ID et le stocker dans une VG. Sachant comme tu t'en doute, l'objectif principal est de mettre tous (ou le maximum) le code lié à l'API dans la scène et alléger de fait les VD au maximum. a) Compte-tenu mode asynchrone, est-ce que cela signifie que pour chaque des actions lancées par les VD, je dois dans la scène créer un fonction correspondante qui devra contenir l'ensemble de la séquence énoncée ci-dessus ? Excepte la recherche des paramètres si elle est ramenée dans le main du VD (ce que souhaiterais néanmoins éviter b) Est-ce qu'il y une limite du nombre d'imbrications des séquences d'appels à l'API via des requêtes HTTPClient() ? c) Comment organiser ces imbrications avec le principe de callback des fonctions ? Nota : c'est vraiment lourdingue de ne pas avoir mis à disposition la fonction Net.FHttp() dans les scènes. Il font ch... chez Fibaro. Cela nous oblige du coup à monter du code d'une complexité, s'il on veut limiter sa redondance
  18. MAM78

    net.HTTPClient()

    @Lazer Laisse tomber mon message ci-dessus. J'ai trouvé J'ignore pourquoi, mais lorsque je lance la scène depuis un VD, ça fonctionne Mais lorsque je lance la scène en manuel, ça ne marche pas. Je sais ce n'est pas l'objet de ce type de scène qui doivent être lancé depuis une autre scène ou VD. Mais maintenant, je m'arrache les cheveux pour construire la structure du code pour que les enchainements se fassent bien
  19. MAM78

    net.HTTPClient()

    J'ai avancé sur mon code, mais je n'arrive à faire fonctionner les appels via la fonction setTimeout. Elle n'execute pas la fonction les appels aux fonction getAPI() ou postAPI(). SI je prends l'exemple de ta fonction : power ci-dessous, dans la ligne : setTimeout(function() getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) end, 0) l'appel de la fonction getAPI ne s'execute pas. J'ai mis des traces au début de la fonctions getAPI() mais elles n'apparaissent pas. Si j'enlève la partie setTimeout(function() de la façon suivante : getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) dans ce cas, je rentre bien dans la fonction getAPI (avec affichage de mes traces), mais là, l'appel à la fonction : httpClient:request("http://" .. ip .. ":" .. tostring(port) .. url, { ne provoque aucun retour, ni dans success, ni error. Je ne vois vraiment pas d'où vient le PB. Tu pourrais STP m'indiquer la cause ? local function power(verb, data) if not verb then if debug then Message("pink", "power() : call getAPI(setPower)") end setTimeout(function() getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) end, 0) elseif verb == "setPower" then Success() else Die('Warning : verb "' .. (verb or "???") .. '" unknown') end end -- function
  20. MAM78

    net.HTTPClient()

    Je viens de regarder ta scene : Yamaha MusicCast - Scene v1.0.lua et ses VD associé. C'est exactement cette mécanique que je souhaite mettre en place une scene qui : Sollicite une API via des requêtes HTTPClient() reçoit des ordres (action) en provenance d'un ensemble de VD met à jour des labels de ses même VD en fonction des ordres reçus Maintenant, je vais devoir comprendre son fonctionnement pour l'adapter à mon besoin. C'est une très bonne base de départ Mais j'ai un peu de mal a comprendre le fonctionnement des lignes ci-dessous dans tes fonctions ( getAPI() et getAPI() ), notamment la ligne : setTimeout(function() callback(verb, jsonTable) end, 0) -- Execute callback function if callback and type(callback) == "function" then if debug then Message("purple", "getAPI() : callback...") end setTimeout(function() callback(verb, jsonTable) end, 0) end Je suppose que pour comprendre qu'il faut l'associer à l'exemple du code suivant : if debug then Message("pink", "link() : call postAPI(setClientInfo)") end setTimeout(function() postAPI("/YamahaExtendedControl/v1/dist/setClientInfo", "setClientInfo", link, {group_id=group_id, zone={_parameters[client_vd_s_id].zone}}, client_ip, client_port) end, 0) elseif verb == "setClientInfo" then Je l'impression que c'est bien là le fond du sujet évoqué précédemment ? Pourrais-tu STP m'expliquer un peu le principe de fonctionnement et notamment au regard de nos échanges précédents ?
  21. MAM78

    net.HTTPClient()

    En faite ma question j'aurais du préciser ma question. Comment ext-ce que l'on fait dans le cas d'une de l'appel à la fonction HTTPClient() dans une boucle ?
  22. MAM78

    net.HTTPClient()

    1) Il n'est donc pas possible de créer une fonction générique HTTPClient() puisque chaque fois que l'utilise il faut qu'elle contienne les traitements spécifique que l'on veut exécuter. C'est bien ça ? 2) est-ce que l'on peut dans success() lancer une autre fonction HTTPClient() ? 3) si oui à la question précédente ça devient vite compliquer à programmer, je prends l'exemple suivant : On se connect à un serveur via un ID de connection mais que celui-ci ne fonction plus On se reconnect au un serveur via un login et mot de passe pour obtenir un nouvel ID On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des premiers infos via une API. On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des deuxièmes infos via une API. On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des Xièmes infos via une API. Cela veux dire que le code doit être structuré de façon à cascader chacune des étapes ? Ca m'a l'air bien lourd ou il y a quelque chose qui m'échappe. 4) Comment s'assurer que l'appel à une fonction HTTPClient() est terminée pour poursuivre les traitements suivants ?
  23. MAM78

    net.HTTPClient()

    Je viens de trouver ton post sur le sujet : Il y a probablement les réponses mes questions
  24. MAM78

    net.HTTPClient()

    Merci Laser pour tes réponse, Pour les scènes le fonction Net.FHttp() n'étant pas disponible, je suis obligé d'utiliser HTTPClient(). 1) Sont-elle toutes le 2 deux asynchrone ? 2) Tu veux dire que que l'appel à http:request() va me redonner la main alors que sont traitement ne serait pas terminé. C'est bien ce que tu veux dire par asynchrone ? 3) C'est ce que je supposais également. Mais comment faire le test ? Ralentir le serveur cible pour que le requête tombe en timeout ?
  25. MAM78

    net.HTTPClient()

    Y-a personne pour m'aider ?
×
×
  • Créer...