Page 1 sur 1

Résolu :Adapter un script pour recuperer les données dans un capteur virtuel

Publié : 06 mars 2019, 12:04
par samourai47
Hello
J'ai installé ce script pyton pour tester les infos d'un capteur tsl2561en ligne de commande
-> https://raspberrytips.nl/tsl2561-licht- ... spberry-pi

Code : Tout sélectionner

# TSL2561
import smbus
import time

# Get I2C bus
bus = smbus.SMBus(1)

# TSL2561 address, 0x39(57)
# Select control register, 0x00(00) with command register, 0x80(128)
#		0x03(03)	Power ON mode
bus.write_byte_data(0x39, 0x00 | 0x80, 0x03)
# TSL2561 address, 0x39(57)
# Select timing register, 0x01(01) with command register, 0x80(128)
#		0x02(02)	Nominal integration time = 402ms
bus.write_byte_data(0x39, 0x01 | 0x80, 0x02)

time.sleep(0.5)

# Read data back from 0x0C(12) with command register, 0x80(128), 2 bytes
# ch0 LSB, ch0 MSB
data = bus.read_i2c_block_data(0x39, 0x0C | 0x80, 2)

# Read data back from 0x0E(14) with command register, 0x80(128), 2 bytes
# ch1 LSB, ch1 MSB
data1 = bus.read_i2c_block_data(0x39, 0x0E | 0x80, 2)

# Convert the data
ch0 = data[1] * 256 + data[0]
ch1 = data1[1] * 256 + data1[0]

# Output data to screen
print "Full Spectrum(IR + Visible) :%d lux" %ch0
print "Infrared Value :%d lux" %ch1
print "Visible Value :%d lux" %(ch0 - ch1)
Ayant de grosses différences de valeur entre domoticz et les données de ligne de commande, je souhaiterai pouvoir récupérer dans un capteur virtuel (ou autre) les données de ce script ou du moins la principale.

C'est là que j'ai besoin d'aide car cela me parait à la fois simple mais aussi très compliqué pour moi qui n'ai jamais programmé, si ce n'est en basic sur un vieux zx81..... Lol

Si vous pouviez me donner un coup de main
Merci d'avance

Re: Adapter un script pour recuperer les données dans un capteur virtuel

Publié : 07 mars 2019, 15:39
par samourai47
Je tourne en rond et je deviens fou....
J'ai créé un dummy sensor en IDX46
J'ai rajouté cette ligne à la fin du script précédent

Code : Tout sélectionner

httpurl = 'http://192.168.0.120/json.htm?type=command&param=udevice&idx=46&svalue=ch0'
Mais bien évidemment rien ne s'affiche.... Je pense que cela doit être plus complexe que ca... Creer un fichier de valeur? Puis aller puisser dans ce fichier.... Je sèche

Merci pour votre aide

Re: Adapter un script pour recuperer les données dans un capteur virtuel

Publié : 08 mars 2019, 13:34
par samourai47
Bon j'essaye d'avancer seul.. ne trouvant pas de solution encore...
Alors j'ai rajouté dans l'entete du script

Code : Tout sélectionner

import urllib
Puis a la fin

Code : Tout sélectionner

httpresponse = urllib.urlopen('http://192.168.0.120:8080/json.htm?type=command&param=udevice&idx=45&nvalue=0&svalue=ch0')
Mon capteur virtuel (texte)est mis a jour par par du texte :ch0 mais pas par la valeur correspondante, par exemple 3850 qui par contre s'affiche bien en ligne de commande lors de l'execution du script

Comment faire.....pour recuperer cette valeur lors de l'execution du script. C'est la qu'il doit me manquer un truc
Merci

Re: Adapter un script pour recuperer les données dans un capteur virtuel

Publié : 09 mars 2019, 11:12
par patrice
Bonjour
Ton url doit etre mal formatee

regarde ici
https://easydomoticz.com/ajout-dun-text ... al-sensor/

Re: Adapter un script pour recuperer les données dans un capteur virtuel

Publié : 11 mars 2019, 09:43
par samourai47
Bon finalement avec un peu d'aide sur le forum de domoticz, je vous propose la solution si elle peut aider d'autre

Code : Tout sélectionner

# TSL2561
import smbus
import time
import urllib

# Get I2C bus
bus = smbus.SMBus(1)

# TSL2561 address, 0x39(57)
# Select control register, 0x00(00) with command register, 0x80(128)
#		0x03(03)	Power ON mode
bus.write_byte_data(0x39, 0x00 | 0x80, 0x03)
# TSL2561 address, 0x39(57)
# Select timing register, 0x01(01) with command register, 0x80(128)
#		0x02(02)	Nominal integration time = 402ms
bus.write_byte_data(0x39, 0x01 | 0x80, 0x02)

time.sleep(0.5)

# Read data back from 0x0C(12) with command register, 0x80(128), 2 bytes
# ch0 LSB, ch0 MSB
data = bus.read_i2c_block_data(0x39, 0x0C | 0x80, 2)

# Read data back from 0x0E(14) with command register, 0x80(128), 2 bytes
# ch1 LSB, ch1 MSB
data1 = bus.read_i2c_block_data(0x39, 0x0E | 0x80, 2)

# Convert the data
ch0 = data[1] * 256 + data[0]
ch1 = data1[1] * 256 + data1[0]


# Output data to screen
# print "Full Spectrum(IR + Visible) :%d lux" %ch0
# print "Infrared Value :%d lux" %ch1
# print "Visible Value :%d lux" %(ch0 - ch1)

httpresponse = urllib.urlopen('http://192.168.0.120:8080/json.htm?type=command&param=udevice&idx=45&nvalue=0&svalue='+str(ch0)+'')
httpresponse = urllib.urlopen('http://192.168.0.120:8080/json.htm?type=command&param=udevice&idx=44&nvalue=0&svalue=Full Value: '+str(ch0)+'; Visible Value: '+str(ch0 - ch1)+'; Infrared Value: '+str(ch1)+'')


En gros j'ai créé deux capteur virtuel. Un en "Lux " (idx=44) qui m'affiche la valeur cumulée du TSL2561
L'autre (Idx= 45) en Txt qui m'affiche les 3 valeurs proposées par ce capteur
Puis j'aicréé un crontab qui lance le script toute les minutes