JLT Posté(e) le 3 mars 2023 Signaler Posté(e) le 3 mars 2023 (modifié) Bonsoir, D'abord, je suis en admiration face à vos connaissances que je n'ai pas. Mais ca ne m'empêche pas d’investiguer et d'essayer J'essaye de mettre en oeuvre la récupération de données d'un device externe via "@dat" (qui fonctionne bien avec putty mais pas avec lua) En cherchant , j'ai vu que la récupération était possible en utilisant un "shell", Mais, il y a des commandes qui ne sont apparemment pas acceptées par le lua de la hc3 (où c'est moi qui ne sait pas les activer ?) Require io socket ... J'obtiens des réponses comme - attempt to index a nil value (global 'io') - attempt to call a nil value (global 'require') Ma première question est de savoir si ces fonctions/librairies sont disponibles avec le lua de la hc3 ? Si pas, comment faire pour les ajouter si il y a lieu/possible ? Merci Ps : passer par Putty pour accéder à la HC3 (pour installer une librairie supplémentaire) se solde par un échec de sécurité : Modifié le 3 mars 2023 par JLT
Lazer Posté(e) le 3 mars 2023 Signaler Posté(e) le 3 mars 2023 Pour des raisons de sécurité, plusieurs instructions sont bloquées par Fibaro dans l'interpréteur LUA mis à notre disposition : require, io, etc... Idem pour l'accès SSH. En revanche, tu peux bien ouvrir des sockets depuis le LUA, aussi bien en TCP qu'en UDP. Voir la doc officielle : https://manuals.fibaro.com/home-center-3-quick-apps/ net.TCPSocket net.UDPSocket Et pas mal d'exemples sur le forum aussi... faut fouiller un peu Attention la programmation n'est pas évidente, ces fonctions s'exécutent en asynchrone. J'avais fait un tuto pour net.HTTPClient(), qui est également applicable, même si ça sera plus compliqué avec les sockets, vu qu'il faut enchainer les appels asynchrones de connect => success => send => success => read => success => close... Une sacrée gymnastique !
JLT Posté(e) le 4 mars 2023 Auteur Signaler Posté(e) le 4 mars 2023 Merci Lazer pour la précision sur les limitations de la hc3 et pour ton tuto que je consulte. Vu que la réception des données du module externe fonctionne sous Putty avec "@dat", où mettre cette fonction dans le code de ton premier exemple requête de type GET ? sur base de ce que j'avais trouvé sur le net, j'ai essayé ceci mais sans succès : local command = "@dat\n" Pour l'instant je cale sur "connection refused" avec la requête type GET. peut être à cause des ID et KEY du device externe mal placés/acceptés
Lazer Posté(e) le 4 mars 2023 Signaler Posté(e) le 4 mars 2023 Je ne connais pas du tout le protocole utilisé par l'appareil avec lequel tu tentes de communiquer. Et d'ailleurs c'est quoi que tu appelles "@dat" ? Mais vu que tu parlais de socket, ce n'est probablement pas de l'HTTP, donc mon tuto n'est pas applicable tel quel. Comme je le disais lors du précédent message, mon tuto utilise net.HTTPClient (donc pour faire des requêtes sur un serveur Web, de type GET, POST, etc) Mais dans ton cas, c'est probablement net.TCPSocket qu'il faudra utiliser... donc là il y a tout à écrire.
JLT Posté(e) le 4 mars 2023 Auteur Signaler Posté(e) le 4 mars 2023 exact, le device externe utilise le TCP pour communiquer il n'a pas d'API donc le "@dat" permet d'accéder aux données : le lua de la hc3 coince même avec net.TCPSocket, j'abonne l'idée, c'est pas grave, la QA de SmartHomeEddy sur le "forum fibaro" est bien, elle collecte les données d'un p1 monitor (y a pas les mêmes données que mon autre device mais c'est déjà très bien)
JLT Posté(e) le 7 mars 2023 Auteur Signaler Posté(e) le 7 mars 2023 Je viens de recevoir une réponse de Fibaro qui confirme l'impossibilité pour l'utilisateur d'ajouter des librairies lua, mais dans la réponse ils laissent un espoir de complément par défaut.... qui sait ... peut être une jour
Lazer Posté(e) le 7 mars 2023 Signaler Posté(e) le 7 mars 2023 Je ne suis pas surpris de la réponse. Mais pourquoi tu leur a posé la question, tu voulais importer quelle librairie ?
JLT Posté(e) le 8 mars 2023 Auteur Signaler Posté(e) le 8 mars 2023 J'avais déjà acté la situation avec ta réponse , le mail envoyé à Fibaro était juste pour savoir si dans le futur une éventuelle solution était possible à propos de l'ajout par Fibaro de librairies plus étendue (par défaut en interne ?) Je leur donnais un exemple de limitation avec le message d'erreur : " I get an error on io.popen : attempt to index a nil value (global 'io') "
Lazer Posté(e) le 9 mars 2023 Signaler Posté(e) le 9 mars 2023 Avec io c'est normal, c'est bloqué, et ça le restera je pense. En revanche, comme indiqué, avec net.TCPSocket tu devrais pouvoir arriver à tes fins, mais il y a pas mal de boulot, car il va falloir te tartiner à la main toute la programmation du protocole de communication avec ton appareil. Car le TCP, c'est le protocole but de fonderie...
Messages recommandés