J'aimerai relancer le projet...
#1
Salut,

J'aimerai relancer le projet d'une version centralisée basée sur le Raspberry pi et voir qui est partant pour en parler un peu.

J'ai plusieurs bouts de code éparpillés sur mon pc et quelques tests concluants mais j'arrive pas à organiser tout ça pour faire un truc fonctionnel. Peu être que si on se fixe de plus petits objectifs en partageant du code on peut y arriver.

J'ai commencé un petit programme en C# qui tourne avec mono grandement inspiré du travail de Bigonoff avec Domogest CE4 qui me sert à interagir avec le flux UDP de l'interface LandTiger. Pour l'instant rien de concret mais ça montre qu'on peu tout à fait reprendre le concept de plugins en C# sous linux. Je voulais mes interfaces en pages web comme Henry et en cherchant l'existant, j'ai découvert Symfony. Je pense que je vais utiliser ça car j'aime bien le concept de route, doctrine, la gestion du cache, les services etc. Le seul problème que j'avais avec tout ça c'est que c'était pas assez interactif.

Je ne sais pas trop comment fonctionne Henry mais moi je me suis embarqué avec un timer javascript qui vérifie l'état des informations affichées toutes les secondes de façon à garder l'interface web cohérente avec l'état de l'installation. J'aimais pas trop et du coup je viens de trouver une solution en utilisant le travail de ce gars qui me permet de relier directement l'interface web à mon programme C# et les premiers essais sont très prometteurs.

Maintenant, le moindre évènement provenant de mon programme C# est traité dans un évènement javascript sur le navigateur web de chaque client et ça me donne envie de continuer dans cette voie.

Je vais essayer d'imager ce que j'aimerai faire et relancer un peu les conversations :o)

A bientôt
Tant que vous avez des dents, croquez des pommes !  (^_^) ♪♫  ♪
Répondre
#2
bonjour koala

c'est pas une mauvaise idée ,moi je suis entrain de regarder pour comprendre un peut mieux le python 3 ,car maintenant les bibliothéque pour crée un petit serveur et aussi celle pour èmetre et recevoir sur le bus can existent.

donc avec une rpi3 comme on a la possibilité de communiqué via éthernet ou wiffi ou bluetools ,on pourrait réaliser qielque chose de bien .

toi ,je vois que tu te dirige vers le c# ; javascript et Symfony etc...

moi je vais utiliser python3 car il peut être un serveur interactif style PHP ,je pourais recevoir et émetre des trames canbus ;je pourrais y inclure une BDD de style sqlite3.

une horloge temp réel DS3231 .

a+
Répondre
#3
Salut,

Je suis pas spécialement fixé sur un langage ou une méthode particulière :o)

Ma première maquette est en C# car déjà j'aime bien et ce que je voulais c'était avoir accès à tout élément dans un même programme tout en le modulant grâce aux plugins. Après j'ai étudié aussi ce qu'on fait les autres et souvent il s'agit de plugin PHP qui manage un deamon indépendant qui peut être en Python, C++, C# ou autre.

Pour l'instant je travail sur l'auto installation / mise à jour et l'interface graphique. Je ne suis pas trop pour proposer une image toute faîte à installer alors j'essaye de créer un script shell à lancer sur un Pi fraîchement installé qui se charge d'installer tous les éléments nécessaires. Le principal avantage c'est quand quelqu'un essaye de comprendre le fonctionnement, il peut suivre pas à pas les actions réalisées pour en arriver à faire fonctionner le truc.

A l'heure actuelle, mon script fait toutes les mises à jours du PI, il install PHP7 Mysql et Nginx, configure l'ensemble pour avoir un serveur web fonctionnel et télécharge le contenu de mon GitHub dans le dossier Web. Maintenant j'étudie Composer et je regarde toutes ces dépendances très intéressantes. Je pense utiliser Symfony car au final ça ressemble à ce que je cherche à faire.

La principale difficulté c'est de savoir quoi faire plutôt que comment ou avec quoi ^^

C'est très difficile d'expliquer une idée sur un forum mais je vais essayer de t'expliquer pourquoi j'ai opté C# plutôt qu'autre chose.

Au début j'ai commencé par la réception des trames Can provenant de l'interface LandTiger. Je voulais un truc natif au Pi alors j'ai opté pour C++ et j'avais le source d'Henry pour un bon départ. Bref, je me bricole une interface UDP qui renvoi les trames vers php et de là je commence mon truc.

Pour faire des scénarios c'est à peu près ce qu'il faut. Du coup j'ai fais un truc du style Produceur => Pile => Consumer
Le programme principale contient une liste de trames CAN (la pile) et démarre l'écoute UDP dans un thread qui vient alimenter la pile. Il reçoit, il place dans la pile et continue son boulot le plus rapidement possible. Le programme principal peu créer autant que Consumer que nécessaire qui sont en fait des threads qui traitent chaque trame dans la pile à leur vitesse suivant la complexité des calculs à faire et se mettent en pause dès que la pile est vide.

J'ai fais un bon départ avec ça mais ça s'est vachement compliqué quand j'ai eu besoin d'interagir avec ce flux UDP à partir de l'interface web...

Vu que l'interface est externe au programme, il faut arriver à communiquer avec pour lui envoyer une trame et attendre un résultat en effectuant toute une série de contrôles comme le fait actuellement Domocan CE4. J'ai eu des résultats en me bricolant une interface UDP en PHP qui se connecte directement sur la LandTiger pour envoyer une trame via l'interface web et lire le résultat mais le problème c'est qu'il y a déjà mon programme qui utilise l'ip/port et c'est pas trop naturel de forcer ça avec des options. Je me suis donc lancé à ajouter un serveur TCP/IP dans mon programme interface pour le "piloter" via un client TCP PHP mais je me suis perdu dans mes threads mutex et conditions et du coup ça marche plus.

Avec C#, j'ai une bien meilleur gestion des évènements et je trouve plus facile d'intégrer différentes interfaces dans un même programme sous la forme de plugins. Je me retrouve avec le même problème, il me faut communiquer entre l'interface web et le programme C#. J'étais partis sur l'idée de refaire mon serveur TCP sous la forme d'un plugin mais en faisant des essais, je me suis rendu compte que communiquer entre l'interface web et le programme se faisait plutôt du coté "client" que "serveur". J'en étais arrivé à transformer mon client PHP en service Symfony et j'y faisais des appel via JQuery. Tout bien réfléchis, j'essaye autre chose et j'ai remplacé mon serveur TCP par un serveur WebSocket. Le service Symfony n'existe plus et maintenant c'est javascript qui vient se connecter sur le serveur WebSocket quand la page est chargée et ça te permet de piloter l'ensemble mais aussi de faire réagir ton interface à des évènements provenant du serveur.

Un exemple : au lieu d'utiliser dans ta page web un timer qui toutes les secondes fait une requête vers un script pour afficher une valeur à l'utilisateur "en temps réel", avec websocket tu as un évènement javascript sur ta page à chaque fois que le serveur t'envoi quelque chose. Il te reste plus qu'à faire quelques tests pour identifier ce que le serveur te raconte et tu mets à jour la valeur.

Je sais pas si c'est très clair ^^

A bientôt
Tant que vous avez des dents, croquez des pommes !  (^_^) ♪♫  ♪
Répondre