connexion USB M3>>PC en python sous Linux

Modérateurs : ramses, Balajol, monteric, j2c

Répondre
Avatar du membre
sam67
Newbie
Newbie
Messages : 24
Enregistré le : ven. janv. 08, 2010 0:20 am
Localisation : Alsace

Message par sam67 »

Bonsoir,

Je suis l'heureux possesseur d'un M3 depuis 1 semaine (merci Pasquall et le groupement) et je cherche à utiliser les blocs SL IN/SL OUT dans un script python.

La tâche est ardue et je me demandais si certains avaient déjà fait des essais dans ce sens ?

Pour l'instant (après quelques heures) je réussi à détecter le câble et à récupérer des informations génériques. Mais la route est encore longue (est-elle seulement possible ?) avant de pouvoir récupérer des infos du M3.

Au branchement du câble, le noyau (2.6.31) de mon Ubuntu détecte un dispositif SGS Thomson Microelectronics ST Micro Serial Bridge (idVendor: 1155 (0x483) idProduct: 29296 (0x7270))

Les infos lues en console pour ce dispositif sont :

Code : Tout sélectionner

Configuration: 1
    Total length: 67
    selfPowered: 0
    remoteWakeup: 0
    maxPower: 200
    Interface: 0
    Alternate Setting: 0
      Interface class: 2
      Interface sub class: 2
      Interface protocol: 1
      Endpoint: 0x81L
        Type: 3
        Max packet size: 8
        Interval: 255
    Interface: 1
    Alternate Setting: 0
      Interface class: 10
      Interface sub class: 0
      Interface protocol: 0
      Endpoint: 0x82L
        Type: 2
        Max packet size: 64
        Interval: 0
      Endpoint: 0x2L
        Type: 2
        Max packet size: 64
        Interval: 0
avec ce script

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import usb

#  Câble USB M3
#
#  SGS Thomson Microelectronics ST Micro Serial Bridge
#  idVendor:  1155   (0x483)
#  idProduct: 29296  (0x7270)

class USBDev:
    def __init__(self, idVendor, idProduct):
        found = False
        self.enable = False
        busses = usb.busses()
        for bus in busses:
            for device in bus.devices:
                if ((device.idVendor == idVendor)
                    and (device.idProduct == idProduct)):
                    self.handler = device.open()
                    self.device = device
                    self.enable = True
                    found = True
                    break
            if found == True:
                break


if __name__ =="__main__":
    m3 = USBDev(1155, 29296)
    
    if m3.enable:
        print "demarrage M3Spy"
#        timeout = 2000
#        ep_bulk_out=0x02
#        buff = '\x01\x02\x03\x04'
#        m3.handler.claimInterface(0)
#        result = m3.handler.bulkWrite(ep_bulk_out, buff, timeout)

        for config in m3.device.configurations:
            print "  Configuration:", config.value
            print "    Total length:", config.totalLength 
            print "    selfPowered:", config.selfPowered
            print "    remoteWakeup:", config.remoteWakeup
            print "    maxPower:", config.maxPower

            for intf in config.interfaces:
                print "    Interface:",intf[0].interfaceNumber
                for alt in intf:
                    print "    Alternate Setting:",alt.alternateSetting
                    print "      Interface class:",alt.interfaceClass
                    print "      Interface sub class:",alt.interfaceSubClass
                    print "      Interface protocol:",alt.interfaceProtocol
                    for ep in alt.endpoints:
                        print "      Endpoint:",hex(ep.address)
                        print "        Type:",ep.type
                        print "        Max packet size:",ep.maxPacketSize
                        print "        Interval:",ep.interval

Quelqu'un est-il déjà aller plus loin ?

-sam67
Modifié en dernier par sam67 le mer. avr. 14, 2010 22:06 pm, modifié 1 fois.

Avatar du membre
p_bricoleur
Modérateur
Modérateur
Messages : 1671
Enregistré le : mar. déc. 27, 2005 10:37 am
Localisation : Rueil-Malmaison (92)
Contact :

Message par p_bricoleur »

Bonsoir,

Je lis/écris les SLin/SLout en Python mais c'est sous Windows et je passe par le module "serial" (qui marche aussi sous Linux je pense).

C'est quoi le module "usb" que tu utilises ?

Cordialement,
T.Streiff

Avatar du membre
sam67
Newbie
Newbie
Messages : 24
Enregistré le : ven. janv. 08, 2010 0:20 am
Localisation : Alsace

Message par sam67 »

Bonsoir p_bricoleur,


[quote="p_bricoleur"]Bonsoir,

Je lis/écris les SLin/SLout en Python mais c'est sous Windows et je passe par le module "serial" (qui marche aussi sous Linux je pense).[/quote]

Cool, j'avais pas pensé à ce module. Oui il fonctionne sur linux (si on parle bien du même) je l'utilise pour une COM Modbus rudimentaire série. Tu aurais un exemple à fournir ?

[referp=54901;quote="p_bricoleur"]
C'est quoi le module "usb" que tu utilises ?[/quote]
C'est le module "python-usb" dont les sources se trouvent ici :
>> http://sourceforge.net/projects/pyusb/

Cordialement,
-sam67
Modifié en dernier par sam67 le mer. avr. 14, 2010 22:29 pm, modifié 1 fois.

Avatar du membre
YvesBr
Maitre Solaire
Maitre Solaire
Messages : 1408
Enregistré le : lun. mars 20, 2006 23:54 pm
Localisation : Moselle - aéroport 57

Message par YvesBr »

Bonsoir Sam,
Voici une piste, j'avais planché rude pour trouver çà.
Le ubuntu que j'ai (Mandriva aussi) charge par défaut un driver de modem ACM. Rien à voir.
Manuellement j'ai noté ces comandes :

Code : Tout sélectionner

sudo rmmod cdc_acm
sudo  modprobe usbserial vendor=0x0483 product=0x7270 
A l'exécution de ces commandes, "dmesg" donne ces informations :

Code : Tout sélectionner

[  506.997603] usbcore: deregistering interface driver cdc_acm
[  522.744078] usbcore: registered new interface driver usbserial
[  522.747037] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
[  522.747969] usbserial_generic 4-2:1.0: generic converter detected
[  522.747976] usbserial_generic 4-2:1.0: Generic device with no bulk out, not allowed.
[  522.748432] usbserial_generic: probe of 4-2:1.0 failed with error -5
[  522.748624] usbserial_generic 4-2:1.1: generic converter detected
[  522.750407] usb 4-2: generic converter now attached to ttyUSB0
[  522.750699] usbcore: registered new interface driver usbserial_generic
[  522.750706] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial Driver core
L'interface est alors accessible par /dev/ttyUSB0 comme une interface série.
Je pense que çà devrait t'aider, j'avais eu beaucoup de mal à trouver cette info ici.
Yves
Par contre, je n'ai pas trouvé la méthode pour que cela soit fait automatiquement. Cà devrait se passer au niveau d'UDEV, mais je ne maîtrise pas suffisamment.
Yves

Avatar du membre
p_bricoleur
Modérateur
Modérateur
Messages : 1671
Enregistré le : mar. déc. 27, 2005 10:37 am
Localisation : Rueil-Malmaison (92)
Contact :

Message par p_bricoleur »

Sam67,

Je t'ai envoyé en MP mon programme Python de lecture/écriture M3 basé sur "serial".
Même si "serial" ne marche pas, tu auras déjà le codage des messages vers le M3 et l'analyse de ses réponses.

C'est pas difficile à faire mais la doc Crouzet est faible voire fausse.
Donc il est difficile de comprendre pourquoi ça ne marche pas.

Voir là une synthèse des imprécisions/erreurs :
http://www.apper-solaire.org/Pages/Prog ... lenium.pdf

Cordialement,
T.Streiff

Avatar du membre
sam67
Newbie
Newbie
Messages : 24
Enregistré le : ven. janv. 08, 2010 0:20 am
Localisation : Alsace

Message par sam67 »

Bonsoir p_bricoleur et YvesBr,


Bon ben 1 grand MERCI à tous les 2.

Je pensais que j'allais passer pas mal de temps pour récupérer les infos de mon M3 (qui sent encore le neuf) sur mon serveur et voilatipa que c'est réglé en 2 soirées :cool:

Le script utilisant le module "serial" de p_bricoleur fonctionne out of the box sous linux avec /dev/ttyUSB0 que l'on obtient effectivement en utilisant les commandes mentionnées par YvesBr.

Maintenant reste à automatiser les commandes et à mettre un peu de polish :-D

Encore merci.
-Sam67

Avatar du membre
p_bricoleur
Modérateur
Modérateur
Messages : 1671
Enregistré le : mar. déc. 27, 2005 10:37 am
Localisation : Rueil-Malmaison (92)
Contact :

Message par p_bricoleur »

La bonne nouvelle, c'est que la surveillance des installations solaires n'est dorénavant plus réservée à ceux qui sont sous Windows (merci Python).

Avatar du membre
sam67
Newbie
Newbie
Messages : 24
Enregistré le : ven. janv. 08, 2010 0:20 am
Localisation : Alsace

Message par sam67 »

[quote="YvesBr"]
Par contre, je n'ai pas trouvé la méthode pour que cela soit fait automatiquement. Cà devrait se passer au niveau d'UDEV, mais je ne maîtrise pas suffisamment.
Yves[/quote]

Après quelques recherches et quelques essais j'obtiens cette règle *udev* qui fonctionne chez moi.

Créér un fichier m3.rules

Code : Tout sélectionner

# Crouzet Millenium 3 automation device is to be handled by *usbserial* not *cdc_acm* (2010 Samuel Buffet)

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="7270", RUN+="/sbin/rmmod cdc_acm", RUN+="/sbin/modprobe usbserial vendor=0x0483 product=0x7270"
qu'il faut copier dans /etc/udev/rules.d

ensuite on reboot ou on recharge les règles udev

Code : Tout sélectionner

sudo udevadm control --reload-rules
Voilà, maintenant lors d'une connexion USB vers le M3 on utilise le bon driver et l'interface série peut s'initialiser avec "/dev/ttyUSB0"

-Sam67

Avatar du membre
YvesBr
Maitre Solaire
Maitre Solaire
Messages : 1408
Enregistré le : lun. mars 20, 2006 23:54 pm
Localisation : Moselle - aéroport 57

Message par YvesBr »

Merci sam, je testerai à l'occasion.
Le déchargement du module est-il indispensable? Je conçois que de cette manière, celà fonctionne, mais ce n'est pas très "élégant".
Yves

Avatar du membre
sam67
Newbie
Newbie
Messages : 24
Enregistré le : ven. janv. 08, 2010 0:20 am
Localisation : Alsace

Message par sam67 »

[quote="YvesBr"]Merci sam, je testerai à l'occasion.
Le déchargement du module est-il indispensable? Je conçois que de cette manière, celà fonctionne, mais ce n'est pas très "élégant".
Yves[/quote]

Ben, l'élégance serait qu'on n'ai rien à faire du tout :roll:

Mais j'ai bien peur qu'il faille "vivre" avec ce petit ajout ou un autre car un m3.conf dans /etc/modprobe.d/ devait fonctionner aussi mais in fine c'est un ajout aussi :cry:

Sinon j'avais commencé par mettre des *exec* dans mon script mais ça pour le coup c'était vraiment moche.


-Sam67

PS: sinon la COM est très stable pas une erreur ces dernières 24h.
Modifié en dernier par sam67 le sam. avr. 24, 2010 21:50 pm, modifié 4 fois.

doudou18
Newbie
Newbie
Messages : 1
Enregistré le : mer. nov. 13, 2013 18:19 pm
Localisation : visé

Message par doudou18 »

Bonjours a tous ,

je vois que le sujet n est pas très récent c'est pour cela que je vient au nouvelle je voulais vous demander pensé vous qu il est possible d utiliser le câble usb pour M3 avec un Rpi et donc sous raspbian

En espérant de vos nouvelle

bien a vous
David

erton92
Newbie
Newbie
Messages : 12
Enregistré le : lun. juil. 20, 2009 15:20 pm
Localisation : montbard 21500

Message par erton92 »

Bonjour,
Je viens de remplacer ma supervision M3&PC par un Raspberry mais pas moyen de lire quoi que ce soir depuis le Raspberry.
Pouvez vous expliquer comment faire dialoguer le Raspberry avec le M3 svp ?

Cordialement.

Répondre

Retourner vers « Crouzet M2-M3, autres API et péripheriques »