Aller au contenu

require ? io ? socket ? indisponible dans hc3 ?


Messages recommandés

Posté(e) (modifié)

Bonsoir,

 

D'abord, je suis en admiration face à vos connaissances :60: que je n'ai pas. Mais ca ne m'empêche pas d’investiguer et d'essayer :22:

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é :

image.png.1e1b8793957f0d71c04db183ed4cf92e.png

Modifié par JLT
Posté(e)

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 !

 

Posté(e)

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

Posté(e)

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.

 

 

 

Posté(e)

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 :

image.png.e849843b54f4c20d3676a6a43e780ba2.png

 

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)

 

Posté(e)

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 ^_^

 

image.thumb.png.97e6211af62d4d2d020a71d788714877.png

Posté(e)

Je ne suis pas surpris de la réponse.
Mais pourquoi tu leur a posé la question, tu voulais importer quelle librairie ?

Posté(e)

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') "

 

 

Posté(e)

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...

×
×
  • Créer...