Commande M2M via socket et Windev

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 ?

Voici une meilleure mise en forme du code :

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

J’utilise un thread de façon à ce que la réception des messages s’effectue en tâche de fond de manière permanente et que d’un autre coté je puisse faire des actions sur les messages reçus de type filtres ou tri …

A noter que le blocage ne m’est jamais arrivé pendant des manipulations, mais plutôt de nuit …
En ce qui concerne le PC, il ne bloque jamais si le programme n’est pas lancé.

Cordialement
B.Mellé

quelle version de windev ?
combien y a t’il de ligne dans votre tableau au moment de la coupure ?
normalement vous devriez utiliser une Bdd

il faudrait pouvoir tester le socket…
Si on le perd, on l’ouvre à nouveau…
Le tout est d’arriver à le tester ??

Je ne comprends pas votre réponse normalement vous devriez avoir le nombre de lignes dans votre table tb_msg a tout moment. et donc vous pouvez rajouter un simple bouton sur votre fenêtre qui affiche le nombre de ligne de la table ça vous permettra de savoir à chaque fois que le programme ou votre ordinateur s’arrête à combien de lignes vous êtes arrivés car peut-être que c’est une saturation mémoire a cause de ce tableau mémoire
Avec WinDev il y a peu de chances de faire planter un programme donc je pense plutôt pour votre ordinateur qui n’est pas très performant et dans ce cas il faudra utiliser une base de données au lieu d’utiliser une table. comme ça c’est votre disque qui stockera vos log.