J’essaye de piloter mon IPX800 V3 via un petit soft Windev et les socket.
(j’ai aucun problème en utilisant les requêtes HTTP…)
Voici le code tout bête que j’utilise :
RES est un entier //reçoit le resultat
// ouverture Socket IPX
SocketConnecte("IPX",9898,"192.168.2.41")
SI ErreurDétectée ALORS
Erreur("Impossible de créer la socket ",ErreurInfo(errComplet))
FinProgramme()
FIN
Res = SocketEcrit("IPX","Set011")
SI PAS Res ALORS
Erreur(ErreurInfo(errComplet))
FIN
affiche("retour socket : " + Res)
SocketFerme("IPX")
J’ai bien en retour le valeur « 1 » , qui prouve que je n’ai pas d’erreur, mais la sortie 1 ne s’actionne pas !!
Aucun message d’erreur.
bonjour,
les commandes M2M sont correctes pour la V3 (Setxx1 ou Setxx0). Mais il me semble qu’il faut un login/mdp pour établir la connexion TCP
EDIT :
après vérif, si l’accès HTTP est sécurisé, il faut bien envoyer un mot de passe pour ouvrir le socket.
il faut envoyer key=xxxx avec xxxx = mot de passe de l’accès web
Cela a été mis en place depuis la version 3.05.46
avez-vous sécurisé votre accès http à l’IPX (menu LAN) ?
le M2M est un protocole de communication entre machines (Machine ToMachine). Pour l’utiliser il faut créer une connexion puis envoyer les commandes. Il faut souvent écrire un script ou un programme pour l’automatiser. Il est plus rapide que HTTP
Http, ce sont des requêtes GET ou POST (URL) , généralement prises en compte par les box domotiques. facilement utilisables avec un navigateur.
Bonsoir à tous, alors c’est bien cela, il fallait envoyer un mot de passe avant.
Voici le bout de code qui fonctionne : (pas très propre comme codage mais c’est pour donner un exemple)
RES est un entier //reçoit le resultat
// ouverture Socket IPX
SocketConnecte("IPX",9898,"192.168.2.41")
SI ErreurDétectée ALORS
Erreur("Impossible de créer la socket ",ErreurInfo(errComplet))
FinProgramme()
FIN
SocketChangeModeTransmission("IPX",SocketSansMarqueurFin)
Res = SocketEcrit("IPX","key=xxxxxxxx")
SI PAS Res ALORS
Erreur(ErreurInfo(errComplet))
FIN
affiche("retour socket : " + Res)
Res = SocketEcrit("IPX","Set011")
SI PAS Res ALORS
Erreur(ErreurInfo(errComplet))
FIN
affiche("retour socket : " + Res)
SocketFerme("IPX")
par curiosité. avec windev pourquoi utilisez vous les fonctions socket au lieu du http alors que vous dites maitriser le http ?
et utilisez vous windev mobile ? vous essayez de faire une appli Android ?
ok. j’envisage justement de faire une appli Android avec windev mobile. mais on pourrait aussi faire une appli Windows et la mettre sur une tablette Windows 10. on en trouve à 150 EUR maintenant.
Je m’insère dans le sujet avec un problème quelque peu différent mais à base de Windev.
J’ai une IPX800-V3 pour gérer mes extérieurs : bassins et lumières avec détecteur de présence, température et luminosité. J’ai après pas mal d’essais en lisant ce forum fini par obtenir un fonctionnement satisfaisant, par contre j’aurais aimé journaliser les différents évènements de la V3 de façon à conserver une trace en particulier du franchissement des seuils de luminosité et de température sur l’année.
J’ai essayé les mails mais ce n’est pas très pratique à remettre en forme.
J’ai donc activé des push sur la V3 et j’ai fait un petit programme de capture qui utilise une procédure automatique (thread) pour lire la socket. Cela fonctionne, je décortique le message, le le stocke dans une table sur laquelle je peux faire d’autres traitements.
Mon seul problème est le suivant : au bout de quelques heures, au mieux quelques jours puisque je laisse le programme tourner un permanence, la carte réseau de mon poste semble se bloquer :
pas de message d’erreur du programme.
mais plus d’accès internet ni disques réseaux.
Si quelqu’un à fait quelque chose de similaire, merci de me faire un retour d’expérience.
Ci dessous le code de la procédure automatique : PROCEDURE reception() sIP est une chaîne
_sMessage est une chaîne _
// Tant que le thread n’est pas arrêté, on attend des messages BOUCLE
_ // Attente de connexion_
_ QUAND EXCEPTION DANS_
_ SI SocketAttendConnexion(csSocketServeur,30)=Vrai ALORS_
_ csSocketactive=SocketAccepte(csSocketServeur)_
_ SI EnModeTest()=Vrai ALORS_
_ Trace(« Connexion sur : »+csSocketServeur+"|Client : « +csSocketactive)_
_ FIN_
_ SocketChangeModeTransmission(csSocketServeur,SocketSansMarqueurFin)_
_ //lit_msg(csSocketactive)_
_ sIP=SocketClientInfo(csSocketactive,SocketAdresse)_
_ sMessage=UTF8VersChaîne(SocketLit(csSocketactive,Vrai))_
_ SI sMessage<> »" ALORS_
_ sai_msg=sMessage_
_ TableAjouteLigne(tb_msg,sIP,DateVersChaîne(DateSys())+" "+Gauche(HeureVersChaîne(HeureSys()),8),ExtraitChaîne(sMessage,1,RC),0)_
_ flog(« Msg : « +ExtraitChaîne(sMessage,1,RC))_
_ FIN_
_ SocketFerme(csSocketactive)_
_ csSocketactive= » »_
_ FIN_
_ FAIRE_
_ Erreur(« Problème détecté sur la socket de réception »,ExceptionInfo())_
_ SORTIR_
_ FIN_
_ Multitâche(-2)_
FIN