Script python module waveshare hat rpi AD DA analogique voltage input output

Bonjour,
Je désire recevoir les valeurs des 8 entrées DC de la carte HAT AD DA de waveshare board ( 23 € ) .


Le script ici bas fonctionne sur Thonny Python pour voir la tension électrique en direct de l’entrée 0

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

import time
import ADS1256
import DAC8532
import RPi.GPIO as GPIO


try:
    ADC = ADS1256.ADS1256()
    DAC = DAC8532.DAC8532()
    ADC.ADS1256_init()

    DAC.DAC8532_Out_Voltage(0x30, 3)
    DAC.DAC8532_Out_Voltage(0x34, 3)
    while(1):
        ADC_Value = ADC.ADS1256_GetAll()
        print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))


        temp = (ADC_Value[0]>>7)*5.0/0xffff
        print ("DAC :",temp)
        print ("\33[10A")
        DAC.DAC8532_Out_Voltage(DAC8532.channel_A, temp)
        DAC.DAC8532_Out_Voltage(DAC8532.channel_B, 3.3 - temp)

except :
    GPIO.cleanup()
    print ("\r\nProgram end     ")
    exit()

Je suppose qu’il est possible de recevoir la valeur sur Jeedom ?
J’ai fait " nouveau " script , " info et copier coller le code ici plus haut . /var/www/html/plugins/script/data/volt
J’ai fais un chmod 777 sur le dossier data pour decompresser les fichiers du script demo fournit par waveshare board. ( je ne sais pas si c’est interdit … )
quand je lance le " test" , j ai le message suivant en rouge :

Erreur sur /var/www/html/plugins/script/data/volt 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/volt", line 5, in import ADS1256 File "/var/www/html/plugins/script/data/ADS1256.py", line 1, in import config File "/var/www/html/plugins/script/data/config.py", line 42, in SPI = spidev.SpiDev(0, 0) IOError: [Errno 13] Permission denied

Ma valeur est donc ou ? Certainement impossible d affichez comme thonny python la valeur en direct ? il faut passer par un code python different pour recevoir la valeur par jeedom ?
Auriez vous une idée du problème ? Ou les « trucs » à faire pour faire tourner un script ?
Merci
ps : j ai fais 1 demande de devis sur codeur point com . si je peux acheter la solution , je vous la partage .

Bonjour,
Cela pourrait être utile de tester directement ce code depuis l’interpréteur python plutôt que depuis le script.

Peut-être faut-il lancer al commande avec sudo ?
A+
Bernard

Bonjour,

print ou echo reviens au même mais jeedom n’en attend qu’un seul comme valeur de retour

les interpréteurs python son dans le PATH de l’utilisateur

si donc en ssh tu lance
python fichier.py
ou
python3 fichier.py

ton script sera exécuté en python2 pour le 1er et en python3 pour le 2ième.

Bon samedi

1 « J'aime »

sous ssh si tu tape
$PATH
il va surment te repondre

/usr/local/bin:/usr/bin:/bin …
l’interpréteur python est dans un de ses 2 dossiers
lotsque tu tape
python
ou
python3

python est executer et tu a laversion suivie du prompt python >>>

le path est le chemin de recherche des fichiers exécutables …

jeedom@jeedom:~$ $PATH
-bash: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games: Aucun fichier ou dossier de ce type
jeedom@jeedom:~$ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("coucou")
coucou
>>> 

Ctrl + d
pour sortir de l’interpréteur

1 « J'aime »

.

pi@raspberrypi:~ $ $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: Aucun fichier ou dossier de ce type

pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> #!/usr/bin/python
... # -*- coding:utf-8 -*-
...
>>> import time
import ADS1256
import DAC8532
import RPi.GPIO as GPIO


try:
    ADC = ADS1256.ADS1256()
    DAC = DAC8532.DAC8532()
    ADC.ADS1256_init()

    DAC.DAC8532_Out_Voltage(0x30, 3)
    DAC.DAC8532_Out_Voltage(0x34, 3)
    while(1):
        ADC_Value = ADC.ADS1256_GetAll()
        print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
>>> import ADS1256


        temp = (ADC_Value[0]>>7)*5.0/0xffff
        print ("DAC :",temp)
        print ("\33[10A")
        DAC.DAC8532_Out_Voltage(DAC8532.channel_A, temp)
        DAC.DAC8532_Out_Voltage(DAC8532.channel_B, 3.3 - temp)

except :
    GPIO.clTraceback (most recent call last):
eanup()
    print ("\r\nProgram end     ")
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'ADS1256'
    exit()>>> import DAC8532
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'DAC8532'
>>> import RPi.GPIO as GPIO
>>>
>>>
>>> try:
...     ADC = ADS1256.ADS1256()
...     DAC = DAC8532.DAC8532()
...     ADC.ADS1256_init()
...
  File "<stdin>", line 5

    ^
SyntaxError: invalid syntax
>>>     DAC.DAC8532_Out_Voltage(0x30, 3)
  File "<stdin>", line 1
    DAC.DAC8532_Out_Voltage(0x30, 3)
    ^
IndentationError: unexpected indent
>>>     DAC.DAC8532_Out_Voltage(0x34, 3)
  File "<stdin>", line 1
    DAC.DAC8532_Out_Voltage(0x34, 3)
    ^
IndentationError: unexpected indent
>>>     while(1):
  File "<stdin>", line 1
    while(1):
    ^
IndentationError: unexpected indent
>>>         ADC_Value = ADC.ADS1256_GetAll()
  File "<stdin>", line 1
    ADC_Value = ADC.ADS1256_GetAll()
    ^
IndentationError: unexpected indent
>>>         print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
  File "<stdin>", line 1
    print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
    ^
IndentationError: unexpected indent
>>>
>>>
>>>         temp = (ADC_Value[0]>>7)*5.0/0xffff
  File "<stdin>", line 1
    temp = (ADC_Value[0]>>7)*5.0/0xffff
    ^
IndentationError: unexpected indent
>>>         print ("DAC :",temp)
  File "<stdin>", line 1
    print ("DAC :",temp)
    ^
IndentationError: unexpected indent
>>>         print ("\33[10A")
  File "<stdin>", line 1
    print ("\33[10A")
    ^
IndentationError: unexpected indent
>>>         DAC.DAC8532_Out_Voltage(DAC8532.channel_A, temp)
  File "<stdin>", line 1
    DAC.DAC8532_Out_Voltage(DAC8532.channel_A, temp)
    ^
IndentationError: unexpected indent
>>>         DAC.DAC8532_Out_Voltage(DAC8532.channel_B, 3.3 - temp)
  File "<stdin>", line 1
    DAC.DAC8532_Out_Voltage(DAC8532.channel_B, 3.3 - temp)
    ^
IndentationError: unexpected indent
>>>
>>> except :
  File "<stdin>", line 1
    except :
         ^
SyntaxError: invalid syntax
>>>     GPIO.cleanup()
  File "<stdin>", line 1
    GPIO.cleanup()
    ^
IndentationError: unexpected indent
>>>     print ("\r\nProgram end     ")
  File "<stdin>", line 1
    print ("\r\nProgram end     ")
    ^
IndentationError: unexpected indent
>>>     exit()

Ha oui les Indentations font partie du langage et ne sont pas à négliger
les copier coller font mauvais effet …

1 « J'aime »

Pour ma part Visual Studio Code.

Mais bon un simple éditeur de texte suffit il faut juste faire attention aux espaces comme dit dans la vidéo.

J ai payé 85 € pour 30 minute de travail avec teamviewer à l entreprise les as consulting super réactif via condeur point com . je vous partage l’info. Si vs voulez me fournir 1 € symbolique, je suis preneur en mp :smile: , il me faudra 84 contributeurs :money_mouth_face:
Pour pouvoir utilisées 2 sorties analogiques de la carte avec Jeedom, il faillait payer plus … donc j’ai laissé tombé pourlimité les dépenses :cry:

D’après rachid , il est impossible de faire un scripte directement dans jeedom car il est impossible d avoir accès au module HAT via le SPI par Jeedom. Uniquement avec l’API
1:
faire un virtuel et mettre 8 " info virtuelles"


2:
Pour chaques commandes tu vas dans " engrenage " de l’info virtuelle " et tu prends la valeur URL :

http://192.168.1.XXadresse_du_RPI/core/api/jeeApi.php?apikey=S08znpCz4GPj4ncNHMkKF3YG9BILLP8g&type=cmd&id=3055

API_KEY = « S08anpCn4GPj4ncNHMkKF3YG9BILLP8g » est la clef a mettre dans le code Python
3055 : est a mettre dans le code python => DATA={‹ apikey › : API_KEY , ‹ type › : ‹ virtual › , ‹ id › : ‹ 3055 ›, ‹ value › : (ADC_Value[0]*5.0/0x7fffff) }
response = requests.post(URL, params=DATA)

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

import time
import requests
import json
import ADS1256
import DAC8532
import RPi.GPIO as GPIO


try:
    ADC = ADS1256.ADS1256()
    DAC = DAC8532.DAC8532()
    ADC.ADS1256_init()

    DAC.DAC8532_Out_Voltage(0x30, 3)
    DAC.DAC8532_Out_Voltage(0x34, 3)
    URL = "http://192.168.1.XX/core/api/jeeApi.php"
    API_KEY    = "S08znpCn9GPj9ncNHMkKF3YG9BILLP8g"
    while(1):
        ADC_Value = ADC.ADS1256_GetAll()
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3055', 'value' : (ADC_Value[0]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3056', 'value' : (ADC_Value[1]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3057', 'value' : (ADC_Value[2]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3058', 'value' : (ADC_Value[3]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3059', 'value' : (ADC_Value[4]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3060', 'value' : (ADC_Value[5]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3061', 'value' : (ADC_Value[6]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3062', 'value' : (ADC_Value[7]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)
        time.sleep(5)
        print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
        print ("1 ADC = %lf"%(ADC_Value[1]*5.0/0x7fffff))
        print ("2 ADC = %lf"%(ADC_Value[2]*5.0/0x7fffff))
        print ("3 ADC = %lf"%(ADC_Value[3]*5.0/0x7fffff))
        print ("4 ADC = %lf"%(ADC_Value[4]*5.0/0x7fffff))
        print ("5 ADC = %lf"%(ADC_Value[5]*5.0/0x7fffff))
        print ("6 ADC = %lf"%(ADC_Value[6]*5.0/0x7fffff))
        print ("7 ADC = %lf"%(ADC_Value[7]*5.0/0x7fffff))

        temp = (ADC_Value[0]>>7)*5.0/0xffff
        print ("DAC :",temp)
        print ("\33[10A")
        DAC.DAC8532_Out_Voltage(DAC8532.channel_A, temp)
        DAC.DAC8532_Out_Voltage(DAC8532.channel_B, 3.3 - temp)

except :
    GPIO.cleanup()
    print ("\r\nProgram end     ")
    exit()

Si tu changes les Jumper su rla carte HAT en selecionnant 3.3V a la place de 5V, tu dois le changer dans le code source ." ADC_Value[0]*5.0/0x7fffff "
Le « time.sleep(5) » permet de ne pas trop chargé jeedom avec des valeurs non stop , mais toutes les 5 secondes seulement .
pour le probleme de virgule trop longue =>
bbvbtre
pour que la jauge blanche du dashboard soit proportionel a la valeur de 0 a 5 Volt DC =>
dsdde
dc
Le scripte peut être placé dans n importe quel dossier du RPI. Mais il doit contenir les autres fichiers dans le dossier, à savoir « ADS1256.py » + " config.py" + " DAC8532.py" + « main.py » téléchargeables sur le site du fabriquant waveshare
Pour le démarrage du script eu moment du démarrage du RPI, il faut ajouter une ligne avant " exit "dans le fichier Linux " sudo nano /etc/rc.local

sudo python3 /home/pi/main.py &


si ton scripte « main.py »( le copier coller d ici plus haut ) est dans /home/pi
Control X pour quitter et « O » pour sauvegarder
et rendre exécutable le fichier avec : sudo chmod +x main.py

Autre solution si le scripte ne démarre pas avec la metode precedente => sudo crontab -e et ajouter dans le texte ( la fin par ex ) => @reboot sleep 60 && python /home/pi/main.py


Maintenant, j aimerai faire le même avec une carte d acquisition de courant …

Hello
Merci pour ce script par contre tu n’as installé que les fichier ci dessus, rien d’autre ?
Je suis interressé pour coder la partie DAC8532.py si j’y arrive je la partagerais ici.

1 « J'aime »

slt, j ai fais un copier coller de mon dossier fait il y a plus d un an …
je pense qu il y a cela ds le dossier , rien d autre .
Cool , si tu développe, partage a la communauté , ça sera cool .
Merci