Page 1 sur 2
intégrer capteur BMP280 en I2C
Publié : 09 janv. 2017, 08:53
par Capi
Bonjour,
J'ai branché un capteur BMP280 en I2C sur PI 2:
- j'ai un script Py qui me permet d'avoir l' info température et pression: OK
-si j'essaie d'intégrer ce capteur dans Domoticz (Local I2Csensors/ BMP085/180 Temp+Baro): pas reconnu (et je crois avoir que de toute façon, cela les valeurs rapportées n'étaient pas bonnes)
Ma question est donc: y -t-il un moyen d’intégrer manuellement ce capteur dans Domoticz pour avoir "température" et "pression"?
Si c'est possible, merci de me renvoyer vers les posts détaillés ou de m'indiquer les étapes dans l'ordre (car je ne suis pas du tout expert!).
Capi
Re: intégrer capteur BMP280 en I2C
Publié : 09 janv. 2017, 12:01
par jackslayter
moi j'ai une BMP180 et ça marche dans Local I2Csensors.
après en partant sur ce script en Python
https://github.com/cudacode/Python-BMP2 ... /BMP280.py
en installant pycurl (sudo apt-get install python-pycurl)
tu ajoutes ces lignes à la fin du script
Code : Tout sélectionner
def main():
c = pycurl.Curl()
c.setopt(c.URL, 'http://TONADRESSEIP:PORT/json.htm?type=command¶m=udevice&idx=IDXDETONDUMMYDEVICE&svalue='+ str(read_raw_pressure()))
c.setopt(c.URL, 'http://TONADRESSEIP:PORT/json.htm?type=command¶m=udevice&idx=IDXDETONDUMMYDEVICE&svalue='+ str(compensate_temperature()))
c.perform()
Re: intégrer capteur BMP280 en I2C
Publié : 09 janv. 2017, 20:49
par Capi
Bonsoir,
Excusez-moi pour mes questions de néophyte:
- le BMP a une adresse X76: je remplace le X77 dans le scrypte?
- où dois placer mon fichier BMP280?
-faut que je crée un capteur "I2C local sensor/BMP085" ou un capteur virtuel?
-IDX du matériel à mettre dans scrypte? Pas l'IDX od ID des dispositifs?
NB: mon BMP280 n'est pas un adafruit.
Capi
Re: intégrer capteur BMP280 en I2C
Publié : 10 janv. 2017, 08:47
par jackslayter
Capi a écrit :Bonsoir,
Excusez-moi pour mes questions de néophyte:
- le BMP a une adresse X76: je remplace le X77 dans le scrypte?
- où dois placer mon fichier BMP280?
-faut que je crée un capteur "I2C local sensor/BMP085" ou un capteur virtuel?
-IDX du matériel à mettre dans scrypte? Pas l'IDX od ID des dispositifs?
NB: mon BMP280 n'est pas un adafruit.
Capi
tu peux essayer
ou tu veux, oublie pas de faire un "sudo chmod +x scriptbmp280.py"
tu as dit que cela ne marchait pas donc un capteur virtuel
c'est le 1ier nombre de la liste des dispositifs
ca marche quand même
Re: intégrer capteur BMP280 en I2C
Publié : 11 janv. 2017, 08:26
par Capi
Merci pour ces réponses.
Avant de faire ces essais, je me posais la question de savoir si je ne pouvais pas juste ajouter tes lignes de code à la fin de mon script existant (qui fonctionne) en adaptant le nom des deux variables et en remplissant les autres champs avec tes indications?
Re: intégrer capteur BMP280 en I2C
Publié : 11 janv. 2017, 11:31
par jackslayter
tant que ton langage peut envoyer une requête json avec cURL (php,python,shell,..) tu pourras mettre à jour tes capteurs domoticz
Re: intégrer capteur BMP280 en I2C
Publié : 06 févr. 2017, 23:46
par Capi
Bonjour,
Mon incompétence ne me permet pas de réussir à récupérer les infos de mon BMP280!
J'ai un script Python qui fonctionne et qui me permet d'afficher en console température et pression
je sais créer un capteur virtuel avec 2 dispositifs
J'ai collé le code à la fin de mon script
Mais cela ne fonctionne pas. Je dois oublier un truc de base!
Si quelqu'un peut me rappeler toutes les étapes pas à pas.
Idéalement, j'aimerais récupérer les valeurs toutes les 5 ou 10 minutes
Merci
Code : Tout sélectionner
#!/usr/bin/python
#Distributed with a free-will license.
# Use it any way you want, profit or free, provided it fits in the licenses of its associated works.
# BMP280
# This code is designed to work with the BMP280_I2CS I2C Mini Module available from ControlEverything.com.
# https://www.controleverything.com/content/Barometer?sku=BMP280_I2CSs#tabs-0-product_tabset-2
import smbus
import time
# Get I2C bus
bus = smbus.SMBus(1)
# BMP280 address, 0x76(118)
# Read data back from 0x88(136), 24 bytes
b1 = bus.read_i2c_block_data(0x76, 0x88, 24)
# Convert the data
# Temp coefficents
dig_T1 = b1[1] * 256 + b1[0]
dig_T2 = b1[3] * 256 + b1[2]
if dig_T2 > 32767 :
dig_T2 -= 65536
dig_T3 = b1[5] * 256 + b1[4]
if dig_T3 > 32767 :
dig_T3 -= 65536
# Pressure coefficents
dig_P1 = b1[7] * 256 + b1[6]
dig_P2 = b1[9] * 256 + b1[8]
if dig_P2 > 32767 :
dig_P2 -= 65536
dig_P3 = b1[11] * 256 + b1[10]
if dig_P3 > 32767 :
dig_P3 -= 65536
dig_P4 = b1[13] * 256 + b1[12]
if dig_P4 > 32767 :
dig_P4 -= 65536if dig_P4 > 32767 :
dig_P4 -= 65536
dig_P5 = b1[15] * 256 + b1[14]
if dig_P5 > 32767 :
dig_P5 -= 65536
dig_P6 = b1[17] * 256 + b1[16]
if dig_P6 > 32767 :
dig_P6 -= 65536
dig_P7 = b1[19] * 256 + b1[18]
if dig_P7 > 32767 :
dig_P7 -= 65536
dig_P8 = b1[21] * 256 + b1[20]
if dig_P8 > 32767 :
dig_P8 -= 65536
dig_P9 = b1[23] * 256 + b1[22]
if dig_P9 > 32767 :
dig_P9 -= 65536
# BMP280 address, 0x76(118)
# Select Control measurement register, 0xF4(244)
# 0x27(39) Pressure and Temperature Oversampling rate = 1
# Normal mode
bus.write_byte_data(0x76, 0xF4, 0x27)
# BMP280 address, 0x76(118)
# Select Configuration register, 0xF5(245)
# 0xA0(00) Stand_by time = 1000 ms
bus.write_byte_data(0x76, 0xF5, 0xA0)
time.sleep(0.5)
# BMP280 address, 0x76(118)
# Read data back from 0xF7(247), 8 bytes
# Pressure MSB, Pressure LSB, Pressure xLSB, Temperature MSB, Temperature LSB
# Temperature xLSB, Humidity MSB, Humidity LSB
data = bus.read_i2c_block_data(0x76, 0xF7, 8)
# Convert pressure and temperature data to 19-bits
adc_p = ((data[0] * 65536) + (data[1] * 256) + (data[2] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16
adc_p = ((data[0] * 65536) + (data[1] * 256) + (data[2] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16
# Temperature offset calculations
var1 = ((adc_t) / 16384.0 - (dig_T1) / 1024.0) * (dig_T2)
var2 = (((adc_t) / 131072.0 - (dig_T1) / 8192.0) * ((adc_t)/131072.0 - (dig_T1)/8192.0)) * (dig_T3)
t_fine = (var1 + var2)
cTemp = (var1 + var2) / 5120.0
fTemp = cTemp * 1.8 + 32
# Pressure offset calculations
var1 = (t_fine / 2.0) - 64000.0
var2 = var1 * var1 * (dig_P6) / 32768.0
var2 = var2 + var1 * (dig_P5) * 2.0
var2 = (var2 / 4.0) + ((dig_P4) * 65536.0)
var1 = ((dig_P3) * var1 * var1 / 524288.0 + ( dig_P2) * var1) / 524288.0
var1 = (1.0 + var1 / 32768.0) * (dig_P1)
p = 1048576.0 - adc_p
p = (p - (var2 / 4096.0)) * 6250.0 / var1
var1 = (dig_P9) * p * p / 2147483648.0
var2 = p * (dig_P8) / 32768.0
pressure = (p + (var1 + var2 + (dig_P7)) / 16.0) / 100
# Output data to screen
print "Temperature en Celsius : %.2f C" %cTemp
print "Pressure : %.2f hPa " %pressure
#def main():
# c = pycurl.Curl()
# c.setopt(c.URL, 'http://192.168.0.51:8080/json.htm?type=command¶m=udevice&idx=45&svalue='+ str(pressure))
# c.setopt(c.URL, 'http://192.168.0.51:8080/json.htm?type=command¶m=udevice&idx=44&svalue='+ str(cTemp))
# c.perform()
Re: intégrer capteur BMP280 en I2C
Publié : 07 févr. 2017, 10:54
par jackslayter
je crois qu'ils ont intégré à Dz la sonde bmp280, il faut être sur le canal Beta
https://github.com/domoticz/domoticz/bl ... istory.txt
Re: intégrer capteur BMP280 en I2C
Publié : 08 févr. 2017, 07:30
par Capi
À priori, il s'agit de la BME280 avec HR en plus de temps et pression par rapport à BMP280.
Je vais tester ...
Re: intégrer capteur BMP280 en I2C
Publié : 08 févr. 2017, 08:58
par jackslayter
sur ton script il faut enlever le '#' aux 4 dernière lignes