connexion USB M3>>PC en python sous Linux

Modérateurs: Balajol, monteric, ramses

Messagepar sam67 » Mer Avr 14, 2010 22:06 pm

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 de l’utilisateur
sam67
Newbie
Newbie
 
Messages: 24
Enregistré le: Ven Jan 08, 2010 0:20 am
Localisation: Alsace

Messagepar p_bricoleur » Mer Avr 14, 2010 22:13 pm

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 de l’utilisateur
p_bricoleur
Modérateur
Modérateur
 
Messages: 1671
Enregistré le: Mar Déc 27, 2005 10:37 am
Localisation: Rueil-Malmaison (92)

Messagepar sam67 » Mer Avr 14, 2010 22:29 pm

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 de l’utilisateur
sam67
Newbie
Newbie
 
Messages: 24
Enregistré le: Ven Jan 08, 2010 0:20 am
Localisation: Alsace

Messagepar YvesBr » Mer Avr 14, 2010 22:49 pm

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 de l’utilisateur
YvesBr
Maitre Solaire
Maitre Solaire
 
Messages: 1391
Enregistré le: Lun Mar 20, 2006 23:54 pm
Localisation: Moselle - aéroport 57

Messagepar p_bricoleur » Mer Avr 14, 2010 23:03 pm

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/Programmes//1%20Tutoriaux/Protocole%20Slin%20Slout%20Millenium.pdf

Cordialement,
T.Streiff
Avatar de l’utilisateur
p_bricoleur
Modérateur
Modérateur
 
Messages: 1671
Enregistré le: Mar Déc 27, 2005 10:37 am
Localisation: Rueil-Malmaison (92)

Messagepar sam67 » Jeu Avr 15, 2010 18:46 pm

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 de l’utilisateur
sam67
Newbie
Newbie
 
Messages: 24
Enregistré le: Ven Jan 08, 2010 0:20 am
Localisation: Alsace

Messagepar p_bricoleur » Ven Avr 16, 2010 20:16 pm

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 de l’utilisateur
p_bricoleur
Modérateur
Modérateur
 
Messages: 1671
Enregistré le: Mar Déc 27, 2005 10:37 am
Localisation: Rueil-Malmaison (92)

Messagepar sam67 » Dim Avr 18, 2010 12:32 pm

[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 de l’utilisateur
sam67
Newbie
Newbie
 
Messages: 24
Enregistré le: Ven Jan 08, 2010 0:20 am
Localisation: Alsace

Messagepar YvesBr » Dim Avr 18, 2010 15:00 pm

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 de l’utilisateur
YvesBr
Maitre Solaire
Maitre Solaire
 
Messages: 1391
Enregistré le: Lun Mar 20, 2006 23:54 pm
Localisation: Moselle - aéroport 57

Messagepar sam67 » Dim Avr 18, 2010 15:40 pm

[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.
Avatar de l’utilisateur
sam67
Newbie
Newbie
 
Messages: 24
Enregistré le: Ven Jan 08, 2010 0:20 am
Localisation: Alsace

Messagepar doudou18 » Ven Nov 22, 2013 15:25 pm

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

doudou18
Newbie
Newbie
 
Messages: 1
Enregistré le: Mer Nov 13, 2013 18:19 pm
Localisation: visé

Messagepar erton92 » Mer Oct 22, 2014 16:37 pm

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.

erton92
Newbie
Newbie
 
Messages: 12
Enregistré le: Lun Juil 20, 2009 15:20 pm
Localisation: montbard 21500


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

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité