Commande M2M via socket et Windev

Bonjour à tous,

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.

Quelqu’un a une idée ?

Merci d’avance !!!

Pour allumer le relais 1, il faut envoyer : SetR=01 (et pas Set011).
Pour éteindre le relais 1, il faut envoyer : ClearR=01.

Merci, je viens d’essayer et ça ne change malheureusement rien…

Par contre tu les as trouvé où ses commandes ?

Je suis en V3 et non en V4

Faut-il un marqueur de fin ?

1 « J'aime »

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) ?
  • en quelle version êtes-vous ?

cdt

1 « J'aime »

My bad, je n’avais pas fait gaffe…

Bonjour,
j’utilise ce type de commande sur la V3:
http://« identifiant »:« motdepasse »@192.168.X.X/preset.htm?RLY2=0&RLY3=1 pour la commande simultanée de 2 relays.
Cdt

C’est du HTTP ça, pas du M2M :wink:

bonjour. quel est l’avantage du m2m ?
le sujet m’intéresse et j’aimerais connaître la différence entre ces 2 modes de communication…

le M2M est un protocole de communication entre machines (Machine To Machine). 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.

3 « J'aime »

Bonjour @ZogStriP,
Houps :disappointed_relieved: tout à fait d’accord, rêgle d’or, ne jamais répondre entre le repas et la sieste :sleeping:
cdt

1 « J'aime »

merci.
j’imagine aussi que le m2m est plus sécurisé

Pas vraiment. Il est aussi sécurisé que le protocole HTTP.

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

Merci !!!

2 « J'aime »

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 ?

Non, je ne n’utilse pas Windev Mobile.

Je voulais essayer les socket car je trouve cela plus pratique à utiliser.
Les commandes sont moins longues et pas de soucis de syntaxe…

Après… l’une ou l’autre… tant que ça fonctionne…
Mais je préfère les socket.

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.

Bonjour,

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

Bonjour
Ça peut être votre pc qui se déconnecte. pas forcément votre programme…

Votre code est très mal formaté on a du mal à le lire et du coup a comprendre…

Pourquoi utilisez un thread ? Est-ce que votre programme fait autre chose ?