From 86921e60b212dc83fdffa0ea975df4e9bfb58679 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 22 May 2020 15:16:01 +0200 Subject: [PATCH] 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) --- I2CDEVICES.md | 4 ++-- RELEASENOTES.md | 2 ++ tasmota/CHANGELOG.md | 2 ++ tasmota/xsns_70_veml6075.ino | 20 ++++++++++---------- tasmota/xsns_71_veml7700.ino | 11 +++++------ tools/decode-status.py | 11 ++++++----- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 008f16c99..788145d3e 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -70,5 +70,5 @@ Index | Define | Driver | Device | Address(es) | Description 46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor 47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED 48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor - 49 | USE_VEML6075 | xsns_68 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor - 50 | USE_VEML7700 | xsns_69 | VEML7700 | 0x10 | Ambient light intensity sensor \ No newline at end of file + 49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor + 50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | Ambient light intensity sensor \ No newline at end of file diff --git a/RELEASENOTES.md b/RELEASENOTES.md index f2c6ef4f7..ab62c092f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -57,3 +57,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - Change IRremoteESP8266 library updated to v2.7.7 - Add command ``Rule0`` to change global rule parameters - 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) diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index 54e1f63e9..056a0edd6 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -6,6 +6,8 @@ - Add command ``Rule0`` to change global rule parameters - Add more functionality to ``Switchmode`` 11 and 12 (#8450) - 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 diff --git a/tasmota/xsns_70_veml6075.ino b/tasmota/xsns_70_veml6075.ino index 00a8ebc8e..4735d1140 100644 --- a/tasmota/xsns_70_veml6075.ino +++ b/tasmota/xsns_70_veml6075.ino @@ -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 @@ -85,13 +85,13 @@ enum VEML6075_Commands { // commands for Console CMND_VEML6075_SET_HD, CMND_VEML6075_SET_UVIT, }; - + // global variables struct VEML6075STRUCT { char types[9] = D_NAME_VEML6075; uint8_t address = VEML6075_ADDR; - uint8_t inttime = 0; + uint8_t inttime = 0; uint16_t uva = 0; uint16_t uvb = 0; uint16_t uva_raw = 0; @@ -113,9 +113,9 @@ typedef union { uint8_t hd:1; // High dynamic uint8_t inttime:3; // Integration Time uint8_t spare7:1; // spare - }; + }; uint16_t config; -} veml6075configRegister; +} veml6075configRegister; veml6075configRegister veml6075Config; @@ -179,7 +179,7 @@ uint8_t VEML6075GetPwr(void){ return veml6075Config.pwr; } -void VEML6075ReadData(void) +void VEML6075ReadData(void) { veml6075_sensor.uva_raw = VEML6075read16 (VEML6075_REG_UVA); veml6075_sensor.uvb_raw = VEML6075read16 (VEML6075_REG_UVB); @@ -201,7 +201,7 @@ bool VEML6075init(void) void VEML6075Detect(void) { if (I2cActive(veml6075_sensor.address)) return; - + if (VEML6075init()) { I2cSetActiveFound(veml6075_sensor.address, veml6075_sensor.types); 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]; dtostrfd(veml6075_sensor.uvi,1, s_uvindex); @@ -260,10 +260,10 @@ void VEML6075Show(bool json) if (json) { ResponseAppend_P(JSON_SNS_VEML6075, D_NAME_VEML6075, veml6075_sensor.uva, veml6075_sensor.uvb, s_uvindex); #ifdef USE_WEBSERVER - } else { + } else { 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_UVINDEX, D_NAME_VEML6075 ,s_uvindex); + WSContentSend_PD(HTTP_SNS_UVINDEX, D_NAME_VEML6075 ,s_uvindex); #endif // USE_WEBSERVER } } diff --git a/tasmota/xsns_71_veml7700.ino b/tasmota/xsns_71_veml7700.ino index 89bae9320..de28661cc 100644 --- a/tasmota/xsns_71_veml7700.ino +++ b/tasmota/xsns_71_veml7700.ino @@ -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 @@ -34,14 +34,13 @@ Adafruit_VEML7700 veml7700 = Adafruit_VEML7700(); //create object copy #define D_NAME_VEML7700 "VEML7700" #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 JSON_SNS_VEML7700[] PROGMEM = ",\"%s\":{\"" D_JSON_ILLUMINANCE "\":%d,\"" D_JSON_WHITE_CONTENT "\":%d}"; struct VEML7700STRUCT { char types[9] = D_NAME_VEML7700; - uint8_t address = VEML7700_I2CADDR_DEFAULT; + uint8_t address = VEML7700_I2CADDR_DEFAULT; uint16_t lux = 0; uint16_t white = 0; } veml7700_sensor; @@ -67,13 +66,13 @@ void VEML7700Show(bool json) { if (json) { ResponseAppend_P(JSON_SNS_VEML7700, D_NAME_VEML7700, veml7700_sensor.lux, veml7700_sensor.white); - + #ifdef USE_DOMOTICZ if (0 == tele_period) DomoticzSensor(DZ_ILLUMINANCE, veml7700_sensor.lux); #endif // USE_DOMOTICZ #ifdef USE_WEBSERVER - } else { - WSContentSend_PD(HTTP_SNS_LUX, D_NAME_VEML7700, veml7700_sensor.lux); + } else { + WSContentSend_PD(HTTP_SNS_ILLUMINANCE, D_NAME_VEML7700, veml7700_sensor.lux); WSContentSend_PD(HTTP_SNS_WHITE, D_NAME_VEML7700, veml7700_sensor.white); #endif // USE_WEBSERVER } diff --git a/tools/decode-status.py b/tools/decode-status.py index 748589495..a992a621c 100755 --- a/tools/decode-status.py +++ b/tools/decode-status.py @@ -147,7 +147,8 @@ a_setoption = [[ "Disable non-json MQTT response", "Enable light fading at start/power on", "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_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP", "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_NRF24","USE_MIBLE","USE_HM10","USE_LE01MR", "USE_AHT1x","USE_WEMOS_MOTOR_V1","USE_DEVICE_GROUPS","USE_PWM_DIMMER" ],[ "USE_KEELOQ","USE_HRXL","USE_SONOFF_D1","USE_HDC1080", "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) 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))