Serveur ou Client ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Serveur ou Client ?

Message par Ulix »

Serveur ou Client ?


Bonjour a tous !

Comme le titre l'indique, je me pose la question ! :oops:
Je vous explique : je suis en cours de réalisation d'une installation domotique.

Un programme écrit en PureBasic qui communique avec 7 arduinos (chaqu'un avec
un shied Ethernet) donc accessible par réseaux.

Ma question est donc :
1 - Serveur sur PureBasic et client sur Arduino? ou bien
2 - Client sur PureBasic et Serveur pour chaque Arduino ?

Quel est la meilleur façon de faire ?
Quelqu'un a-t-il déjà réalisé ce genre de montage ?
Quelle solution a était la plus efficace ?

Je suis ouvert a toutes vos suggestions et propositions ?

Dans l'attente de vous lire... :P
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Serveur ou Client ?

Message par G-Rom »

Bonjour Ulix, déjà fait. donc , je ne sais pas ce que tu cherches à faire, mais il me parait évident que PB doit être le serveur. donc le PC
sauf si tu veut que ta domotique soit autonome sans PC , ce qui est possible aussi. j'avais aussi un mode de communication entre mes modules par radio , j'avais une sorte de maillage entre tout mes modules ( station météo, lumière , etc... ) et un arduino qui faisait relais entre tout ca & un PC pour visualisé les statuts...
tu peu aussi faire un serveur web avec un arduino ou un rpi... donc plus de PC... bref, tout dépend ce que tu veut faire.
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Serveur ou Client ?

Message par Ulix »

Merci G-Rom !

Je compte faire tourner mon application(en PB) sur un petit PC, affichage sur écran tactile.
Pas de wifi !

Normalement, la maison reste autonome (même en cas de panne de la partie domotique).
Toutes les lumières sont gérer par des télérupteurs, les volets par des relais... etc, les
commandes seront toujours utilisable.
Mon application gérera les automatismes, demandera les états (ouvert/fermer) et les
valeurs (température, humidité, présence dans une pièces, lumen).... et agira travers
les Arduinos.

Je vais donc regarder et chercher du code pour mettre en oeuvre un serveur en PureBasic !
Si quelqu'un déja un bout de code qui fonctionne, merci je suis preneur.

J'ai quand même beaucoup de question !
En tous cas merci G-Rom pour ce retour d'expérience, ça m'éclaire un peu ! :idea:

A+
Ulix
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Serveur ou Client ?

Message par boby »

Ulix, si ça peut te servir https://www.purebasic.fr/french/viewtop ... 77&start=3

C'est dans ce genre la que je fait mes client/server.

Bon courage pour ton projet.
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Serveur ou Client ?

Message par Ulix »

Merci Boby,

Je viens de jeter un coup d'oeil !

Apparement c'est un serveur multi-client. Bien, j'ai 7 arduino a gérer !
Parcontre, je ne pense pas utilisé de base de données !

Juste une liste chainée (dans l'application) et du Json !
Donc envoyé et recevoir du Json.

Je ne sais pas si le code est facile a adapter ?
Je regarde !
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Serveur ou Client ?

Message par boby »

C'est pas du tout un serveur de DB, c'est une simple mise en place de relation client serveur, à toi de te créer un petit protocol de communication pour savoir et traiter les infos (dans le cas de mon example, c'est géré dans la procédure RequestEvent.
Pour 7 clients je ne sais pas si c'est bien util, mais si besoin, c'est facile à lancer en multithread...
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Serveur ou Client ?

Message par G-Rom »

pour le json tu as : https://arduinojson.org.
si j'étais toi, j'utiliserais les RF24 sur tout ce qui as besoin d'être mesuré : http://wiki.sunfounder.cc/index.php?tit ... th_Arduino
L'avantage, c'est le cout.
avec un système de maillage réseau entre les rf24 : https://tmrh20.github.io/RF24Mesh/
l'avantage, si tu as un système qui ne "capte pas" le serveur, il cherchera à passer l'information à travers un appareil qui le capte.
puis un arduino avec aussi un RF24 qui servira d'interface entre ton PC et tout les modules.
l'enorme avantage, c'est que tu peu aussi utilisé des attiny85. donc encore moins cher que les arduino, après faut savoir faire ses propre CI. et une imprimante 3D pour les boitier perso. je fait tout cela, c'est du bonheur ^^
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Serveur ou Client ?

Message par Marc56 »

Ton installation domotique existe déjà (tableau centralisé) ou tu pars de zéro ?
Si tu n'as aucun équipement, tu peux aussi envisager les Raspberry qui te couteront aussi moins cher car déjà équipé Ethernet et si tu envisages du sans-fil la version 3 est déjà équipée du wifi.

La communication Arduino Ethernet sera de toutes façons du client serveur puisque le pilotage des ports I/O via le réseau se fait avec l'interface HTTP de la carte.

:wink:
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Serveur ou Client ?

Message par Ulix »

Salut a tous,


Merci a G-rom, Boby et Marc56, pour l'intérêt que vous me portez et pour toutes vos suggestions !


Mon installation électrique est en cours de refonte, Changement du tableau (vieux tableau avec fusible),
nouvelles lignes, mise au norme avec la NFC15-100... etc.
Je prévois un tableau principal de 72 modules, et un tableau auxiliaire.
Dans la partie haute du tableau auxiliaire se trouvera tous les télérupteur et relais.
Dans la partie basse du tableau auxiliaire se trouvera la partie électronique (peut-être 1 ou 2 Arduino Méga,
(avec multiplexeur si utile), relais électronique, alim pour reseau POE, switch... etc.

Et je prévois d'utilisé des télérupteurs et relais, pour toutes les actions sur le réseau électrique.
L'ordinateur (et application en PB) pouvant agir via les télérupteur et relais.
Raspberry (du arm) pas possible, mais il en bien d'autre (il faut juste une connection rj45).

Par contre, je ne veux pas utilisé de Wifi, que tu filaire, en reseau avec un connection sur mon réseau existant.
J'ai déjà un réseau de 5 machines, mais je compte installer un second réseau en POE pour les arduino !

Je suis sur les tests de faisabilité, serveur (en PB sur ordinateur X86) <=> communication avec un Arduino.
Je n'avais jamais développé d'application utilisant un Serveur/Client ! Donc, je galère...
De plus la partie arduino et coder en C ! Je ne connais pas, donc j’apprends en même tant !

Merci encore pour vos avis !

A+ Ulix
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Serveur ou Client ?

Message par Marc56 »

Voilà quelque éléments pour ton projet.
- Une carte au tableau pour actionner les relais et télérupteurs (j'ai pas donc ne peut t'aider)
- Une carte par pièce dont tu souhaites remonter des données (température, hygrométrie, luminosité, mouvement)

Attention avec le POE, une carte Arduino ne supporte pas le survoltage (j'en ai grillé une en 2 secondes en lui envoyant du 30v :oops: )
:!: Inversement, si elle n'a pas assez d'ampérage, elle reboote dès qu'un capteur ou actuateur se met en marche (et tu ne peux le voir, sauf à regarder la LED principale ou à faire du pooling dessus)
Tu es aussi limité à à peu près 60 m en réalité (et avec du bon câble). En 12V au départ, il ne restera peut-être pas grand chose à l'arrivée. Si tu monte la tension, il faut la rabaisser avant d'alimenter l'arduino. Mais une tension haute va aussi faire vieillir le câble :(

Coté langage C, ce n'est que du C de base, et tu n'as qu'à gérer le signal Haut (ON) ou Bas (OFF)
La partie décisionnelle se fera sur ton application sur le PC

Choisis bien tes capteurs, les plus simples ne sont pas forcément les meilleurs car il faut ajouter des drivers.
Les meilleurs ont leur propre chipset et utilisent les commandes AT ou des commandes bus.

Coté PC, ton application en PB va gérer l'envoi et la réception vers l'interface Ethernet des arduinos, par commandes via HTTP

Voilà un test que j'ai fait ce jour
Arduino Uno + Ethernet shield (la 1)
Dernière cuvée de l'IDE https://www.arduino.cc/en/Main/Software 1.8.7

J'ai uploadé dans la carte ce code en changeant juste @IP et @Mac (au dos de la carte)
https://www.arduino.cc/en/Tutorial/WebServer

Puis j'ai simplement ouvert mon navigateur sur l'@ de la carte et je reçois ceci:
analog input 0 is 779
analog input 1 is 607
analog input 2 is 498
analog input 3 is 418
analog input 4 is 1023
analog input 5 is 1023
Donc le serveur de la carte envoie bien les données.
(Dans mon test, seule les pins 4 et 5 sont connectées. Une sur une sonde de baromètre l'autre sur un thermomètre)
(avec un BMP085 de Sparkfun) (remplacé depuis)
(Ici les valeurs sont fictives car je n'ai pas inséré le code de pilotage de la sonde elle-même)

Donc, la communication arduino -> ethernet -> réseau fonctionne déjà :P
Maintenant, let's go to PureBasic et causons un peu directement à cette carte grâce à cette merveilleuse nouvelle fonction de WebService (HttpRequest). Pas besoin d'utiliser les fonctions serveur ou client.
On peut aussi le faire avec ReceiveHTTPFile()

Code : Tout sélectionner

EnableExplicit

InitNetwork()

Define HttpRequest = HTTPRequest(#PB_HTTP_Get, "http://192.168.0.60")

If HttpRequest
    Define HTTP_Data$ = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
    Define HTTP_Code$ = HTTPInfo(HTTPRequest, #PB_HTTP_ErrorCode)
    
    If HTTP_Code$ = "200" ; OK
        Debug HTTP_Data$  
    Else
        Debug "Erreur serveur : " + HTTP_Code$
    EndIf
EndIf

End
Debug:

Code : Tout sélectionner

<!DOCTYPE HTML>
<html>
analog input 0 is 844<br />
analog input 1 is 676<br />
analog input 2 is 543<br />
analog input 3 is 445<br />
analog input 4 is 1023<br />
analog input 5 is 1023<br />
</html>
On reçoit donc bien le code source de la page.

:) Et voilà! réalisation du prototype en moins de temps qu'il n'en faut pour livrer une pizza :mrgreen:
Il ne resterait plus qu'à extraire l'info utile et à s'en servir pour le gadget souhaité

Ensuite, reste à étudier la communication dans l'autre sens PB -> Ethernet -> Arduino pour actionner des matériels non gérés par le tableau central (ex: écran LCD)

[Edit]
Une page très intéressante que je viens de trouver
Voir la partie analyse de la requête
https://eskimon.fr/tuto-arduino-803-ard ... qu%C3%AAte
(ouvrir le port série dès que connecté pour voir le debug)

Exemple, si j'ouvre un navigateur ou que j'envoie une requête via une application PureBasic
http://192.168.0.60/?a=1&b=2&c=3
La carte arduino reçoit (entre autre) l'URL du client, avec tous les paramètres.
GET /?a=1&b=2&c=3 HTTP/1.1
Il suffit d'isoler le deuxième champs (/?a=1&b=2&c=3) et d'utiliser les valeurs pour faire agir les actuateurs (ex: digitalWrite())

Voilà, ce sera tout pour aujourd'hui, j'espère que ça peut t'aider un peu.

:wink:
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Serveur ou Client ?

Message par Ulix »

Merci Marc56 !

Désolé de ne pas avoir répondu tous de suite ! Fin de semaine assez difficile. :twisted:
Le weekend se résume au dimanche.

Je vais donc regarde tous cela demain !

Merci encore pour tout ! :P

A+ Ulix
Répondre