Commande PAC Atlantic via port série

Au programme la régulation de température, la climatisation, les chauffe-eau...

Modérateur : Francois

Répondre
tirailleur_dd
Messages : 5
Enregistré le : ven. 6 janv. 2017 13:26

Commande PAC Atlantic via port série

Message par tirailleur_dd » lun. 7 janv. 2019 09:31

Bonjour à tous!
Je me permet de vous solliciter car je souhaiterai, comme décris dans le magasine Hackable n°19, envoyer et recevoir des infos à ma pompe à chaleur.
En effet un de leur article concerne ce projet, mais reste flou pour un débutant comme moi sur certains aspect. J'ai donc commandé les composants et connecté tout ça à mon pi zéro w et écris le premier script de l'article pour simplement lire les trames reçues par le port série. Hors je reçois l'erreur suivante :

Traceback (most recent call last):
File "atlantic.py", line 18, in <module>
byteVal = 255 - ord(data[idx]) # Inversion des bits
TypeError: ord() expected string of length 1, but int found

Si quelqu'un pouvait éclairer ma lanterne, il semble que la donnée reçu ne soit pas au bon format mais je ne comprends pas pourquoi... :(
Edit: Avec la commande tail -f /dev/serial0 j'ai comme retour des caractères su style : #y???????????? toutes les 3-4 secondes. J'ai revérifié mon montage électronique, tout semble OK

Bud Spencer
Raspinaute
Messages : 473
Enregistré le : lun. 15 août 2016 21:38

Re: Commande PAC Atlantic via port série

Message par Bud Spencer » lun. 7 janv. 2019 13:51

Modifie ta ligne

byteVal = 255 - ord(data[idx]) # Inversion des bits

en

byteVal = 255 - ord(data.decode('utf-8')[idx]) # Inversion des bits

...
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

tirailleur_dd
Messages : 5
Enregistré le : ven. 6 janv. 2017 13:26

Re: Commande PAC Atlantic via port série

Message par tirailleur_dd » jeu. 10 janv. 2019 23:55

Bonjour Bud Spencer et merci pour ta réponse. Malheureusement j'avait précédemment essayé de manipuler mes ports séries en suivant l'option 1 de cette page : https://www.framboise314.fr/le-port-ser ... as-simple/
Mais malgré mes différents essais, impossible d'obtenir "serial0 -> ttyAMA0 , du coup je n'arrive même plus à cette erreur...
Si quelqu'un a quelques conseils à me prodiguer, notamment sur la communication série, je suis preneur.
J'ai aussi testé cette commande : stty -F /dev/ttyAMA0 speed 4800 parenb parodd cs8 -cstopb -echo
Et les commandes tail -f /dev/serial1 et tail -f /dev/serial0 ne retournent rien
Autre question qui n'est pas précisée dans l'article : je me suis connecté en parallèle sur le connecteur du thermostat au niveau de la PAC, est-ce correct ? ( j'ai aussi essayé d'inverser les polarités)
Help please, je suis vraiment perdu!

jelopo
Raspinaute
Messages : 121
Enregistré le : mer. 11 oct. 2017 10:23

Re: Commande PAC Atlantic via port série

Message par jelopo » ven. 11 janv. 2019 09:32

Bonjour,

déjà vérifier que le matériel est vu sur le système et quel est son nom, en le débranchant et le rebranchant, puis consulter dmesg sous root

Code : Tout sélectionner

$ sudo dmesg 
A+

tirailleur_dd
Messages : 5
Enregistré le : ven. 6 janv. 2017 13:26

Re: Commande PAC Atlantic via port série

Message par tirailleur_dd » ven. 11 janv. 2019 10:34

Bonjour et merci pour ta réponse jelopo!
La commande

Code : Tout sélectionner

sudo dmesg | grep serial 

tapée avant débranchement de mon montage et après rebranchement me retourne la même chose:[ 0.091105] uart-pl011 20201000.serial: could not find pctldev for node /soc/gpio@7e200000/uart0_pins, deferring probe

Code : Tout sélectionner

 [    0.978966] uart-pl011 20201000.serial: cts_event_workaround enabled
[    0.982034] 20201000.serial: ttyAMA0 at MMIO 0x20201000 (irq = 81, base_baud = 0) is a PL011 rev2
[    0.990364] 20215040.serial: ttyS0 at MMIO 0x0 (irq = 160, base_baud = 31250000) is a 16550
[224211.764343] uart-pl011 20201000.serial: no DMA platform data 
Qu'est ce que ça signifie?

domi
Administrateur
Messages : 2386
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Commande PAC Atlantic via port série

Message par domi » ven. 11 janv. 2019 16:59

Bonjour,

Pour lire mon port série dans une console, j'utilise la commande

Code : Tout sélectionner

cat /dev/ttyAMA0
Cela ne fonctionne pas ?
Eventuellement un "cat /dev/serial0" peut peut-être fonctionner, mais pas la commande "tail"

jelopo
Raspinaute
Messages : 121
Enregistré le : mer. 11 oct. 2017 10:23

Re: Commande PAC Atlantic via port série

Message par jelopo » ven. 11 janv. 2019 19:13

Bonjour,

C'était pour vérifier dans un premier temps si la carte série était vu sur le système.
Réponse oui, elle est en /dev/ttyAMA0, déjà c'est une bonne nouvelle.

Maintenant, que donne la commande de @domi ?

A+

domi
Administrateur
Messages : 2386
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Commande PAC Atlantic via port série

Message par domi » ven. 11 janv. 2019 20:10

La commande me permet de voir les données qui transitent sur le port série au moment de l'interrogation !

tirailleur_dd
Messages : 5
Enregistré le : ven. 6 janv. 2017 13:26

Re: Commande PAC Atlantic via port série

Message par tirailleur_dd » ven. 11 janv. 2019 21:27

Bonjour et merci pour vos réponse!

@domi: la commande cat /dev/ttyAMA0 ne me retourne rien, comme si elle restait en attente.

Je me demande si le soucis ne viendrait pas de mon montage... je suis branché en parallèle de mon thermostat, mais sur le bornier de la PAC. Dans le magasine, on voit uniquement le thermostat (éteint) raccordé au montage. Il semble en effet que les 2 fils alimentent le thermostat en même temps que la liaison série.

Edit: ajout du schéma du montage réalisé.

Image

tirailleur_dd
Messages : 5
Enregistré le : ven. 6 janv. 2017 13:26

Re: Commande PAC Atlantic via port série

Message par tirailleur_dd » mar. 15 janv. 2019 21:35

Bonjour à tous!
J'ai finalement réussi à régler mon problème de port série, il manquait la bonne ligne dans le fichier /boot/config.txt. J'arrive désormais à obtenir des données avec le code suivant :

Code : Tout sélectionner

#!/usr/bin/python3
#! -*- coding=utf-8 -*-

import serial #module pour manipuler l'UART
import sys

ser = serial.Serial('/dev/ttyAMA0', 4800, timeout=1, bytesize=8, stopbits=1, parity=serial.PARITY_ODD)

message = ""
messageStart = False
messageIndex = 0
messageSize = 0

while True: # Boucle infinie

        data = ser.read()
        datalen = len(data)
#       print(data)
#       print(datalen)

        if datalen > 0:

                for idx in range(datalen):
                        byteVal = 255 - data[idx] # Inversion des bits
                        message += "%0.2X " % (byteVal)
                        messageIndex += 1
#                       print(message)


                if not messageStart:

                        # Detection du debut d'un message
                        if byteVal == 0xDC:
                                messageStart = True
                                messageIndex = 0
#                               print(message)
                else:

                        # Recuperation de la taille du message sur
                        # le quatrieme octet (index=3)
                        if messageIndex == 3:
                                messageSize = byteVal

                        # Lecture du dernier octet du message
                        if messageIndex == messageSize - 1:
                                messageStart = False
                                messageIndex = 1
                                print (message)
                                message = ""
#                               print ("/n")
Finalement j'ai du supprimer ord() qui n'est plus utile avec la version 3 de python.
J'arrive donc à obtenir des données mais que ne semblent pas cohérentes avec ce que je devrais avoir, je pense encore dû à une histoire de conversion des données avec le langage python, je vais continuer à creuser dans ce sens. J'ai lancé cette commande :

Code : Tout sélectionner

sudo python3.5 atlantic_V2.py >> acquisition.txt &
et pour le moment, en 5mn, j'ai eu ce retour :

Code : Tout sélectionner

8A 00 0B 06 3D 05 17 DC 0A D5 DC 80 0A 0E 07 05 3D 17 DC 00 00 2E A6 B2 1C 02 05 00 02 48 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1F FF 1F 1F 1F 1F 1F 1F 1F 1F 1F 1F 1F 1F 1F FF 3F 3F 3F 3F 3F FF 3F FF 1F F9 99 67 9F 99 01 E7 87 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1F 1F 1F 1F 1F FF 1F FF 1F 1F FF 3F 3F 3F 3F 3F FF 3F FF 3F F9 99 E7 19 19 79 01 01 01 E1 07 01 7F 1F 07 F9 07 19 79 3F 3F 3F 3F FF 3F FF FF 3F 3F FF 1F F9 99 67 9F 99 01 E7 87 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3F 3F FF
Alors que je devrait recevoir une trame toutes les 5 secondes ( effectivement quand je lance cat /dev/ttyAMA0, je reçois un retour toutes les 4-5sec avec des caractères bizarres.
Je me demande si je n'ai pas un souci de buffer, mais ce n'ai pas encore bien clair pour moi... Tout conseil ou suggestion est bien sûr toujours le bienvenue, je continuerai d'alimenter ce post au fur et à mesure jusqu'au résultat final au cas où quelqu'un d'autre voudrait se lancer dans l'aventure. ;)

Répondre

Retourner vers « Gestion de la température »