Raphael_OD

Developpement ASCOM

Messages recommandés

Bonjour, 

je viens de terminer deux drivers ASCOM en VB pour mon matériel personnel sur base d'arduino. Un pour le toit ouvrant (sur la base du "template" dôme), l'autre pour le Safety Monitor (plus simple).

Ma question est la suivante, si quelqu'un à de l'expérience là dessus, existe-t-il un moyen interfacer ASCOM vers un périphérique mais pas connecté en USB  ? 

Autrement dit ASCOM met il quelque part une classe à dispo pour faire des requêtes Client Serveur (du genre GET / PUT sur IP) je ne trouve rien sur leur site.

Merci de votre aide 

A+

 

 

Modifié par Raphael_OD

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

j'ai aussi développé un driver ASCOM pour piloter la mise au point avec moteur pas à pas via une carte Arduino. Mais j'ai un interface utilisateur (clickodrome) en Java qui accède à la carte Arduino d'un côté et au driver Ascom de l'autre via un serveur TCP côté Java et un client TCP côté Ascom (dans le driver). Après avec Java on peut piloter ce qu'on veut et re-router les commandes (put-get) vers le driver Ascom.

Si ça peut te donner des idées.

 

Lionel

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

le client TCP dans le driver ASCOM est un développement perso ?  je suis intéressé,  je vais requêter des plateformes linux (tous les codes sont en place et dispo sur les IP dédiées) mais ça c'est un détail . Je veux juste que ASCOM puisse récupérer les datas nécessaires en TCP (Temp, HUM IR etc ...).

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Oui c'est du code perso et depuis que ça marche bien je n'y aie pas retouché. J'ai encore les fichiers sources mais pas l'éditeur VB, la licence a expiré.

 

lionel

 

Partager ce message


Lien à poster
Partager sur d’autres sites

 VB.NET socket donc ... tu récupères tes valeurs et tu les transmets dans ton code ASCOM 

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Oui, dans les deux sens mais l'action vient généralement des logiciels de prises de vues qui gèrent par exemple l'auto-focus. Les requêtes de positionnement du moteur sont envoyées au driver Ascom. C'est là que le client tcp intervient en re-routant la requête vers l'application Java qui elle a la connexion vers Arduino elle même pilotant le moteur. 

L'application Java permet beaucoup de souplesse entre Ascom, Aduino et divers matos non gérés par ascom. C'est en fait un hub logiciel. Bon c'est pas complètement trivial à coder...

 

lionel

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

J'ai fait des drivers ASCOM pour divers périphériques maison (focuser, observing conditions, safety monitor). Ils passent tous par des requêtes API json HTTP vers les périphériques (certains en wifi, d'autres en ethernet). Dans tous les cas j'ai utilisé les librairies standard de connexion réseau (dans mon cas en C#).

 

Tout simplement, quand tu fais une requête au driver ASCOM, il va charger les données (observing conditions vers un CloudWatcher ou vers un équivalent perso, j'ai les 2) ou passer l'ordre (pour le focuser vers un montage maison commandé par un raspberry pi) par HTTP. Quand c'est possible les réponses sont mises dans un cache histoire de ne pas surcharger le périphérique avec des tonnes de requêtes (genre le observing conditions qui ne pas pas changer 10 fois par seconde). En fait dans le cas du observing conditions, les requêtes sont faites vers plusieurs périphériques auxiliaires (une station météo maison sur raspberry, une station d'un voisin pour le vent que je n'ai pas, etc). Tu es juste limité par ton imagination.

 

Quel est ton probleme exactement?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello cedric

Je ne trouve aucun exemple concret sur le net juste des drivers compilés voilà mon pb. J'ai un Cloudwatcher opérationel qui envoie ses datas sur un RPI via un arduino. J'ai effleuré REST ASCOM mais ?????

De là tout est bien empaqueté sous linux pour les graphes la visu, les seuils.

En gros mes données sont disponibles, stockées (sqlite) sur l'IP du serveur. Comment faire le lien avec ASCOM.

En Port sériel pas de pb par contre c'est bon le CW le Safety mon, le toit roulant. Mais bon dans l'abri j'aimerai éviter des câbles USB bien peu fiables sur des périphériques majeurs en distant.

Je code en VB2017 Community.

 

Modifié par Raphael_OD

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok. Je ne peux pas te donner de code VB, la dernière fois que je l'ai utilise c’était en 1994. Par contre, voila en principe quoi faire:

* Cote raspberry:

- Il te faut une API. Ca peut être un truc tout simple genre une page web que tu lis a partir de ton driver ASCOM, ou une vraie API json.  Le json ne mange pas de pain et ça peut être utile plus tard, donc tu peux faire une page qui t'affiche du json en PHP sur le raspberry a partir des données dans ta bse sqlite 5 minutes.  Tu peux utiliser autre chose que PHP (perl, python), utilise ce que tu as utilise pour tes graphes.

 

* Cote ASCOM

- Il faut que tu installes la plateforme de développement ASCOM. Ca te donnera toutes les librairies utiles et toutes les interfaces des drivers avec des exemples.

- Ensuite, quand ton driver reçoit une demande, il va devoir aller charger la page json du raspberry par HTTP (tu dois pouvoir trouver plein d'exemples de ça sur le net).

 

Si vraiment tu es perdu, fais l'API, donne-moi le format, et je peux te faire un driver SafetyMonitor rapidos en C#.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

OK pour le RPI JSON je vois comment le faire.

ASCOM dev est installé j'ai fait mon driver de toit.

JSON vers Vb je dois encore creuser...mais ok sur le principe je voulais le cheminement technique va on dit dire ...le code reste le code.

Quand tu dis ton driver reçoit une demande par exemple dans le Driver ASCOM j'ai une function par exemple 

 

Region "ISafetyMonitor Implementation"
    Public ReadOnly Property IsSafe() As Boolean Implements ISafetyMonitor.IsSafe
        Get
            TL.LogMessage("IsSafe Get", "True")
            Return True
        End Get
    End Property

 

J'implémente ici tout le code de requête http --> JSON ?

Si c'est ça pour moi c'est plus clair. Il suffit que toute les 10 min mon JSON soit actualisé sur le serveur PI

Merci de me consacrer du temps cédric.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est la qu'il te faut l'information du raspberry. Apres l'appel a TL.LogMessage il te faut faire une requête pour récupérer les informations de ton raspberry. Tu peux aussi récupérer d'autres informations importantes. Dans mon cas, je vérifie qu'il ne pleut pas, qu'il n'y a pas trop de vent, que le toit est ouvert, que le système a accès a internet (je suis soit en vrai remote, soit en remote dans mon jardin, donc perte d'internet peut être un probleme et je préfère tout arrêter), etc.

 

Il te faudra du cache pour éviter de faire des tonnes de requêtes lentes. Certains programmes vont demander le statut du SafetyMonitor toutes les secondes.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 39 minutes, cedric_r a dit :

Oui c'est la qu'il te faut l'information du raspberry. Apres l'appel a TL.LogMessage il te faut faire une requête pour récupérer les informations de ton raspberry. Tu peux aussi récupérer d'autres informations importantes. Dans mon cas, je vérifie qu'il ne pleut pas, qu'il n'y a pas trop de vent, que le toit est ouvert, que le système a accès a internet (je suis soit en vrai remote, soit en remote dans mon jardin, donc perte d'internet peut être un probleme et je préfère tout arrêter), etc.

 

Il te faudra du cache pour éviter de faire des tonnes de requêtes lentes. Certains programmes vont demander le statut du SafetyMonitor toutes les secondes.

Beaucoup de chinois pour moi sur cette page :be:

mais ce que tu décris dans ce message est exactement ce que j'aimerais faire :)

 

J'ai un Raspberry Pi pour la camera allsky, je viens d'y installer un anémomètre, et bientôt j'y installerai un détecteur de pluie.

Le toit est contrôlé par un arduino branché sur l'ordinateur, la monture est déjà sous ASCOM

Je suis à 99% du temps en remote, mais là je commence à avoir tout ce qu'il faut pour automatiser la gestion de l'observatoire.

 

Le seul problème est pour interfacer tout ça, j'avais commencé à écrire un driver ASCOM pour le toit dans Visual Studio 2017, après avoir installé tout le kit de développeur,

mais j'avais des erreurs bizarres et j'avais fini par laisser tomber...

 

 

Est-ce que ça serait possible de voir ton code pour le toit Raphael ?

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Xili, je n'ai fait que implémenter la lecture d'une donnée série dans les fonction OpenShutter et Closeshutter. Ces fonctions envoient un code à l'arduino en données série.

 

Public Sub OpenShutter() Implements IDomeV2.OpenShutter
        TL.LogMessage("OpenShutter", "Shutter has been opened")
        objSerial.Transmit("O")
        domeShutterState = True
    End Sub

Sous SGP ça fonctionne très bien.

Les tutos de Tom How sont très bien faits et fonctionnent avec VB2017 sur le site ASCOM dev.

 

 

Modifié par Raphael_OD

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 16 heures, cedric_r a dit :

Oui c'est la qu'il te faut l'information du raspberry. Apres l'appel a TL.LogMessage il te faut faire une requête pour récupérer les informations de ton raspberry. Tu peux aussi récupérer d'autres informations importantes. Dans mon cas, je vérifie qu'il ne pleut pas, qu'il n'y a pas trop de vent, que le toit est ouvert, que le système a accès a internet (je suis soit en vrai remote, soit en remote dans mon jardin, donc perte d'internet peut être un probleme et je préfère tout arrêter), etc.

 

Il te faudra du cache pour éviter de faire des tonnes de requêtes lentes. Certains programmes vont demander le statut du SafetyMonitor toutes les secondes.

Quand tu parles de cache tu veux dire prévoir cela en programmation  là va falloir que je creuse sérieusement je n'ai pas la culture MS .NET la dessus ?

J'ai ça en tête sur mon RPI générer un fichier JSON de données que j'appelle en VB par une http request puis je parse les données j'ai bon ?

le statut du Safety Monitor je vais demander sur le forum SGP quel est le délai d'actualisation...

Pour la perte de connexion, j'ai prévu un relais contrôlé par GSM (4G) pour au moins fermer le toit en mode forcé...

Merci !

Modifié par Raphael_OD

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est ça tu as la bonne idée. 

 

Pour le cache, pas besoin de quelque chose de compliqué, garde juste les valeurs dans des variables et réactualise-les ment toutes les minutes. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello, 

 

bon j'ai avancé en VB.NET  et le driver me récupère correctement le paramètre Safe dont a besoin l'application (SGP, ou autre compatible ASCOM) 

j'ai mis en place un script sur mon RPi qui par cron actualise un fichier json toutes les min. C'est un peu touffu mais ça marche.

le json me récupère quelques autres data comme suit.
{"date":"2019-02-19 14:32:56","ambient":13.79,"object":13.49,"status":UnSafe,"cover":Cloudy}

Le Park Telescope et Toit fonctionne sur la table avec Sequence Generator Pro, il me reste quelques sécurités à poser dans le code en cas indisponibilité réseau. 

 

Pour le driver "Observing Condition", je pense faire de même en m'appuyant sur aussi une extraction et un JSON. Le RPI reste central et l'arduino s'occupe du "hardware".

 

As tu procédé de même ?

 

Dernière question comment peut on ajouter un controle personnalisé sur une feuille dans le driver afin de régler quelques seuils. Notamment le calcul différentiel sur le capteur Tempé IR. J'ai tenté mais ça ne marche pas terrible ;)

 

A+

R@ph

 

PS : xili contacte moi en MP si tu as un bout de code pour commencer ;)

 

 

 

Modifié par Raphael_OD

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui j'ai fait comme ça. Dans mon cas il y a plusieurs pi impliqués et quelques sources extérieures (par exemple pour le vent). 

 

C'est le pi central qui récupère toutes les informations qui fait les calculs du genre température ambiante-ciel. 

 

Les seuils sont gérés par mon programme de contrôle de télescope (ccdciel) pour ObservingConditions. Par exemple en cas de nuages il pause les photos. 

 

Dans le cas du SafetyMonitor, le booléen est généré par le driver ascom lui-même en function des données qu'il reçoit du driver ObservingConditions (donc le programme client se connecte au driver ascom qui lui-même se connecte à l'autre driver ascom), et de quelques choses en plus (par exemple vérification de l'accès à internet). 

Partager ce message


Lien à poster
Partager sur d’autres sites

Enfin c'est bon mais alors chez SGP c'est chaud le format des variables...

 

Meteo.JPG

Partager ce message


Lien à poster
Partager sur d’autres sites

Tres bien. Le format avec SGP c'est un probleme de locale?

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas vraiment ce n'est pas documenté faut tâtonner ;) mais en gnl tout passe en String

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, tout passe en string, mais elles sont converties en double dans l'application cliente et la c'est important que les 2 cotés utilisent soit le point soit la virgule. Il est bien possible que ça soit différent.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.