Aller au contenu

OST - Observatoire sans tête


gehelem

Messages recommandés

  • 9 mois plus tard...

Bonjour,

 

Est-ce que ça fait pas doublon avec Indigo au final ?

Indigo fourni des agents pour pas mal de choses aujourd'hui : imageur, focuseur, guideur, solveur astrometrie, etc ...

Indigo est exposé via Websocket avec un protocole JSON dérivé du protocole TCP d'Indi.

 

Si ça fait doublon c'est peut-être pour une bonne raison, je pense notamment aux aspects non techniques : Licence non GPL, ou bien le fait que le développement soit fermé aux "extérieurs".

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, zalta a dit :

Bonjour,

 

Est-ce que ça fait pas doublon avec Indigo au final ?

Indigo fourni des agents pour pas mal de choses aujourd'hui : imageur, focuseur, guideur, solveur astrometrie, etc ...

Indigo est exposé via Websocket avec un protocole JSON dérivé du protocole TCP d'Indi.

 

Si ça fait doublon c'est peut-être pour une bonne raison, je pense notamment aux aspects non techniques : Licence non GPL, ou bien le fait que le développement soit fermé aux "extérieurs".

 

 

Les aspects "non techniques"  En effet mon capitaine!

Mais pas que 🙂

 

Sauf erreur de ma part le serveur indigo n'a que très peu de modules intégrés et completement accessibles, sauf à payer les frontends pour les différents modules...

On peut faire seulement joujou et ça marche très bien.

Si on veut guider par exemple c'est Mac obligatoire et payant ("astroguider")

(Je ne mets pas en cause le modèle, je souligne juste que ce n'est pas ce que je cherche à faire)

Lien vers le commentaire
Partager sur d’autres sites

Okay pour les aspects non techniques, je comprends, l'open source j'apprécie aussi 🙂

 

 

Justement il me semble bien que les "agents" sont bien autonomes et que le guidage est fait coté serveur. C'est écrit quelque part dans la doc d'architecture, faudra que je retrouve le passage, mais en gros il précisait bien que le but de faire des agents est de laisser les calculs coté serveur et pas coté client pour éviter les problèmes de latence/déconnexions réseaux.

Si on regarde par exemple la doc des propriétés du guider : https://github.com/indigo-astronomy/indigo/blob/master/indigo_docs/PROPERTIES.md#guider-agent.

Par exemple voici la page qui controle le guidage via le WebManager basique inclus avec le serveur : https://github.com/indigo-astronomy/indigp/blob/86ec9c6707e37471aa69e505875dd037af738f40/indigo_server/resource/guider.html (pas de code javascript permettant d'avoir une quelconque intelligence).

 

 

Il me semble justement que le modèle du serveur indigo correspond exactement à l'architecture que tu vise. Drivers dynamques + agents en headless.

Je ferais quelques essais quand la météo sera bonne, histoire de voir si j'arrive a sortir un guidage + images en headless avec l'interface web de base.

 

A minima si tu veux pas utiliser indigo, l'architecture qu'ils ont mis en place peut t'inspirer. Notamment le protocole CLIENT <-> SERVEUR.

 

 

Dans tous les cas ton projet est super !

J'aimerais pouvoir t'aider, mais le c/c++ m'es inconnu.

Je pourrais aider sur le javascript, je suis pas un développeur professionnel web, mais je bidouille régulièrement des IHM au boulot pour apporter quelque chose.

 

 

 

  • Merci / Quelle qualité! 1
Lien vers le commentaire
Partager sur d’autres sites

il y a 42 minutes, zalta a dit :

Justement il me semble bien que les "agents" sont bien autonomes et que le guidage est fait coté serveur. C'est écrit quelque part dans la doc d'architecture, faudra que je retrouve le passage, mais en gros il précisait bien que le but de faire des agents est de laisser les calculs coté serveur et pas coté client pour éviter les problèmes de latence/déconnexions réseaux.

Si on regarde par exemple la doc des propriétés du guider : https://github.com/indigo-astronomy/indigo/blob/master/indigo_docs/PROPERTIES.md#guider-agent.

Par exemple voici la page qui controle le guidage via le WebManager basique inclus avec le serveur :

Oui oui, je m'explique mal

Certes l'agent est complet, mais il n'expose pas tout au client web de base

Pour avoir accès à tout c'est client payant obligé...

Par ailleurs (je vais réverifier) les pages web exposées sont statiques : si tu veux coder un agent pour toi dans ton coin ,il faut aussi coder la partie front, je voudrais éviter ça.

 

Nb : je suis à fond dessus en ce moment, j'ai refait plein de trucs en moins crade grace à @deufrai

Lien vers le commentaire
Partager sur d’autres sites

 

Toutes les labels de AGENT_GUIDERS_SETTINGS en interrogeant le serveur en Websocket.

Il s'avère que la documentation n'est pas complète. Et l'appli WEB fournie n'utilise pas tous les paramètres en effet. Mais je continue de croire que toutes les properties sont bien disponibles sur le serveur, même sans le fronted MAC a source fermée.

 

{
   "defNumberVector":{
      "version":512,
      "device":"Guider Agent",
      "name":"AGENT_GUIDER_SETTINGS",
      "group":"Agent",
      "label":"Settings",
      "perm":"rw",
      "state":"Ok",
      "items":[
         {
            "name":"EXPOSURE",
            "label":"Exposure time (s)",
            "min":0,
            "max":120,
            "step":1,
            "format":"%g",
            "target":2,
            "value":2
         },
         {
            "name":"DELAY",
            "label":"Delay time (s)",
            "min":0,
            "max":120,
            "step":1,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"STEP0",
            "label":"Calibration step (s)",
            "min":0.05,
            "max":2,
            "step":0.05,
            "format":"%g",
            "target":2,
            "value":2
         },
         {
            "name":"MAX_BL_STEPS",
            "label":"Max clear backlash steps",
            "min":0,
            "max":50,
            "step":1,
            "format":"%g",
            "target":10,
            "value":10
         },
         {
            "name":"MIN_BL_DRIFT",
            "label":"Min clear backlash drift (px)",
            "min":0,
            "max":25,
            "step":1,
            "format":"%g",
            "target":3,
            "value":3
         },
         {
            "name":"MAX_CALIBRATION_STEPS",
            "label":"Max calibration steps",
            "min":0,
            "max":50,
            "step":1,
            "format":"%g",
            "target":20,
            "value":20
         },
         {
            "name":"MIN_CALIBRATION_DRIFT",
            "label":"Min calibration drift (px)",
            "min":0,
            "max":100,
            "step":5,
            "format":"%g",
            "target":20,
            "value":20
         },
         {
            "name":"ANGLE",
            "label":"Angle (°)",
            "min":-180,
            "max":180,
            "step":1,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"BACKLASH",
            "label":"Dec backlash (px)",
            "min":0,
            "max":100,
            "step":0,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"SPEED_RA",
            "label":"RA speed (px/s)",
            "min":-500,
            "max":500,
            "step":0.1,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"SPEED_DEC",
            "label":"Dec speed (px/s)",
            "min":-500,
            "max":500,
            "step":0.1,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"MIN_ERROR",
            "label":"Min error (px)",
            "min":0,
            "max":5,
            "step":0.1,
            "format":"%g",
            "target":0,
            "value":0
         },
         {
            "name":"MIN_PULSE",
            "label":"Min pulse (s)",
            "min":0,
            "max":1,
            "step":0.01,
            "format":"%g",
            "target":0.02,
            "value":0.02
         },
         {
            "name":"MAX_PULSE",
            "label":"Max pulse (s)",
            "min":0,
            "max":5,
            "step":0.1,
            "format":"%g",
            "target":1,
            "value":1
         },
         {
            "name":"AGGRESSIVITY_RA",
            "label":"RA Proportional aggressivity (%)",
            "min":0,
            "max":500,
            "step":5,
            "format":"%g",
            "target":100,
            "value":100
         },
         {
            "name":"AGGRESSIVITY_DEC",
            "label":"Dec Proportional aggressivity (%)",
            "min":0,
            "max":500,
            "step":5,
            "format":"%g",
            "target":100,
            "value":100
         },
         {
            "name":"I_GAIN_RA",
            "label":"RA Integral gain",
            "min":0,
            "max":10,
            "step":0.05,
            "format":"%g",
            "target":0.5,
            "value":0.5
         },
         {
            "name":"I_GAIN_DEC",
            "label":"Dec Integral gain",
            "min":0,
            "max":10,
            "step":0.05,
            "format":"%g",
            "target":0.5,
            "value":0.5
         },
         {
            "name":"STACK",
            "label":"Integral stack size (frames)",
            "min":1,
            "max":20,
            "step":1,
            "format":"%g",
            "target":1,
            "value":1
         },
         {
            "name":"DITHERING_X",
            "label":"Dithering offset X (px)",
            "min":-15,
            "max":15,
            "step":1,
            "format":"%g",
            "target":-0.5,
            "value":-0.5
         },
         {
            "name":"DITHERING_Y",
            "label":"Dithering offset Y (px)",
            "min":-15,
            "max":15,
            "step":1,
            "format":"%g",
            "target":-0.4990146053,
            "value":-0.4990146053
         },
         {
            "name":"DITHERING_LIMIT",
            "label":"Dithering settling limit (frames)",
            "min":1,
            "max":50,
            "step":1,
            "format":"%g",
            "target":5,
            "value":5
         }
      ]
   }
}
Lien vers le commentaire
Partager sur d’autres sites

il y a 20 minutes, zalta a dit :

outes les labels de AGENT_GUIDERS_SETTINGS en interrogeant le serveur en Websocket.

Il s'avère que la documentation n'est pas complète. Et l'appli WEB fournie n'utilise pas tous les paramètres en effet. Mais je continue de croire que toutes les properties sont bien disponibles sur le serveur, même sans le fronted MAC a source fermée.

 

 

Rho la vache à un moment je vais passer pour un plagieur , ça m'a fait un choc de voir toutes ces belles propriétés décrites exactement comme les propriétés indi en Json ... (j'ose à peine mettre un screenshot à moi, c'est juste effrayant)

Dingue, j'en reviens pas...

ça te dit qu'on se fasse un petit live ouvert sur Discord sur le sujet ? (avec nos VM/RPi chargées à bloc de trucs cool)

 

C'est en tout cas fort intéressant : si je n'arrive pas à goupiller mon bazar je pourrai me rabattre là dessus

Resterait toujours cette question du "front statique" que ma proposition permettrait de régler, au delà des histoires de licences ...

 

 

oh et puis zut :

ici le message qui correspond à la création d'un module (mes agents à moi) pour charger d'autres modules ...

image.png.fac0b64d61ec3eadf3a188e5e4905238.png

 

 

me reste donc juste ceci, en ajoutant ça dans mon code compilé :

image.png.58c2b0c81070c5ee7e744c6269067788.png

 

J'obtiens cette horreur sans modifier mon code html

image.png.10dbfad79990a704e95dfd1b9476d324.png

 

(moche, oui, mais là j'étais obligé)

 

Lien vers le commentaire
Partager sur d’autres sites

24h plus tard @zalta :

Pas loin d'abandonner.

Me reste juste 2 trucs :

la GPL

La maturité d'indigo

 

ça ne pèse plus très lourd vis-à-vis de mes progressions poussives (qui m'apprennent énormément, mais que c'est long... Le temps passe...)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 23 heures, gehelem a dit :

 

 

ça te dit qu'on se fasse un petit live ouvert sur Discord sur le sujet ? (avec nos VM/RPi chargées à bloc de trucs cool)

 

 

Carrément ! Mais je vais pas avoir de dispo avant janvier je pense. Entre les heures supp's, la famille et surtout le fait que j'essaie en priorité d'avoir un système qui marche (stable) pour mes sorties. Entre Kstars par VNC qui rame beaucoup trop, l'A7S est ses drivers de merde, l'usb du pc portable qui bagotte ... je ne tape la tête contre les murs ...

 

 

 

 

Il y a 23 heures, gehelem a dit :

 

oh et puis zut :

ici le message qui correspond à la création d'un module (mes agents à moi) pour charger d'autres modules ...

image.png.fac0b64d61ec3eadf3a188e5e4905238.png

 

 

me reste donc juste ceci, en ajoutant ça dans mon code compilé :

image.png.58c2b0c81070c5ee7e744c6269067788.png

 

J'obtiens cette horreur sans modifier mon code html

image.png.10dbfad79990a704e95dfd1b9476d324.png

 

(moche, oui, mais là j'étais obligé)

 

 

Tu as décidé que les modules pouvaient s'imbriquer les uns dans les autres ?

 

 

il y a une heure, gehelem a dit :

la GPL

La maturité d'indigo

C'est quand même important la licence.

Oui, se reposer sur deux personnes qui ont la clé du projet c'est pas le pied.

 

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, zalta a dit :

Carrément ! Mais je vais pas avoir de dispo avant janvier je pense. Entre les heures supp's, la famille et surtout le fait que j'essaie en priorité d'avoir un système qui marche (stable) pour mes sorties. Entre Kstars par VNC qui rame beaucoup trop, l'A7S est ses drivers de merde, l'usb du pc portable qui bagotte ... je ne tape la tête contre les murs ...

Comme tu veux

Je ferai probablement une visio la semaine prochaine, le sujet est vraiment intéressant 

(Essaie nomachine, c'est propriétaire mais c'est super stable)

 

il y a une heure, zalta a dit :

écidé que les modules pouvaient s'imbriquer les uns dans les autr

Ça c'est mon module maître, celui qui permet de charger les autres.

C'est juste une bribe qui se contente de lister les modules que je trouve

 

Il y a 1 heure, zalta a dit :

quand même important la licence.

Oui, se reposer sur deux personnes qui ont la clé du projet c'est pas le pied.

Tellement bien résumé !!

Je me demande vraiment ce que je vais faire...

Pas facile.

Faudrait au moins que je termine ce que j'ai commencé, mon module de focus en vaudrait la peine (je pense)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 6 heures, Axeldark a dit :

Selon le jour et l'heure, j'essaierai de passer. ^^ 

Avec plaisir !! Jeudi prochain vers 21h

(je confirmerai là-bas)

 

Sinon, je me suis un peu remis de mes émotions :

je vais continuer, juste parce que je prends pas mal de plaisir à jouer avec ce truc.

Et que indigo franchement j'ai un doute : pas de driver eqmod ??? quoi ????

Je rigole, il y a bien un synscan, mais il n'a pas bougé depuis deux ans alors que son équivalent sur indi n'arrête pas de bouger...

ça fixe les idées sur la vivacité  des deux parties

(bon ceci dit, ce driver indigo était peut-être déjà parfait il y a deux ans, c'est possible)

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour ! Je viens de tomber sur ce post et de le relire depuis le début. (peut-être un peu en diagonal)

 

Je suis dans la même quête d'un raspberry sans tête. Donc je suis super hypé par vos travaux.

Mon setup est encore moins sophistiqué que le votre, je focus à la main, avec l'aide du logiciel.

Mais je voulais le guidage et le dithering en continu.

Pour l'alignement et la correction du polar, je pense qu'on peut faire depuis l'ordinateur en début de session, ce n'est pas un soucis.

 

Personnellement je me suis fait un setup Kstar+Ekos sur PC <-> indi server et PHD2 sur rasp sans IHM. Je n'utilise pas l'internal guider de Ekos parce qu'il a l'air de tourner côté PC

(pour PHD2, je lance une fois avec un server X en ssh pour faire la config et par la suite j'utilise un faux frame buffer (Xvfb) pour lancer PHD2 sans IHM et le piloter depuis Ekos)

 

Ca fonctionne mais le soucis c'est les éventuels coupure de réseau et le fait que l'ordi doivent rester allumé pour piloter la séquence. Donc je rêve d'un Ekos en command line qui permettent de tout déléguer à la rasp.

 

https://thenewstack.io/which-programming-languages-use-the-least-electricity/

et je suis d'accord avec vous Python c'est nul si on veut faire quelque chose qui consomme peu de ressources et d'énergie.

 

Je vais me plonger dans votre code voir si je peux aider.

Modifié par Oniros
Lien vers le commentaire
Partager sur d’autres sites

Une solution alternative serait de mettre un écran tactile sur le raspberry pi, comme ça pas besoin d'un autre ordi pour quelque opération que ce soit. Le plus dur est de bricoler un boitier pour fixer le rpi et son radiateur, un disque dur et l'écran. C'est la solution que j'ai choisi.

Lien vers le commentaire
Partager sur d’autres sites

Le 10/12/2021 à 12:05, Oniros a dit :

Je vais me plonger dans votre code voir si je peux aider.

 

Ahah ! merci pour tes retours, n'hésite pas

 

@vinvin l'écran tactile sur le Pi j'ai déjà essayé et ça ne m'a pas convaincu

mais c'est juste un goût personnel, c'est vrai que ça marche très bien

 

Qq screenshot juste sortis du four

image.png.5296ab0123a22bfd3bd4570d92d07375.png

 

Le même coté smartphone

https://cdn.discordapp.com/attachments/772070780980822066/919673824734224504/Screenshot_20211212-203459_Chrome.jpg

 

j'ai pigé 2-3 trucs qui m'aident bien,

mais il me reste quelques bricoles à câbler avant de reprendre les modules fonctionels

- je voudrais pouvoir ouvrir des popup pour modifier les valeurs

- tenir compte des formats spécifiques sur certaines données

- câbler les switchs

 

Bref. ça avance. 🙂

indigo ? hein ? zut j'ai oublié.

Lien vers le commentaire
Partager sur d’autres sites

Je vois que tu exposes tes properties serveur sur INDI Control Panel.

Tu exposes tes properties comme celles d'INDI du coup ? (vachement intéressant)

CAD avec le même protocole et les mêmes "commandes/fonctions", CAD que ton Json est une retranscription du XML de INDI ?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, zalta a dit :

Je vois que tu exposes tes properties serveur sur INDI Control Panel.

Tu exposes tes properties comme celles d'INDI du coup ? (vachement intéressant)

CAD avec le même protocole et les mêmes "commandes/fonctions", CAD que ton Json est une retranscription du XML de INDI ?

 

 

 

Oui, c'est ça tu as tout pigé

Ci-dessous  avec le même protocole je décris et utilise une propriété qui n'a rien à voir directement avec le serveur indi

c'est juste un truc propre au module, mais le front ne voit pas la différence

(finalement le control panel n'est qu'un module comme un autre)

image.png.6a028c1880b05ff35e2f253f6dd143f0.png

 

 

la structure logique des propriétés indi est très intéressante car elle permet de faire beaucoup de choses,

donc autant s'en servir le plus possible !

selon moi il ne leur manque qu'une notion de "grid" pour stocker des listes de valeurs

(et en faire de beaux graphiques, ou des séquences d'imagerie,  etc, etc...)

Il manquerait aussi une extension plus complète de la notion d'image qui est gérée sur indi uniquement via les "blobs"

Si j'ai le courage je regarderai comment on peut transmettre du binaire par les websockets : c'est tellement efficace ce truc,

autant y faire passer les images aussi.

(actuellement je triche un peu en servant une url qui renvoie sur l'image jpeg)

 

là je ne suis pas loin d'avoir bouclé la boucle un peu plus proprement que mes premières itérations, j'espère bientôt pouvoir reprendre mon module de focus.

(et enquiller du module à tout va...)

 

 

Lien vers le commentaire
Partager sur d’autres sites

Cool, j'essayerai (quand le temps me le permettra) de voir si je peux pas commencer à bricoler un frontend alors.

 

Pour les données binaires en json, le "standard" (ce que la plupart des gens font) c'est du base64 (https://fr.wikipedia.org/wiki/Base64 ). Mais ça occasionne de la bande passante et nécéssite un codage/décodage.

Fournir une url qui renvoie sur un jpeg n'est du coup pas forcément une mauvaise idée dans certains cas. D'autant que tu peux-être hybride : si la valeur json commence par "https:" alors on sait que c'est un lien et pas un base64 au niveau du frontend.

D'ailleurs se posera la question pour les formats d'image RAW (CR2, ARW, etc ...), FITS, SER, etc ... choses qu'un navigateur web ne pipe absolument pas. Donc soit le serveur convertira forcément en un format lisible par le navigateur, soit faudra trouver des librairies javascript farfelues pour convertir.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 3 heures, zalta a dit :

Cool, j'essayerai (quand le temps me le permettra) de voir si je peux pas commencer à bricoler un frontend alors.

Alors ça, quand tu veux 🙂

Le front c'est l'endroit où je galère le plus, même si ça commence à ressembler à un truc propre (j'ai bien dit "ressembler" ...)

Il faut que je remette à jour ma petite doc sur le protocole d'échanges, c'est pas bien méchant mais j'ai changé quelques bricoles.

 

Pour les images : merci pour tes informations, je creuserai bientôt j'espère

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines plus tard...

Allez, le petit screenshot du jour en forme de jalon.

vous allez me dire que c'était déjà comme ça il y a un an

certes, mais que en apparence car sous le capot on a beaucoup progressé

 

Tiens d'ailleurs amis joueurs si ça vous chante je peux partager ma petite VM, vous me dites

 

Sélection_697.png

Lien vers le commentaire
Partager sur d’autres sites

Autoguidage ?

allez, c'est parti.

j'ai attaqué la calibration, en multistar évidement.

là en vert ci-dessous c'est le décalage x-y mesuré en pixels par rapport à la première image

on voir que j'ai des valeurs homogènes (en vert) et qq cagades (en rouge)

Le plus enquiquinant c'est de réussir à paramétrer les simulateurs indi pour qu'ils simulent une EP réaliste

je n'y suis pas encore arrivé, il se peut que ça devienne bloquant ...

 

image.png.df0e9cd3af6d63769783c91eb3b38e64.png

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

J'ai revu le format de l'image produite, c'est un peu mieux comme ça :

image.png.5e95e81b88abb1135b3f70093e722411.png

 

... et les tachouilles vertes sont censées être des ellipses qui donnent la déformation des étoiles

Sur une image réelles ça donne ce genre de truc :

 

vraie.jpeg.c34b1969077276352af5dec1e56c7041.jpeg

 

C'est arrivé à ce point là qu'il va falloir ajouter une rubrique "licences et remerciements" quelque part dans mon truc

Pour le moment je me contente d'essayer de reproduire le comportement de ce que je connais sans pomper directement du code

ici, on voit bien que je copie sur ASTAP / Siril, la moindre des choses c'est de le reconnaître 🙂

(merci @vinvin @lock042 @Cissou8 )

 

Là ou je viens de franchir un grand pas de pompage c'est le module suivant :

Assistant Mise en Station

Pour le moment je me contente de mesure l'erreur

La routine est identique à celle d'Ekos : 3 photos espacées de 15°

Là pour ce coup là j'ai vraiment copié/collé du code sur Ekos pour calculer l'erreur de MES.

et c'est allé très vite !

je ne suis pas du tout convaincu que le résultat soit correct, mais en comparant avec Ekos en simulateur j'ai des valeurs pas trop lointaines

Bref, la structure est là, plus qu'à peaufiner

image.png.63349c2530847f81ee47d90cdcc9d7c0.png

 

To be continued

  • Merci / Quelle qualité! 1
Lien vers le commentaire
Partager sur d’autres sites

  • gehelem changed the title to OST - Observatoire sans tête
  • 1 mois plus tard...

Premier test "en vrai" ce soir

on démarre facile, juste le tilt

et bien paf, hop, zou, Rhahahahahahaaaaa ahahahah !!!!!!!

(unités en pixels, faut pas pousser non plus)

image.png.d84c4e3ac16ca04ce77e7d22b4f9d126.png

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.