mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Sat Mar 03, 2018 10:14 am

Bonjour dannjperron,

La compilation est réussie
pour l'installation du programme c'est fait par copie dans le dossier par:

Code: Select all

    sudo cp eeprog /usr/local/bin
le test en console ne comprend pas les instructions:

Code: Select all

    Bus:
    Opreration:
    Reading etc
on verra plus tard
#--------------------------------------------#
Pour en revenir à mon petit programme afin d'appliquer mes nouvelles conaissances !!!
Voilà pour la structure du programme appelant:
j'ai ajouté des commentaires pour simplifier la lecture

Code: Select all

  
# toutes les 10 minutes
# enregistrement de l'heure et minutes en memoire eerom
def store_mesures():
    adres_eerom=date.hour*6+date.minute//10 # adresse en decimal debut de ligne de 16 octets
    y=0	                                                        # pointeur du byte a ecrire
    mem_address=adres_eerom+y # byte  0 
    print(mem_address,date.hour)  # pour verif
    type(date.hour)                     # pour verif
    eerom.writeByte(mem_address,date.hour)     # byte 0x00 cette ligne fonctionne dans eerom-writeByte
    y+=1
    mem_address=adres_eerom+y # byte 1
    print(mem_address,date.minute)  # pour verif
    type(date.minute)                     # pour verif
    eerom.writeByte(mem_address,date.minute) # byte 0x01 # ceiie là non ! c'est la même structure'
    y+=1        # increment de byte pour la donnée suivante etc
....
L'identation était bonne, voilà la copie ,mais j'ai mis des quotes au lieu de code ce qui a supprimé l'identation. Le programme appellé que tu reconaitra

Code: Select all

class i2c_eerom2:

  def __init__(self, i2c_bus,i2c_address):
     self.i2c_address= i2c_address
     self.bus = smbus.SMBus(i2c_bus)

  def  writeByte(self, mem_address, byteValue): # adresse et valeur a ecrire
    self.bus.write_i2c_block_data(self.i2c_address,\
                                   (mem_address >> 8) & 0xff,\
                                  [mem_address & 0xff ,\
                                   byteValue])
    print((mem_address >>8)&0xff,mem_address &0xff) # pour vérif
    print(byteValue) # pour vérif
La copie d'écran console avec le descriptif des 7 lignes de print pour vérif

Code: Select all

                                           #  commentaires  de l'essai à 9h 20 mn 
20180303.txt                   #(nom de fichier pour la sauvegarde journalière pour plus tard)  
CTRL C pour quitter :      #(pour sortir du while True non décrit ici durant les éssais)
56 9                                   #( mem address ,date.hour transférés a i2ceerom2)     
0 56                                   #(print((mem_address >>8)&0xff,mem_address &0xff) dans i2c_eerom2)
9                                        #(byte_Value ) dans i2c_eerom2
57 20                                #(mem address ,date.minute) dans i2c_eerom2 ce qui ne marche pas
Traceback (most recent call last):
  File "Viadrus.py", line 138, in <module>
    store_mesures() # declenchement des mesures toute les 10 mn et enregistrement en eeprom
  File "Viadrus.py", line 110, in store_mesures
    eerom.writeByte(mem_address,date.minute) # byte 0x01
  File "/home/pi/Dossier_raspi/i2c_eerom2.py", line 15, in writeByte
    byteValue])
OSError: [Errno 121] Remote I/O error   
Pourquoi en utilisant la même boucle dans i2c_eerom2 avec les même type de variables, une fois ça marche et pas l'autre. C'est déroutant!
Aurais tu une idée
Amicalement

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Sat Mar 03, 2018 11:48 am

Il faut mettre un délai après un writeByte si tu écris ou lis tout de suite la puce. Lors d'une d'écriture il faut 10 ms pour compléter la commande.

Si tu regardes la commande writeBlock il y a une ligne de délais.

Le script qui écrit les valeurs de Pi a aussi l'utilisation de la fonction writeByte avec le délais de 10 ms. Il est en remarque .


Je ne sais toujours pas ce qu'est la variable date. je sais que ce n'est pas un object datetime ou time !

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Sat Mar 03, 2018 2:08 pm

si date viens de datetime

Code: Select all

	date=datetime.datetime.now()

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Sat Mar 03, 2018 2:12 pm

Voila le déclenchement de la fonction store_mesures

Code: Select all

while True:     
	date=datetime.datetime.now()
	minutes=date.minute
	if minutes==minutes_old:
		minutes_old+=10       # minute_old empeche de repeter la boucle 
		if minutes_old==60:
			minutes_old=0
		store_mesures() 

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Sat Mar 03, 2018 3:16 pm

As-tu ajouté le delais entre les writebyte(). C'est ton problème ! Il faut 10ms de délais

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Sat Mar 03, 2018 3:23 pm

je viens d'appliquer ta suggestion des 10 ms pour le write.

ET c'est ça !!!

J'avais bêtement copier les fonctions de i2c-eerom.py et dans writeByte il n'y avait pas de pause.

Cette pause est dans writeBlock que je n'ai pas détaillé car je butais sur writeByte.

C'est très sympathique de ta part de me détailler cette partie I2c car j'avoue je ne m'en sortais pas du tout.

J'ai une question qui va venir car je ne la sent pas.
Le temps de faire le tour de mon pb et je reviendrai

Amicalement

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Sat Mar 03, 2018 5:51 pm

Pour ta fonction store_mesures()

il serait beaucoup plus simple d'utiliser writeBlock

def store_mesures():
adres_eerom=date.hour*6+date.minute//10 # adresse en decimal debut de ligne de 16 octets
eerom.writeBlock(adres_eerom, [ date.hour , date.minute ])

J'ai aucune idée de la dimension de ta structure mais écrire la structure sous une commande sera beaucoup plus rapide puisque writeBlock gère la pagination pour l'écriture donc il y aura moins de délais et store_mesures() sera plus simple.

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Sat Mar 03, 2018 6:17 pm

Oui certainement pour écrire l'heure et les minutes de l'évènement.
D'ailleurs la suite va te donner raison car je vais devoir enregistrer des valeurs int a quatre digits.
Je vais regarder çà de plus près.
Amicalement.

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Mon Mar 05, 2018 1:42 pm

Bonjour,

Tout va bien, la mémoire i2c est bien écrite avec writeBlock()

Elle est également lue avec readBlock().

il ne me reste qu'un problème à la fin de readBlock() c'est

Code: Select all

return value
Dans raedBlock() value est bien et un print m'indique que la lecture s'est bien passée.
Cette liste est vide dans le programme appelant ci dessous:

Code: Select all

global value

# toutes les 10 minutes
# enregistrement en memoire eerom
def store_mesures():
    adres_eerom=date.hour*6+date.minute//10 
    mem_address=0x0000+adres_eerom
    print(hex(mem_address),'a',str(date.hour),'h',str(date.minute))
    blocValeur=[date.hour,date.minute]
    
    # boucle de lecture des temperatures, affichage et enregistrement en i2c ######
    for (i, sonde) in enumerate(sondes):
        lignes = lire_fichier(sonde)
        while lignes[0].strip()[-3:] != 'YES': # lit les 3 derniers char de la ligne 0 et recommence si pas YES
            sleep(0.2)
            lignes = lire_fichier(sonde)
        temp_raw = lignes[1].split("=")[1] # quand on a eu YES, on lit la temp apres le signe = sur la ligne 1
        sonde_value[i] = round(int(temp_raw) / 1000.0, 2) # le 2 arrondi a 2 chiffres apres la virgule
        temp_value=round(int(temp_raw)/100) # temperature *10 sans decimale pour enregistrement
        blocValeur.append(temp_value)
        print (fonction[i],'=' ,sonde_value[i],' °C') # affichage a l'ecran
        #eerom.writeBlock(mem_address,temp_value,0x2C) # enregistrement en eerom des 2 octets
        i+=1
    blocValeur.append(';') # fin de ligne
    eerom.writeBlock(mem_address,blocValeur) # enregistrement en eeprom
    # fin des mesures des températures 
    # verification
    print(fichier_jour)
    eerom.readBlock(mem_address,5)
    valeur=str(value)	# la value n'est pas définie malgrè le return value de i2c_eerom2
    print(valeur)		# la la liste valeur st vide et pour cause!
    mon_fichier=open(fichier_jour,'a')
    mon_fichier.write(str(value))
    mon_fichier.close()
# fin de store_mesures

print("CTRL C pour quitter : ")

while True:     # environ 15 boucles programme par seconde  voir conditions d'arret 
	date=datetime.datetime.now()
	minutes=date.minute
	if minutes==minutes_old:
		minutes_old+=10       # 10 minute_old empeche de repeter la boucle avant que la minute ne change
		if minutes_old==60:  # 60
			minutes_old=0
		store_mesures() # declenchement des mesures toute les 10 mn et enregistrement en eeprom
# fin de la boucle while True 
un petit rapel de la class i2c_eerom2.py

Code: Select all


import time
import smbus

global value

class i2c_eerom2:

  def __init__(self, i2c_bus,i2c_address):
     self.i2c_address= i2c_address
     self.bus = smbus.SMBus(i2c_bus)

  def  writeByte(self, mem_address, byteValue): # adresse et valeur a ecrire
     self.bus.write_i2c_block_data(self.i2c_address,\
                                   (mem_address >> 8) & 0xff,\
                                   [mem_address & 0xff ,\
                                   byteValue])
     time.sleep(0.01) # pause de 10 ms pour write


  def readBlock(self, mem_address, count):
    value = []
    #ajustons la premiere adresse
    self.bus.write_i2c_block_data(self.i2c_address,\
                                  mem_address >> 8,\
                                  [mem_address  & 0xff])
    #ok lecture des octets
    for i in range(count):
       value.append(self.bus.read_byte(self.i2c_address))
    print('EEprom',value)	# la la liste est complète
    return value

  def readByte(self, mem_address):
    self.bus.write_i2c_block_data(self.i2c_address,\eerom2
                                  mem_address >> 8,\
                                  [mem_address & 0xff])
    return self.bus.read_byte(self.i2c_address)


  def writeBlock(self, mem_address, blocValeur):
     # combien d'octet à transferer
     byteSize= len(blocValeur)
     blocList=blocValeur
     # est-ce un bytearray ou une liste
     if isinstance(blocValeur,list):
        #ok c'est une liste
        pass
     elif isinstance(blocValeur,bytearray):
        #alors créons un liste
        blocList = list(blocValeur)
     elif isinstance(blocValeur, bytes):
        blocList = list(blocValeur)
     else:
        raise IOError("Le data n'est pas une liste,un bytearray ou des bytes")
     #ok maintenant verifions l'offset pour la page
     #le système SMBus ne permet que 32 bytes à la fois mais puisque
     #nous utilisons un octet pour l'adresse basse il ne reste que 31 octets
     #La pagination de eerom at24C32 est de 32 octets alors le meilleur multiple
     #est 16   donc la pagination sera de 16 octets
     pagination = 16
     #nombre d'octet a transférer
     octetTotal = len(blocList)
     #voici le bloc de transfer
     blocIndex=0;
     while octetTotal > 0 :
        #alignement avec la pagination
        pageOffset = mem_address % pagination
        reste = pagination - pageOffset
        if reste > octetTotal:
           reste = octetTotal

        #ok c'est la commande i2c pour ecrire la page sur le eerom
        self.bus.write_i2c_block_data(self.i2c_address,\
                                  mem_address >> 8,\
                                  [mem_address & 0xff]+blocList[blocIndex:blocIndex+reste])
        time.sleep(0.01) #important de laisser le write se compléter pause de 10 ms
        blocIndex += reste
        mem_address += reste
        octetTotal -= reste
Je ne vois pas pourquoi la liste value est toujours vide

Amicalement

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Mon Mar 05, 2018 2:56 pm

Code: Select all

    print(fichier_jour)
    eerom.readBlock(mem_address,5)
    valeur=str(value)	# la value n'est pas définie malgrè le return value de i2c_eerom2
la variable value est locale ce qui veut dire qu'elle est seulement accessible à l'intérieur de la fonction readBlock()!
readBlock() retourne une liste et la variable value n'existe plus à l'extérieur de la fonction.

Code: Select all

    print(fichier_jour)
    liste1=eerom.readBlock(mem_address,5)
    print(liste1)

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Mon Mar 05, 2018 7:30 pm

Bonsoir,

Je croyais qu'il suffisait de la déclarer "global" en entête du programme appelant pour la lire à la sortie de la "class" grâce au "return" de cette dernière.

Effectivement en appelant

Code: Select all

    liste1=eerom.readBlock(mem_address,5)
    valeur=str(liste1)
    print(valeur)
    mon_fichier=open(fichier_jour,'a')
    mon_fichier.write(valeur)
    mon_fichier.close()
ça fonctionne.

Mais, et oui encore un mais !, je découvre que dans mon_fichier la ligne de valeur conserve ses crochets

Code: Select all

[20, 10, 234, 234, 235]
Pour l'utilisation de ce fichier dans un tableur il est impératif de supprimer ces crochets.
Il ne reste plus que ça dans le principe de cette partie du programme.
Le reste nombre et types de capteurs, l'horloge et alarmes, etc.
C'est pas encore fini mais ça approche.

Amicalement

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Mon Mar 05, 2018 9:26 pm

Code: Select all

    liste1=eerom.readBlock(mem_address,5)
    valeur=str(liste1)
    for  r in ['[',']']:
       valeur = valeur.replace(r,'')
    print(valeur)
    mon_fichier=open(fichier_jour,'a')
    mon_fichier.write(valeur + '\n')
    mon_fichier.close()

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Tue Mar 06, 2018 8:21 am

Bonjour,

Et oui c'est tout simple quand on le lit.

Pour le retour à la ligne j'avais déjà vu cela.
mais pour

Code: Select all

    for  r in ['[',']']:
       valeur = valeur.replace(r,'')
ça non!

Il m"est possible de les éliminer par un "recherche et remplace" dans le tableur, mais c'est beaucoup plus élégant de le faire avant de l'écrire dans le fichier.

A bientôt,

Amicalement

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Tue Mar 06, 2018 8:46 am

Les premiers résultats:

C'est PARFAIT !!

Merci encore
Amicalement

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Thu Mar 08, 2018 8:23 pm

Bonsoir,

Après pas mal d'essais et multiples tutos me parlant de l'horloge DS3231, je me vois dans l'obligation de revenir vers toi.

En dernier après application de ces instructions de ce site:
viewtopic.php?f=63&t=161133

modif de config.txt et de hwclock-set à l'aide de nano
Il m'est toujours impossible de mettre à l'heure système l'horloge.
[email protected]:~ $ sudo hwclock -r
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
Aurais tu une solution pour le faire directement dans la class i2c_eerom de Pi4096 en ajoutant une fonction du genre writeHeure():

J'avoue que je sèche car mes essais ne marchent pas.

Merci d'avance
Amicalement.

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Thu Mar 08, 2018 9:14 pm

J'ai le ds3231 sur une de mes machines mais que je ne peut atteindre sur le net . (Il n'est pas allumé)


La page web que tu indiques est exactement ce que tu dois faire. As-tu "rebooté" ton Pi ?


Aussi pour avoir accès au registre du RTC en python il faut absolument enlever le module mais je ne pense pas que tu utilises directement les registres.

Voici ce que j'ai fait avec une horloge RTC. Ce n'est pas le même modèle mais le ds3231 va fonctionner aussi parce qu'il a une broche pour l'interruption.

viewtopic.php?f=65&t=166853&p=1075093&h ... e#p1074313

Je vais vérifier ce soir pour le DS3231, (eastern time).

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Fri Mar 09, 2018 1:23 am

Ok J'ai vérifié la commande que j'ai dans /boot/config.txt pour le ds3231 c'est

Code: Select all

dtoverlay=i2c-rtc,ds1307
et non "ds3231"

La modification de /lib/udev/hwclock-set est la bonne!

je reboot mon pi et tout est ok

Code: Select all

[email protected]:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
[email protected]:~ $
L'adresse 0x68 est utilisé par le système et le pilote pour le RTC est dans le noyau!

Code: Select all

[email protected]:~ $ lsmod
Module                  Size  Used by
fuse                   99603  3
rfcomm                 37723  6
cmac                    3239  1
bnep                   12051  2
hci_uart               20020  1
btbcm                   7916  1 hci_uart
bluetooth             365780  29 hci_uart,bnep,btbcm,rfcomm
rtc_ds1307             13908  0
hwmon                  10552  1 rtc_ds1307

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Fri Mar 09, 2018 8:12 am

Bonjour,
Je vois que certains travaillent la nuit !
C’est sympa de me communiquer la réponse à mon lever.
Oui, j’avais bien rebooté.
Après modification du fichier config.txt, voila ce j’obtiens :
https://image.noelshack.com/fichiers/20 ... -scrot.png

Une différence à l’adresse 0x68 je n’ai pas ’UU’
A quoi corresponds cette différence ?

Et maintenant un petit test :
[email protected]:~ $ sudo hwclock -r
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
[email protected]:~ $
C’est agaçant hein !
Amicalement.
Last edited by mandrin on Fri Mar 09, 2018 9:00 am, edited 2 times in total.

totoharibo
Posts: 3852
Joined: Thu Jan 24, 2013 8:43 am

Re: liaison i2c

Fri Mar 09, 2018 8:34 am

UU : (cf.man i2cdetect)
· "UU". Probing was skipped, because this address is currently in use
by a driver. This strongly suggests that there is a chip at this
address.
-> il a détecté quelque chose à cette adresse.

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Fri Mar 09, 2018 8:57 am

Effectivement, c'est l'adresse de l'horloge.
Mais cette dernière ne se laisse pas mettre à l'heure par la fonction hwclock. Et c'est bien çà mon problème.
Ci-dessous l'image du texte informe des instructions 'i2cdetect' et 'lsmod':
https://image.noelshack.com/fichiers/2 ... -scrot.png
Comme ça c'est plus clair.
Amicalement

totoharibo
Posts: 3852
Joined: Thu Jan 24, 2013 8:43 am

Re: liaison i2c

Fri Mar 09, 2018 9:22 am

hwclock: Use the --debug option to see the details of our search for an access method.

que donne --debug ?

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Fri Mar 09, 2018 10:21 am

Pas très encourageant.

Code: Select all

[email protected]:~ $ hwclock -D
hwclock from util-linux 2.29.2
hwclock: cannot open /dev/rtc: Aucun fichier ou dossier de ce type
No usable clock interface found.
hwclock: Cannot access the Hardware Clock via any known method.
Il est perdu!

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Fri Mar 09, 2018 10:57 am

Une information:
https://cdn-learn.adafruit.com/download ... rry-pi.pdf
A la page 12 je n'ai pas 'UU'
Disable the "fake hwclock" which interferes with the 'real' hwclock
Je n'ai pas désactvé "fake hwclock"

danjperron
Posts: 2856
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: liaison i2c

Fri Mar 09, 2018 12:58 pm

Disable the "fake hwclock" which interferes with the 'real' hwclock
Je n'ai pas désactvé "fake hwclock"
Et bien il le faut mais cela n'est pas ton problème.

Peux-tu afficher ton /boot/config.txt. Es-tu avec debian? Quelle version ?
Est-ce vraiment un DS3231. le lien s.v.p.

En passant je suis au Québec alors j'ai 6 heures de décalage avec toi! Et non je ne travaille pas la nuit ;-)

mandrin
Posts: 65
Joined: Tue Feb 06, 2018 4:49 pm

Re: liaison i2c

Fri Mar 09, 2018 1:51 pm

la version de Dabian est : 9.3

*****config.txt******
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=16

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# NOOBS Auto-generated Settings:
hdmi_force_hotplug=1
dtoverlay=w1-gpio,gpiopin=25
dtoverlay=i2c-rtc, ds1307
L'horloge est bien une DS3231CN et le circuit est de SBX ZS-042 l'origine je n'en sait rien car c'est passé par les méandres de la distribution. C'est peut être un clown ? invérifiable, mais le composants sont bien ceux annoncés. Le lien n'est que celui d'un distributeur qui ne me dira pas l'origine du produit que je pense viens de chine. Il est bien conforme a la photo que j'ai citée en tête de ce post.

Je disait en passant que tu travaillait durant MA nuit et s'est très efficace.

Amicalement

Return to “Français”

Who is online

Users browsing this forum: No registered users and 4 guests