-
Compteur de contenus
593 -
Inscription
-
Dernière visite
-
Jours gagnés
8
Tout ce qui a été posté par J3R3M
-
Bonjour, Ma problématique actuelle est longue à expliquer, mais pourtant simple. Du moins, je pense! Si des fois le titre de ce sujet devait ne pas être assez clair, je vais tenter de l'expliquer simplement ci-dessous. Admettons que cette table soit stockés dans une VG de la HC2 : local table = {{1,"entrée 1",10},{2,"entrée 2",20},{3,"entrée 3",30},{4,"entrée 4",40}}; Je recherche un moyen simple d'insérer une nouvelle entrée au sein de cette table (via une scène de la HC2), pour que cette table stockée dans la VG soit la suivante : local table = {{1,"entrée 1",10},{2,"entrée 2",20},{3,"entrée 3",30},{4,"entrée 4",40},{5,"entrée 5",50}}; Avec les procédures d'encodage/décodage json, je suis un peu perdu et n'arrive pas à faire quelque chose de fonctionnel... J'ai également quelques questions concernant les tables en LUA : - L'incrémentation automatique des clés d'une table continue-t'il logiquement même si les premières clés/valeurs sont supprimées? - Combien d'entrées une table est-elle capable de contenir? Et quel est l'effet d'une très grande table sur notre HC2 lorsque celle-ci est parcourue? - Existe-t-il un moyen simple de limiter le nombre d'entrées d'une table? Par exemple, limiter à 50 entrées. Une fois ce nombre atteint, l'ajout d'une nouvelle entrée supprimerait l'entrée de la clé la plus petite. N'hésitez pas à me dire si jamais mes questions nécessitent davantage d'informations/exemples pour aider à la compréhension.
-
Salut @pepite! Merci de ta réponse, ça fonctionne parfaitement. Inutile donc de modifier ma fonction, j'utilise donc simplement \n pour effectuer le retour chariot lors de l'appel de celle-ci!
-
Bonjour, J'utilise la fonction ci-dessous depuis pas mal de temps pour envoyer des SMS via les scènes de la HC2. Cette fonction a été créée par moi-même, en utilisant des codes trouvés par-ci, par-là en fonction de mes besoins. La fonction est autonome pour URLencoder les caractères spéciaux. Cependant, désireux de l'améliorer un peu, j'aimerais pouvoir effectuer des retours chariots dans certains SMS. Ainsi, il faudrait qu'un certain texte (<retour> par exemple) puisse être remplacé par %0A dans le SMS, afin que le retour chariot s'opère. Malheureusement, je n'y arrive pas, je m'en remets donc à votre grand savoir! local function envoi_sms(sms) local char_to_hex = function(c) return string.format("%%%02X", string.byte(c)) end local function urlencode(url) if url == nil then return end url = url:gsub("\n", "\r\n") url = url:gsub("([^%w ])", char_to_hex) url = url:gsub(" ", "+") url = url:gsub(">", "%0A") return url end local delai = minuteries.sms; -- Minutes local diff = os.time() - tonumber(fibaro:getGlobalValue("DERNIER_SMS")); if diff > delai*60 and sms ~= nil then local http = net.HTTPClient(); local url = "http://****&sms="..urlencode(sms); http:request(url, { options = { method = 'GET', data = json.encode(newVar)}}); fibaro:setGlobal("DERNIER_SMS", os.time()); end end Merci de vos lumières et à bientôt!
-
Localiser une HC2 en cas de vol ?
J3R3M a répondu à un(e) sujet de J3R3M dans Mon installation domotique
Je suis d'accord que ça ne peut qu'engendrer plus d'argent pour eux. J'en suis bien conscient et c'est bien triste! Créer une BDD listant les produits volés et un programme qui vérifie automatiquement si ces produits volés se reconnectent ne relève pourtant pas de l'exploit de nos jours. Bref, avec des "si"... Si tu sais faire ça en LUA, je suis intéressé! -
Localiser une HC2 en cas de vol ?
J3R3M a répondu à un(e) sujet de J3R3M dans Mon installation domotique
De mon point de vue, la possibilité de pouvoir traquer un produit connecté en cas de vol devrait être un minimum. De plus, ça limiterait considérablement les vols, puisque ça en supprimerait l'intérêt... Mais c'est un autre débat. Pour Jeedom, je pensais simplement que la connexion au Market (officiel, ne connaissant pas l'interface, je ne savais même pas qu'il y avait d'autres markets) s'effectuant depuis la page de configuration de la box, remonter l'IP et la MAC pouvait être simplement mis en place, ne serait-ce que pour les Jeedom Smart qu'ils commercialisent. Je pensais surtout à une localisation/identification IP plutôt qu'à un blocage hardware, quelque soit la box domotique. Pour faire le parallèle avec les téléphones portables, il est vrai que les blocages via EMEI sont devenus rares. Mais surtout inefficaces puisque les voleurs savent comment faire débloquer ce redoutable blocage... Il est vrai qu'en cas de cambriolage, la HC2 ne serait pas le produit le plus manquant sur le moment. Mais si celle-ci avait pu permettre de confondre et retrouver nos chers visiteurs, elle aurait été d'autant plus utile! Ayant noté toutes les adresses MAC de mes appareils, en cas de cambriolage, j'adorerais pouvoir communiquer leur adresse MAC aux forces de l'ordre pour pouvoir surveiller l'activité de ces appareils... M'enfin, ça reste malheureusement une utopie à ce jour... -
Localiser une HC2 en cas de vol ?
J3R3M a répondu à un(e) sujet de J3R3M dans Mon installation domotique
Merci de ces réponses. C'est dommage que les constructeurs ne facilitent pas ce genre de démarches. De manière générale d'ailleurs et plus particulièrement pour les ordinateurs! Peut-être cette démarche de traçage serait plus envisageable avec une Jeedom (Smart)? De par sa boutique accessible depuis la page d'administration de la box? -
Hello la communauté, Je me suis endormi avec une question un peu stupide, mais pour laquelle j'aimerais tout de même avoir une réponse. Oui, j'ai des soirs comme ça, désolé ! En cas de cambriolage réussi malgré une installation domotique et que, pour une raison quelconque, notre chère HC2 devait faire partie du butin de ces chers visiteurs, serait-il possible de remettre la main dessus? Chaque carte réseau ayant sa propre adresse MAC, Fibaro (ou une autre entité) serait-elle en mesure de remonter une IP et ainsi localiser l'endroit où la HC2 aura été reconnectée par la suite? Y'a-t'il un suivi des adresses MAC lorsque les HC2 sont vendues? Bref, devrait-on dire au-revoir définitivement à notre tant aimée box domotique? Merci de vous pencher sur ce sujet et à bientôt!
-
[Résolu] Solution simple pour contrôler uniquement ses volets roulants
J3R3M a répondu à un(e) sujet de J3R3M dans Actionneurs & Ouvrants (Portail, volets, piscines, ...)
Merci de tous ces conseils! Les Roller Shutte 2 remplissant parfaitement leur rôle, j'avais déjà commandé ceux-ci pour les installer rapidement. Dénouement de l'histoire? L'un de ceux commandés a refusé de se connecter à la HCL malgré une distance très proche de la HCL. J'ai tout essayé et rien n'a été possible pour ce module. Il n'en a pas fallu plus pour effrayer ce cher voisin. D'un seul coup, la domotique lui a fait peur, la domotisation des volets roulants n'était plus nécessaire. Finalement, contrôler des lampes branchées sur des prises était suffisant. J'avais quelques prises contrôlables via l'application Tuya Smart (donc directement en 3G, sans aucune box domotique) qui trainaient chez moi, je lui ai "installées" et il a été ravi de cela. Bilan : deux heures de perdues, un kit complet à réexpédier (et à se faire rembourser), un retard important sur le début de l'apéro et un Jérémy qui n'est plus près de dire qu'il est simple de domotiser quoi que ce soit chez les autres. -
Ça marche parfaitement depuis plusieurs mois pour moi! Je pensais qu'une telle scène était forcément déjà disponible depuis un petit moment! Si ça peut être utile, je pourrai prendre quelques instants pour modifier cette scène et la rendre facilement utilisable pour tous les utilisateurs de lampes (Hues ou non) + Sonos. De mon côté, j'ai effectivement fini par stocker toutes les informations nécessaires pour le fonctionnement de mes pièces dans une seule variable globale. Ainsi, toutes mes scènes de pièces sont identiques. Seule la valeur de la variable PIECE au début du script change, permettant ainsi à chaque script de s'adapter à la pièce en question. À l'occasion, il faudrait peut être aussi je prenne quelques minutes pour expliquer comment j'ai exploité la HC2 de mon côté dans le forum approprié, pour aider à la compréhension lors de mes demandes de support et éventuellement donner des idées et obtenir des idées d'amélioration! :-)
-
Bonjour @pepite, Je suis bien d'accord et c'est pour cette raison que cela sort complètement de mes compétences. J'aurai tendance à penser que l'application utilise une sorte d'API pour l'envoi de ces informations... Mais, encore une fois, c'est totalement en dehors de mes compétences. De mon côté, moi qui prend beaucoup de plaisir à faire mes propres scripts, j'ai fait une scène basique en fonction de mes capacités. La voici simplifiée, si ça peut être utile : -- Code Pièce local PIECE = "CHAMBRE"; if fibaro:getSourceTrigger() == 'autostart' then fibaro:abort(); end -- On reforme les tableaux local table_pieces = json.decode(fibaro:getGlobalValue("T_INFOS_PIECES")); local minuteries = json.decode(fibaro:getGlobalValue("HOME_MINUTERIES")); local INFOS = table_pieces[PIECE]; -- Variables de réglage local temps_aube = minuteries.aube; local vd_hue = INFOS.HueGroup[1]; local vd_sonos = INFOS.SonosId; local bouton_sonos = 18; -- soit Playlist 5 local volume = 25; -- % local fsonos = 30; -- secondes local function SonosZero(id) fibaro:debug("--> Début Sonos 0%"); fibaro:call(id, "setSlider", "10", "0"); fibaro:debug("Le volume de la SONOS de "..PIECE.." est à 0%"); fibaro:debug("--> Fin Sonos 0%"); end local function fade_hue(id, fade) fibaro:debug("----> Début Fade IN Hues"); fibaro:call(id, "pressButton", "7"); for i=1, 100 do fibaro:call(id, "setSlider", "10", i); if i == 25 or i == 50 or i == 75 or i == 100 then fibaro:debug("[FADE-IN-HUES] Actuellement à "..i.."%"); end fibaro:sleep(fade/100*60*1000); end fibaro:debug("----> Fin Fade IN Hues"); end local function fade_sonos(id, fade, vol) fibaro:debug("------> Début Fade IN Sonos"); for i=1, vol do fibaro:call(id, "setSlider", "10", i); if math.floor(vol/2) == i then fibaro:debug("[FADE-IN-SONOS] Actuellement à 50%"); end fibaro:sleep(math.floor(fade/vol*1000)); end fibaro:debug("------> Fin Fade IN Sonos"); end local function MiseUpdate(valeur) if valeur == 0 then table_pieces[PIECE].Dodo = tonumber(valeur); fibaro:debug("[MISE] Mode DODO désactivé"); end table_pieces[PIECE].Mise = tonumber(valeur); fibaro:setGlobal('T_INFOS_PIECES',json.encode(table_pieces)); fibaro:debug("[MISE] Mise updaté sur la valeur "..valeur); end local function reveil() -- Mise ON MiseUpdate(1); -- Follow SONOS OFF fibaro:call(247, "pressButton", 2); -- Toutes les SONOS à 0% SonosZero(vd_sonos); -- Fade Hue fade_hue(vd_hue, temps_aube); -- Start programme fibaro:call(242, "pressButton", bouton_sonos); fibaro:sleep(500); -- Fade Sonos fade_sonos(vd_sonos, fsonos, volume); -- Mise OFF MiseUpdate(0); -- DODO OFF fibaro:call(310, "pressButton", 2); end reveil(); Pour chaque pièce, la variable MISE à 1 empêche les changements d'état automatiques des éclairages (extinction automatique/nouveau mouvement). Si Follow Sonos = 0, le volume des enceintes n'est plus géré automatiquement en fonction de la présence de quelqu'un dans une pièce.
-
Bonjour à tous, Une nouvelle idée me vient en tête... Pour les réveils de mon domicile, j’ai créé une scène qui simule une aube d’une durée paramétrable et qui démarre ensuite en fondu l’enceinte Sonos de la pièce en question. Rien de particulier, une scène comme beaucoup d’entre-vous ont je pense! Seulement, avec tout ce que certains savent faire désormais et les connaissances acquises, n’est-il pas possible que les paramètres de réveil soient directement envoyés à nos objets connectés? Je m’explique, j’utilise des Philips Hue et des Sonos. Ces deux systèmes proposent déjà un système de réveil, contrôlable et paramétrable directement depuis leurs applications. Mais ces informations sont bien stockées au sein de ces appareils. Est-il envisageable d’avoir le contrôle de cela via notre HC2? Ainsi, ces réveils seraient indépendants de la HC2 après avoir été configurés. Notre box pourrait même planter (ce qui devient rare, je le conçois) mais les réveils fonctionneraient. Je ne prétends pas que ça soit simple à mettre en place, mais qu’en pensez-vous? Bonne/Mauvaise idée? Possible/Impossible? À bientôt! :-)
-
[Résolu] Solution simple pour contrôler uniquement ses volets roulants
J3R3M a répondu à un(e) sujet de J3R3M dans Actionneurs & Ouvrants (Portail, volets, piscines, ...)
Merci de tous ces retours, c’est super sympa! J’avoue personnellement que la solution HCL me tente plus pour la simple et bonne raison que je connais l’interface et qu’elle sera rapidement fonctionnelle. Il n’a pas l’utilité des scènes, il a juste besoin d’avoir le contrôle direct des modules. Et même si un jour il souhaite faire évoluer son installation, je le dirigerai vers une solution simple (Hues pour les éclairages... solution de simplicité!) ou lui donnerai l’adresse de ce forum pour qu’il puisse devenir indépendant sur la HCL. Note pour plus tard, au cas où : Hey Salut Fabrice! T’as vu, c’est addictif la domotique... n’empêche, j’avais fait de réelles investigations à l’époque! -
[Résolu] Solution simple pour contrôler uniquement ses volets roulants
J3R3M a répondu à un(e) sujet de J3R3M dans Actionneurs & Ouvrants (Portail, volets, piscines, ...)
Il pourra également les gérer simplement depuis l'interface/application de la HCL. Ou, plus simplement, acheter des Philips Hue pour avoir directement l'application dédiée -
[Résolu] Solution simple pour contrôler uniquement ses volets roulants
J3R3M a répondu à un(e) sujet de J3R3M dans Actionneurs & Ouvrants (Portail, volets, piscines, ...)
Merci de cette réponse Lazer. Du côté de Delta Dore, tout semble horriblement cher. Chez Somfy, d'après mes premières recherches, il faudrait donc acquérir la box domotique TaHoma (349€) et trois micro-modules pour volets roulants (65.90€ pièce). Cela pour un total estimé à 546,70€... Sans compter le temps de piger comment cela fonctionne. Un kit HCL + 3 Roller Shutter reviendrait à moins de 400€ (HCL à 250€ & Roller Shutter 2 à 44€ actuellement sur Amazon). Mauvaise idée ? -
Bonjour à tous, Un voisin m'ayant rendu visite hier a soudainement eu envie de domotiser ses volets roulants. Il souhaite simplement pouvoir ouvrir et fermer ses volets roulants depuis son téléphone. Seulement voilà, il n'y connait rien et ne souhaite domotiser que ses volets roulants. Ses volets roulants sont facilement domotisables car câblés électriquement. Seulement, sachant qu'il veut que je m'occupe de l'installation, je ne souhaite pas non plus qu'il me contacte au moindre plantage ou à la moindre incompréhension dans l'application. Quelle solution me conseillez-vous pour cette finalité ? Le but étant d'avoir une solution simple et la moins onéreuse possible. Je vous remercie d'avance de vos propositions
-
@q.philippe, je me demande si tu ne parles pas de la Netatmo Présence et non pas de la Welcome ? Si tel est le cas, tu as pu utiliser un des scripts précédents pour obtenir le flux de ta caméra dans la Home Center. Et tu souhaiterais pouvoir contrôler la lampe intégrée de la Présence, c'est bien cela ? Quoi qu'il en soit, je ne peux malheureusement pas t'aider pour cela. C'est forcément possible, c'est certain. Cependant, ce n'est malheureusement et absolument pas dans mes compétences.
-
Par Mode Lumière, tu veux dire afficher ou non le témoin lumineux lorsque le streaming de la Welcome est consulté ?
-
Ça m'a obligé à me perfectionner dans la recherche d'erreurs LUA, ce ne fût que mieux! Merci encore de ta réponse!
-
Aucune demande de support. Je viens simplement d'installer cette scène pour surveiller mes 2 scènes qui tournent continuellement, cela fonctionne parfaitement! Merci beaucoup pour cette superbe contribution!
-
Sans vouloir déterrer ce sujet, j'ai rédigé ce petit tuto concernant la scène Netatmo Welcome. Cela pourra peut être en aider certains à mieux comprendre comment procéder à l'installation. @BOB18, as-tu correctement saisi tes informations de compte Netatmo ? Client ID, Client Secret, Username et Password ? @q.philippe, j'ai relu plusieurs fois ta question, mais je ne la comprends vraiment pas. Peux-tu la reformuler stp ? @JDR, il n'est malheureusement pas possible de récupérer ces infos sur HCL, le LUA est indispensable pour la récupération et le traitement de ces données.
-
Je viens de voir que le script original avait été évoqué sur ce sujet évoquant la Welcome lors de sa sortie. Je n'avais pas lu toutes les pages du fil avant de poster celui-ci...
-
Étrange, je n'avais pas du tout été embêté pour la configuration de mon côté. Je l'avais installé en quelques secondes. Le principal étant que l'installation soit finalement effectuée !
-
Bonjour à tous, Jusqu'à peu, j'utilisais uniquement des requêtes fing (ping) pour détecter les différents téléphones de mon téléphone et ainsi en déduire la présence de quelqu'un ou non à mon domicile. Seulement, ce n'était pas assez fiable et j'ai décidé de combiner cette solution à la Netatmo Welcome. Après quelques recherches, je suis tombé sur ce topic du site Siio (également et heureusement disponible en anglais ici). C'est exactement ce que je recherchais! Seulement, je l'ai modifié pour qu'il soit plus simple à à mettre en place et à utiliser au quotidien. Ainsi, il n'y a rien à faire à part modifier les variables vous concernant. Pour utiliser le script original, il faut créer deux Variables Globales par personne identifiée dans la base de données de la Welcome, ce que je ne trouve pas très ergonomique et lourd. Je précise qu'une très grande partie du script provient du lien précédent et je ne cherche pas à tirer la gloire de l'auteur original (BOOMX) de celui-ci malgré mes modifications. Je l'ai modifiée comme je le souhaitais et ai traduit les debugs. J'espère que cette scène vous sera utile et suis disponible pour répondre à vos éventuelles questions! Exemple d'utilisation Pour savoir si quelqu'un est présent d'après la Netatmo Welcome, il suffit d'utiliser un code comme-ci dans vos scènes et VD : local pseudo = "Jérémy"; local VGNetatmo = "NETATMO_Welcome"; local table = json.decode(fibaro:getGlobalValue(VGNetatmo)); local presence = tonumber(table[pseudo].status); if presence == 1 then fibaro:debug(pseudo.." est présent."); else fibaro:debug(pseudo.." est absent."); end Réglages de la Scène Netatmo Welcome Toutes les variables permettant de régler la scène sont au début de celle-ci. Après avoir saisi les bonnes informations, enregistrez et démarrez la scène manuellement. La scène est fonctionnelle ! NB : Ces paramètres étant envoyés via une requête HTTP, merci d'encoder les caractères spéciaux. Pour rappel : @ = %40 -- Informations de compte Netatmo local client_id = 'Client_id'; local client_secret = 'Client_secret'; local username = 'Netatmo_username'; local password = 'Netatmo_pass'; -- Informations du VD associé local vd_ID = 304; -- ID du VD associé local vd_refresh = 9; -- ID du bouton refresh du VD. 9 Par défaut -- Réglages de la scène local refresh = 10; -- Script executé toutes les x secondes. Pas moins de 8s! local debug = 0; -- Faut-il vraiment l'expliquer ? -- Nom de la Variable Globale qui sera créée et utilisée par la scène et le VD local VGNetatmo = "NETATMO_Welcome"; Trouver ses Client ID & Client Secret Pour obtenir vos client_id et client_secret, rendez-vous sur dev.netatmo.com et connectez-vous. Cliquez sur CREATE YOUR APP et remplissez rapidement le formulaire. Les informations saisies importent peu! Une fois que vous aurez validé en cliquant sur le bouton SAVE, d'autres fenêtres apparaîtront en-dessous. Celle qui nous intéresse et celle juste en-dessous. En effet, les informations Client id et Client secret sont dans la section Technical Parameters. Faites un copier/coller de ces informations dans les variables correspondantes et le tour est joué! J'ai tellement ramé à les trouver que je me devais de vous dire où ces informations étaient dissimulées! Limitations de l'API Netatmo En ce qui concerne la variable refresh, il s'agit du délai entre chaque mise à jour des informations par la scène. L'auteur explique très bien pourquoi il ne faut pas descendre en dessous des 8 secondes et je vais me contenter de traduire son explication. VD Netatmo Welcome Pour personnaliser celui-ci, rendez-vous au début du code du bouton refresh : -- Les pseudos doivent être exactement les mêmes que dans l'application Netatmo, séparés par une virgule local pseudos = {"Jérémy","Emilie","Maman"}; -- Nombre de personnes à afficher dans le VD -- Si modification, conserver la même structure de VD ! -- Et penser à modifier la variable "vd_refresh" de la scène Netatmo local NbPersonnes = 3; -- Variable Globale local VGNetatmo = "NETATMO_Welcome"; Si vous souhaitez conserver seulement les informations de 3 personnes, il vous suffit de modifier uniquement les valeurs de la variable pseudos. Attention, les pseudos doivent être rigoureusement les mêmes que ceux enregistrés dans Netatmo! Si vous souhaitez afficher plus de 3 personnes, conservez obligatoirement la même structure du VD, c'est-à-dire en ajoutant 3 étiquettes dont les IDs seront incrémentés de +1 pour chaque nouvelle personne. Pour information, le VD d'origine est beaucoup moins optimisé puisque vous devez modifier tout le code du bouton pour qu'il soit fonctionnel. Scène Netatmo Welcome Une seule instance autorisée. Démarrage Automatique --[[ %% autostart --]] -- Informations de compte Netatmo local client_id = 'Client_id'; local client_secret = 'Client_secret'; local username = 'Netatmo_username'; local password = 'Netatmo_pass'; -- Informations du VD associé local vd_ID = 304; -- ID du VD associé local vd_refresh = 9; -- ID du bouton refresh du VD. 9 Par défaut -- Réglages de la scène local refresh = 10; -- Script executé toutes les x secondes. Pas moins de 8s! local debug = 0; -- Faut-il vraiment l'expliquer ? -- Nom de la Variable Globale qui sera créée et utilisée par la scène et le VD local VGNetatmo = "NETATMO_Welcome"; -------------------------------------------------------------- -------- Ne rien modifier à partir de cette ligne ------------ -------------------------------------------------------------- local token = ''; local request_body = ''; Debug = function (color, message) if (debug == 1) then fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")); elseif (debug == 0) then end end DebugChange = function (color, message) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")); end DebugError = function (color, message) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")); end fibaro:debug('Démarrage du script Netatmo welcome Integration v.1.0'); if (debug == 0) then fibaro:debug("Debug = 0. Seuls les messages d'information apparaîtront dans les logs."); else fibaro:debug('Debug = 1. Messages de Debug activés.'); end fibaro:debug('Cette scène sera executée toutes les ' ..refresh.. ' secondes.'); -- Début - Ajout pour gestion indépendante des VG function CreerVG(VGNom, VGValeur) local data = {name = VGNom, value=VGValeur}; response, status = api.post("/globalVariables", data); if (status == 201) then DebugError("white", "Variable Globale " .. VGNom .. " créée."); else DebugError("red", "Impossible de créer la Variable Globale " .. VGNom .. "!"); end end function MajEntree(Nom, Statut, Lastseen) local table = json.decode(fibaro:getGlobalValue(VGNetatmo)); -- Tout est à mettre à jour if Nom ~= nil and Statut ~= nil and Lastseen ~= nil then table[Nom] = {status=Statut, lastseen=Lastseen}; fibaro:setGlobal(VGNetatmo,json.encode(table)); DebugError("yellow", "L'entrée " .. Nom .. " a été automatiquement créée."); -- Mise à jour du Statut elseif Nom ~= nil and Statut ~= nil and Lastseen == nil then table[Nom].status = Statut; fibaro:setGlobal(VGNetatmo,json.encode(table)); Debug("yellow", "Le statut de " .. Nom .. " a été mis sur la valeur ".. Statut); -- Mise à jour de la dernière vue de la personne elseif Nom ~= nil and Statut == nil and Lastseen ~= nil then table[Nom].lastseen = Lastseen; fibaro:setGlobal(VGNetatmo,json.encode(table)); Debug("yellow", "L'information 'lastseen' de " .. Nom .. " a été mise sur la valeur ".. Lastseen); else DebugError("red", "Erreur lors de l'utilisation de la fonction MajEntree"); if Nom == nil then DebugError("white", "Champ 'Nom' vide !"); end if Statut == nil then DebugError("white", "Champ 'Statut' vide !"); end if Lastseen == nil then DebugError("white", "Champ 'Lastseen' vide !"); end end end if fibaro:getGlobalValue(VGNetatmo) == nil then CreerVG(VGNetatmo,json.encode({})); end -- Fin - Ajout pour gestion indépendante des VG function oAuth(nextFunction) local request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_camera'; getResponseData('https://api.netatmo.net/oauth2/token', request_body, function(data) if (data.access_token ~= nil) then token = data.access_token gethomedata() else DebugError( "red", "Impossible de joindre l'API!"); end end ) setTimeout(oAuth, refresh*1000); end function getResponseData(url, body, func) local http = net.HTTPClient(); http:request(url, { options = { method = 'POST', headers = {['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'}, data = body, checkCertificate = false }, success = function(response); func(json.decode(response.data)); end }) end function gethomedata() request_body_cam = 'access_token=' ..token.. ''; getResponseData('https://api.netatmo.net/api/gethomedata', request_body_cam, function(getData) if (getData.body ~= nil) then for w, v in pairs(getData.body.homes) do for a, b in pairs(v.persons) do local INFOS = json.decode(fibaro:getGlobalValue(VGNetatmo)); if (b.pseudo ~= nil) then if (b.out_of_sight == false) then if INFOS[b.pseudo] ~= nil then MajEntree(b.pseudo,nil,b.last_seen); local change_var = tonumber(INFOS[b.pseudo].status); if (change_var == 0) then DebugChange("green", b.pseudo.. ' est présent.') MajEntree(b.pseudo,1,nil); else Debug("white", b.pseudo.. ' est toujours présent.'); end else Debug("red", "L'entrée pour " ..b.pseudo.. " de la table "..VGNetatmo.." n'éxiste pas."); MajEntree(b.pseudo,0,0); end else if INFOS[b.pseudo] ~= nil then MajEntree(b.pseudo,nil,b.last_seen); local change_var2 = tonumber(INFOS[b.pseudo].status); if (change_var2 == 1) then DebugChange( "orange", b.pseudo.. ' est absent.'); MajEntree(b.pseudo,0,nil); else Debug( "white", b.pseudo.. ' est toujours absent.'); end else Debug("red", "L'entrée pour " ..b.pseudo.. " de la table "..VGNetatmo.." n'éxiste pas."); MajEntree(b.pseudo,0,0); end end end end end else Debug("red", "Impossible de joindre l'API! Vérifier le taux de rafraichissemment!"); end if tonumber(vd_ID) ~= nil then fibaro:call(vd_ID, "pressButton", vd_refresh); end end ) end local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then oAuth(); end Icones Téléchargement du VD Netatmo_Welcome.vfib
-
J'ai compris! Ton code fonctionne également @pepite! Simplement, la méthode de vérification n'est pas adéquate. En effet, on a un retour d'erreur de L'API si la variable globale n'existe pas. Ce qui est logique, puisqu'on lui demande de nous sortir une valeur qui n'existe pas... Peut-être existe-t'il une autre méthode pour vérifier si une VG existe ou pas ? Enfin, celle-ci fonctionne mais crée forcément une erreur si elle n'existe pas.
-
function createGlobalVariable(variableName, variableValue) local created = false; local data = {name = variableName, value=tostring(variableValue)} response, status = api.post("/globalVariables", data); -- If creation successful, then return created=true if (status == 201) then fibaro:debug("Global variable " .. variableName .. " created"); created = true else fibaro:debug("Failed to create global variable " .. variableName .. "!"); end return created; end Grâce au mot clé "api.post", j'ai pu trouver ce code qui fonctionne parfaitement! Merci beaucoup de m'avoir aiguillé @pepite! Analyser ces quelques lignes va beaucoup m'aider!