Add support for VEML6075 and VEML7700

- Add support for VEML6075 UVA/UVB/UVINDEX Sensor by device111 (#8432)
- Add support for VEML7700 Ambient light intensity Sensor by device111 (#8432)
This commit is contained in:
Theo Arends 2020-05-22 15:16:01 +02:00
parent 2b798ff194
commit 86921e60b2
6 changed files with 27 additions and 23 deletions

View File

@ -70,5 +70,5 @@ Index | Define | Driver | Device | Address(es) | Description
46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor 46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor
47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED 47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED
48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor 48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor
49 | USE_VEML6075 | xsns_68 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor 49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor
50 | USE_VEML7700 | xsns_69 | VEML7700 | 0x10 | Ambient light intensity sensor 50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | Ambient light intensity sensor

View File

@ -57,3 +57,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change IRremoteESP8266 library updated to v2.7.7 - Change IRremoteESP8266 library updated to v2.7.7
- Add command ``Rule0`` to change global rule parameters - Add command ``Rule0`` to change global rule parameters
- Add more functionality to ``Switchmode`` 11 and 12 (#8450) - Add more functionality to ``Switchmode`` 11 and 12 (#8450)
- Add support for VEML6075 UVA/UVB/UVINDEX Sensor by device111 (#8432)
- Add support for VEML7700 Ambient light intensity Sensor by device111 (#8432)

View File

@ -6,6 +6,8 @@
- Add command ``Rule0`` to change global rule parameters - Add command ``Rule0`` to change global rule parameters
- Add more functionality to ``Switchmode`` 11 and 12 (#8450) - Add more functionality to ``Switchmode`` 11 and 12 (#8450)
- Add dump of compressed rules over 512 chars and unishox decompress fix - Add dump of compressed rules over 512 chars and unishox decompress fix
- Add support for VEML6075 UVA/UVB/UVINDEX Sensor by device111 (#8432)
- Add support for VEML7700 Ambient light intensity Sensor by device111 (#8432)
## Released ## Released

View File

@ -1,5 +1,5 @@
/* /*
xsns_70_veml6075.ino - VEML6075 Franklin Lightning Sensor support for Tasmota xsns_70_veml6075.ino - VEML6075 UVA/UVB/UVINDEX Sensor support for Tasmota
Copyright (C) 2020 Martin Wagner Copyright (C) 2020 Martin Wagner
@ -85,13 +85,13 @@ enum VEML6075_Commands { // commands for Console
CMND_VEML6075_SET_HD, CMND_VEML6075_SET_HD,
CMND_VEML6075_SET_UVIT, CMND_VEML6075_SET_UVIT,
}; };
// global variables // global variables
struct VEML6075STRUCT struct VEML6075STRUCT
{ {
char types[9] = D_NAME_VEML6075; char types[9] = D_NAME_VEML6075;
uint8_t address = VEML6075_ADDR; uint8_t address = VEML6075_ADDR;
uint8_t inttime = 0; uint8_t inttime = 0;
uint16_t uva = 0; uint16_t uva = 0;
uint16_t uvb = 0; uint16_t uvb = 0;
uint16_t uva_raw = 0; uint16_t uva_raw = 0;
@ -113,9 +113,9 @@ typedef union {
uint8_t hd:1; // High dynamic uint8_t hd:1; // High dynamic
uint8_t inttime:3; // Integration Time uint8_t inttime:3; // Integration Time
uint8_t spare7:1; // spare uint8_t spare7:1; // spare
}; };
uint16_t config; uint16_t config;
} veml6075configRegister; } veml6075configRegister;
veml6075configRegister veml6075Config; veml6075configRegister veml6075Config;
@ -179,7 +179,7 @@ uint8_t VEML6075GetPwr(void){
return veml6075Config.pwr; return veml6075Config.pwr;
} }
void VEML6075ReadData(void) void VEML6075ReadData(void)
{ {
veml6075_sensor.uva_raw = VEML6075read16 (VEML6075_REG_UVA); veml6075_sensor.uva_raw = VEML6075read16 (VEML6075_REG_UVA);
veml6075_sensor.uvb_raw = VEML6075read16 (VEML6075_REG_UVB); veml6075_sensor.uvb_raw = VEML6075read16 (VEML6075_REG_UVB);
@ -201,7 +201,7 @@ bool VEML6075init(void)
void VEML6075Detect(void) { void VEML6075Detect(void) {
if (I2cActive(veml6075_sensor.address)) return; if (I2cActive(veml6075_sensor.address)) return;
if (VEML6075init()) { if (VEML6075init()) {
I2cSetActiveFound(veml6075_sensor.address, veml6075_sensor.types); I2cSetActiveFound(veml6075_sensor.address, veml6075_sensor.types);
VEML6075write16 (VEML6075_REG_CONF, 0x10); // set default VEML6075write16 (VEML6075_REG_CONF, 0x10); // set default
@ -252,7 +252,7 @@ bool VEML6075Cmd(void) {
} }
} }
void VEML6075Show(bool json) void VEML6075Show(bool json)
{ {
char s_uvindex[FLOATSZ]; char s_uvindex[FLOATSZ];
dtostrfd(veml6075_sensor.uvi,1, s_uvindex); dtostrfd(veml6075_sensor.uvi,1, s_uvindex);
@ -260,10 +260,10 @@ void VEML6075Show(bool json)
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_VEML6075, D_NAME_VEML6075, veml6075_sensor.uva, veml6075_sensor.uvb, s_uvindex); ResponseAppend_P(JSON_SNS_VEML6075, D_NAME_VEML6075, veml6075_sensor.uva, veml6075_sensor.uvb, s_uvindex);
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_PD(HTTP_SNS_UVA, D_NAME_VEML6075, veml6075_sensor.uva); WSContentSend_PD(HTTP_SNS_UVA, D_NAME_VEML6075, veml6075_sensor.uva);
WSContentSend_PD(HTTP_SNS_UVB, D_NAME_VEML6075, veml6075_sensor.uvb); WSContentSend_PD(HTTP_SNS_UVB, D_NAME_VEML6075, veml6075_sensor.uvb);
WSContentSend_PD(HTTP_SNS_UVINDEX, D_NAME_VEML6075 ,s_uvindex); WSContentSend_PD(HTTP_SNS_UVINDEX, D_NAME_VEML6075 ,s_uvindex);
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
xsns_71_VEML7700.ino - VEML7700 Franklin Lightning Sensor support for Tasmota xsns_71_VEML7700.ino - VEML7700 Ambient light intensity Sensor support for Tasmota
Copyright (C) 2020 Martin Wagner Copyright (C) 2020 Martin Wagner
@ -34,14 +34,13 @@ Adafruit_VEML7700 veml7700 = Adafruit_VEML7700(); //create object copy
#define D_NAME_VEML7700 "VEML7700" #define D_NAME_VEML7700 "VEML7700"
#define D_WHITE_CONTENT "White content" #define D_WHITE_CONTENT "White content"
const char HTTP_SNS_LUX[] PROGMEM = "{s}%s " D_ILLUMINANCE "{m}%d " D_UNIT_LUX " {e}";
const char HTTP_SNS_WHITE[] PROGMEM = "{s}%s " D_WHITE_CONTENT "{m}%d {e}"; const char HTTP_SNS_WHITE[] PROGMEM = "{s}%s " D_WHITE_CONTENT "{m}%d {e}";
const char JSON_SNS_VEML7700[] PROGMEM = ",\"%s\":{\"" D_JSON_ILLUMINANCE "\":%d,\"" D_JSON_WHITE_CONTENT "\":%d}"; const char JSON_SNS_VEML7700[] PROGMEM = ",\"%s\":{\"" D_JSON_ILLUMINANCE "\":%d,\"" D_JSON_WHITE_CONTENT "\":%d}";
struct VEML7700STRUCT struct VEML7700STRUCT
{ {
char types[9] = D_NAME_VEML7700; char types[9] = D_NAME_VEML7700;
uint8_t address = VEML7700_I2CADDR_DEFAULT; uint8_t address = VEML7700_I2CADDR_DEFAULT;
uint16_t lux = 0; uint16_t lux = 0;
uint16_t white = 0; uint16_t white = 0;
} veml7700_sensor; } veml7700_sensor;
@ -67,13 +66,13 @@ void VEML7700Show(bool json)
{ {
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_VEML7700, D_NAME_VEML7700, veml7700_sensor.lux, veml7700_sensor.white); ResponseAppend_P(JSON_SNS_VEML7700, D_NAME_VEML7700, veml7700_sensor.lux, veml7700_sensor.white);
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
if (0 == tele_period) DomoticzSensor(DZ_ILLUMINANCE, veml7700_sensor.lux); if (0 == tele_period) DomoticzSensor(DZ_ILLUMINANCE, veml7700_sensor.lux);
#endif // USE_DOMOTICZ #endif // USE_DOMOTICZ
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_PD(HTTP_SNS_LUX, D_NAME_VEML7700, veml7700_sensor.lux); WSContentSend_PD(HTTP_SNS_ILLUMINANCE, D_NAME_VEML7700, veml7700_sensor.lux);
WSContentSend_PD(HTTP_SNS_WHITE, D_NAME_VEML7700, veml7700_sensor.white); WSContentSend_PD(HTTP_SNS_WHITE, D_NAME_VEML7700, veml7700_sensor.white);
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }

View File

@ -147,7 +147,8 @@ a_setoption = [[
"Disable non-json MQTT response", "Disable non-json MQTT response",
"Enable light fading at start/power on", "Enable light fading at start/power on",
"Set PWM Mode from regular PWM to ColorTemp control","", "Set PWM Mode from regular PWM to ColorTemp control","",
"","","","", "Keep uncompressed rules in memory to avoid CPU load of uncompressing at each tick",
"","","",
"","","","", "","","","",
"","","","", "","","","",
"","","","", "","","","",
@ -195,15 +196,15 @@ a_features = [[
"USE_INA226","USE_A4988_STEPPER","USE_DDS2382","USE_SM2135", "USE_INA226","USE_A4988_STEPPER","USE_DDS2382","USE_SM2135",
"USE_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP", "USE_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP",
"USE_SONOFF_SC","USE_SONOFF_RF","USE_SONOFF_L1","USE_EXS_DIMMER", "USE_SONOFF_SC","USE_SONOFF_RF","USE_SONOFF_L1","USE_EXS_DIMMER",
"USE_ARDUINO_SLAVE","USE_HIH6","USE_HPMA","USE_TSL2591", "USE_TASMOTA_SLAVE","USE_HIH6","USE_HPMA","USE_TSL2591",
"USE_DHT12","USE_DS1624","USE_GPS","USE_HOTPLUG", "USE_DHT12","USE_DS1624","USE_GPS","USE_HOTPLUG",
"USE_NRF24","USE_MIBLE","USE_HM10","USE_LE01MR", "USE_NRF24","USE_MIBLE","USE_HM10","USE_LE01MR",
"USE_AHT1x","USE_WEMOS_MOTOR_V1","USE_DEVICE_GROUPS","USE_PWM_DIMMER" "USE_AHT1x","USE_WEMOS_MOTOR_V1","USE_DEVICE_GROUPS","USE_PWM_DIMMER"
],[ ],[
"USE_KEELOQ","USE_HRXL","USE_SONOFF_D1","USE_HDC1080", "USE_KEELOQ","USE_HRXL","USE_SONOFF_D1","USE_HDC1080",
"USE_IAQ","USE_DISPLAY_SEVENSEG","USE_AS3935","USE_PING", "USE_IAQ","USE_DISPLAY_SEVENSEG","USE_AS3935","USE_PING",
"USE_WINDMETER","USE_OPENTHERM","USE_THERMOSTAT","", "USE_WINDMETER","USE_OPENTHERM","USE_THERMOSTAT","USE_VEML6075",
"","","","", "USE_VEML7700","","","",
"","","","", "","","","",
"","","","", "","","","",
"","","","", "","","","",
@ -241,7 +242,7 @@ else:
obj = json.load(fp) obj = json.load(fp)
def StartDecode(): def StartDecode():
print ("\n*** decode-status.py v20200507 by Theo Arends and Jacek Ziolkowski ***") print ("\n*** decode-status.py v20200510 by Theo Arends and Jacek Ziolkowski ***")
# print("Decoding\n{}".format(obj)) # print("Decoding\n{}".format(obj))