Aller au contenu
JLT

require ? io ? socket ? indisponible dans hc3 ?

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×